python - 从包含多行的 pandas Dataframe 更新 BigQuery 表的最佳方法是什么

标签 python pandas google-bigquery

我在 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. 仅使用新值重新创建表格。
  3. 附加具有不同时间戳的新数据。
  4. 使用分区表[1],如果可能的话使用聚簇表[2],这样当您想要更新表时,您可以使用分区列和聚簇列来更新它,并且查询会减轻负担。此外,您还可以将新数据附加到新的分区表中,假设是当天的数据。

如果您出于分析原因使用数据,也许最好的选择是 2 和 3,但我始终建议使用 [1] 和 [2]。

[1] https://cloud.google.com/bigquery/docs/querying-partitioned-tables

[2] https://cloud.google.com/bigquery/docs/clustered-tables

关于python - 从包含多行的 pandas Dataframe 更新 BigQuery 表的最佳方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62697743/

相关文章:

python - 计算连续 Pandas 中字符串的出现次数

google-bigquery - 将 PostGis 几何转换为 BigQuery 地理

javascript - 为什么轨道名称中的点会混淆通过 Spotify Web API 进行的搜索?

python - 使用贝叶斯优化时队列为空

python - 根据多列的值向数据框添加新列

python - 在 matplotlib 中绘制时间增量

json - (+/-) JSON 导入中的无穷大

java - 查询执行时间与完成 Java 查询调用之间的差异

python - 正则表达式提取一组单词

python - 从 OpenErp 中删除模块安装队列