首页 > 解决方案 > 更改 BigQuery 中记录列的类型

问题描述

我在 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,但我不知道该怎么做。我知道它涉及选择和转换到新表,但我不知道正确的语法。这里有一个非常相似的问题,答案是 如何更改 BigQuery 重复记录的 col 类型, 但它仅适用于 REPEATED 记录,并且无法将其更改为 RECORD only (not REPEATED)。

谢谢!

标签: google-cloud-platformgoogle-bigquery

解决方案


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`  

推荐阅读