BigQuery 提取表架构

Posted

技术标签:

【中文标题】BigQuery 提取表架构【英文标题】:BigQuery extract table schema 【发布时间】:2020-01-09 07:55:14 【问题描述】:

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

需求:

在其他项目其他区域创建具有相同架构和数据的相同表。复制不能作为不同的区域工作。

一直在尝试:

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

错误获取:

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

问题:

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

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

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

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

【问题讨论】:

看看你的其他帖子。我可能会为您提供解决方案 【参考方案1】:

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

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"'

您可以查看完整参考here

【讨论】:

是的,复制整个数据集最终是一个解决方案,谢谢@rmesteves,帮了很多忙

以上是关于BigQuery 提取表架构的主要内容,如果未能解决你的问题,请参考以下文章

使用 bigquery 中的 bigquery select 语句的 JSON 格式的现有表的架构

推断 BigQuery 表加载的 avro 架构

如何从 BigQuery 表中提取所有列名的列表?

如何将每个给定长度的行的 Bigquery 表提取到 Google Storage 中的 csv 文件?

BIgQuery AVRO 外部表架构

JSON 表架构到 bigquery.TableSchema 用于 BigQuerySink