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"}
答案 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)