Hive编程指南(第一章1.1, 第3/4/5/6/9/11/13章)
表的创建
- 创建数据库
CREATE DATABASE IF NOT EXISTS a;
- 查看h开头的数据库
SHOW DATEBASES LIKE 'h.*';
- 创建数据库描述并且查看(DESCRIBE同时输出数据库路径)
CREATE DATABASE a
COMMENT 'JUST A TRY';
DESCRIBE DATABASE a;
- 创建表格
CREAT TABLE IF NOT EXISTS mydb.employees(
name STRING COMMENT 'Employee name',
salary FLOAT COMMENT 'Employee salary',
address STRUCT<street:STRING,city:STRING,state:STRING,zip:INT> COMMENT 'Home adress'
)
COMMENT 'Description of the table';
- 拷贝表格(不包括数据)
CREATE TABLE IF NOT EXISTS a2
LIKE a1;
分区的部分有点难,还没搞清楚,暂时放下。
删除表格
DROP TABLE IF EXISTS a;
- 表格重命名,修改列名,增加列
ALTER TABLE a RENAME TO a1;
ALTER TABLE a CHANGE COLUME x1 x2 INT;
ALTER TABLE a ADD COLNAMES (
app_name STRING COMMENT 'Application name'
)
表的查询
一些函数
- 特殊的数据的类型有数组,MAP,STRUCT
数组:[“mary”,”chirs”];数组的索引a[0]从0开始
MAP:{“mary”:0.2;”chirs”:0.1};MAP的索引用键值a[“mary”]
map_values可以提取MAP中的所有类型为值的元素
STRUCT:{“male”:”mary”;”female”:”chirs”};索引可以用a.male 使用正则表达式
‘price.*’表示以price为前缀所有聚合函数
- count(*),包含NULL值
- variance(),stddev(); 方差,标准差
- var_samp(),stddev_samp(); 样本方差,样本标准差
- covar_pop(a,b),covar_samp(a,b);协方差,样本协方差
corr(a,b);相关系数
表生成函数
explode(ARRAY a),返回多行结果,每行都对应输入a数组的一个元素,且要求使用列别名。
SELECT explode(a) AS demo2 FROM demo;
还有其它函数具体查见《Hive 权威指南》P88
查询
- 嵌套SELECT语句
FROM (SELECT upper(name),salary,dedections["Federal TAXES"] as fed_taxes,
round(salary*(1-dedutions["Federal Taxes"])) as salary_minus_fed_taxes
FROM employees) e
SELECT e.name,e.salary_minus_fed_taxes
WHERE e.salary_minus_fed_taxes > 70000;
- CASE…WHEN…THEN句式
SELECT name,salary,
CASE
WHEN salary < 50000.0 THEN 'low'
WHEN salary >= 50000.0 AND salary < 70000.0 THEN 'middle'
ELSE 'high'
END AS bracket FROM employees;
- 不能在WHERE语句中使用列别名,可以使用嵌套的SELECT语句进行实现
- …WHERE address LIKE ‘o%’ 用于O开头的模糊查询;还有RLIKE
连接
- INNER JOIN 内连接,只有两个表都有才能保留下来
SELECT a.ymd,a.price,b.price_close
FROM stocks a JOIN stocks b ON a.ymd=b.ymd
WHERE a.symbol = 'AAPL' AND b.symbol = 'IBM';
- LEFT SEMI JOIN
只会返回左边表的记录,前提是满足右边表on语句的判定条件