Arrays 使用Nifi将带有数组的json插入BigQuery时出现问题
我试图使用Nifi处理器PutBigQueryBatch 1.9.2将下面的json数据插入到bigquery表中Arrays 使用Nifi将带有数组的json插入BigQuery时出现问题,arrays,json,google-bigquery,apache-nifi,Arrays,Json,Google Bigquery,Apache Nifi,我试图使用Nifi处理器PutBigQueryBatch 1.9.2将下面的json数据插入到bigquery表中 { "Revenue_Label": "Dining Room", "StoreName": "STORE A", "Revenue_Id": "1", "Alteration_Flag": "False", "Order_Mode_Label": "DriveThru", "checkClosetime": "2019-1
{
"Revenue_Label": "Dining Room",
"StoreName": "STORE A",
"Revenue_Id": "1",
"Alteration_Flag": "False",
"Order_Mode_Label": "DriveThru",
"checkClosetime": "2019-10-24T13:43:19+13:00",
"Alterations": [ {
"Alteration_Product_Code": "211136",
"Alteration_Product_Net_Amount": 0.0,
"Altered_Product_Code": "211135",
"Alteration_Product_Amount": 0.0,
"Altered_Product_Name": "Burger",
"Alteration_Product_Name": "Add Sauce",
"Alteration_Product_Qty": 1.0 } ],
"StoreId": "1234",
"dob": "20191024",
"Order_Mode_Id": "3",
"checknumber": "54321"}
然而,我不断得到下面的错误
PutBigQueryBatch:记录字段必须至少有一个
子字段:java.lang.IllegalArgumentException:记录字段必须
至少有一个子字段
在PutBigQueryBatch的属性中,我使用了下面的模式定义,它在顺序、模式、名称和类型上与BigQuery表定义相匹配
[
{"mode": "NULLABLE","name": "Revenue_Label","type": "STRING"},
{"mode": "NULLABLE","name": "StoreName","type": "STRING"},
{"mode": "NULLABLE","name": "Revenue_Id", "type": "STRING" },
{"mode": "NULLABLE","name": "Alteration_Flag","type": "STRING"},
{"mode": "NULLABLE","name": "Order_Mode_Label","type": "STRING"},
{"mode": "NULLABLE","name": "checkClosetime","type": "TIMESTAMP" },
{"mode": "REPEATED",
"name": "Alterations",
"type": "RECORD",
"fields": [
{"mode": "NULLABLE","name": "Alteration_Product_Code", "type": "STRING" },
{"mode": "NULLABLE", "name": "Alteration_Product_Net_Amount", "type": "FLOAT" },
{"mode": "NULLABLE", "name": "Altered_Product_Code","type": "STRING" },
{"mode": "NULLABLE", "name": "Alteration_Product_Amount", "type": "FLOAT" },
{"mode": "NULLABLE", "name": "Altered_Product_Name", "type": "STRING" },
{"mode": "NULLABLE", "name": "Alteration_Product_Name", "type": "STRING" },
{"mode": "NULLABLE","name": "Alteration_Product_Qty", "type": "FLOAT" }
]
},
{"mode": "NULLABLE","name": "StoreId","type": "STRING"},
{"mode": "NULLABLE", "name": "dob","type": "STRING"},
{"mode": "NULLABLE","name": "Order_Mode_Id","type": "STRING"},
{"mode": "NULLABLE","name": "checknumber","type": "STRING" }
]
我尝试过的:
{
"Revenue_Label":"Dining Room",
"StoreName":"STORE A",
"Revenue_Id":"1",
"Alteration_Flag":"False",
"Order_Mode_Label":"DriveThru",
"checkClosetime":"2019-10-24T13:43:19+13:00",
"Alterations":[
{
"Alteration_Product_Code":"211136",
"Alteration_Product_Net_Amount":0.0,
"Altered_Product_Code":"211135",
"Alteration_Product_Amount":0.0,
"Altered_Product_Name":"Burger",
"Alteration_Product_Name":"Add Sauce",
"Alteration_Product_Qty":1.0
}
],
"StoreId":"1234",
"dob":"20191024",
"Order_Mode_Id":"3",
"checknumber":"54321"
}
紧凑型:
{"Revenue_Label":"Dining Room","StoreName":"STORE A","Revenue_Id":"1","Alteration_Flag":"False","Order_Mode_Label":"DriveThru","checkClosetime":"2019-10-24T13:43:19+13:00","Alterations":[{"Alteration_Product_Code":"211136","Alteration_Product_Net_Amount":0.0,"Altered_Product_Code":"211135","Alteration_Product_Amount":0.0,"Altered_Product_Name":"Burger","Alteration_Product_Name":"Add Sauce","Alteration_Product_Qty":1.0}],"StoreId":"1234","dob":"20191024","Order_Mode_Id":"3","checknumber":"54321"}
根据您的帖子,我可以看到您在模式定义中将重复字段定义为变更;然而,在您用来上传数据的JSON中,该字段显示为变更至少
变更
数组未关闭。嗨,daggett-谢谢您的回复。我有点c你说的“改变”是什么意思“阵列未关闭。需要关闭的是模式定义还是json文件?你能提供一个它应该是什么的例子吗?非常感谢。Tim@TimManger你没有找到解决这个问题的办法吗?我遇到了类似的问题。我可以手动加载模式json以在GCP控制台中生成表,但如果我尝试通过PutBigQueryBatch执行此操作,它将在模式的同一记录部分失败。当手动创建表时,所有记录都可以写入其中而不会出现任何问题。我所做的是在GCP中创建一个主题和订阅,然后使用nifi中的PublishGCPubSub进程将json流文件传递给PubSub。在此基础上,我编写了一个云函数,当jason文件到达队列主题并将json文件插入bigquery.Lamus中的表时触发了该函数-感谢您的回复。模式的定义是什么,转换数组会排除“字段”,还是我必须更改json文件来包含它?嗨,拉莫斯-你在“尝试这个”之后错过了一个链接吗?不,我修改了我的答案。嗨,拉莫斯-谢谢你的建议。遗憾的是,它没有起作用。我在第8行得到了错误“待定数组”。这对应于第{“mode”:“REPEATED”,“name”:“alterations”,“type”:“RECORD”行",…这定义了模式中的数组。我将继续寻找解决方案。啊,我错过了模式REPEATED
,这意味着字段应该是数组。嗨,ebeltran-谢谢你发现了这一点。我将拼写改为两个匹配。但是,遗憾的是,我仍然得到了相同的错误。我开始认为可能有一个错误,我不知道n PutBigQueryBatch 1.9.2 nifi处理器。