我正在尝试将分区添加到配置单元表(按日期分区)
我的问题是需要从另一个表中提取日期。
我的查询如下:
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)
附近的输入答案 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列。
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;