从非分区 table 创建分区配置单元 table
Creating a partitioned hive table from a non partitioned table
我有一个 Hive table,它是通过连接来自多个 table 的数据创建的。此数据驻留在一个包含多个文件(“0001_1”、“0001_2”、……等等)的文件夹中。我需要根据此 table 中名为 pt_dt
的日期字段创建一个分区 table(通过更改此 table 或创建一个新字段)。有办法吗?
我试过创建一个新的 table 并插入其中(如下),但没有用
create external table table2 (acct_id bigint, eval_dt string)
partitioned by (pt_dt string);
insert into table2
partition (pt_dt)
select acct_id, eval_dt, pt_dt
from jmx948_variable_summary;
这会引发错误
"FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask
MapReduce Jobs Launched:
Stage-Stage-1: Map: 189 Cumulative CPU: 401.68 sec HDFS Read: 0 HDFS Write: 0 FAIL
Total MapReduce CPU Time Spent: 6 minutes 41 seconds 680 msec"
经过一些尝试和错误后能够弄清楚。
在 Hive 中启用动态分区:
SET hive.exec.dynamic.partition = true;
SET hive.exec.dynamic.partition.mode = nonstrict;
为分区 table 创建模式:
CREATE TABLE table1 (id STRING, info STRING)
PARTITIONED BY ( tdate STRING);
插入分区 table :
FROM table2 t2
INSERT OVERWRITE TABLE table1 PARTITION(tdate)
SELECT t2.id, t2.info, t2.tdate
DISTRIBUTE BY tdate;
在我正在使用的版本中(Hive 0.14.0.2.2.4.2-2)
INSERT INTO TABLE table1 PARTITION(tdate) SELECT t2.id, t2.info, t2.tdate
来自源table select 需要被最后分区的列,在上面的例子中,date被select编辑为[=28=中的最后一列].同样,如果需要 table 被列 "info" 分割,那么
INSERT INTO TABLE table1 PARTITION(info) SELECT t2.id, , t2.tdate, t2.info
如果要创建具有多个分区的 table,select 查询需要按照该顺序进行。如果你想把上面的 table 和 "date" 分开,然后 "info"
INSERT INTO TABLE table1 PARTITION(date, info) SELECT t2.id, , t2.tdate, t2.info
加上"info",然后"date"
INSERT INTO TABLE table1 PARTITION(info, date) SELECT t2.id, , t2.info, t2.tdate
我有一个 Hive table,它是通过连接来自多个 table 的数据创建的。此数据驻留在一个包含多个文件(“0001_1”、“0001_2”、……等等)的文件夹中。我需要根据此 table 中名为 pt_dt
的日期字段创建一个分区 table(通过更改此 table 或创建一个新字段)。有办法吗?
我试过创建一个新的 table 并插入其中(如下),但没有用
create external table table2 (acct_id bigint, eval_dt string)
partitioned by (pt_dt string);
insert into table2
partition (pt_dt)
select acct_id, eval_dt, pt_dt
from jmx948_variable_summary;
这会引发错误
"FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask MapReduce Jobs Launched: Stage-Stage-1: Map: 189 Cumulative CPU: 401.68 sec HDFS Read: 0 HDFS Write: 0 FAIL Total MapReduce CPU Time Spent: 6 minutes 41 seconds 680 msec"
经过一些尝试和错误后能够弄清楚。
在 Hive 中启用动态分区:
SET hive.exec.dynamic.partition = true;
SET hive.exec.dynamic.partition.mode = nonstrict;
为分区 table 创建模式:
CREATE TABLE table1 (id STRING, info STRING)
PARTITIONED BY ( tdate STRING);
插入分区 table :
FROM table2 t2
INSERT OVERWRITE TABLE table1 PARTITION(tdate)
SELECT t2.id, t2.info, t2.tdate
DISTRIBUTE BY tdate;
在我正在使用的版本中(Hive 0.14.0.2.2.4.2-2)
INSERT INTO TABLE table1 PARTITION(tdate) SELECT t2.id, t2.info, t2.tdate
来自源table select 需要被最后分区的列,在上面的例子中,date被select编辑为[=28=中的最后一列].同样,如果需要 table 被列 "info" 分割,那么
INSERT INTO TABLE table1 PARTITION(info) SELECT t2.id, , t2.tdate, t2.info
如果要创建具有多个分区的 table,select 查询需要按照该顺序进行。如果你想把上面的 table 和 "date" 分开,然后 "info"
INSERT INTO TABLE table1 PARTITION(date, info) SELECT t2.id, , t2.tdate, t2.info
加上"info",然后"date"
INSERT INTO TABLE table1 PARTITION(info, date) SELECT t2.id, , t2.info, t2.tdate