google-cloud-platform - 更改 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)。
谢谢!
解决方案
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`
推荐阅读
- continuous-integration - Jenkins 上的 XCUI 测试结果
- java - 调用方法中未捕获自定义异常
- sdk - 如何将静态库添加到 Yocto SDK 包
- flask - 我可以将 JMeter 配置为接受 POST 请求作为响应吗?
- angularjs - 我可以更改 ui-grid 的模板吗?
- sql - 如何优化嵌套 SELECT
- javascript - 获取前一个实例Vue的一个prop的值
- excel - 在具有隐藏列和行的过滤工作表中,从每个范围的 2 个差异中获取值
- css - 当它碰到文本内容时,动画 div 会暂时停止
- c# - 使用带有 JsonContract 的默认对象构造