google-bigquery - 为什么只在“from”子句之后才提供 UNNEST
问题描述
为什么只在“from”子句之后才提供 UNNEST
例如,此查询失败并显示错误为“语法错误:[2:8] 处的意外关键字 UNNEST”
WITH groc as (select ["ram"] as list) SELECT UNNEST(list) FROM groc
尽管
这个运行成功
WITH groc as (select ["ram"] as list) SELECT (select * from UNNEST(list)) FROM groc
解决方案
UNNEST 是一个表值函数,通常用于数组构造、展平、过滤等 - 因此返回带有行等的表,因此您需要牢记这一点来使用它。你不能只是select table
——而是你应该select from table
同时,您的第二个查询的“正确”版本应如下所示,因此它不仅可以成功运行具有一个元素的数组,而且可以成功运行多个元素
WITH groc as (
select ["ram", "abc", "xyz"] as list
)
SELECT array(select * from UNNEST(list)) list
FROM groc
在这种情况下,结果是
仅当您想以某种方式转换原始数组或过滤掉某些元素时,这才有意义-否则它只会返回相同的数组-例如
WITH groc as (
select ["ram", "abc", "xyz"] as list
)
SELECT array(select item || "2" from UNNEST(list) item where item != "abc") list
FROM groc
带输出
在您的第一个查询中,通常您会使用以下模式来展平数组 - 将所有数组的元素提取到单独的行中,如下例所示
WITH groc as (
select ["ram", "abc", "xyz"] as list
)
SELECT item || "2" item
FROM groc, UNNEST(list) item
WHERE item != "xyz"
带输出
您可以在各自的文档中阅读有关 UNNEST 功能的更多信息
推荐阅读
- c - 在小结构的末尾而不是在 2 个成员之间进行对齐填充会更好吗?
- html - 更改引导卡标题的颜色
- javascript - 如何在Vue中使模态可打印?
- java - 已定义的变量返回到未定义的内部订阅
- smtp - 当其凭据通过网络邮件工作时,为什么邮件给出异常为“客户端无权作为此发件人发送”
- .htaccess - TYPO3 将扩展 URL tx_xyz 重写为另一个名称
- python - AttributeError: type object 'PyMongo' has no attribute 'db' with Flask Blueprint Mongodb
- javascript - 保存视频给黑屏
- prolog - 如何在序言中使用 line/2 谓词打印带有输入的行
- java - 多次调用 KeyPressed 事件