3

ファイルからいくつかの列のみを設定する外部テーブルを作成するにはどうすればよいですか?

例: アーカイブには、A、B、C、D、E、F の 6 つの列があります。しかし、私のテーブルでは、A、C、F だけが必要です。

出来ますか?

4

2 に答える 2

2

外部テーブルの HDFS ファイルから列を選択的に含める方法がわかりません。ユースケースによっては、外部テーブルに基づいてビューを定義して、必要な列のみを含めるだけで十分な場合があります。たとえば、次のようなばかげた外部テーブルの例があるとします。

hive> CREATE EXTERNAL TABLE ext_table (
    >   A STRING,
    >   B STRING,
    >   C STRING,
    >   D STRING,
    >   E STRING,
    >   F STRING
    > )
    > ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
    > STORED AS TEXTFILE
    > LOCATION '/tmp/ext_table';
OK
Time taken: 0.401 seconds
hive> SELECT * FROM ext_table;
OK
row_1_col_A row_1_col_B     row_1_col_C     row_1_col_D     row_1_col_E     row_1_col_F
row_2_col_A row_2_col_B     row_2_col_C     row_2_col_D     row_2_col_E     row_2_col_F
row_3_col_A row_3_col_B     row_3_col_C     row_3_col_D     row_3_col_E     row_3_col_F
Time taken: 0.222 seconds, Fetched: 3 row(s)

次に、必要な列のみを含めるビューを作成します。

hive> CREATE VIEW filtered_ext_table AS SELECT A, C, F FROM ext_table;
OK
Time taken: 0.749 seconds
hive> DESCRIBE filtered_ext_table; 
OK
a                           string                              
c                           string                              
f                           string                              
Time taken: 0.266 seconds, Fetched: 3 row(s)
hive> SELECT * FROM filtered_ext_table;
OK
row_1_col_A row_1_col_C     row_1_col_F
row_2_col_A row_2_col_C     row_2_col_F
row_3_col_A row_3_col_C     row_3_col_F
Time taken: 0.301 seconds, Fetched: 3 row(s)

目的を達成するための別の方法では、外部テーブルをバックアップする HDFS ファイルを変更する機能が必要です。関心のある列がすべて各行の先頭近くにある場合は、外部テーブルのみをキャプチャするように定義できます。最初の 3 列 (実際にファイル内にあと何列あるかは関係ありません)。たとえば、上記と同じデータ ファイルを使用すると、次のようになります。

hive> DROP TABLE IF EXISTS ext_table;
OK
Time taken: 1.438 seconds
hive> CREATE EXTERNAL TABLE ext_table (
    >   A STRING,
    >   B STRING,
    >   C STRING
    > )
    > ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
    > STORED AS TEXTFILE
    > LOCATION '/tmp/ext_table';
OK
Time taken: 0.734 seconds
hive> SELECT * FROM ext_table;
OK
row_1_col_A row_1_col_B     row_1_col_C
row_2_col_A row_2_col_B     row_2_col_C
row_3_col_A row_3_col_B     row_3_col_C
Time taken: 0.727 seconds, Fetched: 3 row(s)
于 2015-01-30T14:44:33.507 に答える