13

複数の月のデータを同時に処理する必要があります。では、複数のフォルダを外部テーブルに向けるオプションはありますか? 例えば Create external table logdata(col1 string, col2 string........) location s3://logdata/april, s3://logdata/march

4

4 に答える 4

21

簡単な答え: いいえ、作成中locationの Hiveexternalテーブルの は一意である必要があります。これは、メタストアがテーブルの場所を理解するために必要です。

そうは言っても、おそらくパーティションを使用して回避できますlocation。月ごとに分割しているため、最終的に必要と思われるパーティションごとに を指定できます。

したがって、次のようにテーブルを作成します。

create external table logdata(col1 string, col2 string) partitioned by (month string) location 's3://logdata'

次に、次のようにパーティションを追加できます。

alter table logdata add partition(month='april') location 's3://logdata/april'

これを毎月行うと、必要なパーティションを指定してテーブルにクエリを実行できるようになり、Hive は実際にデータが必要なディレクトリのみを調べます (たとえば、4 月と 6 月のみを処理している場合、Hive はそうしません)。ロード可能性があります)

于 2013-06-03T16:06:36.763 に答える
2

私はあなたのシナリオをチェックアウトしました。複数の場所を有効にするために複数の load inpath ステートメントを使用することで、それを実現できると思います。以下は、私が実行したテストのために行った手順です。

hive> create external table xxx (uid int, name string, dept string) row format delimited fields terminated by '\t' stored as textfile;
hive> load data inpath '/input/tmp/user_bckt' into table xxx;
hive> load data inpath '/input/user_bckt' into table xxx;
hive> select count(*) from xxx;
10
hive> select * from xxx;
1   ankur   abinitio
2   lokesh  cloud
3   yadav   network
4   sahu    td
5   ankit   data
1   ankur   abinitio
2   lokesh  cloud
3   yadav   network
4   sahu    td
5   ankit   data

これがうまくいかない場合はお知らせください

編集:以下に示すように、外部テーブルデータが元の場所に残されるという概念とは対照的に、この場合、データがハイブウェアハウスに移動されていることを確認しました。

hduser@hadoopnn:~$ hls /input/tmp
DEPRECATED: Use of this script to execute hdfs command is deprecated.
Instead use the hdfs command for it.

14/10/05 14:47:18 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Found 2 items
-rw-r--r--   1 hduser hadoop         93 2014-10-04 18:54 /input/tmp/dept_bckt
-rw-r--r--   1 hduser hadoop         71 2014-10-04 18:54 /input/tmp/user_bckt
hduser@hadoopnn:~$ hcp /input/tmp/user_bckt /input/user_bckt
DEPRECATED: Use of this script to execute hdfs command is deprecated.
Instead use the hdfs command for it.

14/10/05 14:47:44 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
hduser@hadoopnn:~$ logout
Connection to nn closed.
hduser@hadoopdn2:~$ hls /input/tmp/
DEPRECATED: Use of this script to execute hdfs command is deprecated.
Instead use the hdfs command for it.

14/10/05 15:05:47 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Found 1 items
-rw-r--r--   1 hduser hadoop         93 2014-10-04 18:54 /input/tmp/dept_bckt
hduser@hadoopdn2:~$ hls /hive/wh/xxx
DEPRECATED: Use of this script to execute hdfs command is deprecated.
Instead use the hdfs command for it.

14/10/05 15:21:54 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Found 2 items
-rw-r--r--   1 hduser hadoop         71 2014-10-04 18:54 /hive/wh/xxx/user_bckt
-rw-r--r--   1 hduser hadoop         71 2014-10-05 14:47 /hive/wh/xxx/user_bckt_copy_1

私は現在ここで問題を調査しており、完了したら戻ってきます。

于 2014-10-05T09:33:54.103 に答える
0

SymlinkTextInputFormat / https://issues.apache.org/jira/browse/HIVE-1272をご覧ください。それがあなたの問題を解決できると考えてください。すべての場所を含む別のテキスト ファイルを維持するだけです。

https://issues.apache.org/jira/browse/HIVE-951も参照してください。これは解決されていませんが、解決策になるでしょう!

于 2013-06-19T06:37:17.660 に答える