Google BigQuery WRITE_TRUNCATE стирает все данные - PullRequest
0 голосов
/ 24 апреля 2019

У меня есть настройки таблицы в BQ, где, если я записываю данные, которые exists, в определенный раздел даты, я хочу перезаписать его.Я настроил job_config для использования WRITE_TRUNCATE.

#file_obj = Some ndjson StringIO file like obj

job_config = bigquery.QueryJobConfig()
# Set configuration.query.destinationTable
dest_dataset = 'test'
dest_table_name = 'sales_data'
destination_dataset = client.dataset(dest_dataset)
destination_table = destination_dataset.table(dest_table_name)
job_config.destination = destination_table

# Set configuration.query.writeDisposition & SourceFormat
job_config.write_disposition = 'WRITE_TRUNCATE'
job_config.source_format = bigquery.SourceFormat.NEWLINE_DELIMITED_JSON

# Set partitioning
time_partitioning = bigquery.table.TimePartitioning(
    bigquery.table.TimePartitioningType.DAY, 'date'
)
job_config.time_partitioning = time_partitioning

# Start the load job
job = client.load_table_from_file(
        file_obj, destination_table,
        job_config=job_config
)
# Wait for the job to finish
job.result()

Тем не менее, я заметил, что при заполнении данных он всегда перезаписывает все данные в таблице, даже если раздел даты отличается.Например, если у меня есть данные в таблице из 20190101-20190201 и я загружаю данные из 20190202-Present, вся моя таблица стирается, и она содержит только новые данные.Разве эти данные не должны сохраняться, поскольку они находятся на другой дате раздела?Есть идеи, почему это происходит или я что-то упускаю?

1 Ответ

4 голосов
/ 25 апреля 2019

Есть идеи, почему это происходит или я что-то упускаю?

job_config.write_disposition = 'WRITE_TRUNCATE' - действие всей области видимости таблицы - и говорит If the table already exists - overwrites the table data. Это не учитывает разбиение и влияет на всю таблицу

Если вам нужно перезаписать конкретный раздел, вам нужно специально указать этот раздел - например, как sales_data$20190202

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...