如何为Hive查询生成随机数(仅一次)?

时间:2018-09-27 14:15:38

标签: hive

我有如下代码:

set hivevar:foo=rand();
select ${hivevar:foo} from my_database.my_table;

我认为,即使使用变量替换,rand()仍会在每个中被调用一次。如何为每个 query 一次将foo设置为随机数?

我可以想到其他解决方案,但是我想将所有内容都包含在一个配置单元查询中,而不是将一些难看的东西拼凑在一起。

2 个答案:

答案 0 :(得分:2)

此代码为每一行调用rand():

INSERT INTO dest_table
SELECT st.col1, st.col2, RAND() AS col3
FROM source_table st;

此代码仅调用rand()一次:

WITH rand AS (
  SELECT RAND() as col3
)
INSERT INTO dest_table
SELECT st.col1, st.col2, rand.col3
FROM rand, source_table st;

答案 1 :(得分:1)

在单行子查询中调用它,然后与您的查询交叉联接。子查询应执行一次

select s.rnd, a.col, etc
  from my_database.my_table a
      cross join
  (select rand() as rnd) s
;