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)