Google bigquery 在通过Google API客户端对Google BigQuery中的现有表进行修补操作期间,架构更新无效
我试图通过RubyGoogleAPI客户端使用补丁更新现有表的模式 代码如下:Google bigquery 在通过Google API客户端对Google BigQuery中的现有表进行修补操作期间,架构更新无效,google-bigquery,Google Bigquery,我试图通过RubyGoogleAPI客户端使用补丁更新现有表的模式 代码如下: def updateTable(client, bq, schema,dataset,table) result = client.execute(:api_method => bq.tables.patch, :parameters => {'projectId' => PROJECT, 'datasetId' => dataset, 'tabl
def updateTable(client, bq, schema,dataset,table)
result = client.execute(:api_method => bq.tables.patch,
:parameters => {'projectId' => PROJECT, 'datasetId' => dataset, 'tableId' => table},
:body_object => {
"tableReference" => {
"datasetId" => dataset,
"projectId" => "mydataset-1",
"tableId" => table
},
"schema" => schema
}
)
puts result.body
结束
下面是我得到的错误:
{
"error": {
"errors": [
{
"domain": "global",
"reason": "invalid",
"message": "Invalid schema update. Field a_b_testing_group is missing in new schema"
}
],
"code": 400,
"message": "Invalid schema update. Field a_b_testing_group is missing in new schema"
}
}
我会很感激你的指点和建议。
谢谢
下面是一个示例模式:
{ "fields" : [
{ "fields" : [
{ "mode" : "NULLABLE",
"name" : "time",
"type" : "FLOAT"
},
{ "mode" : "NULLABLE",
"name" : "attempts",
"type" : "FLOAT"
},
{ "mode" : "NULLABLE",
"name" : "mode",
"type" : "STRING"
},
{ "mode" : "NULLABLE",
"name" : "distinct_id",
"type" : "STRING"
},
{ "mode" : "NULLABLE",
"name" : "waited",
"type" : "FLOAT"
},
{ "mode" : "NULLABLE",
"name" : "party_size",
"type" : "FLOAT"
},
{ "mode" : "NULLABLE",
"name" : "version",
"type" : "STRING"
},
{ "mode" : "NULLABLE",
"name" : "region",
"type" : "STRING"
},
{ "mode" : "NULLABLE",
"name" : "reachability",
"type" : "STRING"
},
{ "mode" : "NULLABLE",
"name" : "device",
"type" : "STRING"
},
{ "mode" : "NULLABLE",
"name" : "_os",
"type" : "STRING"
},
{ "mode" : "NULLABLE",
"name" : "a_b_testing_group",
"type" : "STRING"
},
{ "mode" : "NULLABLE",
"name" : "item_name",
"type" : "STRING"
},
{ "mode" : "NULLABLE",
"name" : "price",
"type" : "FLOAT"
},
{ "mode" : "NULLABLE",
"name" : "contestant",
"type" : "STRING"
},
{ "mode" : "NULLABLE",
"name" : "mp_country_code",
"type" : "STRING"
},
{ "mode" : "NULLABLE",
"name" : "_city",
"type" : "STRING"
},
{ "mode" : "NULLABLE",
"name" : "_region",
"type" : "STRING"
},
{ "mode" : "NULLABLE",
"name" : "source",
"type" : "STRING"
},
{ "mode" : "NULLABLE",
"name" : "label",
"type" : "STRING"
},
{ "mode" : "NULLABLE",
"name" : "sku",
"type" : "STRING"
},
{ "mode" : "NULLABLE",
"name" : "balance__soft_",
"type" : "FLOAT"
},
{ "mode" : "NULLABLE",
"name" : "balance__hard_",
"type" : "FLOAT"
},
{ "mode" : "NULLABLE",
"name" : "price__soft_",
"type" : "FLOAT"
},
{ "mode" : "NULLABLE",
"name" : "free",
"type" : "BOOLEAN"
},
{ "mode" : "NULLABLE",
"name" : "price__hard_",
"type" : "FLOAT"
},
{ "mode" : "NULLABLE",
"name" : "magical_damage_dealt",
"type" : "FLOAT"
},
{ "mode" : "NULLABLE",
"name" : "magical_damage_dealt__players_",
"type" : "FLOAT"
},
{ "mode" : "NULLABLE",
"name" : "player_kills",
"type" : "FLOAT"
},
{ "mode" : "NULLABLE",
"name" : "damage_taken",
"type" : "FLOAT"
},
{ "mode" : "NULLABLE",
"name" : "duration",
"type" : "FLOAT"
},
{ "mode" : "NULLABLE",
"name" : "items_consumed",
"type" : "FLOAT"
},
{ "mode" : "NULLABLE",
"name" : "magical_damage_taken",
"type" : "FLOAT"
},
{ "mode" : "NULLABLE",
"name" : "physical_damage_dealt__players_",
"type" : "FLOAT"
},
{ "mode" : "NULLABLE",
"name" : "disconnects",
"type" : "FLOAT"
},
{ "mode" : "NULLABLE",
"name" : "items_sold",
"type" : "FLOAT"
},
{ "mode" : "NULLABLE",
"name" : "physical_damage_taken",
"type" : "FLOAT"
},
{ "mode" : "NULLABLE",
"name" : "healing_done",
"type" : "FLOAT"
},
{ "mode" : "NULLABLE",
"name" : "matches",
"type" : "FLOAT"
},
{ "mode" : "NULLABLE",
"name" : "relic",
"type" : "STRING"
},
{ "mode" : "NULLABLE",
"name" : "assists",
"type" : "FLOAT"
},
{ "mode" : "NULLABLE",
"name" : "largest_kill_streak",
"type" : "FLOAT"
},
{ "mode" : "NULLABLE",
"name" : "bots",
"type" : "FLOAT"
},
{ "mode" : "NULLABLE",
"name" : "gold",
"type" : "FLOAT"
},
{ "mode" : "NULLABLE",
"name" : "largest_multi_kill",
"type" : "FLOAT"
},
{ "mode" : "NULLABLE",
"name" : "ping",
"type" : "FLOAT"
},
{ "mode" : "NULLABLE",
"name" : "team",
"type" : "FLOAT"
},
{ "mode" : "NULLABLE",
"name" : "tribute_kills",
"type" : "FLOAT"
},
{ "mode" : "NULLABLE",
"name" : "connects",
"type" : "FLOAT"
},
{ "mode" : "NULLABLE",
"name" : "deaths",
"type" : "FLOAT"
},
{ "mode" : "NULLABLE",
"name" : "shrine_captures",
"type" : "FLOAT"
},
{ "mode" : "NULLABLE",
"name" : "spawns",
"type" : "FLOAT"
},
{ "mode" : "NULLABLE",
"name" : "items_bought",
"type" : "FLOAT"
},
{ "mode" : "NULLABLE",
"name" : "physical_damage_dealt",
"type" : "FLOAT"
},
{ "mode" : "NULLABLE",
"name" : "abandoned",
"type" : "BOOLEAN"
},
{ "mode" : "NULLABLE",
"name" : "damage_dealt",
"type" : "FLOAT"
},
{ "mode" : "NULLABLE",
"name" : "damage_dealt__players_",
"type" : "FLOAT"
},
{ "mode" : "NULLABLE",
"name" : "level",
"type" : "FLOAT"
},
{ "mode" : "NULLABLE",
"name" : "party_muted",
"type" : "FLOAT"
},
{ "mode" : "NULLABLE",
"name" : "quests_completed",
"type" : "FLOAT"
},
{ "mode" : "NULLABLE",
"name" : "tower_kills",
"type" : "FLOAT"
},
{ "mode" : "NULLABLE",
"name" : "victorious",
"type" : "BOOLEAN"
},
{ "mode" : "NULLABLE",
"name" : "name",
"type" : "STRING"
},
{ "mode" : "NULLABLE",
"name" : "response",
"type" : "STRING"
},
{ "mode" : "NULLABLE",
"name" : "type",
"type" : "STRING"
},
{ "mode" : "NULLABLE",
"name" : "currency_type",
"type" : "STRING"
},
{ "mode" : "NULLABLE",
"name" : "state",
"type" : "STRING"
},
{ "mode" : "NULLABLE",
"name" : "last_quest",
"type" : "STRING"
},
{ "mode" : "NULLABLE",
"name" : "product",
"type" : "STRING"
},
{ "mode" : "NULLABLE",
"name" : "amount",
"type" : "FLOAT"
},
{ "mode" : "NULLABLE",
"name" : "platform",
"type" : "STRING"
},
{ "mode" : "NULLABLE",
"name" : "newbie",
"type" : "BOOLEAN"
},
{ "mode" : "NULLABLE",
"name" : "campaign_id",
"type" : "FLOAT"
},
{ "mode" : "NULLABLE",
"name" : "delivery_id",
"type" : "FLOAT"
}
],
"mode" : "NULLABLE",
"name" : "properties",
"type" : "RECORD"
},
{ "mode" : "NULLABLE",
"name" : "event",
"type" : "STRING"
}
] }
BigQuery支持向现有表中添加列,但不支持删除现有列
为防止出现显示的错误,在修补表架构时,请始终在新架构中包含现有列,并且仅向其中添加列。是否尝试删除列?我不尝试删除列。我正在发送一组新的数据,其中有一些额外的列,也有一些原始模式中缺少的列。我相信BigQuery需要我合并模式,以拥有两个模式的超集作为补丁请求的一部分。就是这样!添加答案:)我明白了。然而,这似乎是非常不必要的。它需要应用程序从bigquery中提取模式,并在两个模式上进行嵌套树合并。谷歌api客户端或bq客户端是否支持这种开箱即用?或者合并必须手动完成?据我所知不是这样,但听起来像是一个有趣的特性-您能描述一下您正在更改的模式吗?(似乎它比一张平桌子更复杂)是的。其嵌套的字段树是数组。我想共享一个示例架构,但由于对SO的注释只允许几个字符,因此我已使用该架构编辑了原始问题。BigQuery supoprt是否将数据类型更改为现有表和列?您可以重新具体化该表-如果需要详细答案,请打开一个新问题