BigQuery schema table to json with Python



我需要有一个BigQuerybq show --format=prettyjson myproject:mydataset.mytable的Python等价物。

有没有办法在Python中使用BigQuery API做到这一点?

我在 Python 中尝试过这个:

view_ref = self._client.dataset(dataset.dataset_id).table(table.table_id)
table_obj = self._client.get_table(view_ref)
dict_schema = []
for schema_field in table_obj.schema:
dict_schema.append({
'name': schema_field.name,
'mode': schema_field.mode,
'type': schema_field.field_type
})

它几乎有效;我只是没有嵌套的架构字段/

感谢您的回复,祝你有美好的一天。

您只需使用 schema_to_json(( 方法即可将表架构转换为 json。它需要两个属性,分别schema_list目标

我使用带有嵌套数据的公共数据集举例说明了您的情况,并使用 StringIO(( 只是为了展示架构的情况。

from google.cloud import bigquery
import io
client = bigquery.Client()
project = 'bigquery-public-data'
dataset_id = 'samples'
table_id = 'shakespeare'
dataset_ref = client.dataset(dataset_id, project=project)
table_ref = dataset_ref.table(table_id)
table = client.get_table(table_ref)

f = io.StringIO("")
client.schema_to_json(table.schema, f)
print(f.getvalue())

和输出:

[
{
"description": "A single unique word (where whitespace is the delimiter) extracted from a corpus.",
"mode": "REQUIRED",
"name": "word",
"type": "STRING"
},
{
"description": "The number of times this word appears in this corpus.",
"mode": "REQUIRED",
"name": "word_count",
"type": "INTEGER"
},
{
"description": "The work from which this word was extracted.",
"mode": "REQUIRED",
"name": "corpus",
"type": "STRING"
},
{
"description": "The year in which this corpus was published.",
"mode": "REQUIRED",
"name": "corpus_date",
"type": "INTEGER"
}
]

这与使用命令时显示的输出相同!bq show --format=prettyjson bigquery-public-data:samples.wikipedia | jq '.schema.fields'

最新更新