将数据插入到 Google BigQuery 表的嵌套字段中

我在 Cloud BigQuery 中有一个表,但service.Tabledata.InsertAll调用确实将数据插入到嵌套字段中。


// works

 jsonRow["name"] = bigquery.JsonValue("Name")


// doesn't work

jsonRow["geo_location.City.Names.en"] = bigquery.JsonValue("Irvine")


rows[index] = new(bigquery.TableDataInsertAllRequestRows)

rows[index].Json = jsonRow

insertRequest := &bigquery.TableDataInsertAllRequest{Rows: rows}

insertRequest.IgnoreUnknownValues = true


call := service.Tabledata.InsertAll(project, dataset, "analytics_events", insertRequest)


if res, err := call.Do(); err!=nil{

   Log.Fatal("Unable to Insert to BigQuery ", err)

   return err

}


小唯快跑啊
浏览 156回答 2
2回答

一只名叫tom的猫

您实际上需要构建一个与架构结构相匹配的对象结构。这里的困惑在于该行:jsonRow["geo_location.City.Names.en"] = bigquery.JsonValue("Irvine")不会创建您期望的对象结构。您创建的 json 对象实际上如下所示:{  "geo_location.City.Names.en": "Irvine"}而你想要的东西看起来像:{  "geo_location": {    "City": {      "Names": {        "en": "Irvine"      }    }  }}所以你的代码应该是这样的:// Probably not valid code. Just guessing.jsonRow["geo_location"] = bigquery.JsonObject()jsonRow["geo_location"]["City"] = bigquery.JsonObject()jsonRow["geo_location"]["City"]["Names"] = bigquery.JsonObject()jsonRow["geo_location"]["City"]["Names"]["en"] = bigquery.JsonValue("Irvine")希望有帮助。

红颜莎娜

您需要在客户端构造一个嵌套对象,而不是在 jsonRow 的键中使用点号表示法。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go