2017-02-08 18 views
0

У меня есть улая таблица, как это:Улей, изменение таблицы fileformat от orc до паркета не поддерживается?

CREATE TABLE `abtestmsg_orc`(
    `eventname` string COMMENT 'AB测试方案上报事件:ABTest', 
    `eventtime` string COMMENT '事件上报时间', 
    `sessionid` string COMMENT 'Session标识', 
    `appkey` string COMMENT 'app标识', 
    `deviceid` string COMMENT 'device标识', 
    `content` string COMMENT 'AB测试方案的内容,格式是一个 json 字符串', 
    `item` array<struct<key:string,value:string>> COMMENT '扩展字段') 
PARTITIONED BY ( 
    `dt` string COMMENT '??') 
ROW FORMAT SERDE 
    'org.apache.hadoop.hive.ql.io.orc.OrcSerde' 
STORED AS INPUTFORMAT 
    'org.apache.hadoop.hive.ql.io.orc.OrcInputFormat' 
OUTPUTFORMAT 
    'org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat' 
LOCATION 
    'hdfs://hdfsmaster/hive/connector_transfer/abtestmsg_orc' 

Теперь я хочу, чтобы изменить формат файл из ORC для паркета и изменить расположение в каталог другого HDFS, который содержит паркет files.So Я сначала я стараюсь изменить формат:

alter table abtestmsg_orc1 set fileformat parquet; 

но Питти, что он бросает исключение:

FAILED: ошибка выполнения, код возврата 1 из

org.apache.hadoop.hive.ql.exec.DDLTask. Changing file format (from ORC) is not supported for table connector_transfer.abtestmsg_orc1 
Error: Error while processing statement: FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. Changing file format (from ORC) is not supported for table connector_transfer.abtestmsg_orc1 (state=08S01,code=1) 

Я думаю, что это исключение означает, что когда я изменяю fileformat, не только меняет метаданные таблицы, но и пытается изменить весь формат данных с orc на паркет. Но из официального документа говорится:

ALTER TABLE table_name [PARTITION partition_spec] SET FILEFORMAT file_format; 

**This statement changes the table's (or partition's) file format. For available file_format options, see the section above on CREATE TABLE. The operation only changes the table metadata. Any conversion of existing data must be done outside of Hive.** 

Но я хочу достичь своего местоположения в каталоге паркета.

Итак, что я могу сделать, чтобы добиться этого?

ответ

1

Вам нужно создать еще одну таблицу abtestmsg_parquet, которая хранится в ПАРКЕТЕ и с местом для нужных паркетных файлов:

CREATE TABLE abtestmsg_parquet(
    eventname string COMMENT 'AB测试方案上报事件:ABTest', 
    eventtime string COMMENT '事件上报时间', 
    sessionid string COMMENT 'Session标识', 
    appkey string COMMENT 'app标识', 
    deviceid string COMMENT 'device标识', 
    content string COMMENT 'AB测试方案的内容,格式是一个 json 字符串', 
    item array<struct<key:string,value:string>> COMMENT '扩展字段') 
PARTITIONED BY ( 
    dt string COMMENT '??') 
STORED AS PARQUET 
LOCATION 
    'hdfs://hdfsmaster/hive/connector_transfer/abtestmsg_parquet/' 

Тогда и может создавать файлы с динамическим разбиением. пробег:

set hive.exec.dynamic.partition=true; 
set hive.exec.dynamic.partition.mode=nonstrict; 

INSERT INTO TABLE abtestmsg_parquet PARTITION(dt) 

SELECT eventname, eventtime, sessionid, appkey, deviceid, content, item, dt 
FROM abtestmsg_orc;