Presto/AWS 中的 CROSS APPLY 函数

CROSS APPLY function in Presto/AWS

我正在尝试将标题为 Created、Approved、Processed & Realized 的 4 个日期列转换为一个包含所有 4 个日期的列和一个包含每个日期状态的第二列。

最后的图片直观地显示了数据问题(抱歉,我仍在研究如何在 Whosebug 上以文本形式附加 tables)

To solve this, I successfully executed the CROSS APPLY function in SQL server (see below), but I now need to do the same in AWS Simba Athena or the Presto language. Can someone please guide me on what is the AWS/Presto equivalent of a CROSS APPLY function? Thank you in advance

SELECT 

    V.Date,
    V.Status
    From Table C
    CROSS APPLY     
        (VALUES 
                (C.Created, 'Opened'), 
                (C.Approved, 'Approved'), 
                (C.Processed, 'Processed'), 
                (C.Realized, 'Realized')
                                                 ) AS V([Date], Status)

我要转换以下内容table:

您应该可以使用 UNNEST 来做到这一点:

SELECT v.date, v.status
FROM m_table
CROSS JOIN UNNEST(ARRAY[
 ROW(C.Created, 'Opened'), 
 ROW(C.Approved, 'Approved'), 
 ROW(C.Processed, 'Processed'), 
 ROW(C.Realized, 'Realized')
]) AS v(date, status);

这适用于最新的 Presto 版本 337。

在 Athena 中,您可能仍然无法 UNNEST 数组或 ROW 采用 ANSI SQL 方式,因此您可能需要进行一些修改。