更改 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 中记录列的类型的主要内容,如果未能解决你的问题,请参考以下文章
sql [BigQuery - Facebook产品目录]查询para obtenerelcatálogodeproductos de Kichink。 #facebook #bigqu