在HDFS中使用ORC格式从文件创建Hive表

5
我想知道是否可以从存储在Hadoop文件系统(users.tbl)中的ORC格式文件创建Hive表。据说ORC格式优于文本格式,因此我想知道是否可以使用“stored as orc tblproperties”和“location”属性创建一个Hive表,使其从HDFS文件中读取数据,并以ORC格式存储。下面是示例代码:
create table if not exists users
(USERID BIGINT,
 NAME STRING,
 EMAIL STRING,
 CITY STRING)
STORED AS ORC TBLPROPERTIES ("orc.compress"="SNAPPY")
LOCATION '/tables/users/users.tbl';

替换为文本:

create table if not exists users
    (USERID BIGINT,
     NAME STRING,
     EMAIL STRING,
     CITY STRING)
     ROW FORMAT DELIMITED FIELDS TERMINATED BY '|' STORED AS TEXTFILE 
     LOCATION '/tables/users/users.tbl';
4个回答

2

1. 在Hive中创建一张表。

 create table MyDB.TEST (
 Col1 String,
 Col2 String,
 Col3 String,
 Col4 String)
 STORED AS INPUTFORMAT
   'org.apache.hadoop.hive.ql.io.orc.OrcInputFormat'
 OUTPUTFORMAT
    'org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat';

2. 将数据加载到表中。

 LOAD DATA INPATH '/hdfs/dir/folder/to/orc/files/' INTO TABLE MyDB.TEST;

2

您不能只用一步完成此操作。创建表语句仅指定格式和位置,不处理数据。

我的建议是使用“STORED AS TEXTFILE”创建语句创建临时表,并使用ORC作为存储格式创建最终表(使用空位置)。

然后将所有行从临时“文本表”插入到“ORC表”中。

Insert [overwrite] table orcTable select col1, col2 from textTable;

插入覆盖会使用新数据替换表中的所有数据。如果您只想添加新数据,则将使用“插入表格...”

导入后,您可以删除临时的“文本表格”。


我认为Hive中没有时间表...创建一个外部表,并将文本文件所在的位置指定给它...从这个外部表中运行插入选择到ORC表...然后你就有了ORC表。 - anwaar_hell
它是临时的,因为它仅用于将数据插入到最终表中,之后很可能您会想要删除它。但我同意这不是像其他关系型数据库中那样在用户会话关闭时自动删除表的“临时”表。 - RojoSam

1

你可以在你的位置上创建表,然后使用msck repair table table_name命令,这样数据就可以加载到你的表中,准备进行查询。


当存在日期字段问题时,这个无法正常工作。 - Alfredo G Marquez

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接