hive是基于Hadoop的一个数据仓库工具,用来进行数据提取、转化、加载,这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。hive数据仓库工具能将结构化的数据文件映射为一张数据库表,并提供SQL查询功能,能将SQL语句转变成MapReduce任务来执行。Hive的优点是学习成本低,可以通过类似SQL语句实现快速MapReduce统计,使MapReduce变得更加简单,而不必开发专门的MapReduce应用程序。hive十分适合对数据仓库进行统计分析。
楼主说的是Hive,不是HBase。从Oracle里面头导出数据为平面文件后,导入HDFS里面。Hive里面的表结构是要自己手工定的。
建表可以自己写个小程序实现,根据oracle字典表和hive的建表规则,每个地方使用hive的情景不同,建表也不同。数据装载可以用sqoop来实现。
你可以安装下SQOOP,注意这个跟HADOOP的版本要对应的,不然会出现一些问题。以下是我项目用到的例子,不过我有个更高级的方法,只需配到表就行了,就是写个JAVA程序,然后自动生成对应的脚本,再执行就可以了。转载,仅供参考。
hive的语法和sql语法大部分是是相同的,下面我们来挨个写出来:
1,简单介绍存储原理:
hive和hdfs交互,以及和本地linux交互,分为本地文件和hdfs文件,要说他们的区别,底层都是存在磁盘上,要说区别的话,hdfs分布式文件管理系统,有它独有的文件存储结构也即是能够和分布式文件进行交互的独有存储方式,Linux本地文件存储知识单纯的在Linux *** 作系统存储的文件,所以hive的作用就是和linux本地以及linux上hdfs文件两者进行交互,我可以把本地的文件上传到hive文件中,当然hive只是处理hdfs上文件的一个工具,但是hive也有自己独有的文件存储,表的结构信息,创建的表信息,都在hive文件夹中当然是存储在hdfs上的。
2,语法:
1,把本地的文件加载到hive创建的表中(比如:create table tb_user(id int ,name string ); )在hive中创建的是有结构的表,然后通过命令:load data local inpath ' 路径 ' into table 创建的表名;
2,加载hdfs上的文件到hive中:load data inpath 'hdfs上的路径' into table 创建的表
3,导出hive表到hdfs上:export table 表名 to 'hdfs路径' ;
4,把hdfs上的表导入到hive表中:import table (hive表 )from (hdfs上的表);(import table tb_kk from '/data/a')当导入的表不存在会自动创建这张表,用于备份,或者数据转移,表的字段名和导入的字段名一样。
5,通过查询hive表中的数据并把查询的数据导出到本地:insert overwrite local directory '本地路径' select from student;
6通过查询hive表中的数据并把查询的数据导出到hdfs上:insert overwrite directory 'hdfs上的路径'
select from student;
7, 把查询的结果插入到 当前的hive表中 : insert overwrite table student partition(month='201708') select id, name from student where month='201709';
8,创建表并加载查询到的数据:create table if not exists tb_text as select from tb_text;(as 关键字 同样)
9,创建表时通过Location指定加载数据路径:create table tb_text (id int , name string ) row format delimited fields terminated by ‘,’ location '/hdfs上的目录',(记住是目录)。
10,创建分区表,分区表就是能够把不同的数据分开来存放,在查询的时候只需要查询指定的分区就行,这样子能够加快查询效率:create table tb_text (id int ,name string ) partitioned by (month string) (//这里我用month来作为分区条件,分区字段不能是表中已经存在的字段,可以将分区字段看成表的伪列,不参与真实字段的 ) row format delimited fields terminated by ',' ;看一下加载数据到分区表的列子,更好地理解一下,load data local inpath '/opt/module/datas/depttxt' into table defaultdept_partition partition(month='201709');//最后就是给伪列字段赋予分区值,也就是分区的文件名。
11,查看表结构,这个需要了解清楚:desc tb_text 查看基本表信息,desc formatted tb_text ,查看详细信息。
12,当数据库存在数据强制删除时可以用:drop database db_hive cascade;
13,当数据库不存在数据:drop database db_hive;
14,默认创建的表为管理表,也称之为内部表,数据和表结构是在一起的,也就是说,当我删除表的时候,底层数据也会跟着一起删除,设计成这样要求一张表代表一份数据,保证数据的安全性。
15,外部表为只存储表的元数据和结构信息,存储的是表的路径,删除外部表不会删除内部数据,只会把表的元数据信息删除了,不影响数据本身,通常用作共享数据,设计外部表的语法为:create external table tb_text(id int ,name string);
16,创建表的时候复制表结构:create table tb_text like tb_text01;
3,外部表和内部表的转化:
1,修改内部表为外部表:alter table tb_text set tblproperties('EXTERNAL'='TRUE');
2,修改外部表为内部表:alter table tb_text set tblproperties('EXTERNAL'='FALSE'); -- 要求KV的大小写,('EXTERNAL'='TRUE')和('EXTERNAL'='FALSE')为固定写法,区分大小写!
以上就是关于Linux里面hive是个数据库吗全部的内容,包括:Linux里面hive是个数据库吗、hive数据库怎么建表和数据装载、hive之核心知识点等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)