当前位置: 首页 > 知识库问答 >
问题:

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

郑茂材
2023-03-14

现在,我想用新的预处理数据更新表。一种方法是使用SQL语句并调用bigquery.client()类的query函数。或者用这里这样的工作。

bqclient = bigquery.Client(
            credentials=credentials,
            project=project_id,
            )

query = """UPDATE `dataset.table` SET field_1 = '3' WHERE field_2 = '1'"""
bqclient.query(query_string)

但是为每行创建update语句是没有意义的。

我发现的另一种方法是使用pandas-gbq包的to_gbq函数。缺点是,它更新所有表。

问题:从pandas DataFrame更新Bigquery表的最佳方式是什么?

共有1个答案

令狐功
2023-03-14

Google BigQuery主要用于数据分析,当您的数据是静态的,您不必更新一个值,因为ArquitEduction基本上就是做这种思考。因此,如果您想更新数据,有一些选项但非常繁重:

  1. 您提到的那个,使用逐行查询和更新。
  2. 仅使用新值重新创建表。
  3. 用不同的时间戳追加新数据。
  4. 使用分区表[1],如果可能,使用群集表[2],这样,当您想要更新表时,可以使用分区列和群集列来更新它,这样查询就会减少工作量。此外,您还可以将新数据追加到一个新的分区表中,比如在当前的一天。

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

 类似资料:
  • 我正在从我的应用程序中执行一个脚本,并通过Task value属性上的更改监听器用输出更新一个文本区域,但并不是所有行都显示出来。 我的问题基本上在JavaFX ChangeListener中得到了解决,并不总是有效,但我有一个后续问题。

  • 问题内容: 我学到了几个区块。我已经借助jquery做出了响应式d3直方图。 现在,我想在使用ajax更新d3图表方面走得更远。 我刚进入jQuery。 并了解ajax的工作原理。 搜索了很长时间,但在官方d3网站或其他任何地方都找不到任何有效的示例。 任何帮助对我来说都是有益的,让我掌握了通过Ajax更新d3图表的基本功能。 提前致谢!! 问题答案: 您只需在ajax成功中调用d3函数:

  • 问题内容: 用jQuery删除表行的最佳方法是什么? 问题答案: 你是对的: 如果您的行中包含,则此方法很好用,例如: 如果没有,则可以使用jQuery的大量选择器中的任何一个。

  • 从BigQuery读取和过滤数据,我有两种方法 > 从 Dataflow 中的 BigQuery 读取(使用 BigqueryIO.readTableRow.from(ValueProvider)))整个数据,然后根据条件(如最大日期)进行筛选 使用NestedValueProvider通过生成仅获取所需数据的查询从数据流中的BigQuery读取要慢得多。 因为如果我读取整个数据并且我的表处于追加

  • 问题内容: 复制列表的最佳方法是什么?我知道以下方法,哪种更好?还是有另一种方法? 问题答案: 如果要浅拷贝(不复制元素),请使用: 如果要进行深层复制,请使用复制模块:

  • 问题内容: 如果我需要通过一个“动作”来更新或插入到多个表中,请调用一个保存信息的示例,其中有多个包含“信息”的表。 出于参数考虑,可以说我们有下表: 姓名地址汽车工作 每次调用保存信息时,都会将其中的每个表插入其中。 哪个更好: 获取必须写入名称表的数据。调用InsertOnSubmit并调用SubmitChanges 获取必须写入地址表的数据。调用InsertOnSubmit并调用Submit

  • 问题内容: 假设我有两个或两个以上相同长度的列表。遍历它们的好方法是什么? ,是列表。 要么 还是我缺少任何变体? 使用一个相对于另一个有什么特别的优势吗? 问题答案: 通常的方法是使用: 这将停止两个iterables时较短且耗尽。另外值得注意的是:(仅适用于Python 2)和(适用于Python 3)。

  • 我想知道人们在bigquery上构建和管理ETL作业时发现了哪些最佳实践/工具。 目前,我有很多sql模板(可怕的参数化的lob,日期等使用sed类型字符串替换成一个tmp.sql文件,然后运行),我使用命令行工具来运行它们的序列并将输出发送到表。它工作正常,但有点笨拙。我仍然不明白为什么我不能在bigQuery上运行存储过程类型参数化脚本。甚至是某种图形用户界面来构建和管理管道。 我喜欢bigq