s["Federal Taxes"]))
as salary_minus_fed
FROM employees LIMIT 2; fed_taxes、
salary_minus_fed 给新查出的结果的两个列起个别名;
hive> FROM (upper(name), salary, deductions["Federal Taxes"] as fed_taxes, round(salary *(1 - deductions["Federal Taxes"])) as salary_minus_fed FROM employees) e SELECT e.name, e.salary_minus_fed_taxes WHERE
e.salary_minus_fed_taxes >7000;
SELECT 的嵌套查询
CASE ... WHEN ... THEN 句式例子:
hive>SELECT name,salary, CASE
WHEN salary < 5000 THEN 'low'
WHEN salary >= 5000 AND salary <7000 THEN 'middle'
WHEN salary>=7000 AND salary < 100000 THEN 'high'
ELSE 'very high' END AS bracket FROM employees;
Hive 大多数情况下查询都会触发一个 MapReduce 任务,Hive 中本模式的查询可以不必使用 MP;如: select * from employees;
SELECT * from employees WHERE country='us' and state='ca' limit 100; 对于 WHERE 语句中过滤条件只是分区字段这种情况(无论是否使用了 LIMT语句限制输出记录条数)也是无需MapReduce 过程的;
hive.exec.mode.local.auto=true; 如果这个值为 true Hive 还会尝试使用本地模式执行其他的操作,否则 Hive 会用 MP 来执行其他所有的查询;最好将它增加到 $HOME/.hiverc 文件中;
6.2 where 语句用于过滤查询条件 用法与 普通 SQL 一样;
谓词操作:这些词的操作同样可以用于 JION ... ON 和 HAVING 语句中
【图片取自《hive编程指南》 88-92页】
LIke 和 RLIKE :LIKE是一个标准的 SQL 操作,可以让我们通过字符串的开头或结尾,以及指定特定的子字符串,或者当子字符串出现在字符串内的任何位置时进行匹配;【RLIKE 子句是 Hive中这个功能的一个扩展,其可以通过 JAVA 的正则表达式这个更强大的语言来指定匹配条件。】
hive>SELECT name, address.street FROM employees WHERE address.street LIKE '%Ave.' --查找以Ave 开头的 雇员姓名;
hive>SELECT name, address.stree FROM employees WHERE address.street RLIKE '.*(Chicago|Ontario).*'; --RLIKE 后面字符串含义:字符串中的 . 表示和任意的字符匹配,星号 * 表示重复“左边的字符串”零次到无数次,表达式(x|y)表示 和 x 或者 y 匹配;【PS:不会正则的可以百度一下去学学】
6.3 GROUP BY 语句,它通常会用 聚合函数一起使用,按照一个或者多个列对结果进行分组,然后对每个组执行聚合操作【用法与SQL差不多】
hive>SELECT year(ymd),avg(price_close) FROM stocks WHERE exchange='NASDAQ' AND symbol ='APPLE' GROUP BY year(ymd); --示例
HAVING 语句:
hive>SELECT year(ymd),avg(price_close) FROM stocks
>WHERE exchange='NASDAQ' AND symbol ='APPLE' GROUP BY year(ymd)
>HAVING avg(price_close)>50.0; --示例
6.4 JOIN 语句
INNER JOIN 内链接,只有进行链接的两个表中都存在与连接标准相关匹配的数据才会显示【用法与SQL差不多】
hive>SELECT a.ymd, a.price_close, b.price_close FROM stocks a JOIN STOCKS b ON a.ymd =b.ymd
>WHERE a.symbol ='appl' AND b.symbol='ibm';
注意:hive 中不支持的查询如下【同进也不支持在ON的子句中的谓词间使用 OR,可以支持 AND 】:
hive>SELECT a.ymd, a.price_close, b.price_close FROM stocks a JOIN STOCKS b ON a.ymd
<=
b.ymd
>WHERE a.symbol ='appl' AND b.symbol='ibm';
多张表的链接:
hive>SELECT a.ymd, a.price_close, b.price_close,c.price_close
> FROM stocks a JOIN stocks b ON a.ym
d=b.ymd
> JOIN stocks c ON a.ymd = c.ymd
>WHERE a.symbol ='appl' AND b.symbol='i