簡體   English   中英

BigQuery Streaming Insert Error - 在數組外添加重復記錄

[英]BigQuery Streaming Insert Error - Repeated record added outside of an array

我在使用 Dataflow Streaming Insert 時遇到了一個奇怪的問題。 我有一個包含大量記錄和數組的 JSON。 我使用流式插入方法和類 DeadLetters 設置了管道來處理錯誤。

formattedWaiting.apply("Insert Bigquery ",
                BigQueryIO.<KV<TableRow,String>>write()
                .to(customOptions.getOutputTable())
                .withFormatFunction(kv -> kv.getKey())
                .withMethod(BigQueryIO.Write.Method.STREAMING_INSERTS)
                .withSchemaFromView(schema)
                .withCreateDisposition(CreateDisposition.CREATE_IF_NEEDED)
                .withWriteDisposition(WriteDisposition.WRITE_APPEND)
                .withFailedInsertRetryPolicy(InsertRetryPolicy.retryTransientErrors())
                .withoutValidation()
                .withExtendedErrorInfo()
                .withTimePartitioning(new TimePartitioning().setField(customOptions.getPartitionField().get()))
                .withClustering(clusteringFieldsList)
                .withExtendedErrorInfo())
                .getFailedInsertsWithErr()
                .apply("Taking 1 element insertion", Sample.<BigQueryInsertError>any(1))
                .apply("Insertion errors",ParDo.of(new DeadLettersHandler()));

問題是當我使用流式插入方法時,有些行沒有插入到表中,我收到了錯誤:

在數組外添加名稱為 XXXX 的重復記錄。

我仔細檢查了有問題的 JSON,一切似乎都很好。 奇怪的部分是當我評論withMethod行時,行插入完全沒有問題。

我不知道為什么管道有這種行為。

JSON 看起來像這樣。

{
   "parameters":{
      "parameter":[
         {
            "subParameter":[
               {
                  "value":"T",
                  "key":"C"
               },
               {
                  "value":"1",
                  "key":"SEQUENCE_NUMBER"
               },
               {
                  "value":"1",
                  "key":"SEQUENCE_NUMBER"
               }
            ],
            "value":"C",
            "key":"C"
         },
         {
            "subParameter":[
               {
                  "value":"T",
                  "key":"C"
               },
               {
                  "value":"1",
                  "key":"SEQUENCE_NUMBER"
               },
               {
                  "value":"2",
                  "key":"SEQUENCE_NUMBER"
               }
            ],
            "value":"C",
            "key":"C"
         }
      ]
   }
}

BigQuery 架構很好,因為我可以在評論 BigQueryIO 中的流式插入行時插入數據

有想法的小伙伴嗎?

提前致謝!

只是對這個問題的更新。

問題在於模式聲明和 JSON 本身。

我們將parameters列定義為RECORD REPEATEDparameters是 JSON 示例中的對象。

所以我們在這里有兩個選擇。

  1. 將 BigQuery 架構從RECORD REPEATED更改為RECORD NULLABLE
  2. 將括號 [] 添加到parameters對象,對於此選項,您必須轉換 JSON 並添加括號以將對象視為數組。

例子:

{
   "parameters":[
      {
         "parameter":[
            {
               "subParameter":[
                  {
                     "value":"T",
                     "key":"C"
                  },
                  {
                     "value":"1",
                     "key":"SEQUENCE_NUMBER"
                  },
                  {
                     "value":"1",
                     "key":"SEQUENCE_NUMBER"
                  }
               ],
               "value":"C",
               "key":"C"
            }
         ]
      }
   ]
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM