2017-10-09 57 views
0

我试图添加分区蜂巢表(按日期分区)在蜂巢表基于一个子查询

我的问题是,日期需要从另一个表获取加分。

我的查询是这样的:

ALTER TABLE MY_TABLE ADD IF NOT EXISTS PARTITION(server_date =(SELECT MAX(server_date)FROM processed_table));

当我运行查询蜂巢引发以下错误:

错误:错误在编译声明:失败:ParseException的线1:84无法识别输入附近“(”“选择”在不断的“最大”(状态= 42000,代码= 40000)

+0

https://issues.apache.org/jira/browse/HIVE-8182 –

回答

0

蜂房不允许使用功能/ UDF对分区列

方法1:

要做到这一点,你可以运行第一阙ry并将结果存储在一个变量中,然后执行查询。

server_date=$(hive -e "set hive.cli.print.header=false; select max(server_date) from processed_table;") hive -hiveconf "server_date"="$server_date" -f your_hive_script.hql

里面你的脚本,你可以使用下面的语句:

ALTER TABLE my_table ADD IF NOT EXISTS PARTITION(server_date =${hiveconf:server_date});

欲了解更多信息,蜂箱变量替换,你可以参考link

方法2:

在这种方法中,如果需要分区数据,您将需要创建一个临时表ing已经没有加载到任何其他分区表中。

考虑到您的数据没有server_date列。

  1. 将数据加载到临时表
  2. 组hive.exec.dynamic.partition = TRUE;
  3. 执行下面的查询:

INSERT OVERWRITE TABLE my_table PARTITION (server_date) SELECT b.column1, b.column2,........,a.server_date as server_date FROM (select max(server_date) as server_date from) a, my_table b;

+0

是否有上述办法的工作了吗? –

+0

我使用JDBC代码,似乎工作... –