【问题标题】:Hive DISTINCT() for all columns?所有列的 Hive DISTINCT()?
【发布时间】:2019-02-09 05:33:16
【问题描述】:

我想通过下面的玩具示例说明 DISTINCT 的工作原理。假设你有一个这样的表,有 2 列,只有 2 行数据:

SELECT * 
FROM table1;

colA   colB
A      B
A      C

假设我运行了一个 SELECT DISTINCT 查询:

SELECT DISTINCT colA, colB 
FROM table1;

上面的查询会返回以下哪个结果?

结果可能性1:

A      B
A      C

这种可能性的想法是,虽然 colA 上的值不是不同的,但当考虑两列时,整个返回的行是唯一的或不同的。由于SELECT DISTINCT colA, colBcolAcolB 之间的逗号的影响以及它是否有助于将DISTINCT 限制为colA,我不确定。

结果可能性2:

A      B

结果可能性 3:

A      C

【问题讨论】:

  • 可能性 1。Distinct 适用于所有选定的列。 如果您刚刚选择 colA,那么您将获得 1 条记录结果 A:如果您只是选择 distict 列 B 然后你会得到 B 和 C。如果你有第三条记录 A,B,那么在选择不同的 colb 时你仍然只会得到两条记录,因为第三条记录将是第一条记录的副本。当使用不同的 colA 和 ColB 时,您只会得到 2 条记录,因为第三条记录再次与记录 1 完全相同。

标签: sql hive


【解决方案1】:

DISTINCT 应​​用于整行。

A      B
A      C

以上两行不同,所以结果类似于结果可能性 1 即

A   B
A   C 

【讨论】:

    【解决方案2】:

    也许这会有所帮助。这个查询:

    SELECT DISTINCT colA, colB 
    FROM table1;
    

    在功能上等同于:

    SELECT colA, colB 
    FROM table1
    GROUP BY colA, colB;
    

    它将返回出现在数据中的所有colA/colB 对。

    【讨论】:

    • 顺便说一句,在这两种功能等效的解决方案之间,一个在计算上比另一个更有效吗?不确定是否有一个简单的答案或更细微的答案。我很感兴趣,因为我处理的是 PB 级的数据。
    • @user2205916 。 . .这取决于数据库,但性能应该非常相似。
    猜你喜欢
    • 1970-01-01
    • 2020-11-06
    • 2018-10-18
    • 1970-01-01
    • 1970-01-01
    • 2017-08-08
    • 1970-01-01
    • 2012-07-23
    • 1970-01-01
    相关资源
    最近更新 更多