【问题标题】:GCP BigQuery how to set expiration date to table by python apiGCP BigQuery如何通过python api将到期日期设置为表
【发布时间】:2018-09-15 18:55:12
【问题描述】:

我正在使用 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。

【问题讨论】:

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


    【解决方案1】:

    使用 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

    【讨论】:

    【解决方案2】:

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

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

    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()
    

    【讨论】:

    • 它通过添加到期时间来工作,但是,表格显示为空白。我也尝试先创建表,然后覆盖表中的查询,它只是一个空白表,0 B 也没有架构。
    • 如果您在查询操作中覆盖表,您确实会丢失过期设置。由于表已经设置为删除,可能不需要覆盖它。
    【解决方案3】:

    要回答一个稍微不同的问题,您可以使用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 子句,如果您想根据查询结果创建表(文档中有更详细的说明)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-09
      • 1970-01-01
      • 2016-10-02
      • 1970-01-01
      • 2022-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多