hive QL(HQL)簡明指南zz


1. 基本數據類型

tinyint , smallint, int, bigint, float, double, boolean: true/false, string

2. 基礎運算符與函數

A IS NULL         空
A IS NOT NULL     非空    
A LIKE B     模糊匹配
A RLIKE B     正則表達式匹配
A REGEXP B  正則表達式匹配

3. 類型轉換
cast(expr as <type>)
例如:
cast('1' as BIGINT)  將字符串'1'轉化成bigint型

4. 日期函數

返回值類型     名稱                                        描述
string     from_unixtime(int unixtime)                    將時間戳(unix epoch秒數)轉換為日期時間字符串,例如from_unixtime(0)="1970-01-01 00:00:00"
bigint     unix_timestamp()                                獲得當前時間戳
bigint     unix_timestamp(string date)                    獲得date表示的時間戳
bigint     to_date(string timestamp)                      返回日期字符串,例如to_date("1970-01-01 00:00:00") = "1970-01-01"
string     year(string date)                              返回年,例如year("1970-01-01 00:00:00") = 1970,year("1970-01-01") = 1970
int     month(string date)     
int     day(string date) dayofmonth(date)     
int     hour(string date)     
int     minute(string date)     
int     second(string date)     
int     weekofyear(string date)     
int     datediff(string enddate, string startdate)        返回enddate和startdate的天數的差,例如datediff('2009-03-01', '2009-02-27') = 2
int     date_add(string startdate, int days)              加days天數到startdate: date_add('2008-12-31', 1) = '2009-01-01'
int     date_sub(string startdate, int days)              減days天數到startdate: date_sub('2008-12-31', 1) = '2008-12-30'

5. 條件函數

返回值類型     名稱                                                      描述
-     if(boolean testCondition, T valueTrue, T valueFalseOrNull)        當testCondition為真時返回valueTrue,testCondition為假或NULL時返回valueFalseOrNull
-     COALESCE(T v1, T v2, ...)                                        返回列表中的第一個非空元素,如果列表元素都為空則返回NULL
-     CASE a WHEN b THEN c [WHEN d THEN e]* [ELSE f] END                a = b,返回c;a = d,返回e;否則返回f
-     CASE WHEN a THEN b [WHEN c THEN d]* [ELSE e] END                  a 為真,返回b;c為真,返回d;否則e
例如:
(
case
when category = '1512' then reserve_price > cast(1000 as double)
when category = '1101' then reserve_price > cast(2500 as double)
else reserve_price > cast(10 as double)
end
)

6. 常用字符串函數
返回值類型      名稱                                                             描述
int     length(string A)                                                          返回字符串長度
string     reverse(string A)                                                      反轉字符串
string     concat(string A, string B...)                                          合並字符串,例如concat('foo', 'bar')='foobar'。注意這一函數可以接受任意個數的參數
string     substr(string A, int start) substring(string A, int start)              返回子串,例如substr('foobar', 4)='bar',詳見 [4]
string     substr(string A, int start, int len) substring(string A, int start, int len)     返回限定長度的子串,例如substr('foobar', 4, 1)='b',詳見[5]
string     upper(string A) ucase(string A)                                        轉換為大寫
string     lower(string A) lcase(string A)                                        轉換為小寫
string     trim(string A)     
string     ltrim(string A)     
string     rtrim(string A)
string     regexp_extract(string subject, string pattern, int intex)            返回使用正則表達式提取的子字串。
                                                                           例如,regexp_extract('foothebar', 'foo(.*?)(bar)', 2)='bar'。注意使用特殊字符的規則:
                                                                           使用'\s'代表的是字符's';空白字符需要使用'\\s',以此類推。
string     space(int n)                                                          返回一個包含n個空格的字符串
string     repeat(string str, int n)                                            重復str字符串n遍
string     ascii(string str)                                                    返回str中第一個字符的ascii碼
string     lpad(string str, int len, string pad)                                左端補齊str到長度為len。補齊的字符串由pad指定。
string     rpad(string str, int len, string pad)                                右端補齊str到長度為len。補齊的字符串由pad指定。
array     split(string str, string pat)                                        返回使用pat作為正則表達式分割str字符串的列表。例如,split('foobar', 'o')[2] = 'bar'。                                                                          

7. 創建表

CREATE TABLE IF NOT EXISTS table_name
(

--field def

)

PARTITIONED BY (pt string)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
STORED AS TEXTFILE
LOCATION '...';

注意:如果不是外表部,drop table的時候會將HDFS上文件刪除。

8. 創建外部表

CREATE EXTERNAL TABLE dm_all_cpv_assoc (
 --field def
 )
 PARTITIONED BY (pt string)
 ROW FORMAT DELIMITED
 FIELDS TERMINATED BY '\1'  字段分隔符
 LINES TERMINATED BY '\2'  行分隔符
 STORED AS TEXTFILE       
 LOCATION '...';

注意:在刪除外部表的時候,不會刪除HDFS上的關聯文件。

9. 添加分區

ALTER TABLE table_name ADD PARTITION (dt='2008-08-08', country='us')
location '/path/to/us/part080808' PARTITION (dt='2008-08-09', country='us')
location '/path/to/us/part080809';

10. 刪除分區

ALTER TABLE table_name DROP PARTITION (dt='2008-08-08', country='us');

11. 導入數據

a. insert overwrite table table_name partition (pt = '20110323000000')
select ... from ...

b. LOAD DATA LOCAL INPATH 'test.dat' OVERWRITE INTO table yahoo_music partition (pt=xxx);

12. 查詢數據

SELECT, JOIN, LIMIT

13. 添加UDF

add jar /home/hive/jar/my_udf.jar;
create temporary function sys_date as 'com.taobao.hive.udf.UDFDateSysdate';

14. 設置reducer數量

限制最大reducer數:set hive.exec.reducers.max=15;

設置固定的reducer數:set mapred.reduce.tasks=15;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM