我在 BigQuery 中有一个包含 10 万多行和 10 列的数据集。我还不断向数据集添加新数据。我想获取未处理的数据,处理它们并写回到我的表中。目前,我正在使用 bigquery python 库将它们提取到 pandas 数据帧并使用 pandas 进行处理。
现在,我想用新的预处理数据更新表。一种方法是使用 SQL 语句并调用 bigquery.Client()
类的 query
函数。或者使用类似 here 的工作.
bqclient = bigquery.Client(
credentials=credentials,
project=project_id,
)
query = """UPDATE `dataset.table` SET field_1 = '3' WHERE field_2 = '1'"""
bqclient.query(query_string)
但是为每一行创建更新语句是没有意义的。
我发现的另一种方法是使用 to_gbq pandas-gbq 包的功能。这样做的缺点是,它会更新所有表。
问题:从 pandas 数据帧更新 Bigquery 表的最佳方法是什么?
最佳答案
Google BigQuery 主要用于数据分析,当您的数据是静态的并且您不必更新值时,因为其架构基本上就是进行这种思考。因此,如果你想更新数据,有一些选项但是很重:
- 你提到的那个,通过查询并一行一行更新。
- 仅使用新值重新创建表格。
- 附加具有不同时间戳的新数据。
- 使用分区表[1],如果可能的话使用聚簇表[2],这样当您想要更新表时,您可以使用分区列和聚簇列来更新它,并且查询会减轻负担。此外,您还可以将新数据附加到新的分区表中,假设是当天的数据。
如果您出于分析原因使用数据,也许最好的选择是 2 和 3,但我始终建议使用 [1] 和 [2]。
[1] https://cloud.google.com/bigquery/docs/querying-partitioned-tables
关于python - 从包含多行的 pandas Dataframe 更新 BigQuery 表的最佳方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62697743/