【问题标题】:amazon athena - select from multiples tables without joinamazon athena - 从多个表中选择而不加入
【发布时间】:2018-12-23 07:21:18
【问题描述】:

我有三张桌子。每个表都有与其他两个表相同的列,在某些属性上有所不同。由于我对公共属性感兴趣,我想发出一个请求以从所有三个表中获取数据。

我需要通过 UNION 从所有三个表中获取项目。在 AWS Athena 中是否可行?

例如:

table1 (att1, att2, att3)
table2 (att1, att2, att_3)
table3 (att1, att2, att3, att4)

目标:从 table1、table2、table3 中获取项目而不在同一个请求中加入。

【问题讨论】:

    标签: sql amazon-web-services amazon-athena presto


    【解决方案1】:

    这将返回三个表的列中的所有值(包括来自table3 的第四列。如果您只需要att1, att2,只需省略其他列并在SELECT 语句中只键入这些。

    SELECT att1, att2, att3, NULL as att4 FROM table1
    UNION ALL
    SELECT att1, att2, att_3, NULL FROM table2
    UNION ALL
    SELECT att1, att2, att3, att4 FROM table3
    

    UNION ALL 如果有来自不同表的重复值,则返回重复值,而 UNION 应用 DISTINCT,这意味着返回唯一值集。

    如果您正在寻找从您提到的所有表中返回公共列(按名称)的解决方案,那么您可以选择:

    1. 像上面那样做,这意味着明确指定它
    2. 您必须编写一个过程来执行动态语句,该语句将在给定表中查找匹配的列

    【讨论】:

      【解决方案2】:

      在 AWS Athena 中,您可以使用 UNION 运算符来合并两个(或更多)单独查询表达式的结果。例如:

      SELECT att1, att2, att3 FROM table1
      UNION
      SELECT att1, att2, att3 FROM table2
      UNION
      SELECT att1, att2, att3 FROM table3
      

      我假设 UNION 中的每个 SELECT 语句具有相同数量的列,并且具有相同的数据类型以相同的顺序。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-07
        • 2013-07-11
        • 1970-01-01
        • 1970-01-01
        • 2021-04-05
        • 2012-08-23
        相关资源
        最近更新 更多