【问题标题】:Unpivot Columns inside of Amazon Athena without hardcoding无需硬编码即可在 Amazon Athena 内取消透视列
【发布时间】:2019-10-28 19:12:24
【问题描述】:

我正在 AWS Athena 内部编写查询。 原始表类似于:

employee|manager1|manager2|manager3|... | manager10
   12345|A .     |B .     |C .     |... | (null)
   54321|I .     |II .    |III .   |... | X

结果应该是这样的:

employee | manager
12345 .  | A
12345 .  | B
12345 .  | C
54321    | I
54321 .  | II
54321 .  |...
54321 .  | X

我尝试在 Athena 中使用 unpivot,但遇到了一些语法错误。此外,使用 unpivot 意味着我需要对所有这些列进行硬编码。

这是我第一次接触 Athena,我不知道 Athena 能否实现。如果是,正确的方法是什么?

【问题讨论】:

  • 你能在雅典娜之外做这件事吗?我觉得雅典娜对于这样的事情可能有点笨拙。例如PySpark might be an option.
  • 这是一个大型项目的一部分,使用 Athena 是由其他人设计的。但是感谢您的建议,我正在调查从 Athena 中选择 * 后是否可以使用 AWS 胶水。

标签: sql aws-glue amazon-athena unpivot


【解决方案1】:

我刚刚在 Athena 中使用数组进行了反透视。我的案例没有可变数量的列,因此您可能需要对此进行调整,但这至少应该可以为您提供一个不可旋转的:

WITH dataset AS (
  SELECT
    employee,
    ARRAY[manager1, manager2, manager3] AS managers
  FROM
    (SELECT 'A' AS employee, '1' AS manager1, '2' AS manager2, '3' AS manager3)
)
SELECT employee, manager FROM dataset
CROSS JOIN UNNEST(managers) as t(manager)

这将为您提供输出:

查看文档以获取更多信息和示例:https://docs.aws.amazon.com/athena/latest/ug/creating-arrays.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-14
    • 1970-01-01
    • 2018-04-30
    • 2015-06-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多