2017-02-08 3 views
0

私はこのようなハイブのテーブルを持っている:ハイブ、orcからparquetへのテーブルファイル形式の変更はサポートされていませんか?

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' 

今、私は私がしようとfiles.So私の最初の寄木細工が含まれている他のHDFSディレクトリに場所を寄木細工して変更するORCからファイル形式を変更したいです書式を変更するには:

alter table abtestmsg_orc1 set fileformat parquet; 

が、それはそれが例外をスローすることをピティーです:

はFAILED:実行エラー、

からの戻りコード1を0
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からparquetに変更しようとしていることを意味しています。

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

あなたはPARQUET ASと、ご希望の寄木細工のファイルの場所に保存されている別のテーブルのabtestmsg_parquet作成する必要があります。そして、uは、動的パーティショニングでファイルを作成することができます

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; 
関連する問題