Hive類型 | Java類型 |
---|---|
SMALLINT | short |
INT | int |
BIGINT | long |
BOOLEAN | boolean |
FLOAT | float |
DOUBLE | double |
STRING | String |
TIMESTAMP | TimeStamp |
BINARY | byte[] |
TINYINT | byte |
CREATE TABLE 建立一個指定名字的表。若是相同名字的表已經存在,則拋出異常;用戶能夠用 IF NOT EXIST 選項來忽略這個異常。EXTERNAL 關鍵字可讓用戶建立一個外部表,在建表的同時指定一個指向實際數據的路徑(LOCATION),Hive 建立內部表時,會將數據移動到數據倉庫指向的路徑;若建立外部表,僅記錄數據所在的路徑,不對數據的位置作任何改變。在刪除表的時候,內部表的元數據和數據會被一塊兒刪除,而外部表只刪除元數據,不刪除數據。LIKE 容許用戶複製現有的表結構,可是不復制數據。 有分區的表能夠在建立的時候使用 PARTITIONED BY 語句。一個表能夠擁有一個或者多個分區,每個分區單獨存在一個目錄下。php
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name [(col_name data_type [COMMENT col_comment], ...)] [COMMENT table_comment] [PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)] [CLUSTERED BY (col_name, col_name, ...) [SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS] [ [ROW FORMAT row_format]-[STORED AS file_format] | STORED BY 'storage.handler.class.name' [ WITH SERDEPROPERTIES (...) ] (Note: only available starting with 0.6.0) ] [LOCATION hdfs_path] [TBLPROPERTIES (property_name=property_value, ...)] (Note: only available starting with 0.6.0) [AS select_statement] (Note: this feature is only available starting with 0.5.0.) data_type : primitive_type | array_type | map_type | struct_type primitive_type : TINYINT | SMALLINT | INT | BIGINT | BOOLEAN | FLOAT | DOUBLE | STRING array_type : ARRAY < data_type > map_type : MAP < primitive_type, data_type > struct_type : STRUCT < col_name : data_type [COMMENT col_comment], ...> row_format : DELIMITED [FIELDS TERMINATED BY char]-[COLLECTION ITEMS TERMINATED BY char] [MAP KEYS TERMINATED BY char]-[LINES TERMINATED BY char] | SERDE serde_name [WITH SERDEPROPERTIES (property_name=property_value, property_name=property_value, ...)] file_format: : SEQUENCEFILE | TEXTFILE | RCFILE (Note: only available starting with 0.6.0) | INPUTFORMAT input_format_classname OUTPUTFORMAT output_format_classname
練習: 建立一張內部表html
create table xx (id int,name string) row format DELIMITED FIELDS TERMINATED BY '\t';java
建立一張外部表mysql
create external table xx (id int,name string) row format DELIMITED FIELDS TERMINATED BY '\t'; 建立一張帶有分區的外部表正則表達式
create external table xx (id int,name string) row format DELIMITED FIELDS TERMINATED BY '\t' partitioned by 'ccc';sql
複製一張表的結構數據庫
create table table_name like table_name;express
添加分區json
ALTER TABLE table_name ADD [IF NOT EXISTS] partition_spec [ LOCATION 'location1' ] partition_spec [ LOCATION 'location2' ] ... partition_spec: PARTITION (partition_col = partition_col_value, partition_col = partiton_col_value, ...)
刪除分區api
ALTER TABLE table_name DROP partition_spec, partition_spec,...
重命名錶名
ALTER TABLE table_name RENAME TO new_table_name
修改列
ALTER TABLE table_name CHANGE [COLUMN] col_old_name col_new_name column_type [COMMENT col_comment]-[FIRST|AFTER column_name]
這個命令能夠容許改變列名、數據類型、註釋、列位置或者它們的任意組合
添加/替換列
ALTER TABLE table_name ADD|REPLACE COLUMNS (col_name data_type [COMMENT col_comment], ...)
ADD是表明新增一字段,字段位置在全部列後面(partition列前);REPLACE則是表示替換表中全部字段
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 ] [LIMIT number]
select [column_name]|* from table_reference JOIN table_factor [join_condition] | table_reference {LEFT|RIGHT|FULL} [OUTER] JOIN table_reference join_condition | table_reference LEFT SEMI JOIN table_reference join_condition table_reference: table_factor | join_table table_factor: tbl_name [alias] | table_subquery alias | ( table_references ) join_condition: ON equality_expression ( AND equality_expression )* equality_expression: expression = expression
練習:
查詢全部部門的員工
select * from dept join emp on dept.did = emp.did;//內鏈接
select * from dept left join emp on dept.did = emp.did;//左外鏈接,右邊沒數據補NULL
select * from dept right join emp on dept.did = emp.did;//右外鏈接,左邊沒數據補NULL
select * from dept full join emp on dept.did = emp.did;//全外鏈接,左、右邊沒數據補NULL
查看庫表SHOW DATABASES;SHOW TABLES;
查看錶名,部分匹配SHOW TABLES 'page.*';SHOW TABLES '.*view';
查看某表的全部Partition,若是沒有就報錯:SHOW PARTITIONS page_view;
查看某表結構:DESCRIBE invites;DESC invites;
查看分區內容SELECT a.foo FROM invites a WHERE a.ds='2008-08-15';
查看有限行內容,同Greenplum,用limit關鍵詞SELECT a.foo FROM invites a limit 3;
查看錶分區定義DESCRIBE EXTENDED page_view PARTITION (ds='2008-08-08');
LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)]Load
操做只是單純的複製/移動操做,將數據文件移動到 Hive 表對應的位置
向hive表中插入一個查詢的結果
INSERT OVERWRITE TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...)] select_statement1 FROM from_statement
將查詢結果寫出到外部文件系統中
INSERT OVERWRITE [LOCAL] DIRECTORY directory1 SELECT ... FROM ...
刪除表:
drop table table_name;
刪除一個內部表的同時會同時刪除表的元數據和數據。刪除一個外部表,只刪除元數據而保留數據。
刪除數據庫:
drop database;
要求database中沒有表
轉載自http://www.cnblogs.com/end/archive/2012/06/18/2553682.html
運算符 | 類型 | 說明 |
---|---|---|
A = B | 全部原始類型 | 若是A與B相等,返回TRUE,不然返回FALSE |
A == B | 無 | 失敗,由於無效的語法。 SQL使用」=」,不使用」==」。 |
A <> B | 全部原始類型 | 若是A不等於B返回TRUE,不然返回FALSE。若是A或B值爲」NULL」,結果返回」NULL」。 |
A < B | 全部原始類型 | 若是A小於B返回TRUE,不然返回FALSE。若是A或B值爲」NULL」,結果返回」NULL」。 |
A <= B | 全部原始類型 | 若是A小於等於B返回TRUE,不然返回FALSE。若是A或B值爲」NULL」,結果返回」NULL」。 |
A > B | 全部原始類型 | 若是A大於B返回TRUE,不然返回FALSE。若是A或B值爲」NULL」,結果返回」NULL」。 |
A >= B | 全部原始類型 | 若是A大於等於B返回TRUE,不然返回FALSE。若是A或B值爲」NULL」,結果返回」NULL」。 |
A IS NULL | 全部類型 | 若是A值爲」NULL」,返回TRUE,不然返回FALSE |
A IS NOT NULL | 全部類型 | 若是A值不爲」NULL」,返回TRUE,不然返回FALSE |
A LIKE B | 字符串 | 若是A或B值爲」NULL」,結果返回」NULL」。字符串A與B經過sql進行匹配,若是相符返回TRUE,不符返回FALSE。B字符串中 的」」表明任一字符,」%」則表明多個任意字符。例如: (‘foobar’ like ‘foo’)返回FALSE,( ‘foobar’ like ‘foo _ _’或者 ‘foobar’ like ‘foo%’)則返回TURE |
A RLIKE B | 字符串 | 若是A或B值爲」NULL」,結果返回」NULL」。字符串A與B經過java進行匹配,若是相符返回TRUE,不符返回FALSE。例如:( ‘foobar’ rlike ‘foo’)返回FALSE,(’foobar’ rlike ‘^f.*r$’ )返回TRUE。 |
A REGEXP B | 字符串 | 與RLIKE相同。 |
運算符 | 類型 | 說明 |
---|---|---|
A + B | 全部數字類型 | A和B相加。結果的與操做數值有共同類型。例如每個整數是一個浮點數,浮點數包含整數。因此,一個浮點數和一個整數相加結果也是一個浮點數。 |
A – B | 全部數字類型 | A和B相減。結果的與操做數值有共同類型。 |
A * B | 全部數字類型 | A和B相乘,結果的與操做數值有共同類型。須要說明的是,若是乘法形成溢出,將選擇更高的類型。 |
A / B | 全部數字類型 | A和B相除,結果是一個double(雙精度)類型的結果。 |
A % B | 全部數字類型 | A除以B餘數與操做數值有共同類型。 |
A & B | 全部數字類型 | 運算符查看兩個參數的二進制表示法的值,並執行按位」與」操做。兩個表達式的一位均爲1時,則結果的該位爲 1。不然,結果的該位爲 0。 |
A|B | 全部數字類型 | 運算符查看兩個參數的二進制表示法的值,並執行按位」或」操做。只要任一表達式的一位爲 1,則結果的該位爲 1。不然,結果的該位爲 0。 |
A ^ B | 全部數字類型 | 運算符查看兩個參數的二進制表示法的值,並執行按位」異或」操做。當且僅當只有一個表達式的某位上爲 1 時,結果的該位才爲 1。不然結果的該位爲 0。 |
~A | 全部數字類型 | 對一個表達式執行按位」非」(取反)。 |
運算符 | 類型 | 說明 |
---|---|---|
A AND B | 布爾值 | A和B同時正確時,返回TRUE,不然FALSE。若是A或B值爲NULL,返回NULL。 |
A && B | 布爾值 | 與」A AND B」相同 |
A OR B | 布爾值 | A或B正確,或二者同時正確返返回TRUE,不然FALSE。若是A和B值同時爲NULL,返回NULL。 |
A | B | 布爾值 | 與」A OR B」相同 |
NOT A | 布爾值 | 若是A爲NULL或錯誤的時候返回TURE,不然返回FALSE。 |
! A | 布爾值 | 與」NOT A」相同 |
函數 | 類型 | 說明 |
---|---|---|
map | (key1, value1, key2, value2, …) | 經過指定的鍵/值對,建立一個map。 |
struct | (val1, val2, val3, …) | 經過指定的字段值,建立一個結構。結構字段名稱將COL1,COL2,… |
array | (val1, val2, …) | 經過指定的元素,建立一個數組。 |
函數 | 類型 | 說明 |
---|---|---|
A[n] | A是一個數組,n爲int型 | 返回數組A的第n個元素,第一個元素的索引爲0。若是A數組爲['foo','bar'],則A[0]返回’foo’和A[1]返回」bar」。 |
M[key] | M是Map<K, V>,關鍵K型 | 返回關鍵值對應的值,例如mapM爲 {‘f’ -> ‘foo’, ‘b’ -> ‘bar’, ‘all’ -> ‘foobar’},則M['all'] 返回’foobar’。 |
S.x | S爲struct | 返回結構x字符串在結構S中的存儲位置。如 foobar {int foo, int bar} foobar.foo的領域中存儲的整數。 |
返回類型 | 函數 | 說明 |
---|---|---|
BIGINT | round(double a) | 四捨五入 |
DOUBLE | round(double a, int d) | 小數部分d位以後數字四捨五入,例如round(21.263,2),返回21.26 |
BIGINT | floor(double a) | 對給定數據進行向下舍入最接近的整數。例如floor(21.2),返回21。 |
BIGINT | ceil(double a), ceiling(double a) | 將參數向上舍入爲最接近的整數。例如ceil(21.2),返回23. |
double | rand(), rand(int seed) | 返回大於或等於0且小於1的平均分佈隨機數(依從新計算而變) |
double | exp(double a) | 返回e的n次方 |
double | ln(double a) | 返回給定數值的天然對數 |
double | log10(double a) | 返回給定數值的以10爲底天然對數 |
double | log2(double a) | 返回給定數值的以2爲底天然對數 |
double | log(double base, double a) | 返回給定底數及指數返回天然對數 |
double | pow(double a, double p) power(double a, double p) | 返回某數的乘冪 |
double | sqrt(double a) | 返回數值的平方根 |
string | bin(BIGINT a) | 返回二進制格式,參考:http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_hex |
string | hex(BIGINT a) hex(string a) | 將整數或字符轉換爲十六進制格式。參考:http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_hex |
string | unhex(string a) | 十六進制字符轉換由數字表示的字符。 |
string | conv(BIGINT num, int from_base, int to_base) | 將指定數值,由原來的度量體系轉換爲指定的試題體系。例如CONV(‘a’,16,2),返回。參考:’1010′ http://dev.mysql.com/doc/refman/5.0/en/mathematical-functions.html#function_conv |
double | abs(double a) | 取絕對值 |
int double | pmod(int a, int b) pmod(double a, double b) | 返回a除b的餘數的絕對值 |
double | sin(double a) | 返回給定角度的正弦值 |
double | asin(double a) | 返回x的反正弦,便是X。若是X是在-1到1的正弦值,返回NULL。 |
double | cos(double a) | 返回餘弦 |
double | acos(double a) | 返回X的反餘弦,即餘弦是X,,若是-1<= A <= 1,不然返回null. |
int double | positive(int a) positive(double a) | 返回A的值,例如positive(2),返回2。 |
int double | negative(int a) negative(double a) | 返回A的相反數,例如negative(2),返回-2。 |
返回類型 | 函數 | 說明 |
---|---|---|
int | size(Map<K.V>) | 返回的map類型的元素的數量 |
int | size(Array<T>) | 返回數組類型的元素數量 |
返回類型 | 函數 | 說明 |
---|---|---|
指定 「type」 | cast(expr as <type>) | 類型轉換。例如將字符」1″轉換爲整數:cast(’1′ as bigint),若是轉換失敗返回NULL。 |
返回類型 | 函數 | 說明 |
---|---|---|
string | from_unixtime(bigint unixtime[, string format]) | UNIX_TIMESTAMP參數表示返回一個值’YYYY- MM – DD HH:MM:SS’或YYYYMMDDHHMMSS.uuuuuu格式,這取決因而否是在一個字符串或數字語境中使用的功能。該值表示在當前的時區。 |
bigint | unix_timestamp() | 若是不帶參數的調用,返回一個Unix時間戳(從’1970- 01 – 0100:00:00′到如今的UTC秒數)爲無符號整數。 |
bigint | unix_timestamp(string date) | 指定日期參數調用UNIX_TIMESTAMP(),它返回參數值’1970- 01 – 0100:00:00′到指定日期的秒數。 |
bigint | unix_timestamp(string date, string pattern) | 指定時間輸入格式,返回到1970年秒數:unix_timestamp(’2009-03-20′, ‘yyyy-MM-dd’) = 1237532400 參考:http://java.sun.com/j2se/1.4.2/docs/api/java/text/SimpleDateFormat.html |
string | to_date(string timestamp) | 返回時間中的年月日: to_date(「1970-01-01 00:00:00″) = 「1970-01-01″ |
string | to_dates(string date) | 給定一個日期date,返回一個天數(0年以來的天數) |
int | year(string date) | 返回指定時間的年份,範圍在1000到9999,或爲」零」日期的0。 |
int | month(string date) | 返回指定時間的月份,範圍爲1至12月,或0一個月的一部分,如’0000-00-00′或’2008-00-00′的日期。 |
int | day(string date) dayofmonth(date) | 返回指定時間的日期 |
int | hour(string date) | 返回指定時間的小時,範圍爲0到23。 |
int | minute(string date) | 返回指定時間的分鐘,範圍爲0到59。 |
int | second(string date) | 返回指定時間的秒,範圍爲0到59。 |
int | weekofyear(string date) | 返回指定日期所在一年中的星期號,範圍爲0到53。 |
int | datediff(string enddate, string startdate) | 兩個時間參數的日期之差。 |
int | date_add(string startdate, int days) | 給定時間,在此基礎上加上指定的時間段。 |
int | date_sub(string startdate, int days) | 給定時間,在此基礎上減去指定的時間段。 |
返回類型 | 函數 | 說明 |
---|---|---|
T | if(boolean testCondition, T valueTrue, T valueFalseOrNull) | 判斷是否知足條件,若是知足返回一個值,若是不知足則返回另外一個值。 |
T | COALESCE(T v1, T v2, …) | 返回一組數據中,第一個不爲NULL的值,若是均爲NULL,返回NULL。 |
T | CASE a WHEN b THEN c [WHEN d THEN e]* [ELSE f] END | 當a=b時,返回c;當a=d時,返回e,不然返回f。 |
T | CASE WHEN a THEN b [WHEN c THEN d]* [ELSE e] END | 當值爲a時返回b,當值爲c時返回d。不然返回e。 |
返回類型 | 函數 | 說明 |
---|---|---|
int | length(string A) | 返回字符串的長度 |
string | reverse(string A) | 返回倒序字符串 |
string | concat(string A, string B…) | 鏈接多個字符串,合併爲一個字符串,能夠接受任意數量的輸入字符串 |
string | concat_ws(string SEP, string A, string B…) | 連接多個字符串,字符串之間以指定的分隔符分開。 |
string | substr(string A, int start) substring(string A, int start) | 從文本字符串中指定的起始位置後的字符。 |
string | substr(string A, int start, int len) substring(string A, int start, int len) | 從文本字符串中指定的位置指定長度的字符。 |
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_replace(string A, string B, string C) | 字符串A中的B字符被C字符替代 |
string | regexp_extract(string subject, string pattern, int index) | 經過下標返回正則表達式指定的部分。regexp_extract(‘foothebar’, ‘foo(.*?)(bar)’, 2) returns ‘bar.’ |
string | parse_url(string urlString, string partToExtract [, string keyToExtract]) | 返回URL指定的部分。parse_url(‘http://facebook.com/path1/p.php?k1=v1&k2=v2#Ref1′, ‘HOST’) 返回:’facebook.com’ |
string | get_json_object(string json_string, string path) | select a.timestamp, get_json_object(a.appevents, ‘.eventname’) from log a; |
string | space(int n) | 返回指定數量的空格 |
string | repeat(string str, int n) | 重複N次字符串 |
int | ascii(string str) | 返回字符串中首字符的數字值 |
string | lpad(string str, int len, string pad) | 返回指定長度的字符串,給定字符串長度小於指定長度時,由指定字符從左側填補。 |
string | rpad(string str, int len, string pad) | 返回指定長度的字符串,給定字符串長度小於指定長度時,由指定字符從右側填補。 |
array | split(string str, string pat) | 將字符串轉換爲數組。 |
int | find_in_set(string str, string strList) | 返回字符串str第一次在strlist出現的位置。若是任一參數爲NULL,返回NULL;若是第一個參數包含逗號,返回0。 |
array<array<string>> | sentences(string str, string lang, string locale) | 將字符串中內容按語句分組,每一個單詞間以逗號分隔,最後返回數組。 例如sentences(‘Hello there! How are you?’) 返回:( (「Hello」, 「there」), (「How」, 「are」, 「you」) ) |
array<struct<string,double>> | ngrams(array<array<string>>, int N, int K, int pf) | SELECT ngrams(sentences(lower(tweet)), 2, 100 [, 1000]) FROM twitter; |
array<struct<string,double>> | context_ngrams(array<array<string>>, array<string>, int K, int pf) | SELECT context_ngrams(sentences(lower(tweet)), array(null,null), 100, [, 1000]) FROM twitter; |
返回類型 | 函數 | 說明 |
---|---|---|
bigint | count(*) , count(expr), count(DISTINCT expr[, expr., expr.]) | 返回記錄條數。 |
double | sum(col), sum(DISTINCT col) | 求和 |
double | avg(col), avg(DISTINCT col) | 求平均值 |
double | min(col) | 返回指定列中最小值 |
double | max(col) | 返回指定列中最大值 |
double | var_pop(col) | 返回指定列的方差 |
double | var_samp(col) | 返回指定列的樣本方差 |
double | stddev_pop(col) | 返回指定列的誤差 |
double | stddev_samp(col) | 返回指定列的樣本誤差 |
double | covar_pop(col1, col2) | 兩列數值協方差 |
double | covar_samp(col1, col2) | 兩列數值樣本協方差 |
double | corr(col1, col2) | 返回兩列數值的相關係數 |
double | percentile(col, p) | 返回數值區域的百分比數值點。0<=P<=1,不然返回NULL,不支持浮點型數值。 |
array<double> | percentile(col, array(p~1,,\ [, p,,2,,]…)) | 返回數值區域的一組百分比值分別對應的數值點。0<=P<=1,不然返回NULL,不支持浮點型數值。 |
double | percentile_approx(col, p[, B]) | Returns an approximate p^th^ percentile of a numeric column (including floating point types) in the group. The B parameter controls approximation accuracy at the cost of memory. Higher values yield better approximations, and the default is 10,000. When the number of distinct values in col is smaller than B, this gives an exact percentile value. |
array<double> | percentile_approx(col, array(p~1,, [, p,,2_]…) [, B]) | Same as above, but accepts and returns an array of percentile values instead of a single one. |
array<struct{‘x’,'y’}> | histogram_numeric(col, b) | Computes a histogram of a numeric column in the group using b non-uniformly spaced bins. The output is an array of size b of double-valued (x,y) coordinates that represent the bin centers and heights |
array | collect_set(col) | 返回無重複記錄 |
返回類型 | 函數 | 說明 |
---|---|---|
數組 | explode(array<TYPE> a) | 數組一條記錄中有多個參數,將參數拆分,每一個參數生成一列。 |
json_tuple | get_json_object語句:select a.timestamp, get_json_object(a.appevents, ‘.eventname’) from log a; json_tuple語句: select a.timestamp, b.* from log a lateral view json_tuple(a.appevent, ‘eventid’, ‘eventname’) b as f1, f2 |
explode示例:
數組 | SQL | 返回 |
---|---|---|
myCol 1,2 | SELECT explode(myCol) AS myNewCol FROM myTable | myNewCol1 2 3 4 |