来自数据流的 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。
我有一个成功的管道 运行 使用云 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。