更改 BigQuery 中记录列的类型

Posted

技术标签:

【中文标题】更改 BigQuery 中记录列的类型【英文标题】:Change type of record column in BigQuery 【发布时间】:2020-01-17 16:05:44 【问题描述】:

我在 BigQuery 中有一个包含 RECORD 类型列的表。此 RECORD 列只是一个 RECORD,它不是 REPEATED 列。我想更改记录中元素之一的类型。我的记录定义为:

product_action                RECORD NULLABLE
product_action.action_type    INTEGER NULLABLE
product_action.checkout_step  INTEGER NULLABLE

我想将 ACTION_TYPE 的类型从 INTEGER 更改为 STRING,但我不知道该怎么做。我知道它涉及选择和转换到新表,但我不知道正确的语法。这里有一个非常相似的问题,有一个答案 How to change the col type of a BigQuery repeated record 但它仅适用于 REPEATED 记录,无法将其更改为 RECORD only(非 REPEATED)。

谢谢!

【问题讨论】:

【参考方案1】:

OP 的答案的潜在问题是它不保留记录中字段的原始顺序,因此它以以下模式结束

product_action                RECORD NULLABLE
product_action.checkout_step  INTEGER NULLABLE
product_action.action_type    STRING NULLABLE  <-- Type and position changed

而不是

product_action                RECORD NULLABLE
product_action.action_type    STRING NULLABLE  <-- Type changed while position preserved  
product_action.checkout_step  INTEGER NULLABLE

下面处理这个问题

#standardSQL
SELECT * REPLACE((
  SELECT AS STRUCT product_action.* REPLACE(
    CAST(product_action.action_type AS STRING) AS action_type
  )) AS product_action) 
FROM `mytable`  

【讨论】:

【参考方案2】:

终于搞定了

SELECT
  * REPLACE   
      ( 
        (
            SELECT
            AS STRUCT product_action.* EXCEPT (action_type),
            CAST(product_action.action_type AS STRING) AS action_type
         ) AS product_action
      ),
FROM
  `mytable`

【讨论】:

只是为了补充解决方案,这里是 SELECT * REPLACE 和 SELECT * EXCEPT 的 documentation

以上是关于更改 BigQuery 中记录列的类型的主要内容,如果未能解决你的问题,请参考以下文章

如何更改 BigQuery 中列的数据类型

查询结果后 BigQuery 导出多个文件

sql [BigQuery - Facebook产品目录]查询para obtenerelcatálogodeproductos de Kichink。 #facebook #bigqu

如何更改 BigQuery 重复记录的 col 类型

BigQuery:如何在重复记录中插入新值?

在 C# 中插入具有重复记录列的 BigQuery 行