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 |