有没有一种方法可以从现有表格中将模式转储到JSON文件中(最好是从命令行)。这种可能吗?
请尝试以下方法:
bq show bigquery-public-data:samples.wikipedia
您可以使用“--format”标志来美化输出。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] 管理表模式的方法
jq
要好得多。 - Daniel Waechter答案更新
自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发布说明
您可以使用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
#!/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
./temp
文件夹下。如果您想从Google的cloud-console
中进行此操作,那么一个简短的SQL
查询就可以实现。
它将为您提供来自模式的所有信息,并且您可以根据需要使用https://cloud.google.com/bigquery/docs/information-schema-column-field-paths#schema更改STRUCT( ... )
。
或者,使用INFORMATION_SCHEMA.<something>
与其他视图一起获取不同的元信息到JSON。
正如@Michel Hua在他们的答案中所说,选择Query results -> JSON
在bigquery中运行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
bq show --format=prettyjson bigquery-public-data:samples.wikipedia | jq '.schema.fields'
- Daniel Waechter"
而不是撇号'
,因此命令如下:bq show --format=prettyjson bigquery-public-data:samples.wikipedia | jq ".schema.fields"
。 - philshem