2016-03-30 25 views
1

'da iç içe geçmiş alanlara ekleme Cloud BigQuery'de bir masa var, ancak service.Tabledata.InsertAll çağrısı yuvalanan alanlara veri ekliyor.Verileri Google BigQuery

// 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 
} 

cevap

0

Bunun yerine jsonRow için anahtarın içindeki noktalı gösterimle kullanmak yerine, iç içe geçmiş bir nesne istemci tarafı inşa etmek gerekir.

+0

Jeremy, herhangi bir kod örneğiniz var mı? Bu çok yararlı olacak –

1

Aslında, şemanızın yapısına uyan bir nesne yapısı oluşturmanız gerekir. Burada

karışıklık hattı olduğunu:

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

Eğer bekliyorsanız bir nesne yapısını yaratmaz. Aslında yaptık json nesnesi şuna benzer:

{ 
    "geo_location.City.Names.en": "Irvine" 
} 

sen gibi görünen bir şey istemek Oysa:

{ 
    "geo_location": { 
    "City": { 
     "Names": { 
     "en": "Irvine" 
     } 
    } 
    } 
} 

Yani kod aşağıdaki gibi görünmelidir:

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

Umut bu yardımcı olur.

+0

Ne kadar berbat bir API .... – themihai