Выберите случайную строку для каждого значения столбца из таблицы Hive - PullRequest
0 голосов
/ 14 сентября 2018

Я пытаюсь получить случайную строку для каждого отдельного значения для столбца 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.

Как я могу исправить этот запрос или какой другой подход использовать здесь?

1 Ответ

0 голосов
/ 14 сентября 2018

Вы можете использовать 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
...