从配置单元中现有的非分区表创建带有动态分区的新表

tpgth1q7  于 2021-06-03  发布在  Hadoop
关注(0)|答案(0)|浏览(282)

我在hive中有现有的表结构,它有各种字段,例如(a字符串、b字符串、tstamp字符串、c字符串),包括一个tstamp字段。
我需要从现有表(原始表)创建一个新的分区表(表\u partitioned),但是现在这个新表结构应该基于“tstamp”字段的日期部分进行分区。
为了解决这个问题,我创建了一个与现有表结构类似的新表架构,并使用以下查询添加了一个分区列,即“date\u string”:-

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

然后,我尝试使用以下插入查询将数据插入到“table\u 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子句(如下面所示)来只加载一些数据,那么它就可以工作了,它会创建用于匹配的分区rows:-

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'

note:- i 每天有大约200000条数据输入,例如2013年7月23日,原始的表格有两年的数据。
我怎样才能一次插入所有的数据,我是否遗漏了什么?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题