使用Hive中现有的非分区表创建动态分区的新表

时间:2013-07-23 20:14:05

标签: hadoop hive hadoop-partitioning

我在HIVE中存在表结构,其具有各种字段,例如(字符串,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;

但是上面的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,而original_table有2年的声音数据。

如何插入所有数据,我是否遗漏了什么?

0 个答案:

没有答案