无法加载 Hive 分区表中的数据

Moh*_*aja 6 hadoop hive

我使用以下查询在 Hive 中创建了一个表:

create table if not exists employee(CASE_NUMBER String,
                                         CASE_STATUS String,
                                         CASE_RECEIVED_DATE DATE,
                                         DECISION_DATE  DATE,
                                         EMPLOYER_NAME STRING,
                                         PREVAILING_WAGE_PER_YEAR BIGINT,
                                         PAID_WAGE_PER_YEAR BIGINT,
                                         order_n int) partitioned by (JOB_TITLE_SUBGROUP STRING) row format delimited fields terminated by ',';
                                         
Run Code Online (Sandbox Code Playgroud)

我尝试使用以下查询将数据加载到创建表中:

LOAD DATA INPATH '/salary_data.csv' overwrite into table employee  partition (JOB_TITLE_SUBGROUP);
Run Code Online (Sandbox Code Playgroud)

对于分区表,我什至设置了以下配置:

set hive.exec.dynamic.partition.mode=nonstrict;
set hive.exec.dynamic.partition=true;
Run Code Online (Sandbox Code Playgroud)

但是我在执行加载查询时遇到以下错误:

您的查询有以下错误:

编译语句时出错:FAILED: SemanticException org.apache.hadoop.hive.ql.metadata.HiveException: MetaException(message:Invalid partition key & values; keys [job_title_subgroup, ], values [])

请帮忙。

Jai*_*rel 3

如果要将数据加载到 Hive 分区中,则必须在LOAD DATA查询中提供分区本身的值。所以在这种情况下,您的查询将是这样的。

LOAD DATA INPATH '/salary_data.csv' overwrite into table employee partition (JOB_TITLE_SUBGROUP="Value");
Run Code Online (Sandbox Code Playgroud)

其中“Value”是您正在其中加载数据的分区的名称。原因是因为 Hive 将使用“Value”来创建要存储 .csv 的目录,该目录如下所示:.../employee/JOB_TITLE_SUBGROUP=Value。我希望这有帮助。

检查文档以获取有关LOAD DATA语法的详细信息。

编辑

由于表具有动态分区,一种解决方案是将 .csv 加载到外部表(例如,employee_external)中,然后执行INSERT如下命令:

INSERT OVERWRITE INTO TABLE employee PARTITION(JOB_TITLE_SUBGROUP)
SELECT CASE_NUMBER, CASE_STATUS, (...), JOB_TITLE_SUBGROUP
FROM employee_external
Run Code Online (Sandbox Code Playgroud)