来自数据流的 BigQuery 流式传输静默失败

BigQuery streaming from dataflow failing silently

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

今天我更新了 BQ table 架构,似乎没有新的插入发生。我可以在机器上查看日志,一切正常 - dataflow 没有报告任何错误。

有什么方法可以从 bigquery 访问流日志以检查错误。

编辑:总而言之,我的问题是我是否能够从 apache beam SDK 或 bigquery 获得更详细的日志记录,以查看这些数据的最终位置。

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

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

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

[1]https://cloud.google.com/bigquery/troubleshooting-errors#streaming [2]https://cloud.google.com/bigquery/docs/reference/auditlogs/#mapping_audit_entries_to_log_streams

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

此设置是可配置的,使用 insert_retry_policy 参数。 2.15 和 2.16 的默认值是 RETRY_ON_TRANSIENT_ERRORS。从 2.17 开始,默认值为 RETRY_ALWAYS.

您将执行以下操作:

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', ...)

这将导致没有任何输出到 failed_rows,并且您的管道可能永远 rnu。