【问题标题】:Python BigQuery API - get table schemaPython BigQuery API - 获取表架构
【发布时间】:2018-11-25 21:52:12
【问题描述】:

我正在尝试从 bigquery 表中获取模式。给定一个示例代码,例如

from google.cloud import bigquery
from google.cloud import storage

client =  bigquery.Client.from_service_account_json('service_account.json')

def test_extract_schema(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)  # API Request

    # View table properties
    print(table.schema)

if __name__ == '__main__':
    test_extract_schema(client)

这是返回值:

[SchemaField('word', 'STRING', 'REQUIRED', 'A single unique word (where whitespace is the delimiter) extracted from a corpus.', ()), SchemaField('word_count', 'INTEGER', 'REQUIRED', 'The number of times this word appears in this corpus.', ()), SchemaField('corpus', 'STRING', 'REQUIRED', 'The work from which this word was extracted.', ()), SchemaField('corpus_date', 'INTEGER', 'REQUIRED', 'The year in which this corpus was published.', ())]

我试图仅以如下格式捕获架构

'word' 'STRING','word_count' INTEGER'

有什么方法可以使用 API 调用或任何其他方法来获取此信息?

【问题讨论】:

    标签: python-3.x google-cloud-platform google-bigquery google-cloud-datastore


    【解决方案1】:

    您始终可以获取table.schema 变量并对其进行迭代,因为该表是由SchemaField 值组成的列表:

    result = ["{0} {1}".format(schema.name,schema.field_type) for schema in table.schema]
    

    同一数据集和表的结果:

    ['word STRING', 'word_count INTEGER', 'corpus STRING', 'corpus_date INTEGER']
    

    【讨论】:

    • 我收到 'AttributeError: 'TableListItem' 对象没有属性 'schema''
    【解决方案2】:

    hereschema 已过期。

    【讨论】:

      【解决方案3】:

      另一种方法是,在您拥有客户端和表实例之后,执行以下操作:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-12
        • 1970-01-01
        相关资源
        最近更新 更多