我在 HIVE 中有现有的表结构,它具有各种字段,例如(a 字符串、b 字符串、tstamp 字符串、c 字符串),包括一个 tstamp 字段。
我需要从现有表(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;
但是上面的插入语句会遇到如下各种错误:-
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 年 7 月 23 日,而 original_table 有 2 年健全的数据。
我怎样才能一次插入所有数据,我是否遗漏了什么?