簡體   English   中英

BigQuery 分區表(當天)不分區 - python

[英]BigQuery Partitioned Table (on DAY) it does not partition - python

我在 BigQuery 的分區表中創建和插入數據時遇到問題。

我的腳本每天下載最近 7 天的一些數據。 我將它們保存在 dataframe 中,然后將它們加載到 Big Query 分區表中。

昨天腳本將前 7 天的數據保存到 BigQuery 表(2022-02-14 和 2022-02-20 之間)。 今天保存了7天前的數據(2022-02-15到2022-02-21之間),但是昨天保存的前7天的數據已經沒有了(比如沒有更多的數據了) 2022-02-14 日)。

這是我的代碼:

 schema = [
            bigquery.SchemaField("Date", "DATE", "REQUIRED"),
            bigquery.SchemaField("Advertiser", "STRING", "REQUIRED"),
            bigquery.SchemaField("AdvertiserId", "INTEGER", "REQUIRED"),
            bigquery.SchemaField("Campaign", "STRING", "REQUIRED"),
            bigquery.SchemaField("CampaignId", "INTEGER", "REQUIRED")
    ]

    job_config = bigquery.LoadJobConfig(
        schema=schema,
        write_disposition="WRITE_TRUNCATE",
        time_partitioning=bigquery.TimePartitioning(
            type_=bigquery.TimePartitioningType.DAY,
            field="Date",  # Name of the column to use for partitioning.
        ),
    )

    job = client.load_table_from_dataframe(df, MY_PROJECT_ID.MY_DATASET.MY_TABLE_NAME), job_config=job_config)  # Make an API request.
    job.result()  # Wait for the job to complete.

為什么分區不起作用? 謝謝!

如果我對你的理解是正確的,那么表不是沒有分區,而是以前執行的數據並不像你期望的那樣存在。

您的 write_disposition 當前設置為WRITE_TRUNCATE ,這意味着每次加載作業運行時表都會被清空。 因此,您將擁有的唯一數據來自最近一次運行。

你有幾個選擇:

  1. 將其更改為 DML 語句並根據日期和可能的其他條件進行合並。
  2. 添加一個附加列,如 LoadDateTime,這是一個當前時間戳,並將您的 write_disposition 更改為WRITE_APPEND 這樣您以后就可以在視圖中區分出每個日期的最新負載。

暫無
暫無

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

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