Python 来自数据流的BigQuery流以静默方式失败

Python 来自数据流的BigQuery流以静默方式失败,python,google-bigquery,google-cloud-dataflow,apache-beam,google-cloud-pubsub,Python,Google Bigquery,Google Cloud Dataflow,Apache Beam,Google Cloud Pubsub,我有一个成功的管道,它使用云dataflow将数据从pub/sub流式传输到bigquery,这是在计算实例上运行的,而不是实际的dataflow运行程序 今天,我更新了BQ表模式,似乎没有出现新的插入。我可以查看机器上的日志,一切正常-dataflow没有报告任何错误 是否有任何方法可以从bigquery访问流日志以检查错误 编辑:总结一下,我的问题是,我是否能够从ApacheBeamSDK或bigquery获得更多详细的日志记录,以查看这些数据的最终去向 我已经查看了stackdriver,

我有一个成功的管道,它使用云
dataflow
将数据从
pub/sub
流式传输到
bigquery
,这是在计算实例上运行的,而不是实际的
dataflow
运行程序

今天,我更新了BQ表模式,似乎没有出现新的插入。我可以查看机器上的日志,一切正常-
dataflow
没有报告任何错误

是否有任何方法可以从
bigquery
访问流日志以检查错误

编辑:总结一下,我的问题是,我是否能够从ApacheBeamSDK或bigquery获得更多详细的日志记录,以查看这些数据的最终去向


我已经查看了
stackdriver
,但这似乎没有为流日志创建条目。

您应该能够从BigQuery获取数据流日志,请查看此文档[1][2]。请注意,修改表的架构可能需要几分钟来传播更改,如果最近收到流式插入,则可能会出现架构不匹配错误

在这种情况下,当BigQuery在请求中的各个行上遇到架构不匹配时,将不插入任何行,并为每一行返回一个insertErrors条目,其中包括有关架构不匹配的详细信息

[1]
[2]

在2.15和2.16版本中,Beam现在生成一个死信PCCollection,其中包含所有未能插入的行

此设置可通过
insert\u retry\u policy
参数配置。2.15和2.16的默认值是
在出现暂时错误时重试
。从2.17开始,默认值将为
重试\u始终

您将执行以下操作:

result = my_collection | WriteToBigQuery(...,
                                         method='STREAMING_INSERTS', ...)

failed_rows = result['FailedRows']  # You can consume this PCollection.
您也可以选择始终重试:

result = my_collection | WriteToBigQuery(...,
                                         insert_retry_policy='RETRY_ALWAYS',
                                         method='STREAMING_INSERTS', ...)

这将导致没有任何内容输出到
失败的\u行
,并且您的管道可能会永久rnu。

您使用的Beam版本是什么?bq接收器有一个insert_retry_策略参数,允许您设置在向bq插入数据时出现错误时的行为方式:我使用的是
2.15.0
-但是这不会给我任何错误指示?这是一个(严重的)设计缺陷。管道有一个死信队列—它返回一个包含失败记录的PCollection,但如果不使用该PCollection,则不会使用这些记录。我已经创建了跟踪此感谢@Pablo有可能以某种方式阅读该PCollection吗?是的!转换返回一个字典,其中唯一的元素是插入失败的PCollection: