在 python 中通过 API 对 BigQuery 表进行分区

Posted

技术标签:

【中文标题】在 python 中通过 API 对 BigQuery 表进行分区【英文标题】:Partitioning BigQuery Tables via API in python 【发布时间】:2017-11-22 23:53:57 【问题描述】:

我正在使用 Python 来访问 BigQuery API。我在运行查询和编写新表方面取得了成功,但希望确保这些输出表按照https://cloud.google.com/bigquery/docs/creating-partitioned-tables 进行分区

查询的输出将包含以下列:event_date[string in format "2017-11-12"], metric[integer]

根据下面的代码,我一直将“partitioning_type”代码分配给各种对象,但它从不返回错误。

(我想知道如何判断我的分区工作是否真的有效(即如何识别 _PARTITIONTIME 伪列)也很有用)。

dest_table_id = "BQresults"
query_job = client.run_async_query(str(uuid.uuid4()), query))
query_job.allow_large_results = True
dest_dataset = client.dataset(dest_dataset_id)
dest_table = dest_dataset.table(dest_table_id)
dest_table.partitioning_type ="DAY"

query_job.destination = dest_table
query_job.write_disposition = 'WRITE_TRUNCATE'
query_job.use_legacy_sql = False
query_job.begin()
query_job.result()  

【问题讨论】:

您能否provide more detail,并显示您正在导入哪些库,以及您获得的结果与您想要的结果?我使用 Python 在 BigQuery 上运行了类似的东西,但我需要更多信息才能给你答案... 【参考方案1】:

如果要检查表是否在时间列上分区,请使用 get_table() 方法 (https://github.com/GoogleCloudPlatform/google-cloud-python/blob/4b107613b0fcf139569504e9d44fa4a0793b4fd0/bigquery/google/cloud/bigquery/client.py#L290) 并检查返回对象的 partitioning_type 属性。您可以检查整数分区检查 range_partitioning 属性。您还可以使用带有作业 ID 的 get_job() 获取作业对象,并检查配置中是否设置了 time_partitioning。

我认为您正在运行的查询作业不会在分区表中产生结果,因为 time_partitioning 应该在作业配置中设置,而且客户端似乎没有这样做。如果是这样,您可以先创建分区表,然后使用现有表作为目标。

【讨论】:

以上是关于在 python 中通过 API 对 BigQuery 表进行分区的主要内容,如果未能解决你的问题,请参考以下文章

如何在android中通过api发布数据并在python web界面中显示数据[重复]

为啥我在 Python 中通过 reduce 对列表进行排序的代码会引发错误?

如何在熊猫/python中的行标题中通过部分搜索对数据集进行排序

如何在 EF Core 中通过 Fluent Api 创建加密列

在python中通过引用传递引用

vue中通过history api拦截浏览器的前进后退按钮事件