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

时间:2017-11-22 23:53:57

标签: python google-bigquery

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

分区对这些输出表进行分区

查询的输出将包含以下列:event_date [字符串格式为" 2017-11-12"],公制[整数]

根据下面的代码,我已经分配了" 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()  

1 个答案:

答案 0 :(得分:1)

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

我不认为您正在运行的查询作业会导致分区表,因为time_partitioning应该在作业配置中设置,并且看起来客户端不会这样做。如果是,则可以先创建分区表,然后使用现有表作为目标。