基于子查询在hive表中添加分区

时间:2017-10-09 08:22:46

标签: hadoop hive hiveql

我正在尝试将分区添加到配置单元表(按日期分区)

我的问题是需要从另一个表中提取日期。

我的查询如下:

ALTER TABLE my_table ADD IF NOT EXISTS PARTITION(server_date =(SELECT max(server_date)FROM processed_table));

当我运行查询时,hive会抛出以下错误:

错误:编译语句时出错:FAILED:ParseException行1:84无法识别'('''SELECT''max'in constant(state = 42000,code = 40000)

附近的输入

1 个答案:

答案 0 :(得分:0)

Hive不允许对分区列使用函数/ UDF。

方法1:

要实现此目的,您可以运行第一个查询并将结果存储在一个变量中,然后执行查询。

  

server_date = $(hive -e“set hive.cli.print.header = false;从processed_table中选择max(server_date);”)   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});

有关hive变量替换的更多信息,请参阅link

方法2:

在此方法中,如果您期望的分区数据尚未加载到任何其他分区表中,则需要创建临时表。

考虑您的数据没有server_date列。

  1. 将数据加载到临时表
  2. set hive.exec.dynamic.partition = true;
  3. 执行以下查询:
  4.   

    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;