GCP BigQuery如何通过python api

时间:2018-04-05 20:31:52

标签: google-cloud-platform google-bigquery google-python-api

我正在使用BigQuery Python API来创建表,并希望为表设置一个到期日期,因此该表将在某些天后自动删除。

这是我的代码:

client = bq.Client()
job_config = bq.QueryJobConfig()
dataset_id = dataset
table_ref = client.dataset(dataset_id).table(filename)
job_config.destination = table_ref
job_config.write_disposition = 'WRITE_TRUNCATE'
dt = datetime.now() + timedelta(seconds=259200)
unixtime = (dt - datetime(1970,1,1)).total_seconds()
expiration_time = unixtime
job_config.expires = expiration_time
query_job = client.query(query, job_config=job_config)
query_job.result()

问题是到期参数似乎不起作用。当我在UI中检查表格详细信息时,到期日期仍然是从不。

3 个答案:

答案 0 :(得分:4)

要使用Python更新现有表的到期时间:

import datetime
from google.cloud import bigquery

client = bigquery.Client()
table = client.get_table("project.dataset.table")
table.expires = datetime.datetime.now() + datetime.timedelta(days=1)
client.update_table(table, ['expires'])

积分:/ u / ApproximateIdentity

答案 1 :(得分:2)

要回答略有不同的问题,您可以使用CREATE TABLE statement代替相关选项expiration_timestamp,而不是将过期指定为请求选项的一部分。例如:

CREATE OR REPLACE TABLE my_dataset.MyTable
(
  x INT64,
  y FLOAT64
)
OPTIONS (
  expiration_timestamp=TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL 3 DAY)
);

这会创建一个包含两列的表,这些列将在三天后过期。如果您想根据查询结果创建表,CREATE TABLE也支持可选的AS SELECT子句。(文档详细介绍)。

答案 2 :(得分:1)

查看query方法的docs,我们可以看到无法在查询作业配置中设置过期时间。

这样做的正确方法是在Table资源中设置,例如:

client = bq.Client()
job_config = bq.QueryJobConfig()
dataset_id = dataset
table_ref = client.dataset(dataset_id).table(filename)
table = bq.Table(table_ref)
dt = datetime.now() + timedelta(seconds=259200)
table.expires = dt
client.create_table(table)

query_job = client.query(query, job_config=job_config)
query_job.result()