2014年2月18日 星期二

hive 指令

hive都是打打一串很長的cmd在處理~

要注意的是~ 若沒有做程序控管~ 同時做HIVE指令可能會出事~
(因為是使用"一個"檔案當DB資料~ 檔案本來就無法同時多個程序寫入!!~ 讀取分析可能又卡在hadoop分散式檔案系統~又麻煩了點~~)
hadoop的檔案系統~ 基本上只有put, rmr(新增, 刪除), 沒有"更新"這件事!!!!!!
(我也很希望有T__T)
更新這件事~只能先砍掉~ 再新增...但是因為通常Hadoop又喊自己是Big Data...幾G甚至到T的資料在那邊一直copy...I/O會到極限就算了
(I/O在OS效能上~算很容易跑到100%CPU, 也容易影響到其他工作)~

反正Hadoop不會是Fast Data的最好選擇就是了!!!頂多是搭配使用~
總之偶覺得很難用啦~ 看很多solution都寫的多好用一樣~ 那都是要配很多東西~ 再加上特定條件才成立的!

這邊列一些有用到hive指令~
另外執行cmd的方式~
僅量使用bin/hive -e 的方式執行~
而不是用bin/hive進console....
但是因為bin/hive -e, 會受到"引號的限制~ 可能會有某些情況無法全擠進同一個句子裡...還是得用bin/hive解....(有點爛~__~|||)

匯入資料時要注意~ 該內容只支援UTF-8...中文常會GG的~~
(要匯之前還要先去把原csv整個轉檔~ 又是個坑一_一||||)

select語法建議就看文件囉~跟SQL有點像~但又不太一樣~

###顯示table列表
(其實一個table就等於是一個hadoop file~有興趣去hadoop裡面純看hadoop檔案,  /user/hive/warehouse下就會有個名字和table name一樣的檔)
show tables;



###顯示table
decribe test_csv;

###刪除
DROP TABLE test_csv;

###notices row format must!
CREATE TABLE test_csv (id STRING, sn INT, name STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' ;

###sync data with csv localfile (overwrite)
load data local inpath '/XXXXX/hadoop/files/aa.txt' overwrite into table test_csv;
###insert(append data with csv)
load data local inpath '/XXXX/hadoop/files/aa.txt' into table test_csv;

###create_idx
CREATE INDEX idx_date
ON TABLE xxx_data (date_str)
AS 'org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler'
WITH DEFERRED REBUILD;

###select sample
SELECT * FROM xxxxxx WHERE yyyyMMdd = '2013AUG16' order by num;

沒有留言: