簡體   English   中英

Google BigQuery WRITE_TRUNCATE刪除所有數據

[英]Google BigQuery WRITE_TRUNCATE erasing all data

我在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我的整個表將被擦除,並且僅包含新數據。 由於數據位於不同的分區日期,是否不應該保留這些數據? 知道為什么會發生這種情況,或者我缺少什么嗎?

知道為什么會發生這種情況,或者我缺少什么嗎?

job_config.write_disposition ='WRITE_TRUNCATE'是整個表范圍的操作-並說If the table already exists - overwrites the table data. 這不考慮任何分區,並且會影響整個表

如果需要覆蓋特定的分區,則需要專門引用此分區-例如,作為sales_data$20190202

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM