Sql Bigquery:附加到嵌套记录
我目前正在签出Bigquery,我想知道是否可以向嵌套表添加新数据 例如,如果我有这样一个表:Sql Bigquery:附加到嵌套记录,sql,google-bigquery,Sql,Google Bigquery,我目前正在签出Bigquery,我想知道是否可以向嵌套表添加新数据 例如,如果我有这样一个表: [ { "name": "name", "type": "STRING" }, { "name": "phone", "type": "RECORD", "mode": "REPEATED", "fields": [ { "na
[
{
"name": "name",
"type": "STRING"
},
{
"name": "phone",
"type": "RECORD",
"mode": "REPEATED",
"fields": [
{
"name": "number",
"type": "STRING"
},
{
"name": "type",
"type": "STRING"
}
]
}
]
然后我插入一个联系John Doe的电话号码
INSERT into socialdata.phones_examples (name, phone) VALUES("Jonh Doe", [("555555", "Home")]);
是否有一个选项可以在以后向联系人添加另一个号码?要得到这样的东西:
[
{
"name": "name",
"type": "STRING"
},
{
"name": "phone",
"type": "RECORD",
"mode": "REPEATED",
"fields": [
{
"name": "number",
"type": "STRING"
},
{
"name": "type",
"type": "STRING"
}
]
}
]
我知道我可以更新整个字段,但我想知道是否有办法将新值追加到嵌套表中。在BigQuery中插入数据时,粒度是行的级别,而不是行中包含的数组元素。您可能希望使用如下查询,其中更新相关行并附加到数组:
UPDATE socialdata.phones_examples
SET phone = ARRAY_CONCAT(phone, [("555555", "Home")])
WHERE name = "Jonh Doe"
如果您需要为某些用户更新多个记录,您可以使用下面的
#standardSQL
UPDATE `socialdata.phones_examples` t
SET phone = ARRAY_CONCAT(phone, [new_phone])
FROM (
SELECT 'John Doe' name, STRUCT<number STRING, type STRING>('123-456-7892', 'work') new_phone UNION ALL
SELECT 'Abc Xyz' , STRUCT('123-456-7893', 'work') new_phone
) u
WHERE t.name = u.name
这是记录还是JSON?您是要就地修改还是只添加到结果集中?记录。我添加了更多信息和一个示例输出。换句话说,我想知道我是否将记录字段视为另一个表,在那里我可以附加更多信息。这不是对此解决方案的评论,但我想知道这是否属于“每日目标表更新限制-每天每表1000次更新”的表配额和限制.我不确定你想要什么,因为这完全取决于你运行它的次数-对吗?那么,你说上面的查询每天最多可以运行1000次?请阅读相应的文档或发布特定的问题。我怀疑上述答案是否会影响这些限制