0

以下のテーブルは、select ステートメントの実行中にデータを返しません

CREATE EXTERNAL TABLE foo (
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\073'
LINES TERMINATED BY '\n'
LOCATION '/user/data/CSV/2016/1/27/*/part-*';

mapreduce ジョブがパーツ ファイルをフォルダーに配置し、ハイブがテーブルに読み込まれるように、ハイブが動的フォルダーを指すようにする必要があります。

場所を動的にする方法はありますか

/user/data/CSV/*/*/*/*/part-*

それとも/user/data/CSV/*うまくいくでしょうか?

(同じコードは、内部テーブルとして作成され、ファイル パスを使用してロードされた場合に正常に機能します。したがって、フォーマットによる問題はありません)

4

4 に答える 4

1

まず、テーブル定義に列がありません。次に、外部テーブルの場所は、特定のファイルではなく、常にフォルダーを指します。Hive は、フォルダー内のすべてのファイルをテーブルのデータと見なします。

たとえば、何らかの外部プロセスによって毎日生成されるデータがある場合は、テーブルを日付で分割することを検討する必要があります。次に、データが利用可能になったら、テーブルに新しいパーティションを追加する必要があります。

于 2016-01-27T14:44:17.127 に答える
0

ハイブは複数のフォルダーを反復処理しません - したがって、上記のシナリオでは、これらの複数のフォルダーを反復処理するコマンド ライン引数を実行し、すべてのパーツ ファイルを cat (コンソールに出力) してから、目的の場所に配置しました。に)

hadoop fs -cat /user/data/CSV/*/*/*/*/part-* | hadoop fs -put - <destination folder>
于 2016-02-03T13:12:52.137 に答える
0

この行

     LOCATION '/user/data/CSV/2016/1/27/*/part-*';

正しく見えません。複数の場所からテーブルを作成できるとは思いません。これを確認するために、単一の場所でインポートしてみましたか?

使用している区切り文字が正しくない可能性もあります。CSV ファイルを使用してデータをインポートする場合は、「,」で区切ってみてください。

于 2016-02-03T17:17:42.227 に答える