Клиент BigQuery Python: создание таблицы из запроса с описанием таблицы

#python #google-bigquery

#python #google-bigquery

Вопрос:

Я использую клиент python для создания таблиц с помощью SQL, как описано в документах (https://cloud.google.com/bigquery/docs/tables ) вот так:

 # from google.cloud import bigquery
# client = bigquery.Client()
# dataset_id = 'your_dataset_id'

job_config = bigquery.QueryJobConfig()
# Set the destination table
table_ref = client.dataset(dataset_id).table('your_table_id')
job_config.destination = table_ref
sql = """
    SELECT corpus
    FROM `bigquery-public-data.samples.shakespeare`
    GROUP BY corpus;
"""

# Start the query, passing in the extra configuration.
query_job = client.query(
    sql,
    # Location must match that of the dataset(s) referenced in the query
    # and of the destination table.
    location='US',
    job_config=job_config)  # API request - starts the query

query_job.result()  # Waits for the query to finish
print('Query results loaded to table {}'.format(table_ref.path))
  

Это работает хорошо, за исключением того, что клиентская функция для создания таблицы с помощью SQL-запроса использует объект job_config, а job_config получает table_ref, а не объект table.

Я нашел этот документ для создания таблиц с описанием здесь:https://google-cloud-python.readthedocs.io/en/stable/bigquery/usage.html, Но это для таблиц, НЕ созданных из запросов.

Есть идеи о том, как создать таблицу из запроса, указав описание для этой таблицы?

Комментарии:

1. Вы видели cloud.google.com/bigquery/docs/reference/standard-sql /… ?

2. orcaman не уверен, что вы пытаетесь сделать, когда вы устанавливаете целевую таблицу, это эквивалентно созданию, и вы не можете создать с целевой таблицей в той же транзакции. Не могли бы вы уточнить свой вариант использования.

3. @ElliottBrossard бесполезно, я должен использовать клиент python (автоматизация)

4. @TamirKlein как я уже писал, мне нужно создать из запроса (эта часть выполнена), плюс приложить описание для таблицы, которая была сгенерирована (эта часть кажется невозможной с клиентом python). Например, «эта таблица была создана с помощью агента # 123»

5. Вы можете отправлять запросы DDL с помощью клиента Python, как показал вам Тамир в своем ответе.

Ответ №1:

Поскольку вы хотите сделать больше, чем просто сохранить SELECT результат в новую таблицу, лучший способ для вас — не использовать таблицу назначения в вашей job_config переменной, а использовать CREATE команду

Итак, вам нужно сделать 2 вещи:

  1. Удалите следующие 2 строки из вашего кода
 table_ref = client.dataset(dataset_id).table('your_table_id')   
job_config.destination = table_ref
  
  1. Замените свой SQL этим
 #standardSQL
CREATE TABLE dataset_id.your_table_id
PARTITION BY DATE(_PARTITIONTIME)
OPTIONS(
    description = 'this table was created via agent #123'
) AS
SELECT corpus
FROM `bigquery-public-data.samples.shakespeare`
GROUP BY corpus;