繁体   English   中英

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

[英]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 列。

  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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM