大数据Hive学习

Hive的功能

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

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

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

 

HiveHbase区别:

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 dfsappendToFile - /user/…test   将查询的结果添加到hdfs文件中

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大宇进阶之路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值