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)。
すべてのデータを一度に挿入するにはどうすればよいですか?