hive在创建表时四种存储格式

        hive在创建表时默认存储格式是textfile,或者显示自定义的stored as textfile.很多人知道hive常用的存储格式有三种,textfile,sequencefile,rcfile.但是却说不清楚这三种格式的干什么用的,本质有有什么区别?适合什么时候用?

         为什么hive会有多种存储格式?因为hive是文本批处理系统,所以就存在一个往hive中导入数据的问题,首先数据的存储格式有多种,比如数据源是二进制格式, 普通文本格式等等,而hive强大之处不要求数据转换成特定的格式,而是利用hadoop本身InputFormat API来从不同的数据源读取数据,同样地使用OutputFormat API将数据写成不同的格式。所以对于不同的数据源,或者写出不同的格式就需要不同的对应的InputFormat和Outputformat类的实现。

        以stored as textfile(其实这就是下面stored as inputformat -outputformat的缩减写法)为例,其在底层java API中表现是输入InputFormat格式:TextInputFormat以及输出OutputFormat格式:HiveIgnoreKeyTextOutputFormat.这里InputFormat中定义了如何对数据源文本进行读取划分,以及如何将切片分割成记录存入表中。而Outputformat定义了如何将这些切片写回到文件里或者直接在控制台输出。


   
   
  1. STORED AS INPUTFORMAT
  2. 'org.apache.hadoop.mapred.TextInputFormat'
  3. OUTPUTFORMAT
  4. 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'

      实际上hive使用一个TextInputFormat对象将输入流分割成记录,然后使用一个HiveIgnoreKeyTextOutputFormat对象来将记录格式化为输出流(比如查询的结果),再使用Serde在读数据时将记录解析成列。在写数据时将列编码成记录。所以stored as ''只是决定了行级别(记录级别 )的存储格式,而实际将记录解析成列依靠的则是Serde对象,比如hive默认的ROW FORMAT SERDE   'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'  。或者用户自定义的Serde格式。

   textfile,sequencefile和rcfile的三种存储格式的本质和区别

 文件存储编码格式建表时如何指定优点弊端
textfile     
文件存储就是正常的文本格式,将表中的数据在hdfs上 以文本的格式存储
,下载后可以直接查看,也可以使用cat命令查看
1.无需指定,默认就是
2.显示指定stored as textfile
3.显示指定 
STORED AS INPUTFORMAT 
   'org.apache.hadoop.mapred.TextInputFormat' 
  OUTPUTFORMAT           'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
1. 行存储使用textfile存储文件默认每一行就是一条记录,
2.可以使用任意的分隔符进行分割。
3.但无压缩,所以造成存储空间大。可结合Gzip、Bzip2、Snappy等使用(系统自动检查,执行查询时自动解压),但使用这种方式,hive不会对数据进行切分,从而无法对数据进行并行操作。
sequencefile   
在hdfs上将表中的数据以二进制格式编码,并且将数据压缩了,下载数据
以后是二进制格式,不可以直接查看,无法可视化。
1.stored as sequecefile
2.或者显示指定:
STORED AS INPUTFORMAT 
  'org.apache.hadoop.mapred.SequenceFileInputFormat' 
OUTPUTFORMAT 
 'org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat'
1.sequencefile存储格有压缩,存储空间小,有利于优化磁盘和I/O性能
2.同时支持文件切割分片,提供了三种压缩方式:none,record,block(块级别压缩效率跟高).默认是record(记录)
3.基于行存储
rcfile   在hdfs上将表中的数据以二进制格式编码,并且支持压缩。下载后的数据不可以直接可视化。
1.stored as rcfile 
2.或者显示指定:
STORED AS INPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.RCFileInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.RCFileOutputFormat'
1.行列混合的存储格式,基于列存储。
2.因为基于列存储,列值重复多,所以压缩效率高。
3.磁盘存储空间小,io小。
   虽然hive中常见的有3种存储格式,但是这三种存储格式的数据可以相互转化,而且不需要对应的转换工具。具体如何转换,参考下面博客。
  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 是的,创建表需要指定文件格式。在Hive中,可以通过使用“STORED AS”子句来指定表的文件格式,例如: CREATE TABLE my_table ( col1 INT, col2 STRING ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS TEXTFILE; 上述示例创建了一个名为“my_table”的表,并将其存储为文本文件格式。在创建表,还可以使用其他文件格式,如ORC、Parquet、Avro等。 ### 回答2: 在Hive创建表,可以选择是否指定文件格式Hive支持多种文件格式,如文本格式(TextFile)、序列文件格式(SequenceFile)、行列式存储文件格式(RCFile)等。默认情况下,如果不指定文件格式,则使用文本格式作为默认格式。 指定文件格式有一些好处。首先,不同的文件格式适用于不同的场景和需求。例如,文本格式适用于简单的文本数据,而序列文件格式适用于需要高效查询和压缩的大规模数据集。因此,在创建表选择合适的文件格式可以提高查询性能和节省存储空间。 其次,指定文件格式还可以方便数据的导入和导出。如果数据源是非文本格式,如压缩文件或其他数据库中的表,使用相应的文件格式可以直接将数据导入到Hive中。同,指定文件格式也可以灵活地将Hive表的数据导出到其他系统或平台中。 总而言之,在Hive创建表可以选择是否指定文件格式,根据实际需求选择适合的格式可以提高查询性能、节省存储空间,并方便数据的导入和导出。 ### 回答3: 在Hive创建表,可以选择是否指定文件格式。如果没有明确指定文件格式Hive会根据默认的设置来处理数据文件。 Hive默认情况下支持多种文件格式,如文本格式(TextFile)、序列文件格式(SequenceFile)、Parquet格式、ORC格式等。因此,在创建表,可以根据实际需求选择合适的文件格式。 如果想要指定文件格式,可以使用“STORED AS”关键字,并在后面加上所需的文件格式。例如,可以使用以下语句在Hive中创建一个存储为Parquet格式的表: CREATE TABLE table_name ( column1 data_type, column2 data_type ) STORED AS PARQUET; 需要注意的是,指定文件格式不仅影响数据的存储方式,还会影响到数据的查询性能。不同的文件格式在数据的压缩、存储效率和查询速度上有所差异。因此,在选择文件格式,需要考虑到数据的读写需求以及系统的性能要求。 总之,在Hive创建表,可以选择是否指定文件格式,可以根据实际需求和性能要求来决定是否需要指定文件格式

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值