[英]add partition in hive table based on a sub query
我正在尝试将分区添加到配置单元表(按日期分区)
我的问题是需要从另一个表中获取日期。
我的查询看起来像:
ALTER TABLE my_table ADD IF NOT EXISTS PARTITION(server_date = (SELECT max(server_date) FROM processing_table));
当我运行查询配置单元时抛出以下错误:
错误:编译语句时出错:FAILED:ParseException 行 1:84 无法识别常量(状态 = 42000,代码 = 40000)中的 '(' 'SELECT' 'max' 附近的输入
Hive 不允许对分区列使用函数/UDF。
方法一:
为此,您可以运行第一个查询并将结果存储在一个变量中,然后执行查询。
server_date=$(hive -e "set hive.cli.print.header=false; select max(server_date) from processing_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});
有关 hive 变量替换的更多信息,您可以参考链接
方法二:
在这种方法中,如果您期望的分区数据尚未加载到任何其他分区表中,您将需要创建一个临时表。
考虑到您的数据没有 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;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.