首页 > 解决方案 > Bigquery 表嵌套多值列在查询时出错

问题描述

我正在尝试将具有嵌套多值列的表中的数据加载到具有相同架构但少一个或多个字段的另一个表中。

表 1 架构:

    Person                  RECORD   REPEATED   ;
    Person.Address          RECORD   REPEATED   ;
    Person.Address.phone    INTEGER  NULLABLE   ;
    Person.Address.zip      INTEGER  NULLABLE   ;
    Person.flag             INTEGER             ;
    Wt                      INTEGER             ;

表 2 架构:

    Person                  RECORD   REPEATED   ;
    Person.Address          RECORD   REPEATED   ; 
    Person.Address.phone    INTEGER  NULLABLE   ;
    Person.flag             INTEGER             ;
    Wt                      INTEGER             ;

请注意,这两个表之间的唯一区别是表 2 没有“zip”字段。

我正在尝试使用以下查询从 Table-1 加载 Table-2:

    INSERT INTO TABLE-2
    SELECT
    ARRAY (SELECT AS STRUCT (ARRAY (SELECT AS STRUCT (SELECT PA.phone from unnest (P.Address) as 
    PA)), P.flag) from unnest(Table-1.Person) as P), s.Wt
    from Table-1

这总是会引发以下错误:“查询列 1 的类型为 ARRAY>,INT64>>>,无法插入到类型为 ARRAY> 的 Person 列中,在 [2:1] 处标记为 INT64>>”

如果您查看查询,它与目标列的查询完全匹配。关于出了什么问题的任何想法?

标签: google-bigquerynested

解决方案


以下是 BigQuery 标准 SQL

INSERT INTO `project.dataset.table2`
SELECT * REPLACE(
  ARRAY(
    SELECT AS STRUCT * REPLACE(
      ARRAY(SELECT AS STRUCT * EXCEPT(zip) FROM p.Address) 
      AS Address) 
    FROM t.Person p
  ) AS Person
  )
FROM `project.dataset.table1` t  

zip上面通过仅从地址记录中“提取”该字段来生成与 table1 中完全相同的架构,但字段除外。无论您有多少其他字段,其他所有内容都保持不变


推荐阅读