大数据Hive学习

Malina ·
更新时间:2024-09-21
· 681 次阅读

Hive的功能

        使用SQL的方式读取分布式存储系统上的大量数据。

        数据库:在线事务处理,并发性、事务性和低延迟性。

        数据仓库:在线分析处理,有高的延迟。

 

Hive与Hbase区别: 1.Hive是数据仓库工具,用于分析大数据;hbase是数据库工具,用于存储NoSQL的数据库。 2.Hive因为执行HQL语句,基于MR处理数据时间,耗时长;hbase可实时查询数据

 

    Hive的数据存储于HDFS上,结构化信息存储在MySQL表里。(hive的数据库和表是HDFS的目录,数据是HDSF文件)

    进入hive中可以通过dfs -XX 的命令直接访问hdfs

 

•HiveServer2

    使用hiveserver2服务器,实现客户端以jdbc协议远程访问hive。(客户端不需要安装hive)

•常用命令

        desc database XXX/ 某表;

        create table test01 as select * from test;  复制表数据同时创建内部表

        create external table ext_test like test;  复制test的表结构

        insert into ext_test select * from test;  复制表数据到外部表

        alter table test add columns (id , int);  添加表中的列

        desc formatted test;  查询表的详细信息

•内/外部表

    内部表删除表时,数据一同删除

    外部表删除表时,只删除表结构,恢复MySQL中表结构时,可正常使用表

•分区表(加快数据查询效率)

    在表的目录层级下创建子目录(分区目录)

    alter table par_test add partition (year=2019,month=8);

 

•桶表(加快数据查询效率)

    每个桶是表目录里的一个文件,通过hash进行分桶,分桶键只能有一个

    桶表只能通过普通表进行数据导入

hive导入/导出 加载本地文件至hive表中

    注意事项:

1.hive中设置table的字符分隔符一定要和本地文件中的分隔符对应,不然表中显示NULL 2.本地数据导入,相当于复制操作,导入后本地数据依然存在;从HDFS导入至hive后,相当于剪切操作,导入后hdfs文件不存在

Load data local inpath ‘/home/test01/hello.txt’into table doc_count;      本地文件

Load data inpath ‘/home/test01/hello.txt’into table doc_count;      HDFS文件

导出hive数据至本地

          insert overwrite local directory ‘/home/test01/out’ row format delimited fields terminated by ‘,’ select * from test;

•View视图,虚表

    create view v_test as select name,age from test;  将select name,age from test的操作定义为v_test

    alter view v_test as select XXX;  修改操作

导入/导出表

    export table test to ‘ /data/user/hive/warehouse/test.db/export’;

    import from ‘ /data/user/hive/warehouse/test.db/export’;(如果同名表已经存在即报错)

    import table test111 from ‘ /data/user/hive/warehouse/test.db/export’;(如果同名表已经存在可创建新表)

    import external table test111 from ‘ /data/user/hive/warehouse/test.db/export’;(导入至新创建的新外部表)

表的连接

表的连接同MySQL,有左连接、右连接和全连接。

查询

    去重查询:select distinct name from test;

    嵌套子查询:select a.* from (select name from test) a where a.name like ‘w%’;先查询test中名字列,再从名字列查询含w的名字

    注意:子查询必须要加别名,as xx,其中as可以省略

Hive执行脚本

    单句命令:hive –e “select * from test.test”

    脚本命令:hive –f  /home/test01/hive_test.sql

    hive –e “select * from test.test” > test1.txt   将查询到的结果覆盖到test1.txt文件中

    hive –e “select * from test.test” | hdfs dfs –appendToFile - /user/…test   将查询的结果添加到hdfs文件中

 


作者:wjzholmes



hive

需要 登录 后方可回复, 如果你还没有账号请 注册新账号