如何调试python数据流beam.io.WriteToBigQuery

如何调试python数据流beam.io.WriteToBigQuery,python,google-cloud-platform,google-bigquery,google-cloud-dataflow,Python,Google Cloud Platform,Google Bigquery,Google Cloud Dataflow,我目前有一个python数据流作业,其末端接收器是一个PCollection写入BigQuery。它失败,出现以下错误: 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" fi

我目前有一个python数据流作业,其末端接收器是一个PCollection写入BigQuery。它失败,出现以下错误:

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
这显示了类似(有一系列错误,这只是其中之一):

然后,我查找特定的碎片,查看哪个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
但该命令返回:

CommandException: One or more URLs matched no objects.

调试作业的最佳实践是什么(顺便说一句,这需要几个小时)?我现在的想法是以JSON格式将PCollection以非临时位置写入GCS,并尝试自己接收它

对于您的错误类型,我执行以下操作:

  • 使用Json检查工具列出有错误的记录
  • 在本地运行云数据流
  • 添加管道步骤以验证每个Json记录,并从管道中删除错误条目。使用死信文件使用side输出或记录错误记录以进行调试
  • 本文可能会为您提供一些处理无效输入的方法


    使用较小的数据集大小,并在您自己的机器上使用Direct/Local Runner进行调试,这可能吗?是的,所以我意外地完成了1)。在我执行“将PCollection以JSON格式写入非临时位置的GCS并尝试自己接收”的过程中,以下python代码在我的PCollection行中没有暴露任何类型:JSON_formatted=extracted|text |“convertToJSON”>>beam.Map(JSON.dumps)。2) 这是不可能的,因为在1000个CPU上处理5小时的大规模数据集中只有少数边缘案例。谢谢你的意见
    CommandException: One or more URLs matched no objects.