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

Google cloud platform 如何批量加载从其他来源生成的自定义Avro数据?,google-cloud-platform,google-cloud-spanner,Google Cloud Platform,Google Cloud Spanner,云扳手文档说,扳手可以导出/导入Avro格式。该路径是否也可用于批量接收从其他来源生成的Avro数据?文档似乎建议它只能导入同样由扳手生成的Avro数据 我运行了一个快速导出作业,并查看了生成的文件。清单和模式看起来非常简单。我想我会在这里张贴,以防这个兔子洞很深 清单文件 " 模式文件 { "tables": [{ "name": "people", "manifestFile": "people-manifest.json" }] } 数据文件 {"type

云扳手文档说,扳手可以导出/导入Avro格式。该路径是否也可用于批量接收从其他来源生成的Avro数据?文档似乎建议它只能导入同样由扳手生成的Avro数据

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

清单文件

"

模式文件

{
  "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"}    

回答你的问题,是的!有两种方法可以将Avro数据摄取到Cloud扳手中

方法1

如果您将Avro文件放置在Google Cloud存储桶中,按照Cloud Paner导出操作的方式进行排列,并生成Cloud Paner期望的格式的清单,那么在Cloud Paner的web界面中使用导入功能就可以了。显然,这里可能有很多繁琐的格式化工作,这就是为什么这个“导入过程只支持从Cloud Panner导出的Avro文件”

方法2

与其使用Cloud Paner web控制台执行导入/导出作业,并依赖Avro清单和数据文件进行完美格式化,不如稍微修改GitHub上两个公共代码存储库中的代码,这两个公共代码存储库位于谷歌云平台用户下,提供导入/导出(或备份/还原或导出/摄取)将数据从Avro格式移动到Google Cloud Spaner的功能:(1),尤其是(2),尤其是

它们都编写了数据流作业,允许您使用Avro格式将数据移入和移出Cloud Panner。每种方法都有一种特定的方法来解析用于输入的Avro模式(即,将数据从Avro移动到Cloud Spaner)。由于您的用例是输入的(即,将数据摄取到Avro格式的Cloud Paner中),因此您需要修改Avro解析代码以适合您的特定模式,然后在您的机器上本地从命令行执行云数据流作业(然后将作业上载到Google Cloud Platform)


如果您不熟悉云数据流,那么它是一个用于定义和运行具有大数据集的作业的工具。

由于文档特别说明导入仅支持最初从Panner导出的Avro文件,因此我提出了一个功能请求,您可以跟踪它


我试图实现您提出的方法1,方法是从BigQuery获取Avro导出并创建span-export.json和manifest文件,但当我将其导入到span中时,它只有1行,而不是600行。你成功地尝试了这个方法吗?这两者之间还有其他步骤吗?@PhilippSh-我没有从BigQuery进行摄取,但我通过Avro从其他格式进行摄取。当您查看从Google Cloud Paner导入UI生成的云数据流作业时,您看到了哪些错误(如果有)?换句话说,当您执行方法1()时,您在Cloud Paner UI中导入生成的相应云数据流导入作业中看到了什么?我也复制了这一点,Philipp说的是正确的。而且它不会引起任何错误,只加载一行。@Temu-您是否公开了GCP文件夹中的数据和模式?您是否尝试过您所要求的内容,或者您只是猜测这是否可能?
    {"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"}