Big Query视图中实现按列值提取非空指定列名生成新列的需求
BigQuery视图实现指定非空列名提取需求
实现方案
针对需求,我们可以通过数组拼接与字符串转换的组合逻辑,在BigQuery中生成目标视图。以下是具体SQL代码:
CREATE OR REPLACE VIEW your_target_view AS SELECT A, B, C, -- 处理空数组场景,返回Null;否则将数组转为逗号分隔字符串 CASE WHEN ARRAY_LENGTH(non_null_col_names) = 0 THEN NULL ELSE ARRAY_TO_STRING(non_null_col_names, ', ') END AS D FROM ( SELECT A, B, C, -- 按条件收集非空列名到数组 ARRAY_CONCAT( IF(A IS NOT NULL, ['A'], []), IF(C IS NOT NULL, ['C'], []) ) AS non_null_col_names FROM your_source_table -- 替换为你的实际表名 );
逻辑说明
- 内层子查询:使用
IF函数判断指定列(A、C)是否非空,非空则将列名加入数组,否则加入空数组;再通过ARRAY_CONCAT合并两个数组,得到当前行的非空列名集合。 - 外层查询:通过
CASE语句判断数组长度,若数组为空(即A、C均为Null),则D列返回Null;否则用ARRAY_TO_STRING将数组转换为逗号分隔的字符串,作为D列的值。
结果验证
将上述SQL应用到示例输入表后,输出结果完全匹配需求示例:
| A | B | C | D |
|---|---|---|---|
| Null | 2.4 | 2.0 | C |
| 1.0 | Null | 1.1 | A, C |
| 4.5 | 3.5 | Null | A |
| Null | 3.5 | Null | Null |
内容的提问来源于stack exchange,提问作者Test_Analytics
相关产品推荐
相关产品推荐

