Sql Bigquery:附加到嵌套记录

Sql Bigquery:附加到嵌套记录,sql,google-bigquery,Sql,Google Bigquery,我目前正在签出Bigquery,我想知道是否可以向嵌套表添加新数据 例如,如果我有这样一个表: [ { "name": "name", "type": "STRING" }, { "name": "phone", "type": "RECORD", "mode": "REPEATED", "fields": [ { "na

我目前正在签出Bigquery,我想知道是否可以向嵌套表添加新数据

例如,如果我有这样一个表:

[
    {
        "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次?请阅读相应的文档或发布特定的问题。我怀疑上述答案是否会影响这些限制