我使用以下查询在 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 [])
请帮忙。
如果要将数据加载到 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)
归档时间: |
|
查看次数: |
6584 次 |
最近记录: |