- データベースを見る
$hive> show databases;
- データベースを作成する
$hive> create database db1;
- データベースを選択します
$hive> use db1;
- データベースを削除する
$hive> drop database db1;
1. 通过查看hdfs中的目录结构,确定了hive中的数据库就是hdfs中的一个文件夹(dbname.db)
$> hdfs dfs -lsr /
2. 在元数据库中(mysql), 存储了数据库的数据结构(dbs)。
$mysql> use hive ;
$mysql> select * from dbs;
- ハイブのコマンドラインをクリアする
$hive> !clear;
6.表を表示します
$hive> show tables;
- ルックアップテーブル
$hive> select * from employee;(简单查询可以不走mr)
- テーブルを作成する
内部表
外部表
分区表
桶表
$hive> create table db1.employee(id int,name string,age int);(没有数据加入))
$hive> create table db1.employee(id int,name string,age int)
row format delimited
fields terminated by '\t'
stored as textfile ;
(创建的是内部表)
注意: 一定要使用数据库名.表名创建
$mysql> select * from tbls;查看属于那个数据库
- テーブルを変更します(非推奨)
$hive> alter table db1.employee add column (sid string);
- テーブルを削除する
$hive> drop table db1.employee;
- この操作を行うには、データ(新しいデータ)を追加します。ヤーンを開始する必要があります。
$hive> insert into db1.employee(id,name,age) values(1,'xxx',18); (不推荐, 会将语句转换为mr执行,效率低)(太慢了,尽量别用)
$mysql> select * from columns_v2;CD_ID查看表信息
$mysql> select * from tbls;SD_ID列
- データのロード(一般的に使用される3つの方法)
[ファイルd.txtを作成するための準備(タブで区切る)]
cd ~
mkdir data
cd data
touch d.txt
vi d.txt
1 xiaoming 17
2 xiaohong 18
3 xiaoqiang 19
$hive> create table test_part (id int,name string,no int)
$hive> row format delimited
$hive>fields terminated by '\t'
$hive>stored as textfile ;
```php
1. 拷贝
$> hdfs dfs -put ~/data/d.txt /root/hive/warehouse/db1.db/employee
$hive> select * from employee;
2. 加载linux本地文件 什么类型的数据都可以拷贝分片
$hive> load data local inpath '/home/centos/data/d.txt' into table employee;
$hive> select * from employee;
3. 加载hdfs文件
$> hdfs dfs -mkdir -p /root/hive/data
$> hdfs dfs -put ~/data/d.txt /root/hive/data
$> hdfs dfs -lsr /root/hive/data
$hive> load data inpath '/root/hive/data/d.txt' into table employee;
$hive> select * from employee;
- 挿入とロードの違い:
load data:将某些数据文件上传至hdfs,数据量大
insert:将insert操作转换为mr作业,每一次进行insert的话,在表目录下生成一个新的数据文件
cd data
vi a.txt
输入:(tab键隔开)
4 xiaogang 20
5 xiaowang 21
$> hdfs dfs -put a.txt /root/hive/warehouse/db1.db/employee
$> hdfs dfs -lsr /
$hive> use db1;
$hive> select * from employee;
$hive> inser into employee values(6,'yyy',19);
访问http://192.168.110.3:8088 查看yarn进程
$> hdfs dfs -lsr /
多出来一个/root/hive/warehouse/db1.db/employee/000000_0
$> hdfs dfs -cat /root/hive/warehouse/db1.db/employee/000000_0
显示 6 yyy 19
14. hive不支持update,delete操作
- ソート操作
order by 字段 asc\desc
order by 操作转换成mapreduce
$hive> select * from employee order by id desc;//降序
- ページング操作
oracle: rownum(数据伪列)
select * from xxx where rownum >=10 and rownum <20;
mysql: limit 数据开始条数,数据条数;
select * from xxx limit 10,10;
limit操作不会转换成mapreduce
$hive> select * from employee order by id asc limit 0,5;//查询排序后的前5条记录(1,2,3,4,5)
$hive> select * from employee limit 0,5;//查询当前的前5条记录
- サブクエリ
建表:
1. user
$hive> create table db1.usr(uid int,uname string,rid int)
$hive>row format delimited
$hive>fields terminated by ','
$hive>stored as textfile;
--------------------
cd data
vi usr.txt
输入:
1,admin,1
2,user1,2
3,user2,2
4,user3,3
$hive> load data local inpath '/home/centos/data/usr.txt' into table db1.usr;
2. role
$hive> create table db1.role(rid int,rname string)
$hive> row format delimited
$hive> fields terminated by ','
$hive> stored as textfile;
-------------------
cd data
vi role.txt
输入:
1,管理员
2,工程师
$hive> load data local inpath '/home/centos/data/role.txt' into table db1.role;
* 查询user表中rid在role中存在的数据。转换成mapreduce
$hive> select * from usr where rid in (select rid from role);
结果: 1 admin 1
2 user1 2
3 user2 2
- 接続クエリ
[需求]查询用户的账号以及角色名。
inner :多表匹配,匹配不到的数据不显示
[语句]
-------
sql 1993:(不好使用外连接)
$hive> select u.uname,r.rname from usr u,role r where u.rid =r.rid;
sql 1998:
$hive> select u.uname,r.rname from usr u inner join role r on u.rid=r.rid;
结果:
admin 管理员
user1 工程师
user2 工程师
outer :按特定的表匹配,匹配不到的数据使用null填充
- left 以左边的表为基准
$hive> select u.uname,r.rname from usr u left outer join role r on u.rid=r.rid;
结果:
admin 管理员
user1 工程师
user2 工程师
user3 NULL
- right
$hive> select u.uname,r.rname from usr u right outer join role r on u.rid=r.rid;
- full
$hive> select u.uname,r.rname from usr u full outer join role r on u.rid=r.rid;
连接查询会将操作转换成mapreduce执行。