繁体   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