如何调试 python 数据流 beam.io.WriteToBigQuery
How to debug python dataflow beam.io.WriteToBigQuery
我目前有一个 python 数据流作业,其最终接收器是写入 BigQuery 的 PCollection。它因以下错误而失败:
Workflow failed. Causes: S01:XXXX+XXX+Write/WriteToBigQuery/NativeWrite failed., BigQuery import job "dataflow_job_XXXXXX" failed., BigQuery job "dataflow_job_XXXXXX" in project "XXXXXX" finished with error(s): errorResult: Error while reading data, error message: JSON table encountered too many errors, giving up. Rows: 19; errors: 1
为了获得更详细的错误报告,我 运行:
bq --format=prettyjson show -j dataflow_job_XXXXXX
显示如下内容(有一堆错误,这只是其中之一):
{
"location": "gs://XXXXX/XXXXXX/tmp/XXXXX/10002237702794672370/dax-tmp-2019-02-05_20_14_50-18341731408970037725-S01-0-5144bb700f6a9f0b/-shard--try-00d3c2c24d5b0371-endshard.json",
"message": "Error while reading data, error message: JSON table encountered too many errors, giving up. Rows: 11; errors: 1. Please look into the errors[] collection for more details.",
"reason": "invalid"
},
然后我去寻找特定的分片,看看 PCollection 行有什么错误,以及我需要做什么来过滤这些行或修复我的错误:
gsutil ls gs://XXXXX/XXXXXX/tmp/XXXXX/10002237702794672370/dax-tmp-2019-02-05_20_14_50-18341731408970037725-S01-0-5144bb700f6a9f0b/-shard--try-00d3c2c24d5b0371-endshard.json
但是那个命令returns:
CommandException: One or more URLs matched no objects.
调试作业的最佳实践是什么(顺便说一句,这需要几个小时)?我现在的想法是以 JSON 格式在非临时位置将 PCollection 写入 GCS,然后尝试自己摄取它。
针对您的错误类型,我做了以下处理:
- 使用 Json 检查工具列出有错误的记录。
- 运行 Cloud Dataflow 本地。
- 添加一个管道步骤来验证每个 Json 记录并从管道中删除错误的条目。使用侧输出的死信文件或记录错误记录以进行调试。
本文可能会给您一些处理无效输入的想法。
我目前有一个 python 数据流作业,其最终接收器是写入 BigQuery 的 PCollection。它因以下错误而失败:
Workflow failed. Causes: S01:XXXX+XXX+Write/WriteToBigQuery/NativeWrite failed., BigQuery import job "dataflow_job_XXXXXX" failed., BigQuery job "dataflow_job_XXXXXX" in project "XXXXXX" finished with error(s): errorResult: Error while reading data, error message: JSON table encountered too many errors, giving up. Rows: 19; errors: 1
为了获得更详细的错误报告,我 运行:
bq --format=prettyjson show -j dataflow_job_XXXXXX
显示如下内容(有一堆错误,这只是其中之一):
{
"location": "gs://XXXXX/XXXXXX/tmp/XXXXX/10002237702794672370/dax-tmp-2019-02-05_20_14_50-18341731408970037725-S01-0-5144bb700f6a9f0b/-shard--try-00d3c2c24d5b0371-endshard.json",
"message": "Error while reading data, error message: JSON table encountered too many errors, giving up. Rows: 11; errors: 1. Please look into the errors[] collection for more details.",
"reason": "invalid"
},
然后我去寻找特定的分片,看看 PCollection 行有什么错误,以及我需要做什么来过滤这些行或修复我的错误:
gsutil ls gs://XXXXX/XXXXXX/tmp/XXXXX/10002237702794672370/dax-tmp-2019-02-05_20_14_50-18341731408970037725-S01-0-5144bb700f6a9f0b/-shard--try-00d3c2c24d5b0371-endshard.json
但是那个命令returns:
CommandException: One or more URLs matched no objects.
调试作业的最佳实践是什么(顺便说一句,这需要几个小时)?我现在的想法是以 JSON 格式在非临时位置将 PCollection 写入 GCS,然后尝试自己摄取它。
针对您的错误类型,我做了以下处理:
- 使用 Json 检查工具列出有错误的记录。
- 运行 Cloud Dataflow 本地。
- 添加一个管道步骤来验证每个 Json 记录并从管道中删除错误的条目。使用侧输出的死信文件或记录错误记录以进行调试。
本文可能会给您一些处理无效输入的想法。