错误插入从orc表覆盖到avro表?

时间:2017-05-10 08:18:23

标签: hadoop hive hiveql avro overwrite

我对这类事情不熟悉,如果我没有给出足够明确的问题,请多问我一次

这些是在配置单元中运行的

这是avro表

CREATE EXTERNAL TABLE cm 
 PARTITIONED BY (
 `year` STRING
     )
   ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.avro.AvroSerDe'
  STORED as INPUTFORMAT 
 'org.apache.hadoop.hive.ql.io.avro.AvroContainerInputFormat'
 OUTPUTFORMAT 
 'org.apache.hadoop.hive.ql.io.avro.AvroContainerOutputFormat'
  LOCATION 's3://blabla/cm' 
 TBLPROPERTIES (
     'avro.schema.url'='s3://blabla/cm')

我正试图从orc表中插入那个avro表。 我正在努力实现这样的目标:

INSERT OVERWRITE TABLE cm (a,b) PARTITION (year=p_year)
SELECT a,b,p_year FROM orctable

2 个答案:

答案 0 :(得分:2)

使用DISTRIBUTE BY添加动态分区。使用DISTRIBUTE BY您的查询应该是这样的:

set hive.exec.dynamic.partition.mode=nonstrict;
insert into table table_name partition(year)
select a, b, p_year from orc_table DISTRIBUTE BY p_year;

此查询将生成MapReduce作业而不是仅Map作业。 SELECT子句将转换为映射到映射器的计划,输出将根据(年)对的值分配给reducer。 INSERT子句将转换为reducer中的计划,该计划将写入动态分区。

答案 1 :(得分:0)

我认为insert语句为:

INSERT OVERWRITE TABLE cm PARTITION (year)
SELECT a,b,p_year FROM orctable