我有一个这样的蜂巢表:
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'
alter table abtestmsg_orc1 set fileformat parquet;
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)
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.**
那么,我该怎么做才能达到这个目的呢?
您需要创建另一个表abtestmsg_parquet,该表存储为PARQUET,并具有所需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;
我有一些困难,以确保我利用已排序的数据在一个配置单元表。(使用ORC文件格式) 我知道我们可以通过在create DDL中声明子句来影响数据从配置单元表中读取的方式。 这意味着每次查询该表时,数据将通过在各个映射器之间分发,然后对其进行排序。 我的问题是: 我不希望数据被拆分为文件(桶),因为卷不是那么多,我会保留小文件。 但是,我确实想利用排序插入。 我真的需要在create DLL语句中使用吗
我已经从Map R集群复制了所有orc文件,并遵循了相同的文件夹结构 创建了位置为#1的orc格式表 然后执行此命令“msck REPAIR TABLE<>” 上面的步骤通过时没有出错,但当我查询分区时,作业失败,出现以下错误 有人能告诉我,我们可以直接从ORC文件创建配置单元ORC分区表吗? 我的存储是蔚蓝数据湖。
我正在尝试在ORC文件上创建外部配置单元表。 但当我试图在创建的表上执行select操作时,会出现以下错误: 有什么建议吗??
注意:我没有在该表上应用任何分区或桶,如果应用桶,我甚至无法查看存储为ORC Hive版本:1.2.1 Spark版本:1.4.1 Scala版本:2.10.6的数据
我的主要目标是创建一个存储为ORC的表。为此,我遵循了以下步骤 我创建了一个文件夹/user/hive/external,并在同一位置创建了两个表(table_txt和table_orc)。直到将数据加载到table_txt中,它才是好的。 2-当我查询table_txt时,为什么它没有给出任何数据?而在查询table_orc时,我会得到结果?