从Hive表中选择每列的随机行数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从Hive表中选择每列的随机行数相关的知识,希望对你有一定的参考价值。

我正在尝试为列hash的每个不同值检索一个随机行。我还需要dt列。

到目前为止,我到达了这个不起作用的查询:

INSERT OVERWRITE TABLE t PARTITION(dt)
    SELECT hash, dt FROM (
        SELECT hash, RAND() as r, dt FROM t1
            UNION
        SELECT hash, RAND() as r, dt FROM t2
    ) result
    WHERE r IN (SELECT MAX(r) FROM result WHERE hash=result.hash);

由于在FROM子句Table not found 'result'中使用它,查询因FROM result错误而失败。

如何修复此查询或此处使用的其他方法?

答案

您可以使用row_number获取由r排序的每个哈希的最大值的行。

INSERT OVERWRITE TABLE t PARTITION(dt)
    SELECT hash,dt
    FROM (SELECT hash, dt, row_number() over(partition by hash order by r desc) as rnum 
          FROM (SELECT hash, RAND() as r, dt FROM t1
                UNION ALL
                SELECT hash, RAND() as r, dt FROM t2
               ) result
         ) t
    WHERE rnum=1

以上是关于从Hive表中选择每列的随机行数的主要内容,如果未能解决你的问题,请参考以下文章

如何从 SQL 数据库表中选择随机行? [复制]

Phpmyadmin 显示数据库中的随机行数

Pandas 数据框中的随机行选择

选择 1 个具有复杂过滤的随机行

从 SQL Server 表中选择 n 个随机行

读取大型 csv 文件、python、pandas 的随机行