首页 > 解决方案 > BigQuery 提取表架构

问题描述

有一个巨大的嵌套(结构化)表。

需求:

在其他项目其他区域创建具有相同架构和数据的相同表。复制不适用于不同的区域。

一直在尝试:

将表导出到存储桶(JSON 作为 AVRO 不允许在加载数据后编辑模式),然后提取旧表模式并从存储桶创建一个新表,提供模式。由于结构化表模式的大小和复杂性,无法手动键入模式。

错误得到:

创建表后,AVROauto schema detect无法正确识别某些数据类型,JSON 失败并出现多个错误。

问题:

如何导出表模式,最好是 JSON?一旦我在 CLI 中运行它:

bq show --format=prettyjson Project1:BQDataset.Table1 | jq '.schema.fields'

我得到了一个巨大的(数百行).json,通过简单地突出显示 CLI 结果列表中的文本在控制台复制它是不可行的。 CLI 中的 JSON 结果片段

更新:问题已解决,这种初始方法不正确。

标签: google-bigquery

解决方案


您可以执行以下操作将结果保存在文件中:

bq show --format=prettyjson Project1:BQDataset.Table1 | jq '.schema.fields' > schema.json

您可以使用以下内容将文件复制到存储桶:

gsutil cp /path/to/file/schema.json gs://bucket/path/

无论如何,如果它更适合您,您可以通过以下方式在区域之间复制整个数据集

bq mk --transfer_config --project_id=myproject --data_source=cross_region_copy --target_dataset=123_demo_tokyo --display_name='My Dataset Copy' --params='{"source_dataset_id":"123_demo_eu","source_project_id":"mysourceproject","overwrite_destination_table":"true"}'

您可以在此处查看完整的参考资料


推荐阅读