最佳的復(fù)制一個(gè)partitioned表的步驟:
- 創(chuàng)建新的目標(biāo)弯屈,跟舊表一樣的schema. 如:
create table new_xx like xx; - 使用 hadoop fs -cp 把舊表所有的分區(qū)文件,拷貝到目標(biāo)表的文件夾谱姓。
- 運(yùn)行 MSCK REPAIR TABLE new_xx.
這樣就可以完成一個(gè)partition表的復(fù)制
應(yīng)對(duì)Load Data時(shí),分隔符在field中出現(xiàn)
對(duì)于TextFormat的hive表脆烟,當(dāng)文本格式的數(shù)據(jù)绍妨,每列的分隔符是 逗號(hào)‘,',而其中一列中的數(shù)據(jù)也包含逗號(hào)的時(shí)候漠魏,直接load會(huì)造成列的分割混亂倔矾。 這個(gè)時(shí)候, 可以使用escaped來解決這個(gè)問題:
- create table 中指定
ESCAPED BY
蛉幸, 指定轉(zhuǎn)義符破讨,如下使用''作為轉(zhuǎn)義符
create teable
……
ROW FORMAT DELIMITED FIELDS TERMINATED BY "," ESCAPED BY '\\';
……
對(duì)于已經(jīng)存在的表,可以增加escape.delim
:
ALTER TABLE XXXX
set serde 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'
WITH SERDEPROPERTIES ('escape.delim'='\\');
- 文本文件中奕纫,對(duì)列中含有','的提陶, 替換為 ',',使用轉(zhuǎn)義匹层。
hive local 模式
在hive shell中隙笆。 當(dāng)用limit 1查看數(shù)據(jù)概況。 或者操作的數(shù)據(jù)量小升筏,不需要在多個(gè)結(jié)點(diǎn)之間shuffle的時(shí)候撑柔。可以使用hive 的local模式您访,不用申請(qǐng)集群資源铅忿,反而能更快得到結(jié)果。
set hive.exec.mode.local.auto = true;
會(huì)自動(dòng)根據(jù)查詢灵汪,判斷是否采用local模式
hive beeline 使用心得
- beeline 提交hive任務(wù)檀训,產(chǎn)生OOM異常,
java.lang.OutOfMemoryError: GC overhead limit exceeded
:
beeline 任務(wù)會(huì)啟動(dòng)一個(gè)java進(jìn)程享言,設(shè)置了-Xmx峻凫,當(dāng)返回行數(shù)過多,內(nèi)存使用太高览露,會(huì)頻繁的GC荧琼,從而出現(xiàn)這個(gè)錯(cuò)誤。
*改進(jìn)辦法: 增加beeline啟動(dòng)參數(shù)--incremental=true
, 增量模式返回結(jié)果命锄。
例子:
/home/work/tars/hive-0.13.1-cdh5.2.0-all/bin/beeline --incremental=true -u "jdbc:hive2://XXX" --outputformat=tsv -e "set mapreduce.job.queuename=default" -e "${SQL}" > "/data/output_information"