hive存储格式
A. hive 里的时间是什么数据类型
HIVE里有两种时间类型:DATE类和TIMESTAMP类
DATE类保存形如‘2017-05-05 00:00:00.000’这种数据, TIMESTAMP保存的是一个10位的整数, 即UNIX系统下的时间戳记法。可以通过from_unixtime()和unix_timestamp()函数互相转换。
当然你也可以直接存成string格式。
B. hive的存储格式parquet和ocfile的区别
你输入sqoop import 的目录在哪里?如果在/usr/sqoop下输入的命令,那么在/usr/sqoop下输入hive登入,然后show tables查看。
你输入sqoop import 的目录在哪里?如果在/usr/sqoop下输入的命令,那么在/usr/sqoop下输入hive登入,然后show tables查看。
hive 0.13以后自带支持。
C. hive的Hive定义
Hive是建立在 Hadoop 上的数据仓库基础构架。它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储、查询和分析存储在 Hadoop 中的大规模数据的机制。Hive 定义了简单的类 sql 查询语言,称为 HQL,它允许熟悉 SQL 的用户查询数据。同时,这个语言也允许熟悉 MapRece 开发者的开发自定义的 mapper 和 recer 来处理内建的 mapper 和 recer 无法完成的复杂的分析工作。
Hive 没有专门的数据格式。 Hive 可以很好的工作在 Thrift 之上,控制分隔符,也允许用户指定数据格式。
D. 怎么看spark sql表的存储格式是text还是parquet
标签:hive和sparksql计算引擎在text导入parquet格式的hive存储引擎分片数量机制
表的hive导入:
create
table
XXXXXXX201512
(N多字段构成)STORED
AS
PARQUETFILE;
insert
into
XXXXXXX201512
select
*
from
XXXXXXX20151231;
E. 结构体类型 怎么调用 hive
写在前边的话:
同样是在做豆瓣电影数据分析的小课题的时候遇到的一个问题:hive表中的电影类型存储格式为array,那么我如何针对每一个类型做统计呢?
本来是想在基于豆瓣电影数据进行相关的数据分析项目 中进行相关解释说明的,仔细想了下,刚好拿出来,对hive的三个复杂数据类型做一个总结性的学习
关于Hive的一些其他数据类型使用参考:Hive的数据类型解析和表的操作实例
1:Array
顾名思义就是数组,使用方式 array<>
1):创建表
拿电影数据为例,数据的维度包括
创建movie_message表:
[html] view plain
create table movie_message(
id int,
title string,
yan array<string>,
bianju array<string>,
leixing array<string>,
zhuyan array<string>,
year int,
month int,
shichang int,
disnum int,
score float
)
comment "this table about movie's message"
row format delimited fields terminated by ","
collection items terminated by '/';
加载数据(可以从本地加载,也可以从hdfs装载,当然也可以从别的表中查询结果进行转载),这里从本地装载
[html] view plain
load data local inpath "/home/master/mycode/new_movies_load.csv" into table movie_message;
2):查看array的元素
用下标进行寻找,类似于其他编程语言中的数组访问
[html] view plain
hive> select leixing[0] from movie_message limit 5;
OK
剧情
剧情
剧情
纪录片
喜剧
Time taken: 1.116 seconds, Fetched: 5 row(s)
3):内嵌查询及统计
这里就是 写在前边的话中提到的问题,这里使用explode和lateral view关键字,应该这样写
[html] view plain
select lx,count(*) from movie_message lateral view explode(leixing) leixing as lx group by lx;
结果为:
[html] view plain
传记 194
儿童 18
冒险 242
剧情 1490
动作 252
动画 106
历史 208
古装 9
同性 84
喜剧 618
奇幻 178
家庭 130
恐怖 152
悬念 2
悬疑 386
情色 19
惊悚 435
戏曲 11
战争 144
歌舞 40
武侠 1
灾难 11
爱情 404
犯罪 442
真人秀 6
短片 165
科幻 165
纪录片 620
脱口秀 10
舞台艺术 8
西部 6
运动 29
音乐 123
鬼怪 1
黑色电影 4
F. Hive基础之Hive是什么以及Hive使用场景
Hive是什么
1)Hive 是建立在Hadoop (HDFS/MR)上的用于管理和查询结果化/非结构化的数据仓库;
2)一种可以存储、查询和分析存储在Hadoop 中的大规模数据的机制;
3)Hive 定义了简单的类SQL 查询语言,称为HQL,它允许熟悉SQL 的用户查询数据;
4)允许用Java开发自定义的函数UDF来处理内置无法完成的复杂的分析工作;
5)Hive没有专门的数据格式(分隔符等可以自己灵活的设定);
ETL的流程(Extraction-Transformate-Loading):将关系型数据库的数据抽取到HDFS上,hive作为数据仓库,经过hive的计算分析后,将结果再导入到关系型数据库的过程。
Hive是构建在Hadoop之上的数据仓库
1)使用HQL作为查询接口;
2)使用HDFS作为存储;
3)使用MapRece作为计算;
Hive应用场景
数据源:
1)文件数据,如中国移动某设备每天产生大量固定格式的文件;
2)数据库
以上两种不同的数据源有个共同点:要使用hive,那么必须要将数据放到hive中;通常采用如下两种方式:
1)文件数据:load到hive
2)数据库: sqoop到hive
数据的离线处理;
hive的执行延迟比较高,因为hive常用于数据分析的,对实时性要求不高;
hive优势在于处理大数据,对于处理小数据没有优势,因为hive的执行延迟比较高。
处理数据存放在hive表中,那么前台系统怎么去访问hive的数据呢?
先将hive的处理结果数据转移到关系型数据库中才可以,sqoop就是执行导入导出的操作
G. hive分桶表的储存格式是什么固定的还是可以随意指定
对于每一个表或者是分区,Hive可以进一步组织成桶,也就是说桶是更为细粒度的数据范围划分。Hive是针对某一列进行分桶。Hive采用对列值哈希,然后除以桶的个数求余的方式决定该条记录存放在哪个桶中。分桶的好处是可以获得更高的查询处理效率。使取样更高效
hive表数据是在hdfs中储存的并没有固定的储存格式,hive只保存管理表元数据。
桶就是将数据表由一个文件存储分为多个文件存储
分桶语法:
create table t_buck(id string,name string)
clustered by (id) into 4 buckets;
指定了根据id分成4个桶,最好的导入数据方式是insert into table.
要开启模式开关
set hive.enforce.bucketing = true;
set maprece.job.reces=4;
查询时cluster by指定的字段就是partition时分区的key
H. hive的数据存储
首先,Hive 没有专门的数据存储格式,也没有为数据建立索引,用户可以非常自由的组织 Hive 中的表,只需要在创建表的时候告诉 Hive 数据中的列分隔符和行分隔符,Hive 就可以解析数据。
其次,Hive 中所有的数据都存储在 HDFS 中,Hive 中包含以下数据模型:表(Table),外部表(External Table),分区(Partition),桶(Bucket)。
Hive 中的 Table 和数据库中的 Table 在概念上是类似的,每一个 Table 在 Hive 中都有一个相应的目录存储数据。例如,一个表 pvs,它在 HDFS 中的路径为:/wh/pvs,其中,wh 是在 hive-site.xml 中由 ${hive.metastore.warehouse.dir} 指定的数据仓库的目录,所有的 Table 数据(不包括 External Table)都保存在这个目录中。
Partition 对应于数据库中的 Partition 列的密集索引,但是 Hive 中 Partition 的组织方式和数据库中的很不相同。在 Hive 中,表中的一个 Partition 对应于表下的一个目录,所有的 Partition 的数据都存储在对应的目录中。例如:pvs 表中包含 ds 和 city 两个 Partition,则对应于 ds = 20090801, ctry = US 的 HDFS 子目录为:/wh/pvs/ds=20090801/ctry=US;对应于 ds = 20090801, ctry = CA 的 HDFS 子目录为;/wh/pvs/ds=20090801/ctry=CA
Buckets 对指定列计算 hash,根据 hash 值切分数据,目的是为了并行,每一个 Bucket 对应一个文件。将 user 列分散至 32 个 bucket,首先对 user 列的值计算 hash,对应 hash 值为 0 的 HDFS 目录为:/wh/pvs/ds=20090801/ctry=US/part-00000;hash 值为 20 的 HDFS 目录为:/wh/pvs/ds=20090801/ctry=US/part-00020
External Table 指向已经在 HDFS 中存在的数据,可以创建 Partition。它和 Table 在元数据的组织上是相同的,而实际数据的存储则有较大的差异。
Table 的创建过程和数据加载过程(这两个过程可以在同一个语句中完成),在加载数据的过程中,实际数据会被移动到数据仓库目录中;之后对数据对访问将会直接在数据仓库目录中完成。删除表时,表中的数据和元数据将会被同时删除。 External Table 只有一个过程,加载数据和创建表同时完成(CREATE EXTERNAL TABLE ……LOCATION),实际数据是存储在 LOCATION 后面指定的 HDFS 路径中,并不会移动到数据仓库目录中。当删除一个 External Table 时,仅删除元数据,表中的数据不会真正被删除。
I. 怎样修改hive存储格式为snappy格式
你输入sqoop
import
的目录在哪里?如果在/usr/sqoop下输入的命令,那么在/usr/sqoop下输入hive登入,然后show
tables查看。
你输入sqoop
import
的目录在哪里?如果在/usr/sqoop下输入的命令,那么在/usr/sqoop下输入hive登入,然后show
tables查看。
hive
0.13以后自带支持。