使用 Google 数据流写入 BigQuery 时无法捕获异常

Unable to catch exceptions when writing to BigQuery using Google dataflow

我正在尝试使用 google 数据流写入 BigQuery。但是数据已损坏,因此我尝试在 BigQuery 的 table 列中写入的数据与该列的数据类型不匹配。因此作业日志显示如下所示的错误:

BigQuery job "dataflow_job_6154554826811450962-B" in project "analytics-repo-dev" finished with error(s): errorResult: JSON table encountered too many errors, giving up. Rows: 1951; errors: 1., error: JSON table encountered too many errors, giving up. Rows: 1951; errors: 1., error: JSON parsing error in row starting at position 32470424514 at file: gs://abhishek_bucket/staging_bucket/6154554826811451567/dax-tmp-2016-08-21_08_10_40-11073983896195810394-S122-1-e7a57fb7a3ac697f/-shard-00000-of-00001-try-2ac1f1192effdfbb-endshard.json. Could not parse '20-259228628. ' as a timestamp. Required format is YYYY-MM-DD HH:MM[:SS[.SSSSSS]] Field: Ts; Value: 20-259228628.

问题是这些是 "errors" 而不是 "exceptions"。因此,当 Dataflow 收到这些错误时,整个数据流作业就会停止。所以我需要一种机制来 "catch" 它们。如果这些消息是 "exceptions",我会单独处理它们,工作就不会完全失败。

那么,当我尝试在 Google Dataflow 中将错误数据写入 BigQUery 时,有没有办法获取实际引发的异常?

这是一个带有流式 BigQueryIO 接收器的 known issue;不幸的是,除了在 BigQueryIO.Write 之前在您自己的 DoFn 中进行验证之外,没有好的解决方法。这样做将允许您删除、修复任何无效记录或将其输出到另一个接收器。