【问题标题】:Request size error while inserting record to BigQuery using Streaming_insert beam api in dataflow在数据流中使用 Streaming_insert beam api 将记录插入 BigQuery 时出现请求大小错误
【发布时间】:2022-10-18 05:15:37
【问题描述】:

我创建了一个谷歌数据流流作业来从 PubSub 读取并插入 BigQuery。我正在使用 STREAMING_INSERT api 将 JSON 数据插入 BiqQuery 表。我面临插入问题,说明请求大小超过了 10 Mb 的允许限制。数据流错误如下所示。每条记录的大小为 1-2Mb,根据我的理解,数据流作业将流数据插入为导致此错误的微批处理。

您能否为此提供一些解决方案。

来自工作人员的错误消息:java.lang.RuntimeException:我们有 观察到大小为 24625273 字节的行。 BigQuery 支持 请求大小最大为 10MB,并且此行太大。你可以改变 您解除阻塞此管道的重试策略,该行将是 输出为插入失败。 org.apache.beam.sdk.io.gcp.bigquery.BigQueryServicesImpl$DatasetServiceImpl.insertAll(BigQueryServicesImpl.java:1088) org.apache.beam.sdk.io.gcp.bigquery.BigQueryServicesImpl$DatasetServiceImpl.insertAll(BigQueryServicesImpl.java:1242) org.apache.beam.sdk.io.gcp.bigquery.BatchedStreamingWrite.flushRows(BatchedStreamingWrite.java:403) org.apache.beam.sdk.io.gcp.bigquery.BatchedStreamingWrite.access 900 美元(BatchedStreamingWrite.java:67)

BigQuery 插入的代码 sn-p 如下

.apply(
        "WriteSuccessfulRecords",
        BigQueryIO.writeTableRows().withAutoSharding()
                .withoutValidation()
                .withCreateDisposition(CreateDisposition.CREATE_NEVER)
                .withWriteDisposition(WriteDisposition.WRITE_APPEND)
                .withExtendedErrorInfo()
                .withMethod(BigQueryIO.Write.Method.STREAMING_INSERTS)
                .withFailedInsertRetryPolicy(InsertRetryPolicy.retryTransientErrors())
                .to(options.getOutputTableSpec()));

【问题讨论】:

    标签: java google-bigquery streaming google-cloud-dataflow apache-beam


    【解决方案1】:

    您的 BQ 写入操作遇到了 BQ 流插入 API 的已知限制。基本上,使用流式插入从 Dataflow 写入 BQ 的每批数据的大小必须小于 10MB。

    Dataflow 尝试将批次保持在此限制之下。但如果单行大于 10MB,则 Dataflow 无法保持在此限制之下,因此可能会遇到此问题。可以这样吗?

    另一种选择可能是使用BQ Storage Write API write method 而不是流式插入。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-08
      • 2016-10-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多