2

我正在使用 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 中检查表格详细信息时,到期日期仍然是 Never。

4

3 回答 3

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

于 2020-03-13T19:09:54.857 回答
4

要回答一个稍微不同的问题,您可以使用相关选项为的CREATE TABLE语句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

于 2018-04-05T22:04:52.773 回答
2

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

这样做的正确方法是在 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()
于 2018-04-05T23:50:00.347 回答