首页 > 解决方案 > 当目标包含 REPEATED 字段时,如何从一个 BigQuery 表复制到另一个?

问题描述

我有两个具有相似架构的表,但一个具有模式设置为 REPEATED 的字段子集。例如:

模式 1:

[
    {"name": "id", "type": "NUMERIC", "mode": "REQUIRED"},
    {"name": "name", "type": "STRING", "mode": "REQUIRED"},
    {"name": "created", "type": "TIMESTAMP", "mode": "REQUIRED"},
    {"name": "valid", "type": "BOOLEAN", "mode": "REQUIRED"},
    {"name": "parameter1", "type": "STRING", "mode": "REQUIRED"},
    {"name": "parameter2", "type": "FLOAT", "mode": "REQUIRED"},
    {"name": "parameter3", "type": "BOOLEAN", "mode": "REQUIRED"}
]

模式 2:

[
    {"name": "id", "type": "NUMERIC", "mode": "REQUIRED"},
    {"name": "name", "type": "STRING", "mode": "REQUIRED"},
    {"name": "created", "type": "TIMESTAMP", "mode": "REQUIRED"},
    {"name": "valid", "type": "BOOLEAN", "mode": "REQUIRED"},
    {"name": "parameters", "type": "RECORD", "mode": "REPEATED", "fields":
        [
            {"name": "parameter1", "type": "STRING", "mode": "REQUIRED"},
            {"name": "parameter2", "type": "FLOAT", "mode": "REQUIRED"},
            {"name": "parameter3", "type": "BOOLEAN", "mode": "REQUIRED"}
        ]
    }
]

我使用这些模式创建了 Table1 和 Table2。Table1 已写入,Table2 为空。我想将 Table1 的内容复制到 Table2,其中 Table1.parameter1、Table1.parameter2 和 Table1.parameter3 被写入一个 Table2.parameters 数组,每个数组只有一个元素。我假设一个 SQL 命令INSERT INTO TABLE2 (id, name, created ...) SELECT id, name, created FROM TABLE1;应该可以完成这项工作,但我找不到正确的语法。

(将来表 2 将有多行parameters写入的数据,因此需要复制)

我在https://cloud.google.com/bigquery/docs/reference/standard-sql/dml-syntax看到了文档,但似乎没有任何建议适合我的用例。你能为我指出正确的方向吗?

谢谢!

标签: google-bigquery

解决方案


这可以通过将第一个表的参数列分组到 aSTRUCTARRAY将它们插入到第二个表中来完成:

INSERT INTO table2 (id, name, created, valid, parameters)
SELECT id, name, created, valid, [(parameter1, parameter2, parameter3)]
FROM table1

推荐阅读