HiveQL查询
1、select...from语句,select是sql的射影算子;from子句标识从哪个表、视图或者嵌套查询中选择记录。
(1)可以使用正则表达式来指定列;
(2)使用列值进行计算;
(3)算术表达式;
(4)使用函数;聚合函数是特殊的函数,可以最多行进行一些计算,然后得到一个结果值。例如count和avg等函数。例如select count(*),avg(salary) from employee;
(5)limit会限制查询返回的行数。
2、where语句
select用来选取字段,where用来筛选条件,两者结合可以查询到符合条件的记录。例如select *from employee where country='US' and stats='CA';
(1)谓词操作符。“=”,"<",">"等可用于jion...on和having语句中。
(2)浮点数比较。
(3)like和rlike。例如select name,address.street from employee where address.street like '%chi%';
3、group by语句。
group by通常和聚合函数一起使用,按照一个列或多个列对结果进行分组,然后对每个组进行聚合操作。
select year(ymd) ,avg(price_close) from stocks where exchange = 'NASDAO' and symbol = 'AAPL' group by year(ymd);
having语句允许用户使用一个简单的语法完成原本需要通过子查询才能对group by产生的分组进行条件过滤的任务。
select year(ymd) ,avg(price_close) from stocks where exchange = 'NASDAO' and symbol = 'AAPL' group by year(ymd) having avg(price_close) > 50.0;如果不使用having,将使用一个嵌套的select子查询。
4、join语句
hive支持sql join语句,但是只支持等值连接。
(1)inner join是内连接,只有进行连接的两个表中都存在与连接标准匹配的数据才会被保存下来。
select a.ymd,a.price_close,b.price_close from stocks a join stocks b on a.ymd = b.ymd where a.symbol = 'AAPL' and b.symbol = 'IBM'; on子句指定了两个表间数据进行连接的条件。where 子句限定左边表是AAPL的记录,右边表是IBM的记录。标准SQL是支持对连接关键字进行非等值连接,对hive来说却是非法使用。同时,hive还不支持在on子句中的谓词间使用or。在大多数情况下,hive会对每对join连接对象启动一个mapreduce任务。