You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在BigQuery中以类通配符方式查询多个同字段STRUCT结构

标准SQL没有原生支持%.qty这类跨STRUCT同名字段的通配符查询语法,但可以通过逆透视(列转行)的方式,在不修改现有表结构的前提下实现批量查询筛选,不同SQL引擎的实现方式如下:

BigQuery 实现方案

通过内置UNPIVOT语法将多个STRUCT字段转为行维度统一处理:

WITH unpivoted_data AS (
  -- 保留原表除4个水果STRUCT外的所有字段
  SELECT * EXCEPT(mango, melon, apple, banana),
    fruit_type,
    fruit.qty,
    fruit.price
  FROM `你的表完整路径`
  -- 把4个STRUCT列转成 fruit_type(水果名称)+ fruit(对应STRUCT)的行数据
  UNPIVOT (
    fruit FOR fruit_type IN (mango, melon, apple, banana)
  )
)
-- 统一筛选qty大于5的记录
SELECT * FROM unpivoted_data WHERE qty > 5;

如果你的需求是只要任意一个水果的qty>5就保留整条原记录、不需要拆分多行的话,直接用多条件OR即可:

SELECT * FROM `你的表完整路径`
WHERE mango.qty > 5 
   OR melon.qty > 5
   OR apple.qty > 5
   OR banana.qty > 5;

Spark SQL / 其他支持数组爆炸语法的引擎实现方案

通过构造STRUCT数组+爆炸的方式实现逆透视:

SELECT 
  * EXCEPT(mango, melon, apple, banana),
  fruit_info.fruit_type,
  fruit_info.fruit.qty,
  fruit_info.fruit.price
FROM 你的表名
LATERAL VIEW EXPLODE(
  ARRAY(
    STRUCT('mango' AS fruit_type, mango AS fruit),
    STRUCT('melon' AS fruit_type, melon AS fruit),
    STRUCT('apple' AS fruit_type, apple AS fruit),
    STRUCT('banana' AS fruit_type, banana AS fruit)
  )
) exploded_table AS fruit_info
WHERE fruit_info.fruit.qty > 5;

内容的提问来源于stack exchange,提问作者SOO

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 15:06:07