заменить раздел BigQuery данными, размещенными в таблице BigQuery с использованием Python - PullRequest
0 голосов
/ 17 ноября 2018

У меня есть 30 дней данных, размещенных в ежедневной многораздельной таблице в BigQuery.У меня есть большая таблица с 5-летним разделением данных ежедневно.Мне нужно выбрать из таблицы этапов и заменить все содержимое существующих разделов в более крупной таблице на 30 дней, которые находятся в моей промежуточной таблице.Я предпочитаю делать это, используя Python, а не извлекать данные в CSV, а затем загружать их обратно в BQ, если я могу избежать этого.Какие-либо предложения?Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 29 ноября 2018

Это на самом деле не работает для меня, но я думаю, что это правильно, хотя и для более старой версии клиентской библиотеки с большими запросами.Ваш ответ очень помог, и я приму.Я использую самую современную библиотеку.У меня сработало следующее:

for partition in gbq.list_partitions(stage_table_ref):
    table_partition = table_name+'$'+partition
    stage_partition = stage_dataset.table(table_partition)
    target_partition = target_dataset.table(table_partition)
    job_config = bigquery.CopyJobConfig()
    job_config.write_disposition = bigquery.WriteDisposition.WRITE_TRUNCATE   
    gbq.copy_table(stage_partition, target_partition,job_config = job_config) 
0 голосов
/ 17 ноября 2018

Все, что вам нужно сделать, это запросить то, что вам нужно, и установить таблицу назначения для вашего запроса.

from google.cloud import bigquery
client = bigquery.Client()
query = """\
SELECT firstname + ' ' + last_name AS full_name,
       FLOOR(DATEDIFF(CURRENT_DATE(), birth_date) / 365) AS age
 FROM dataset_name.persons
"""
dataset = client.dataset('dataset_name')
table = dataset.table(name='person_ages')
job = client.run_async_query('fullname-age-query-job', query)
job.destination = table
job.write_disposition= 'truncate'
job.begin()
...