首页 > 解决方案 > 无法在 SELECT 上使用 CAST AS RECORD

问题描述

我有一个包含 2 列的简单表:Col1 和 Col2

sh-3.2# ./bq show --schema dataset.Test
[{"type":"STRING","name":"Col1","mode":"NULLABLE"},{"type":"STRING","name":"Col2","mode":"NULLABLE"}]

此查询工作正常

SELECT * EXCEPT (Col2) , CAST(Col2 AS NUMERIC) AS Col2 FROM `project.dataset.Test` LIMIT 1000

此查询返回错误

SELECT * EXCEPT (Col2) , CAST(Col2 AS RECORD) AS Col2 FROM `project.dataset.Test` LIMIT 1000

任何想法为什么?

我正在尝试使用 WebUI 中出现的关键字 RECORD

在此处输入图像描述

标签: stringcastinggoogle-bigquery

解决方案


BigQuery 转换规则不允许您从 String 转换为 Record (AKA Struct)。

https://cloud.google.com/bigquery/docs/reference/standard-sql/conversion_rules

您必须在查询中自己编写结构。像这样的东西:

SELECT 
    * EXCEPT (Col2), 
    STRUCT( Col2 as inner_Col2) as my_inner_record 
FROM `project.dataset.Test` LIMIT 1000

推荐阅读