hive使用常見錯誤
1.動態分割槽表資料匯入的報錯
1).背景知識:靜態分割槽表和動態分割槽表的概念及正確資料匯入方式 靜態分割槽表:資料匯入之前分割槽已經存在的表格(可以load方式匯入資料,也可以insert方式匯入資料) 這種方式先手動新增分割槽: alter table student_ptn01 add partition(age=18); alter table student_ptn01 add partition(age=19); alter table student_ptn01 add partition(age=20); load方式匯入資料方法: load data local inpath ‘/home/hadoop/apps/stu’ into table student_ptn01 partition(age=18); insert方式匯入資料方法: insert into table student_ptn01 partition(age=18) select id,name,sex,department from student01 where age=18; 靜態分割槽資料匯入的使用場景: 1)知道資料中的分割槽的個數的時候 並且知道分割槽的名 2)分割槽數量比較少的時候
動態分割槽表:可以根據資料的實際情況自動的進行建立分割槽 在在對應的分割槽中插入資料(只支援insert方式資料匯入) 建立分割槽表: create external table student_ptn02(id int,name string,sex string,department string) PARTITIONED BY(age int COMMENT ‘partition ziduan’) row format delimited fields terminated by ‘,’; 不需要手動新增分割槽的 在資料插入的同時進行新增分割槽 語法: insert into table tablename partition(分割槽欄位) select … from … 注意:這種方式進行資料插入的時候 select中必須包含分割槽欄位
報錯: FAILED: SemanticException [Error 10096]: Dynamic partition strict mode requires at least one static partition column. To turn this off set hive.exec.dynamic.partition.mode=nonstrict 修改配置: set hive.exec.dynamic.partition.mode=nonstrict 修改動態分割槽的模式為非嚴格模式
create external table student_ptn03(id int,name string,sex string,department string) PARTITIONED BY(age string COMMENT ‘partition ziduan’) row format delimited fields terminated by ‘,’; insert into table student_ptn03 partition(age) select id,name,sex,age,department from student01; 查詢的時候 預設將最後一個欄位作為分割槽欄位 所以我們的分割槽欄位應該放在查詢語句的最後幾個 insert into table student_ptn03 partition(age) select id,name,sex,department,age from student01;