首页 > 解决方案 > UNNEST 数组并使用 CASE WHEN 分配给新列

问题描述

我有以下具有嵌套结构的 BigQuery 表,即下面的示例是我表中的一条记录。

身份证 | 日期 | 时间 | 代码

AQ5ME | 120520 | 0950 | 123

---------- | 150520 | 1530 | 456

我的目标是取消嵌套数组以实现以下结构(假设 123 是开始日期代码,456 是结束日期代码):

身份证 | 开始日期 | 开始时间 | 结束日期 | 时间结束

AQ5ME | 120520 | 0950 | 150520 | 1530

我在 BigQuery 中尝试了基本的 UNNEST,结果如下:

身份证 | 开始日期 | 开始时间 | 结束日期 | 时间结束

AQ5ME | 120520 | 0950 | 空 | 无效的

AQ5ME | 空 | 空 | 150520 | 1530

您能否支持我如何以上述正确方式取消嵌套?

标签: arraysgoogle-bigquerycaseunnest

解决方案


您可以计算行内的最小值和最大值,并将它们提取为新列。由于您没有显示完整的架构,我假设 Date 和 Time 是单独的数组。对于这种情况,您可以使用该查询:

SELECT Id, 
    (SELECT MIN(D) from UNNEST(Date) as d) as StartDate, 
    (SELECT MIN(t) from UNNEST(Time) as t) as StartTime, 
    (SELECT MAX(D) from UNNEST(Date) as d) as EndDate, 
    (SELECT MAX(t) from UNNEST(Time) as t) as EndTime
FROM table

推荐阅读