Hive 如何为配置单元查询生成一个随机数(仅生成一次)?
我有如下代码:Hive 如何为配置单元查询生成一个随机数(仅生成一次)?,hive,Hive,我有如下代码: set hivevar:foo=rand(); select ${hivevar:foo} from my_database.my_table; 我认为,即使使用变量替换,rand()仍然每行调用一次。如何将foo设置为每个查询一次随机数 我可以想出其他解决方案,但我希望将所有内容都包含在一个蜂巢查询中,而不是将更丑陋的东西拼凑在一起 此代码为每一行调用rand(): INSERT INTO dest_table SELECT st.col1, st.col2, RAND()
set hivevar:foo=rand();
select ${hivevar:foo} from my_database.my_table;
我认为,即使使用变量替换,rand()
仍然每行调用一次。如何将foo
设置为每个查询一次随机数
我可以想出其他解决方案,但我希望将所有内容都包含在一个蜂巢查询中,而不是将更丑陋的东西拼凑在一起 此代码为每一行调用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;
在一行子查询中调用它,并与查询交叉连接。子查询应该执行一次
select s.rnd, a.col, etc
from my_database.my_table a
cross join
(select rand() as rnd) s
;
令人惊叹的。这有助于我理解发生了什么,以及我真正想做什么:在标量和向量之间取笛卡尔积,就像交叉连接一样。谢谢但是,我想我将使用与@VMykyt类似的东西,因为它似乎需要更长的时间才能运行。@matthiasdenu它是相同的交叉连接,因为兰德公司的
,source_table不带开的条件是交叉连接。你最好使用ANSI joinsyntax@matthiasdenu为了更好地理解,请参见以下内容:@matthiasdenu通常应该运行map join,如果没有,请检查以下内容: