2016-03-30 2 views
1

У меня есть таблица в Cloud BigQuery, но вызов service.Tabledata.InsertAll вызывает вставляет данные во вложенные поля.Вставьте данные в вложенные поля таблицы в 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 
} 

ответ

0

Вы должны построить вложенный объект на стороне клиента, вместо того, чтобы использовать точечную нотацию внутри ключа для вашего jsonRow.

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

Надежда что помогает.

+0

Какой дрянной API ... – themihai

Смежные вопросы