【问题标题】:HIVE - Cannot partition a table: semantic exception failureHIVE - 无法对表进行分区:语义异常失败
【发布时间】:2022-09-29 19:35:22
【问题描述】:

我无法在 Hive 中的分区表上导入数据。

这是我创建表格的方式

CREATE TABLE IF NOT EXISTS title_ratings
(
tconst STRING,
averageRating DOUBLE,
numVotes INT
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
STORED AS TEXTFILE
TBLPROPERTIES("skip.header.line.count"="1");

然后我将数据加载到其中:LOAD DATA INPATH '/title.ratings.tsv.gz' INTO TABLE eval_hive_db.title_ratings;

到这里为止一切正常。现在我想创建一个动态分区表。首先,我设置了这些参数:

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

我现在创建我的分区表:

CREATE TABLE IF NOT EXISTS title_ratings_part
(
tconst STRING,
numVotes INT
)
PARTITIONED BY (averageRating DOUBLE)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\n'
STORED AS TEXTFILE;

insert into title_ratings_part partition(title_ratings) select tconst, averageRating, numVotes from title_ratings;

(顺便说一下,我也试过用 numVotes 代替)

我收到这个错误:FAILED: ValidationFailureSemanticException eval_hive_db.title_ratings_part: Partition spec {title_ratings=null} contains non-partition columns

有人可以帮助我吗? 理想情况下,我想通过 averageRating 对表进行分区(小于 2、介于 2 和 4 之间以及大于 4)

【问题讨论】:

    标签: hadoop hive hql


    【解决方案1】:

    您可以运行此命令来检查是否有空值。

    select count(averageRating) from title_ratings group by averageRating;
    

    现在,如果此列中有空值,那么您将获得计数,您必须填写该计数然后再次应用分区。

    【讨论】:

    • 我的数据集中没有空值
    【解决方案2】:

    分区列存储为表中的最后一列,因此在插入时您需要在 select 语句中保持正确的顺序。 请更改选择中列的顺序。

    insert into title_ratings_part partition(title_ratings)
    Select 
    Tconst, 
    numVotes, 
    averageRating --orderwise this should always be last column
    from title_ratings
    

    【讨论】:

    • 谢谢您的回复。不幸的是,我有同样的问题。还尝试重新组织我的数据集,然后再将其再次导入我的 hdfs。我真的不明白为什么我不能对我的表进行分区:(
    • 我很困惑。你到底想做什么?对现有表进行分区或将数据从非分区表加载到新的分区表?
    • 我正在尝试将数据从非分区表加载到新的分区表中。
    • 知道了。所以上面的sql应该可以工作。您能否发布您正在尝试的插入 sql 以及您遇到的错误是什么?请确保表格结构与您的原始帖子相同
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多