Hive学习笔记

来源:互联网 发布:2016淘宝开店步骤 编辑:程序博客网 时间:2024/06/06 05:43

Hive编程指南(第一章1.1, 第3/4/5/6/9/11/13章)

表的创建

  • 创建数据库
CREATE DATABASE IF NOT EXISTS a;
  • 查看h开头的数据库
SHOW DATEBASES LIKE 'h.*';
  • 创建数据库描述并且查看(DESCRIBE同时输出数据库路径)
CREATE DATABASE aCOMMENT '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 a2LIKE 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) eSELECT e.name,e.salary_minus_fed_taxesWHERE 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_closeFROM stocks a JOIN stocks b ON a.ymd=b.ymdWHERE a.symbol = 'AAPL' AND b.symbol = 'IBM'; - LEFT SEMI JOIN只会返回左边表的记录,前提是满足右边表on语句的判定条件
原创粉丝点击