1,show databases;展示数据库
2,use mysql;使用mysql数据库
3,show tables 展示表格
4,desc user 查看表格 desc formatted psn 查看表格详细数据
5,mysql -uroot -p 用密码登录mysql
6,creat table tbl(id int,age int);
insert into tbl values(1,1);
7,元数据信息在node1中,hive_remote,tbls 存储表名信息 ,COLUMNS_V2存储字段信息
8,远程节点启动hive,3 启动hive --service metastore 4,hive
9,create/drop database test;删除预创建数据库
10,建表并使输入数据格式化
内部表
CREATE TABLE www(
id int,
name string,
likes array<string>,
address map<string,string>
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
COLLECTION ITEMS TERMINATED BY '-'
MAP KEYS TERMINATED BY ':'
LINES TERMINATED BY '\n';
FIELDS 字符间隔 COLLECTION 集合间隔,MAP 键值对,LINES 行间隔
外部表
CREATE EXTEPNAL TABLE www(
id int,
name string,
likes array<string>,
address map<string,string>
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
COLLECTION ITEMS TERMINATED BY '-'
MAP KEYS TERMINATED BY ':'
LINES TERMINATED BY '\n';
location '/usr/';
内部表与外部表的区别
1,创建时需要指定目录
2,删除时内部表会将表结构和元数据一起删除,外部表只会删除表结构,不会删除元数据
CREATE TABLE www(
id int,
info struct <name:string,age:int>
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
COLLECTION ITEMS TERMINATED BY '-'
MAP KEYS TERMINATED BY ':'
LINES TERMINATED BY '\n';
也可通过struct方式建表
11,载入数据
LOAD DATA LOCAL INPATH '/root/data' INTO TABLE www;
LOCAL表示本地文件
不加local表示文件在hdfs上
也可以直接中hdfs -put 到数据表所在目录
FROM psn3
INSERT OVERWRITE TABLE psn4
SELECT id,names,likes
12,静态分区
CREATE TABLE www(
id int,
name string,
likes array<string>,
address map<string,string>
)
partitioned by (age int)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
COLLECTION ITEMS TERMINATED BY '-'
MAP KEYS TERMINATED BY ':'
LINES TERMINATED BY '\n';
将数据存入age=10的分区
LOAD DATA LOCAL INPATH '/root/data' INTO TABLE www partition (age=10);
添加分区
CREATE TABLE www(
id int,
name string,
likes array<string>,
address map<string,string>
)
partitioned by (age int,sex string)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
COLLECTION ITEMS TERMINATED BY '-'
MAP KEYS TERMINATED BY ':'
LINES TERMINATED BY '\n';
LOAD DATA LOCAL INPATH '/root/data' INTO TABLE www partition (age=10,sex='boy');
alter table www add partition(age=10,sex='man');
在age=10下添加分区sex=man
删除分区
alter table www drop partition(sex='man')
结论:添加分区的时候,必须在现有分区的基础上
删除分区的时候,会将所有存在的分区都删除
13 beeline
3节点 hiveserver2
4节点 beeline -u jdbc:hive2://xutianyu3:10000/default -n root
退出 !quit
14,hive 参数设置
显示表头 set hive.cli.print.header=true
如果需要永久启用,在家目录创建.hiverc,将设置语句输入进去
15,hive动态分区
动态分区无需指定目录,静态分区需要指定目录
PPT
16,hive分桶
当表总bucket数为32时
TABLESAMPLE(BUCKET 3 OUT OF 8),抽取哪些数据?
抽取4份数据,3, 11, 19, 27
PPT
17,hive视图
PPT
创建视图与普通sql一样
查看视图内容 select * from view
看有多少视图 show tables
18,hive 索引
优化查询及检索性能(加快查询速度)
19,hive 脚本运行方式
PPT
14,复制表结构
create psn5 like psn4
15,模糊匹配
SELECT * FROM test1 WHERE renkou LIKE '47%'
%表示后面任意字符均可
SELECT * FROM test1 WHERE difang LIKE '_安%'
_表示任意一个字符
16,别名
SELECT difang as 地方 FROM test1
16,范围查询
SELECT * FROM test1 WHERE id in (1,2)
SELECT * FROM test1 WHERE id BETWEEN 1 and 3 (1到3)
17,判空 is null 非空 is not null
18,统计数目,求和,平均,最大值
SELECT COUNT(*) FROM test1
SELECT sum(renkou) as 总分 FROM test1
SELECT avg(renkou) as 平均分 FROM test1
SELECT difang,max(renkou) FROM test1
select name,english,chinese,math,name+english+chinese as '总分' from test1
19,分组
SELECT leixing,count(difang) FROM test1 GROUP BY leixing HAVING count(difang) > 100
having后面的条件运算符与where的相同,having只能用于group by ,group by必须在where后
对比where与having
•where是对from后面指定的表进行数据筛选,属于对原始数据的筛选
•having是对group by的结果进行筛选
20,排序
select * from test1 order by math,chinese
如果是order by 后面两个,则先比较第一个,再比较第二个
SELECT * FROM test1 ORDER BY renkou
SELECT * FROM test1 ORDER BY renkou desc
21,分页
SELECT * FROM test1 LIMIT 0,2
0代表第一行,2代表显示2条
22,一对多与多对多
都要使用外键,多对多需要第三张表做关联,记录两个表的id的关系
23,联合查询
select a.id,a.name,b.name from order1 a,customer b where a.cid = b.id
cid 为外键,查询出a表中的订单编号属于b表中哪些客户的
24,连接查询
小表放join左边
select a.id,a.name,b.name from student a left join class b on a.cid=b.id
left 表示左外连接,指显示student所有的数据,指没有匹配上一样要显示出来
25,视图
对于复杂的查询,在多次使用后,维护是一件非常麻烦的事情
•解决:定义视图
•视图本质就是对查询的一个封装
•定义视图
create view v_sc as
SELECT * FROM test LIMIT 0,2
SELECT * FROM v_sc
26,函数与事务
27,存储过程,速度比普通的sql快,语句与sql一样
调用 call 接存储过程名(参数)