Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hive 如何为配置单元查询生成一个随机数(仅生成一次)?_Hive - Fatal编程技术网

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,如果没有,请检查以下内容: