从配置单元表中随机选择每列行值

j13ufse2  于 2021-06-26  发布在  Hive
关注(0)|答案(1)|浏览(353)

我试图为列的每个不同值检索一个随机行 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);

查询失败,出现错误 Table not found 'result' 因为在from子句中使用了它 FROM result .
如何修复此查询或在此使用什么其他方法?

lnvxswe2

lnvxswe21#

你可以用 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

相关问题