hive SemanticException分区规范{col=null}包含非分区列

dddzy1tm  于 2022-12-12  发布在  Hive
关注(0)|答案(5)|浏览(255)

我正在尝试使用以下代码在配置单元中创建动态分区。

SET hive.exec.dynamic.partition = true;
SET hive.exec.dynamic.partition.mode = nonstrict;

create external table if not exists report_ipsummary_hourwise(
ip_address string,imp_date string,imp_hour bigint,geo_country string)
PARTITIONED BY (imp_date_P string,imp_hour_P string,geo_coutry_P string) 
row format delimited 
fields terminated by '\t'
stored as textfile
location 's3://abc';

insert overwrite table report_ipsummary_hourwise PARTITION (imp_date_P,imp_hour_P,geo_country_P)
SELECT ip_address,imp_date,imp_hour,geo_country,
       imp_date as imp_date_P,
       imp_hour as imp_hour_P,
       geo_country as geo_country_P
FROM report_ipsummary_hourwise_Temp;

其中report_ipsummary_hourwise_Temp表包含以下列,ip_address,imp_date,imp_hour和geo_country
我收到此错误
语义异常错误分区规范{imp_hour_p=空,imp_date_p=空,geo_country_p=空}包含非分区列。
有谁能告诉我为什么会出现这种错误吗?

gg0vcinb

gg0vcinb1#

您插入的sql具有geo_country_P列,但目标表列名为geo_coutry_Pcountry中缺少n

epfja78i

epfja78i2#

我也遇到了同样的错误。这是因为文件中存在额外的字符。最好的解决方案是删除所有空白字符,如果需要,重新插入。

m2xkgtsf

m2xkgtsf3#

也可以是https://issues.apache.org/jira/browse/HIVE-14032
INSERT OVERWRITE命令因分区关键字名称区分大小写而失败
Hive中有一个错误,它使分区列名区分大小写。
对我来说,修正是表中的列名必须是小写,表定义中的PARTITION BY子句必须是小写。(它们也可以都是大写;由于此配置单元错误HIVE-14032, shell 必须匹配)

rmbxnbpk

rmbxnbpk4#

它说,虽然从结果复制文件到hdfs作业无法识别分区位置.我可以怀疑你有表与分区(imp_date_P,imp_hour_P,geo_country_P),而作业正试图复制imp_hour_p=null,imp_date_p=null,geo_country_p=null这不匹配..尝试检查hdfs位置...另一点我可以建议不要复制列名和分区两次

ybzsozfc

ybzsozfc5#

插入覆盖表报告_IP摘要_小时方式PARTITION**(进口日期_P,进口小时_P,地理国家/地区_P)**SELECT IP地址,进口日期,进口小时,地理国家/地区,进口日期as进口日期_P,进口小时as进口小时_P,地理国家_地区as地理国家_地区P FROM报告_IP摘要_小时方式临时;
突出显示的字段应与report_ipsummary_hourwise文件中提供的名称相同

相关问题