最も基本的なハイブ操作

  1. データベースを見る
$hive> show databases;
  1. データベースを作成する
$hive> create database db1;
  1. データベースを選択します
$hive> use db1;
  1. データベースを削除する
$hive> drop database db1; 
	1. 通过查看hdfs中的目录结构,确定了hive中的数据库就是hdfs中的一个文件夹(dbname.db)
		$> hdfs dfs -lsr /
	2. 在元数据库中(mysql), 存储了数据库的数据结构(dbs)$mysql> use hive ;
		$mysql> select * from dbs;
  1. ハイブのコマンドラインをクリアする
$hive> !clear;

6.表を表示します

$hive> show tables;
  1. ルックアップテーブル
 $hive> select * from employee;(简单查询可以不走mr)
  1. テーブルを作成する
		内部表
		外部表
		分区表
		桶表
		$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;查看属于那个数据库
  1. テーブルを変更します(非推奨)
$hive> alter table db1.employee add column (sid string);
  1. テーブルを削除する
$hive> drop table db1.employee;
  1. この操作を行うには、データ(新しいデータ)を追加します。ヤーンを開始する必要があります。
   $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
  1. データのロード(一般的に使用される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;
  1. 挿入とロードの違い:
  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操作
  1. ソート操作
order by 字段 asc\desc
order by 操作转换成mapreduce
$hive> select * from employee order by id desc;//降序
  1. ページング操作
  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. サブクエリ
  建表:
 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
			   
  1. 接続クエリ
[需求]查询用户的账号以及角色名。
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执行。

おすすめ

転載: blog.csdn.net/weixin_44703894/article/details/114644827