BigQuery table 具有可在 Web UI 中查看、更新 的架构,或用于使用 bq
工具以 JSON 文件形式
加载数据。但是,我找不到将此架构从现有表转储到 JSON 文件的方法(最好是从命令行)。这可能吗?
一种将架构从现有表转储到 JSON 文件的方法(最好从命令行)。这可能吗?
尝试下面
bq show bigquery-public-data:samples.wikipedia
您可以使用 –format 标志来美化输出
--格式:none|json|prettyjson|csv|sparse|pretty:
命令输出的格式。选项包括:
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'
您可以添加标志
--schema
[1]以避免表数据信息。
bq show --schema --format=prettyjson [PROJECT_ID]:[DATASET].[TABLE] > [SCHEMA_FILE]
bq show --schema --format=prettyjson myprojectid:mydataset.mytable > /tmp/myschema.json
[1] https://cloud.google.com/bigquery/docs/managing-table-schemas
答案更新
自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
命令行中。
您可以使用 REST API 调用来获取 JSON 格式的 BigQuery 表架构。文档链接: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
截至 2022 年 5 月 15 日,此方法有效:
以下 bash 脚本和 sql 总是帮助我解决从数据集中将所有表架构提取到 JSON 文件的问题:
#!/bin/bash
#gen-default-schema.sh
input=$1
source_type=$2
result=tables_${source_type}.result
bq query --format=csv --use_legacy_sql=false --flagfile=$input | awk '{if(NR>1)print}' > $result
while IFS= read -r line
do
tbl_name=`echo "$line" | awk -F. '{print $NF}'`
schema_file=`echo "$tbl_name" | cut -d'_' -f2-`.schema
echo $schema_file
bq show --schema --format=prettyjson $line > ./temp/${source_type}/${schema_file}
echo "done"
done < "$result"
输入文件
example.sql
($1)
SELECT
table_catalog || ":" || table_schema || "." || table_name
FROM (
SELECT
table_catalog,
table_schema,
table_name
FROM
`project-id`.<dataset_id>.INFORMATION_SCHEMA.TABLES
ORDER BY
table_name ASC )
运行:
$bash gen-default-schema.sh example.sql example
这会将所有 JSON 架构放在
./temp
文件夹下
如果您想从谷歌
cloud-console
执行此操作,那么一个简短的SQL
查询就可以实现这一点。
它将为您提供架构中的所有信息,您可以根据需要使用
https://cloud.google.com/bigquery/docs/information-schema-column-field-paths#schema更改
STRUCT( ... )
.
或者将
INFORMATION_SCHEMA.<something>
与其他视图一起使用以获取 JSON 的不同元信息。
正如@Michel Hua在他们的回答中所说,在bigquery中选择
Query results -> JSON
以在运行SQL查询后获取JSON
SELECT table_name, ARRAY_AGG(STRUCT(column_name, data_type, description)) as columns
FROM `your-project-id`.your_dataset.INFORMATION_SCHEMA.COLUMN_FIELD_PATHS
WHERE table_name = 'your_table_name'
GROUP BY table_name