2016-10-31 6 views
1

データを.csvファイルにハイブに格納する準備をしています。もちろん、寄木細工のファイル形式が良好であるため、ハイブテーブルは寄木張りの形式にする必要があります。したがって、普通の方法は、フォーマットがtextfileであるテンポラリテーブルを作成し、ローカルのCSVファイルデータをこのテンポラリテーブルにロードし、最後に同じ構造のパーケットテーブルを作成してinsert into parquet_table values (select * from textfile_table);を使用することです。一時的なテキストファイルテーブルに頼らず、ローカルcsvファイルを直接ハイキング寄木張りテーブルにロード

しかし、私はこの一時的なtextfileテーブルが必要とは思わない。だから、私の質問は、私はこれらのローカル.csvファイルをハイブの寄せ木馬形式のテーブルに直接ロードする方法、つまり、一時テーブルを使用しないことですか?または、このタスクを達成するための簡単な方法は?

答えて

3

Hive documentationに述べたように:スキーマに対してデータのNO検証は、ロード命令によって実行されない

ファイルがhdfsにある場合、ファイルはハイブ制御ファイルシステムの名前空間に移動されます。

寄木張りテーブルにCREATE TABLE AS SELECTを使用してステップをスキップできます。

だから、あなたは3つのステップがあります:テキストテーブルにスキーマに

  • ロードデータを定義するテキストテーブルを作成します

    1. を(新しいテーブルにファイルを移動します)
    2. CREATE TABLE parquet_table AS SELECT * FROM textfile_table STORED AS PARQUET;supported from hive 0.13
  • +0

    私の場合、データは1時間に1回しか生成されません。したがって、hdfsのテキストスキーマテーブルディレクトリに毎時データを移動してsqlを実行できます:CREATE TABLE parquet_table AS SELECT * FROM textfile_table STORED AS P ARQUET; 1時間後に、hdfsファイルを新しくcomデータで置き換えることができます。これは、1時間ごとにtmpテーブルを削除して再作成するのではありませんか? – wuchang

    +0

    はい、それは正しいです。しかし、あなたのテキストテーブルが分割されていて、パーティションを追加している場合は、 'SELET * ... 'に表示するために' MSCK REPAIR TABLE textfile_table'を実行する必要があります。 –

    +0

    このアプローチはまだこれを達成する唯一の方法です構造化テーブルとテンポラリテーブルのステップをスキップして、以前にテキストファイルをロードすることは可能です。 –

    関連する問題