有没有办法将BigQuery表的架构导出为JSON?

时间:2017-04-03 22:08:36

标签: json google-bigquery

BigQuery table具有架构,可以在网络用户界面updated中查看,或者使用bq工具作为JSON文件用于load data。但是,我找不到将此模式从现有表转储到JSON文件(最好是从命令行)的方法。这可能吗?

4 个答案:

答案 0 :(得分:56)

  

将模式从现有表转储到JSON文件(最好是从命令行)的方法。这可能吗?

尝试以下

bq show bigquery-public-data:samples.wikipedia  

您可以使用-format标志来美化输出

- 格式:无| json | prettyjson | csv |稀疏|漂亮:

命令输出的格式。选项包括:

none:       ...
pretty:     formatted table output  
sparse:     simpler table output  
prettyjson: easy-to-read JSON format  
json:       maximally compact JSON  
csv:        csv format with header   

前三个是人类可读的,后三个是 传递到另一个程序。如果未选择任何格式,则将选择一个格式 基于命令运行。

意识到我提供了部分答案:o)

以下是PO想要的

bq show --format=prettyjson bigquery-public-data:samples.wikipedia | jq '.schema.fields' 

答案 1 :(得分:26)

您可以添加标记--schema [1]以避免表数据信息。

bq show --schema --format=prettyjson [PROJECT_ID]:[DATASET].[TABLE] > [SCHEMA_FILE]

bq show --schema --format=prettyjson mydataset.mytable > /tmp/myschema.json

[1] https://cloud.google.com/bigquery/docs/managing-table-schemas

答案 2 :(得分:1)

答案更新

自 2020 年 10 月以来, 您还可以在 INFORMATION_SCHEMA.COLUMNS 上运行 SQL 查询,这是一种内省功能。

SELECT *
FROM <YOUR_DATASET>.INFORMATION_SCHEMA.COLUMNS

并使用聚合函数嵌套数据,例如

SELECT table_name, ARRAY_AGG(STRUCT(column_name, data_type)) as columns
FROM <YOUR_DATASET>.INFORMATION_SCHEMA.COLUMNS
GROUP BY table_name

如果您还需要视图中的源代码,那么 INFORMATION_SCHEMA.VIEWS 中的元数据也很有趣。

然后从 BigQuery 界面点击保存结果/JSON,或者在您的情况下将其包装到 bq query 命令行中。

来源:BigQuery release notes

答案 3 :(得分:0)

您可以使用REST API调用将BigQuery表架构获取为JSON。文档链接:https://cloud.google.com/bigquery/docs/reference/rest/v2/tables/get

curl 'https://bigquery.googleapis.com/bigquery/v2/projects/project-name/datasets/dataset-name/tables/table-name' \
     --header 'Authorization: Bearer [YOUR_ACCESS_TOKEN]' \
     --header 'Accept: application/json' \
     --compressed