如何批量加载从其他来源生成的自定义Avro数据?

时间:2018-08-14 14:45:57

标签: google-cloud-platform google-cloud-spanner

Cloud Spanner文档说Spanner可以导出/导入Avro格式。该路径还可以用于批量摄取从其他来源生成的Avro数据吗?文档似乎建议它只能导入由Spanner生成的Avro数据。

我运行了一个快速导出作业,并查看了生成的文件。清单和架构看起来很简单。我想我会在这里张贴,以防这个兔子洞很深。

清单文件

'

{
  "files": [{
    "name": "people.avro-00000-of-00001",
    "md5": "HsMZeZFnKd06MVkmiG42Ag=="
  }]
}

模式文件

{
  "tables": [{
    "name": "people",
    "manifestFile": "people-manifest.json"
  }]
}

数据文件

    {"type":"record",
    "name":"people",
    "namespace":
    "spannerexport","
    fields":[
{"name":"fullName",
"type":["null","string"],
"sqlType":"STRING(MAX)"},{"name":"memberId",
"type":"long",
"sqlType":"INT64"}
],
    "googleStorage":"CloudSpanner",
    "spannerPrimaryKey":"`memberId` ASC",
    "spannerParent":"",
    "spannerPrimaryKey_0":"`memberId` ASC",
    "googleFormatVersion":"1.0.0"}    

2 个答案:

答案 0 :(得分:4)

回答您的问题,是的!有两种方法可以将Avro数据导入Cloud Spanner。

方法1

如果将Avro文件放在按照Cloud Spanner导出操作进行排列的Google Cloud Storage存储桶中,并且生成的清单格式与Cloud Spanner期望的一样,则可以在Web界面中使用Cloud Spanner的导入功能。显然,这里可能有很多繁琐的格式化工作,这就是the official documentation指出此“导入过程仅支持从Cloud Spanner导出的Avro文件”的原因。

方法2

与其使用Cloud Spanner Web控制台执行导入/导出作业,而不必依靠完全格式化的Avro清单和数据文件,而是在Google Cloud Platform用户的帮助下,对GitHub上两个公共代码存储库中的任何一个进行稍微修改。提供导入/导出(或备份/还原或导出/导入)功能,用于将数据从Avro格式移动到Google Cloud Spanner:(1)Dataflow Templates,尤其是this file(2)Pontem ,尤其是this file

这两个工具均编写了Dataflow作业,使您可以使用Avro格式将数据移入和移出Cloud Spanner。每个工具都有解析输入的Avro模式的特定方法(即,将数据从Avro移至Cloud Spanner)。由于已输入用例(即,将数据导入Avro格式的Cloud Spanner中),因此您需要修改Avro解析代码以适合您的特定架构,然后从本地计算机上的命令行执行Cloud Dataflow作业(然后将作业上传到Google Cloud Platform。

如果您不熟悉Cloud Dataflow,它是用于定义和运行具有大数据集的作业的工具。

答案 1 :(得分:0)

正如文档特别指出的那样,导入仅支持最初从Spanner 1导出的Avro文件,为此,我提出了一个功能请求,您可以跟踪它here

1 https://cloud.google.com/spanner/docs/import