複数の月のデータを同時に処理する必要があります。では、複数のフォルダを外部テーブルに向けるオプションはありますか? 例えば
Create external table logdata(col1 string, col2 string........) location s3://logdata/april, s3://logdata/march
4 に答える
簡単な答え: いいえ、作成中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 はそうしません)。ロード可能性があります)
私はあなたのシナリオをチェックアウトしました。複数の場所を有効にするために複数の 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
私は現在ここで問題を調査しており、完了したら戻ってきます。
SymlinkTextInputFormat / https://issues.apache.org/jira/browse/HIVE-1272をご覧ください。それがあなたの問題を解決できると考えてください。すべての場所を含む別のテキスト ファイルを維持するだけです。
https://issues.apache.org/jira/browse/HIVE-951も参照してください。これは解決されていませんが、解決策になるでしょう!