2016-05-01 17 views
1

ORC形式でhadoopファイルシステム(users.tbl)に保存されたファイルからハイブテーブルを作成できるかどうかを知りたい。 ORC形式は最適化の点でテキストより優れています。ですから、stored as orc tblpropertieslocation属性を使用してhdfsファイルからテーブルを作成し、orcフォーマットでテーブルを作成することが可能かどうかを知りたいと思います。orc形式でhdfsに格納されたファイルからハイブテーブルを作成する

ような何か:テキストの

create table if not exists users 
(USERID BIGINT, 
NAME STRING, 
EMAIL STRING, 
CITY STRING) 
STORED AS ORC TBLPROPERTIES ("orc.compress"="SNAPPY") 
LOCATION '/tables/users/users.tbl'; 

Insted:

create table if not exists users 
    (USERID BIGINT, 
    NAME STRING, 
    EMAIL STRING, 
    CITY STRING) 
    ROW FORMAT DELIMITED FIELDS TERMINATED BY '|' STORED AS TEXTFILE 
    LOCATION '/tables/users/users.tbl'; 

答えて

0

あなたが唯一のステップでそれを行うことはできません。 create table文はデータを処理せず、形式と場所を指定するだけです。

"SORTED AS TEXTFILE" create文を使用して一時テーブルを作成し、ORCを格納形式(空の場所を使用)として使用して最終テーブルを作成することをお勧めします。

次に、一時的な「テキストテーブル」からすべての行を「ORCテーブル」に挿入します。

Insert [overwrite] table orcTable select col1, col2 from textTable; 

挿入上書きは、新しいデータでテーブル内のすべてのデータを置き換えます。新しいデータだけを追加する場合は、[テーブルを挿入...]を使用します。

インポート後、一時的な「テキストテーブル」を削除できます。

+0

..私は、一時的なテーブルがハイブにあると思う...外部を作成したテキストファイルは、単にオークのtable..andに選択し、挿入を実行there..fromこの外部表であるところに場所を与えていませんあなたはその場所にorcテーブルを持っています。 –

+0

最終的なテーブルにデータを挿入するために使用されるだけなので時間的ですが、その後は削除することをお勧めします。しかし、私はそれが他のリレーショナルDBのような "一時的な"テーブルではないことに同意します。これは、ユーザーセッションが閉じられたときにテーブルを自動的に削除します。 – RojoSam

0

1.ハイブでテーブルを作成します。

create table MyDB.TEST (
Col1 String, 
Col2 String, 
Col3 String, 
Col4 String) 
STORED AS INPUTFORMAT 
    'org.apache.hadoop.hive.ql.io.orc.OrcInputFormat' 
OUTPUTFORMAT 
    'org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat'; 

2.データをテーブルにロードします。

LOAD DATA INPATH '/hdfs/dir/folder/to/orc/files/' INTO TABLE MyDB.TEST;