Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.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_Hiveql - Fatal编程技术网

Hive 如何在配置单元中的变量中存储查询的输出

Hive 如何在配置单元中的变量中存储查询的输出,hive,hiveql,Hive,Hiveql,我想将当前_day-1存储在配置单元中的变量中。我知道之前已经有过关于这个主题的讨论,但是这里提供的解决方案首先建议在shell环境中定义配置单元外部的变量,然后在配置单元内部使用该变量 我首先使用 select date_sub(FROM_UNIXTIME(UNIX_TIMESTAMP(),'yyyy-MM-dd'),1); 然后我尝试了两种方法: 1. set date1 = ( select date_sub(FROM_UNIXTIME(UNIX_TIMESTAMP(),'yyyy-M

我想将当前_day-1存储在配置单元中的变量中。我知道之前已经有过关于这个主题的讨论,但是这里提供的解决方案首先建议在shell环境中定义配置单元外部的变量,然后在配置单元内部使用该变量

我首先使用

 select date_sub(FROM_UNIXTIME(UNIX_TIMESTAMP(),'yyyy-MM-dd'),1);
然后我尝试了两种方法:

1. set date1 = ( select date_sub(FROM_UNIXTIME(UNIX_TIMESTAMP(),'yyyy-MM-dd'),1);

and 

2. set hivevar:date1 = ( select date_sub(FROM_UNIXTIME(UNIX_TIMESTAMP(),'yyyy-MM-dd'),1);
这两种方法都会引发错误:

"ParseException line 1:82 cannot recognize input near 'select' 'date_sub' '(' in expression specification"
当我打印1代替昨天的日期时,select查询保存在变量中。2方法抛出{hivevar:dt_chk}未定义


我是新来的蜂巢,将感谢任何帮助。谢谢。

Hive不支持直接将查询结果存储到变量的方法。您必须将shell选项与hiveconf一起使用

然后在脚本中可以引用新创建的变量date1

select '${hiveconf:date1}'

经过大量研究,这可能是实现将变量设置为SQL输出的最佳方法:

INSERT OVERWRITE LOCAL DIRECTORY '<home path>/config/date1'
select CONCAT('set hivevar:date1=',date_sub(FROM_UNIXTIME(UNIX_TIMESTAMP(),'yyyy-MM-dd'),1)) from <some table> limit 1;
source <home path>/config/date1/000000_0;
然后,您将能够在后续SQL中使用${date1}

在这里,我们必须使用限制1,因为如果不指定表名,配置单元在insert OVERRIDE中会出现错误

INSERT OVERWRITE LOCAL DIRECTORY '<home path>/config/date1'
select CONCAT('set hivevar:date1=',date_sub(FROM_UNIXTIME(UNIX_TIMESTAMP(),'yyyy-MM-dd'),1)) from <some table> limit 1;
source <home path>/config/date1/000000_0;