将查询结果存储在变量中

chh*_*rma 7 variables hadoop hive

我有一个查询,其结果我想存储在变量中我该怎么做?我试过了

./hive -e  "use telecom;insert overwrite local directory '/tmp/result' select
avg(a) from abc;"

./hive --hiveconf MY_VAR =`cat /tmp/result/000000_0`;
Run Code Online (Sandbox Code Playgroud)

我能够在MY_VAR中获得平均值,但它需要我的hive CLI,这不是必需的,有没有办法在hive CLI中访问unix命令?

bro*_*lit 13

用例:在mysql中,以下内容有效:

设置@max_date:=从some_table中选择max(date);
select from from some_other_table where date> @max_date;

这对于需要重复调​​用此变量的脚本非常有用,因为您只需要执行一次最大日期查询,而不是每次调用变量时.

HIVE目前不支持这一点.(如果我错了,请纠正我!我整个下午一直试图弄清楚如何做到这一点)

我的解决方法是将所需的变量存储在一个足够小的表中,以便将连接映射到使用它的查询.因为连接是地图而不是广播连接,所以不应该显着损害性能.例如:

drop table if exists var_table;


从some_table 创建表var_table作为max_date 选择max(date);


从some_other_table中选择some_other_table.*
left join var_table
where some_other_table.date> var_table.max_date;

@visakh建议的解决方案不是最佳的,因为存储字符串'select count(1)from table_name;' 而不是返回的值,因此在脚本中需要重复调​​用var的情况下没有用处.


小智 7

将hive查询输出存储在变量中并在另一个查询中使用它.

在shell中通过执行以下操作创建具有所需值的变量:

var=`hive -S -e "select max(datekey) from ....;"`
echo $var
Run Code Online (Sandbox Code Playgroud)

在另一个配置单元查询中使用变量值:

hive -hiveconf MID_DATE=$var -f test.hql
Run Code Online (Sandbox Code Playgroud)