HiveQL 初级实战

2009-09-22 @ taobao

 

  • 引言
  • Hive Shell
    • 进入shell
    • 退出shell
    • 查看已有表
    • 查看表结构
    • 执行查询
  • 数据类型
  • 内建操作符和函数
    • 操作符
      • RLIKE
    • 函数
      • 类型函数
      • 条件函数
      • 日期函数
      • 聚合函数

引言

本文的主要目的是让读者可以使用hiveQL对已有的海量数据进行简单的查询操作. 它适合于Hive的新手快速入门, 但前提是本文假定读者基本熟悉SQL.

特别注意的是, 本文力求精简实用, 因此这里强烈建议读者在阅读的过程中同时参看下列链接:

  • Hive教程
  • Hive语言手册

Hive Shell

进入shell

若Hive安装与部署成功之后, 你在命令行下键入hive进入shell, 如

提示符
下面的$是linux shell 提示符, hive>是hive shell 提示符.
$ hive
Hive history file=/tmp/jushi/hive_job_log_jushi_200909221044_69735608.txt
hive> 

退出shell

hive> quit;
$ 

查看已有表

hive> show tables;
OK
mock_records_seq
p1
Time taken: 2.679 seconds

查看表结构

hive> describe mock_records_seq;
OK
property        string
id      	string
auction_status  int zoo     	string
Time taken: 0.065 seconds

执行查询

HiveQL支持*大部分*标准SQL的Select语法, 因此可以像写SQL一样在hive shell中执行数据查询操作. 关于HiveQL与SQL的区别可以参看:

  • 从SQL到HiveQL应改变的几个习惯
  • http://wiki.apache.org/hadoop/Hive/LanguageManual/Select
hive> select * from mock_records_seq;
Total MapReduce jobs = 1Number of reduce tasks is set to 0 since there's no reduce operator Starting Job = job_200909212156_1141, Tracking URL = http://hdpjt.cm3:50030/jobdetails.jsp?jobid=job_200909212156_1141Kill Command = /home/hadoop/hadoop-current/bin/../bin/hadoop job  -Dmapred.job.tracker=hdpjt.cm3:9001 -kill job_200909212156_1141
2009-09-22 11:02:03,532 map = 0%,  reduce =0%
2009-09-22 11:02:11,564 map = 100%,  reduce =0%
Ended Job = job_200909212156_1141
OK
5303:19399;10812:2637   eccbc87e4b5ce2fe28308fd9f2a7baf3        0       7891:2334
13295:15699;2509:17602  a87ff679a2f3e71d9181a67b7542122c        0       16258:19904
16668:12012;10544:12071 c4ca4238a0b923820dcc509a6f75849b        0       5669:8857
14682:9011;7716:11310   c81e728d9d4c2f636f067f89cc14862c        0       2810:17378
Time taken: 67.693 seconds

数据类型

目前在hive中常用的数据类型有:

  • BIGINT – 主要用于状态,类别,数量的字段, 如status/option/type/quantity
  • DOUBLE – 主要用于金额的字段, 如fee/price/bid
  • STRING – 除上述之外的字段基本都使用String, 尤其是id和日期时间这样的字段

更多hive数据类型请见http://wiki.apache.org/hadoop/Hive/Tutorial#Type_System

内建操作符和函数

操作符

标准SQL中几乎所有的操作符在HiveQL中都被支持. 具体参见http://wiki.apache.org/hadoop/Hive/LanguageManual/UDF#Built_in_Operators

RLIKE

在日志相关的数据查询中, RLIKE 被使用的机会会很多, 例如
查09年8月23日全网店铺访问PV:

hive> select count(1) from web_log where logdate = '20090823' && url rlike 'http://shop\\d+\\.taobao\\.com/.+' 
正则表达式
RLIKE后跟的是Java regular expression.值得注意的是, 在使用\d, \w, \s之类的表达式时,需要多加上一个\, 以避免单个\被视为转义符. 就好像上例中为了匹配一串数字,则使用:
\\d+

函数

类型函数

  • cast 将表达式的结果转化成一个特定的类型, 例如
    cast('1' as BIGINT) // 将字符串1转为BIGINT. 

条件函数

  • if 根据第一个参数表达式的布尔值结果, 为真返回第二个参数表达式的结果, 反之返回第三个参数表达式的结果.
    if(true, 't', 'f')  // = 't'if(false, 't', 'f') // = 'f' 
  • coalesce 返回参数列表中第一个结果不会null的值, 若都会null则返回null.
    coalesce(1,2,3)    // = 1coalesce(null,2,3) // = 2 

日期函数

  • to_date
    to_date('1970-01-01 00:00:00') // = '1970-01-01' 
  • date_add
    date_add('2008-12-31', 1) // = '2009-01-01' 
  • date_sub
    date_sub('2008-12-31', 1) // = '2008-12-30' 

聚合函数

  • count
    select count(1) from web_log where logdate= '20090823'; // 20090823全网PV 
  • sum
    select sum(fee) from tc_biz_order where gmt_create = '20090823'; // 20090823订单总额 
  • avg
    select avg(auction_price) from tc_biz_order where gmt_create = '20090823' and aucton_id = '123456'; // 20090823宝贝123456的成交均价 

更多函数介绍请见http://wiki.apache.org/hadoop/Hive/LanguageManual/UDF#Built-in_Functions

你可能感兴趣的:(hive,trace)