【大數據】Hive: 創建分區表(partition表)及分區表導入csv文本文件數據

2018.11.21

文章目錄

前言

某項目生產環境中的Hive是按月份分區,而測試環境的沒有分區,導致部分功能無法驗證。

方法

基本思路:分別創建兩個表,一張是分區表,另一張是非分區表,表結構相同;再通過insert語句將非分區表的數據插入到分區表1

要注意是,分區表的插入分兩種:靜態插入和動態插入。在一般情況下,Hive不建議直接使用動態插入2,所以有個默認情況下是不允許使用動態分區插入:hive.exec.dynamic.partition=false;但在Hive 0.9.0及之後的版本,上述參數默認爲true,雖然如此卻有另一個參數約束着動態分區插入:hive.exec.dynamic.partition.mode=strict,動態分區插入的模式默認爲嚴格模式,在嚴格模式下,插入操作需要指定一個特定的靜態分區。所以如果在從非分區表select出來並insert到分區表中,就需要設置這兩個參數。

# 創建分區表
create table table_partitioned (col1 string, col2 int) 
  partitioned by (month int) 
  row format delimited fields terminated by ',' lines terminated by '\n' 
  stored as textfile;
# 創建非分區表
create table table_unpartitioned (col1 string, col2 int, month int) 
  row format delimited fields terminated by ',' lines terminated by '\n' 
  stored as textfile;
# 導入csv文本文件
load data local inpath '/path/to/file' into table table_unpartitioned;
# 設置允許動態分區插入,並動態分區插入模式爲非嚴格模式
SET hive.exec.dynamic.partition = true;
SET hive.exec.dynamic.partition.mode = nonstrict;
# 插入到分區表
insert into table table_partitioned partition(month) select * from table_unpartitioned;

  1. Cloudera: create a partitioned table ↩︎

  2. Wiki Hive tutorial ↩︎

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章