我有如下代码:
set hivevar:foo=rand();
select ${hivevar:foo} from my_database.my_table;
我认为,即使使用变量替换,rand()
仍会在每个行中被调用一次。如何为每个 query 一次将foo
设置为随机数?
我可以想到其他解决方案,但是我想将所有内容都包含在一个配置单元查询中,而不是将一些难看的东西拼凑在一起。
答案 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
;