GCP BigQuery, как установить дату истечения срока действия в таблицу с помощью 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()

Проблема в том, что параметр истечения срока действия, похоже, не работает. Когда я проверяю данные таблицы в пользовательском интерфейсе, дата истечения срока действия по-прежнему «Никогда».


person vortex    schedule 05.04.2018    source источник


Ответы (3)


Чтобы обновить срок действия существующей таблицы с помощью 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/Приблизительная идентичность

person Felipe Hoffa    schedule 13.03.2020
comment
Всякий раз, когда я пытаюсь это сделать, это приводит к удалению таблицы. Есть идеи, почему? (Также опубликовал это как новый вопрос stackoverflow.com/questions/64447517/) - person David Kaufman; 20.10.2020

Чтобы ответить на немного другой вопрос, вместо указания срока действия как части параметров запроса вы можете использовать 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, если вы хотите создать таблицу из результата запроса (более подробная информация содержится в документации).

person Elliott Brossard    schedule 05.04.2018

Глядя на документы для метода 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()
person Willian Fuks    schedule 05.04.2018
comment
Он работает, добавляя срок действия, однако таблица остается пустой. Я также попытался сначала создать таблицу, а затем перезаписать запрос в таблице, это просто пустая таблица с 0 B без схемы. - person vortex; 06.04.2018
comment
возможно, если вы перезапишете таблицу в операции запроса, вы действительно потеряете настройку срока действия. Поскольку таблица уже настроена на удаление, возможно, перезаписывать ее не нужно. - person Willian Fuks; 06.04.2018