hive select操作(翻译自Hive wiki)

Select语法

SELECT [ALL | DISTINCT] select_expr, select_expr, ...
FROM table_reference
[WHERE where_condition]
[GROUP BY col_list]
[CLUSTER BY col_list
  | [DISTRIBUTE BY col_list] [SORT BY col_list]
]
[LIMIT number]

select语句可以是union查询的一部分或者是另一个查询的子查询。

table_reference指示查询的输入。它可以是普通的表,视图,join构造或者是子查询。

简单查询。例如,下面的查询返回表t1所有的列和行。

SELECT * FROM t1

 

WHERE子句

where条件是一个boolean表达式。例如,下面的查询,返回US地区,amount大于10的销售记录。Hive在where子句中不支持IN,EXISTS或子查询

SELECT * FROM sales WHERE amount > 10 AND region = "US"

 

ALL和DISTINCT子句

ALL和DISTINCT选项,指定重复的行是否返回。如果没有指定,默认是ALL(所有行会返回)。DISTINCT指定从结果集移除重复的行。

hive> SELECT col1, col2 FROM t1
    1 3
    1 3
    1 4
    2 5
hive> SELECT DISTINCT col1, col2 FROM t1
    1 3
    1 4
    2 5
hive> SELECT DISTINCT col1 FROM t1
    1
    2

 



基于分区的查询

通常,一个SELECT查询扫描全部表(除了sampling)。如果表是用PARTITIONED BY字句创建,查询可以做分区剪除,根据查询指定的分区范围,扫描表的一部分。当前Hive在where字句或者JOIN的ON字句中指定了分区,会做分区裁剪。例如,如果表page_views按照列date做分区,下面的查询,只是返回在2008-03-01到2008-03-31的日期的行。

    SELECT page_views.*
    FROM page_views
    WHERE page_views.date >= '2008-03-01' AND page_views.date <= '2008-03-31'

 

如果表page_views和其他表dim_users做连接,可以在ON字句指定分区的范围,如下:

    SELECT page_views.*
    FROM page_views JOIN dim_users
      ON (page_views.user_id = dim_users.id AND page_views.date >= '2008-03-01' AND page_views.date <= '2008-03-31')

 

HAVING子句

从Hive0.70开始,Hive添加支持HAVING字句。之前的Hive版本,如果要达到相同的效果,需要用子查询,例如:

SELECT col1 FROM t1 GROUP BY col1 HAVING SUM(col2) > 10

 

也可以表示为:

SELECT col1 FROM (SELECT col1, SUM(col2) AS col2sum FROM t1 GROUP BY col1) t2 WHERE t2.col2sum > 10

 

LIMIT字句

Limit指示返回的行的数目。随机选择返回的行。下面的查询,随机返回t1的5行。

SELECT * FROM t1 LIMIT 5

 

Top K查询。下面的查询返回的前5名的销售记录WRT量。

SET mapred.reduce.tasks = 1
SELECT * FROM sales SORT BY amount DESC LIMIT 5

 

正则表达式列规范

SELECT语句可以执行基于正则表达式的列规范

使用java正则表达式语法:常用http://www.fileformat.info/tool/regex.htm测试结果。

下面的查询,选择除了ds和hr的所有列。

SELECT `(ds|hr)?+.+` FROM sales

 

翻译自 https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Select

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值