hive创建临时表(hive创建临时表不允许)

本篇文章给大家谈谈hive创建临时表,以及hive创建临时表不允许对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

hive存储parquet表

parquet格式的表在生产环境中经常被使用到,具有列式存储和压缩等特点,我们怎么在hive中存储parquet格式的表呢。

这里使用oracle的emp表

加载本地数据到hive表

执行查询

发现报错

emp使用parquet格式存储,其中imputFormat和outputFormat都是parquet的相关的,也前册就是我的imputFormat是parquent的,但是你传过来的是text,我不认识

我们看一下emp的相关信息,可以看到这里的都是parquet的format的,这是导致这次错误的原因。

这就导致了我们需要每次都先把text文件转化为parquet的文件,然后parquent表进行加载才可以,下面介绍官方推荐的使用方法。

查看emp_tmp的表的信息,这里可以看到,默认的是TextImputFormat和TextOutputFormat的。

然后加载数据到emp_tmp,查看数据,是正常显示的

然后现在把之前的emp里面的数据给删除

然后把emp_tmp表里面的数据加载到emp

查询一下,数据滑谈正常显示,这个方式使用起来还行,就是每次都需要对临时表进行操作,还是比较麻烦的。

感觉这个问题是经常出现,为什么会这样呢。这个和hive的版本有一定的关系。

可以看出hive官方将inputformat和outputformat进行了整合,这样使信悔碰用起来也是比较方便的。

但是可能有人想,那我修改inputformat不就行了,下面我介绍一下,看是否可以

创建emp2表,是parquet的存储格式的

修改inputformat 和serde,这里inputFormat是TextInputFormat,SEDE使用的是LazySimpleSerDe,Outputformat任然是Parquet的,这里需要带上。

查看emp2表的信息,如下图表示修改成功

加载数据到emp2

查询数据,执行成功

到这里,修改inputformat和serde的方法也介绍完成了,我们以为成功了,但是上hdfs上一看,文件还是txt格式的,所以通过修改inputformat和serde的方法不行。

肯定有人想使用这个方法

这个方法我也尝试了,但是返回的值全都是null

  在仅仅使用hive的时候,如果想把txt文件里面的数据保存到parquet表里面的话,可以使用建立临时表的方法,这个方法也是比较好操作的。

  但是其实如果使用spark,flink等分布式计算引擎的话,是可以直接的读取txt数据保存到parquet表里面的,框架帮我们做了转化。这种方式也是我们在工作中经常使用的。

  上面也介绍了修改inputformat和ser的方式,秀给inputformat是可以让txt文件里面的数据被读进来的,如果同时还修改了serde为lazysimpleserde的话,这个是把数据保存为text格式的,已经完全和parquet没有关系了,保存的文件还是txt格式的。仅修改inputformat,但是使用的serde是parquet的,但是数据进出不一致,也是有问题的。

同一张表如何计算不同粒度的数据

在Hive中,会出现对同一个数据表进行不同粒度的汇总,这时可以有两种方案:

用多个sql,对不同粒度使用睁岁神不同的悉亏 group by 方法。

用1个雀袭sql,使用 grouping sets 方法一次性得到所有粒度的汇总。

以测试数据表 tmp_student 为例:

1、生成测试数据

在 hive 环境中创建临时表:

hive 建表方式及参数详解

   hive中有两种表:外部表和内部表(managed and external)。可以通过 desc formatted table_name 命令来查看表的信息,来辨别表是外部庆腊表还是内部表。 在hive默认创建到表是内部表,外部表创建需要加 EXTERNAL 命令,如: CREATE EXTERNAL table_name 。

   内部表的文件,元数据和统计信息等由hive进行管理,一般被存储在 hive.metastore.warehouse.dir 目录下,当表被删除或者分区被删除,相对应的数据和元数据就会被删除。一般用来当做临时表。

外部表与内部表相反,可以誉团滑指定location,可以不基于hive来操作外部表文件或拆。当表被删除或者分区被删除时对应的数据还会存在。只是hive删除了其元信息,表的数据文件依然存在于文件系统中。若是表被删除,可以重新建这个表,指定location到数据文件处,然后通过msck repair table table_name命令刷新数据的元信息到hive中,也就是恢复了数据。

   msck repair table 的详细用法就不讲了,可以参考 HIVE常用命令之MSCK REPAIR TABLE命令简述

[img]

hive 创建临时表和普通表的区别

临时表

Hive 0.14.0及以上

临时表只对当前行孙梁session有效,session退出后,表自动删除。

语法:

CREATE TEMPORARY TABLE ...

临时表限制:不支凯纯持分区档运字段和创建索引

关于hive创建临时表和hive创建临时表不允许的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

标签列表