google-cloud-dataflow - 将 PColll 行的一个字段写入 BQ - 需要整行用于表选择
问题描述
我有个问题:
我的 Pcoll 由这种格式的行组成
{'word':'string','table':'string'}
我只想将单词写入 BigQuery,但是我需要表格字段才能在 BigQuery 中选择正确的表格。
这就是我的管道的外观:
tobq = (input
| 'write names to BigQuery '>> beam.io.gcp.bigquery.WriteToBigQuery(
table=compute_table_name, schema=compute_schema,
insert_retry_strategy='RETRY_ON_TRANSIENT_ERROR',
create_disposition=beam.io.gcp.bigquery.BigQueryDisposition.CREATE_IF_NEEDED,
write_disposition=beam.io.gcp.bigquery.BigQueryDisposition.WRITE_APPEND)
)
函数 compute_table_name 访问一个元素并返回表字段。有没有办法只将单词写入 BQ,同时仍然具有基于行的表选择机制?
非常感谢!
解决方案
ignoreUnknownValues
通常,在 BigQuery 中遇到此类情况的最佳方法是使用ExternalDataConfiguration
. 不幸的是,Apache Beam 尚不支持在写入 BigQuery 时启用此参数,因此我们必须找到一种解决方法,如下所示:
将 ID 映射传递给表作为table_side_input
此解决方案仅适用word
于保证每次都映射到同一个表的相同值,或者您的元素有某种唯一标识符的情况。此方法比解决方案 1 更复杂一些,但它仅依赖于 Beam 模型,而不必触及 BigQuery API。
该解决方案涉及利用table_side_input
动态选择要放置元素的表,即使元素缺少table
字段也是如此。基本思想是创建一个 ID:table 的字典(其中 ID 是唯一 ID,或者只是word
字段)。创建这个字典可以CombineGlobally
通过将所有元素组合成一个字典来完成。
同时,您使用转换table
在转换之前从元素中删除字段WriteToBigQuery
。然后将 dict 传递给 的table_side_input
参数WriteToBigQuery
,并编写一个可调用的table
参数,该参数与 dict 一起检查以确定要使用的表,而不是table
字段。
推荐阅读
- excel - 有没有办法将 Control F bar 选项的外观设置为值而不是公式?
- python-3.x - 带有循环功能/密码退出的Python3?
- acumatica - 使用不同视图将选项卡和网格同步到同一个主 DAC
- excel - 日期数据输入,查找匹配和复制粘贴转置
- scala - 使用scala从spark中的标量中减去向量列
- ansible - OKD openshift-ansible:更新“openshift_master_cluster_public_hostname”和证书
- pivot - 数据透视查询雪花中的标识符无效
- python - 如何将字符串格式的 JSON 放入表中
- c - 弄清楚这个按位 AND 和 LSL 在 C 中的作用
- python-3.x - 我怎样才能保持部分代码一直在运行?