动态分配日期值到配置单元查询

时间:2019-04-01 14:30:29

标签: hive

我在蜂巢中对表进行了分区,我想为date列动态分配值(昨天的date)。以下是我当前的查询,但无法正常工作。

ALTER TABLE db1.table1 ADD IF NOT EXISTS PARTITION (loaddate="date_sub(FROM_UNIXTIME(UNIX_TIMESTAMP(),'yyyy-MM-dd') , 1)") LOCATION "hdfs://location1/abc/rawdata/externalhivetables/downloading/data";

不是返回日期值,而是返回完整的表达式。

select downloading.loaddate From downloading limit 3;

+------------------------------------------------------------+
 |              downloading.loaddate                       |
+------------------------------------------------------------+
| date_sub(FROM_UNIXTIME(UNIX_TIMESTAMP(),'yyyy-MM-dd') , 1) |
| date_sub(FROM_UNIXTIME(UNIX_TIMESTAMP(),'yyyy-MM-dd') , 1) |
| date_sub(FROM_UNIXTIME(UNIX_TIMESTAMP(),'yyyy-MM-dd') , 1) |

2 个答案:

答案 0 :(得分:0)

在蜂巢壳中,我们尚无法分配 variable variables from the result of query ,我们需要执行2个步骤:

使用 Shell script 执行查询并将结果存储到variable中。

然后使用变量初始化 hive shell/script

bash$ var=`hive -S -e "select date_sub(FROM_UNIXTIME(UNIX_TIMESTAMP(),'yyyy-MM-dd') , 1);"`
bash$ echo $var

现在使用hive/beeline值初始化 var shell

bash$ hive -hiveconf dd=$var

hive> ALTER TABLE db1.table1 ADD IF NOT EXISTS PARTITION (loaddate='${hiveconf:dd}') LOCATION "hdfs://location1/abc/rawdata/externalhivetables/downloading/data";

请参阅thisthis链接以获取更多信息。

答案 1 :(得分:0)

使用shell计算日期并使用shell变量替换替换日期:

bash$ dt=$(date -d '-1 day' +%Y-%m-%d)
bash$ hive -e "ALTER TABLE db1.table1 ADD IF NOT EXISTS PARTITION (loaddate='$dt') LOCATION 'hdfs://location1/abc/rawdata/externalhivetables/downloading/data'"