2

HIVE には、1 つの tstamp フィールドを含むさまざまなフィールド (a 文字列、b 文字列、tstamp 文字列、c 文字列) を持つ既存のテーブル構造があります。

既存のテーブル (original_table) から新しい分割テーブル (table_partitioned) を作成する必要がありますが、この新しいテーブル構造は「tstamp」フィールドの日付部分に基づいて分割する必要があります。

これを解決するために、既存のテーブル構造に似た新しいテーブル スキーマを作成し、次のクエリを使用して「date_string」というパーティション列を追加しました:-

CREATE TABLE table_partitioned (a string, b string, tstamp string, c string) PARITITIONED BY (date_string string)

次に、次の挿入クエリを使用して「table_partitioned」にデータを挿入しようとしました:-

INSERT OVERWRITE TABLE table_partitioned PARTITION  (date_string) SELECT a,b,tstamp,c,to_date(tstamp) FROM original_table;

しかし、上記の Insert ステートメントは、次のようにあらゆる種類のエラーに遭遇します:-

Diagnostic Messages for this Task:
FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.MapRedTask
MapReduce Jobs Launched:
Job 0: Map: 35   Cumulative CPU: 985.41 sec   HDFS Read: 5011021574 HDFS Write: 2831773796 FAIL
Total MapReduce CPU Time Spent: 16 minutes 25 seconds 410 msec

以下のように Insert ステートメントに where 句を挿入して一部のデータのみをロードすると、一致する行のパーティションが作成されます。

INSERT OVERWRITE TABLE table_partitioned PARTITION  (date_string) SELECT a,b,tstamp,c,to_date(tstamp) FROM original_table WHERE tstamp='2013-07-23 00:02:00'

注:- 私は毎日約 2,00,000 のデータ エントリを持っています (例: 2013-07-23)。

すべてのデータを一度に挿入するにはどうすればよいですか?

4

0 に答える 0