【问题标题】:CROSS APPLY function in Presto/AWSPresto/AWS 中的 CROSS APPLY 功能
【发布时间】:2020-10-21 21:28:30
【问题描述】:

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

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

为了解决这个问题,我成功执行了 CROSS APPLY SQL server 中的函数(见下文),但我现在需要在 AWS Simba 中执行相同的操作 雅典娜或 Presto 语言。有人可以指导我什么是 CROSS APPLY 功能的 AWS/Presto 等价物吗?提前谢谢你

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)

我要转换下表:

【问题讨论】:

  • 看来你在照顾UNNEST
  • 感谢您的想法。您是否有一个示例可以分享我们如何在此函数中使用列而不是数组?
  • 添加了答案。如果您需要更多帮助,可以随时通过#troubleshooting 频道Presto community slack 获得。

标签: sql-server presto amazon-athena


【解决方案1】:

您应该可以为此使用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 方式,因此您可能需要进行一些修改。

【讨论】:

    猜你喜欢
    • 2019-01-01
    • 2013-07-08
    • 1970-01-01
    • 2015-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-07
    相关资源
    最近更新 更多