2014-04-09 31 views
2

我有一個文件test_file_1.txt包含:含PigLatin - 將數據插入現有分區?

20140101,value1 
20140102,value2 

和文件test_file_2.txt

20140103,value3 
20140104,value4 

在HCatalog有一個表:

create table stage.partition_pk (value string) 
Partitioned by(date string) 
stored as orc; 

這兩個腳本的工作很好:

Sc RIPT 1:

LoadFile = LOAD 'test_file_2.txt' using PigStorage(',') AS (date : chararray, wartosc : chararray); 
store LoadFile into 'stage.partition_pk' using org.apache.hcatalog.pig.HCatStorer(); 

腳本2:

LoadFile = LOAD 'test_file_2.txt' using PigStorage(',') 
AS (date : chararray, wartosc : chararray); 
store LoadFile into 'stage.partition_pk' using org.apache.hcatalog.pig.HCatStorer(); 

partition_pk包含四個分區 - 一切都如預期。

但讓我們說,還有另一個文件包含應該插入到一個現有分區中的數據。 Pig無法寫入包含數據的分區(或者我錯過了某些內容?) 如何管理加載到現有分區(不是空的非分區表)? 您是否閱讀分區,將其與新數據聯合,刪除分區(如何?)並將其作爲新分區插入?

回答

2

來自HCatalog的網站https://cwiki.apache.org/confluence/display/Hive/HCatalog+UsingHCat,它說:「一旦創建了分區,就不能將記錄添加到記錄中,也不能將其更新。」因此,根據HCatalog的性質,您無法將數據添加到已有數據的現有分區。

他們正在努力解決這個問題。一些錯誤的被固定在配置單元0.13:

https://issues.apache.org/jira/browse/HIVE-6405(仍然沒有解決) - 具體到 - 對可變 https://issues.apache.org/jira/browse/HIVE-6476(仍然沒有解決)單獨的表屬性 - 用於跟蹤所述其他錯誤 https://issues.apache.org/jira/browse/HIVE-6406(在0.13解決)的錯誤動態分區 https://issues.apache.org/jira/browse/HIVE-6475 - 解析爲0.13 - 特定於靜態分區 https://issues.apache.org/jira/browse/HIVE-6465(仍未解決) - 向HCatalog添加DDL支持 基本上,看起來如果您不想使用動態分區,那麼0.13可能適合您。你只需要記住設置適當的屬性

我發現我的作品是創建另一個分區鍵,我稱之爲build_num。然後,我通過命令行傳遞此參數的值,並將其設置在商店語句中。像這樣:

創建表stage.partition_pk(值字符串) 由(日期字符串,build_num字符串) 存儲爲獸人分區;

STORE的LoadFile爲 'partition_pk' 使用org.apache.hcatalog.pig.HCatStorer( 'build_num = $ {build_num}';

只是不包括在查詢的build_num分區。當我運行這個工作時,我通常將build_num設置爲時間戳。使用多個分區

+0

Thans爲您的答案。你寫道:_Basically,它看起來像如果你不想使用動態分區,那麼0.13可能適合你。你只需要記住設置適當的屬性。你的意思是哪個參數?哪個bug解決了我的問題?謝謝 –

+0

我更新了我的答案,以包含適用於我的解決方法。 – user2370813

+0

感謝你與其他分區。你有沒有檢查過這個分區是否會影響桌面?它是不是沉沒了休息時間? –

1

嘗試:

create table stage.partition_pk (value string) Partitioned by(date string, counter string) stored as orc; 

存儲這個樣子的:

LoadFile = LOAD 'test_file_2.txt' using PigStorage(',') AS (date : chararray, wartosc : chararray); 
store LoadFile into 'stage.partition_pk' using org.apache.hcatalog.pig.HCatStorer('date=20161120, counter=0'); 

所以現在你可以再次的數據通過增加櫃檯存入同日分區。

相關問題