我有一张这样的 hive table:
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更改为parquet,并将位置更改为包含parquet文件的其他hdfs目录。因此,我首先尝试更改格式:
alter table abtestmsg_orc1 set fileformat parquet;
但它抛出了一个例外:
失败:执行错误,返回代码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)
我想这个例外意味着当我更改文件格式时,hive不仅会更改表元数据,而且会尝试将所有数据格式从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.**
但我想实现的是将其定位到一个Parquet目录。
那么,我能做些什么来实现这个目标呢?
3条答案
按热度按时间cigdeys31#
您需要创建另一个表abtestmsg\u parquet,该表存储为parquet,并带有所需parquet文件的位置:
然后你可以用动态分区创建文件。跑步:
7jmck4yq2#
在我的情况下,如果我想将格式更改为orc,则更改文件格式的命令是:
"alert table myTableName set FILEFORMAT INPUTFORMAT 'org.apache.hadoop.hive.ql.io.orc.OrcInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat'" SERDE 'org.apache.hadoop.hive.ql.io.orc.OrcSerde';
也就是说,inputformat、outputformat和serde应该相应地传递。qybjjes13#
如何更新/删除配置单元分区?是一篇类似的文章,我发现为了改变文件格式
use <schema>
在运行alter table命令之前,即使表名包含架构。。。也就是说,这对spark.sql不起作用。但是如果你的模式是
myschema
,你能做到的这是可行的,但如果没有
use
命令。