2016-07-15 3 views
0

Hil!特殊文字でtxtからテーブルハイブを作成

私は、次の内容のTXTを持っている:

$ hdfs dfs -cat result/ 
[5,AA,ABE,US,AGU,MX,DNE0M0Z1,99991231,20160421,MX13,706,1,,33,,BOX,,,60,INNJ,31,2419221] 
[5,AA,ABE,US,AGU,MX,DNE0M0Z1,99991231,20160421,MX13,706,1,,33,,BOX,,,60,INNJ,31,2419244] 
[5,AA,ABE,US,AGU,MX,DNE0M0Z1,99991231,20160421,MX13,706,1,,33,,BOX,,,60,INNJ,31,2419319] 

このファイルはHDFSでスパークによって生成されます。私が望むのは、そのファイルから読み込んだテーブルHIVEを作成し、結果をテーブルに表示することです。問題は、レコードが[]で始まり、終わることです。私は自動的に生成されるので、私はtxtを変更せずにこれを行うことができますか?

は今の私のテーブルには、次のとおりです。

DROP TABLE IF EXISTS RESULT_LATAM; 

CREATE EXTERNAL TABLE IF NOT EXISTS RESULT_LATAM 
(
    FARDET_NUM_RULE_TARIFF  BIGINT, 
    FARDET_CD_CARRIER   VARCHAR(3), 
    FARDET_CD_ORIGIN_CITY  VARCHAR(5), 
    FARDET_CD_ORIGIN_COUNTRY VARCHAR(2), 
    FARDET_CD_DEST_CITY   VARCHAR(5), 
    FARDET_CD_DEST_COUNTRY  VARCHAR(2), 
    FARDET_CD_FARE_BASIS  VARCHAR(8), 
    . 
    . 
    . 
) 
STORED AS TEXTFILE 
LOCATION '/user/ubuntu/result/'; 

答えて

0

は、これを達成するために、私は、列の数が少ないを使用しているソリューションを実証するためには直接的な方法はありませんが、あなたのアイデアを得るでしょう。

サンプルデータ:あなたがステージングテーブルにデータをロードし、変換を実行するソリューションのカスタムEDW種類/メインテーブルにロードしている間にクリーンアップ開発する必要があり

[5,A1] 
[6,A2] 
[7,A3] 

をステージング表

を作成します。
create external table table_stg(x string,y string) 
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' 
LINES TERMINATED BY '\n'; 

メインテーブルを作成します

ステージングテーブルの
create external table table_main(x int,y VARCHAR(10)) 
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY ',' 
LINES TERMINATED BY '\n'; 

ロードデータ

LOAD DATA INPATH '/user/cloudera/result.txt' INTO TABLE table_stg; 

hive> select * from table_stg; 
OK 
[5 A1] 
[6 A2] 
[7 A3] 
Time taken: 0.086 seconds, Fetched: 3 row(s) 

ロードメインテーブル内のクリーンデータ

insert into table table_main 
select regexp_replace(x, '\\[',''), regexp_replace(y, '\\]','') 
from table_stg; 

最終出力

hive> select * from table_main; 
OK 
5 A1 
6 A2 
7 A3 
Time taken: 0.155 seconds, Fetched: 3 row(s)