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

时间:2016-03-30 20:55:50

标签: go 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
}

2 个答案:

答案 0 :(得分:1)

实际上,您需要构建一个与架构结构相匹配的对象结构。

这里的困惑是:

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")

希望有所帮助。

答案 1 :(得分:0)

您需要构建一个嵌套对象客户端,而不是在jsonRow的键内使用点分表示法。