0

次のような典型的なCREATE TABLEステートメントがあります。

CREATE EXTERNAL TABLE temp_url (
    MSISDN STRING,
    TIMESTAMP STRING,
    URL STRING,
    TIER1 STRING
)
row format delimited fields terminated by '\t' lines terminated by '\n'
LOCATION 's3://mybucket/input/project_blah/20140811/';

/20140811/ は、内部にギガバイトのデータがあるディレクトリです。

物をロードすることは問題ではありません。ただし、それに対して何かをクエリすると、Hive が停止し、多くのMapRedエラーが表示されます。

代わりに、 /20140811/ のデータの一部だけを読み込む方法がないかお尋ねしたいと思います。フォルダー内からいくつかのファイルを選択して別のフォルダーにダンプし、それを使用できることはわかっていますが、特にこの /20140811/ ディレクトリが 20 個ほどある場合は面倒です。

このようなものはありますか:

CREATE EXTERNAL TABLE temp_url (
    MSISDN STRING,
    TIMESTAMP STRING,
    URL STRING,
    TIER1 STRING
)
row format delimited fields terminated by '\t' lines terminated by '\n'
LOCATION 's3://mybucket/input/project_blah/Half_of_20140811/';

ハイブ以外の回答も受け付けています。s3cmd/20140811/ 内の特定の量のデータを /20140811_halved/ などにダンプする方法がおそらくあるでしょう。

ありがとう。

4

2 に答える 2

0

回避策として次のことをお勧めします。

  1. 同じ構造の一時テーブルを作成します。(like を使用)
  2. INSERT IN NEW_TABLE select * from OLD_TABLE limit 1000;

データを除外してロードするには、フィルター条件をいくつでも追加します。

これがお役に立てば幸いです。

于 2014-09-29T07:18:49.667 に答える