【问题标题】:How can i write a data frame to a specific partition of a date partitioned BQ table using to_gbq()如何使用 to_gbq() 将数据帧写入日期分区 BQ 表的特定分区
【发布时间】:2018-12-03 02:44:05
【问题描述】:

我有一个要写入日期分区 BQ 表的数据框。我正在使用 to_gbq() 方法来执行此操作。我可以替换或追加现有表,但无法使用 to_gbq() 写入表的特定分区

【问题讨论】:

  • 请分享您的代码,以及您遇到的错误。

标签: pandas google-bigquery


【解决方案1】:

由于 to_gbq() 尚不支持它,我创建了一个代码 sn-p 用于使用 BigQuery API 客户端执行此操作。

假设您有一个像这样创建的现有date-partitioned 表:

CREATE TABLE
  your_dataset.your_table (transaction_id INT64, transaction_date DATE)
PARTITION BY
  transaction_date

你有一个像这样的 DataFrame:

import pandas
import datetime

records = [
    {"transaction_id": 1, "transaction_date": datetime.date(2021, 10, 21)},
    {"transaction_id": 2, "transaction_date": datetime.date(2021, 10, 21)},
    {"transaction_id": 3, "transaction_date": datetime.date(2021, 10, 21)},
]

df = pandas.DataFrame(records)

以下是写入特定分区的方法:

from google.cloud import bigquery
client = bigquery.Client(project='your_project')

job_config = bigquery.LoadJobConfig(
    # to append use "WRITE_APPEND" or don't pass job_config at all (appending is default)
    write_disposition="WRITE_TRUNCATE", 
)

# Include target partition in the table id:
table_id = "your_project.your_dataset.your_table$20211021" 
job = client.load_table_from_dataframe(df, table_id, job_config=job_config) # Make an API request
job.result() # Wait for job to finish

重要的部分是表 id 中的$... 部分。它告诉 API 仅更新特定分区。如果您的数据包含属于不同分区的记录,则操作将失败。

【讨论】:

    【解决方案2】:

    我相信分区表还不支持 to_gbq()。 你可以在这里查看最近的问题https://github.com/pydata/pandas-gbq/issues/43

    我建议使用 Google BigQuery API 客户端库https://googlecloudplatform.github.io/google-cloud-python/latest/bigquery/usage.html

    您也可以将数据框上传到 BigQuery 表。 https://cloud.google.com/bigquery/docs/samples/bigquery-load-table-dataframe

    【讨论】:

    • 我可能是错的,但 load_table_from_dataframe 是影响您配额的负载,但 to_gbq 使用不计入您的配额的流式 API。如果您不必每天加载 1000 多个表,这可能不是一个大问题。d=
    • to_gbq() 现在支持分区了吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-24
    相关资源
    最近更新 更多