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
)
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;