2

日付フィールドを含む多くのレコードを含む単一のファイル「fruitsbought.csv」があるとします。

そのテキストファイルに基づいて「果物」テーブルを作成し、そのパーティションに一致するfruitsbought.txtのすべての行を含むパーティションを作成することにより、パフォーマンスを向上させるために「パーティション化」することは可能ですか?年と月、作成しますか?

または、別のプロセスの一部として、毎年のディレクトリを作成し、その年にフィルター処理された適切な「.csv」ファイルを HDFS のディレクトリ構造に配置してから、impala-shell でテーブルを作成する必要がありますか? ?

空のテーブルを作成し、パーティションを設定してから、そのレコードが入るパーティションをたまたま含む "Insert" ステートメントを使用できると聞きました。私の現在のケースでは、必要なすべてのレコードを含む単一の「fruitsbought.csv」が既にありますが、それをすぐにテーブルにする方法が気に入っています (ただし、parititionig はありません)。

1 つのファイルを適切なパーティションの下にソートされた複数のファイルに事前に分割するための別のプロセスを開発する必要がありますか? (1つのファイルは非常に大きいです)。

4

1 に答える 1

2
  1. fruitbought.csv の例を使用して外部テーブルを作成します (id は単なる例です。...- テーブル内の残りの列を意味します)。

    CREATE EXTERNAL TABLE fruitsboughexternal ( id INT, .....
    mydate STRING ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LOCATION 'somelocationwithfruitsboughtfile/';

  2. 日付でパーティションを使用してテーブルを作成する

CREATE TABLE fruitsbought(id INT, .....) PARTITIONED BY (year INT, month INT, day INT) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';

  1. Fruitsbought テーブルにデータをインポートします。パーティション パラメータは select の最後にある必要があります (もちろん、mydate は 2014-06-20 06:05:25 のように impala が理解できる形式である必要があります)。

INSERT INTO fruitsbought PARTITION(year, month, day) SELECT id, ..., year(mydate), month(mydate), day(mydate) FROM fruitsboughexternal;

于 2014-06-20T11:26:39.770 に答える