- 集合数据类型:
- array, array[0]
- map, map[key]
- struct, struct[column_name]
- 算数运算:
- A%B:A除以B的余数
- A&B:与
- A|B:或
- A^B:亦或
- ~A:反
- 数学函数
- round(column, n)
- floor(), ceil()
- rand()
- exp(column, d)
- ln(d):以自然数为底d的对数
- log10(d), log2(d), log(a, b):以a为底的b的对数
- pow(a, b):a的b次幂
- sqrt(), abs()
- bin(i):计算二进制i的string类型值
- sin(), asin(), cos(), acos(), tan(), atan()
- sign():判断正负,若正,返回1,若负,返回-1,否则返回0
- e(), pi()
- 聚合函数
- count(*), count(x), count(distinct x)
- sum(x), sum(distinct x), 同avg, max, min
- variance(col), var_pop(col):返回方差;var_samp(col):返回样本方差
- stddev_pop:返回标准偏差;stddev_samp:返回标准样本偏差
- corr(col1, col2):返回两组数值的相关系数
- percentile(col, p):在p(百分比)处对应的值;percentile(col, array(p1, p2...))
- 表生成函数:可以将单列拓展为多列/多行
- explode(array):返回n行,每行对应array数组中的一个元素
- explode(map):返回n行,每行对应每个map键-值对,两列
- 其他内置函数
- cast(col as col_type):转换数据类型
- concat(col1,col2...):连接
- concat_ws(separator, col1, col2...):用分隔符连接
- find_in_set(s, commaSeparatedString):返回在以逗号分隔的字符串中s出现的位置,如果没有找到则返回null
- get_json_object(json_string, string_path):从给定路径上的json字符串中抽取出json对象,并返回这个对象的json字符串形式
- instr(str, substr):查找str中substr第一次出现的位置;locate(substr, string[,n]):查找在字符串str中的pos位置后字符串substr第一次出现的位置
- length():计算字符串的长度
- lower()/upper:转换为小写/大写
- ltrim(s):将字符串s前面的空格全部去除掉
- regexp_extract(subject, regex_pattern, index):抽取字符串subject中符合正则表达式regex_pattern的第index个部分的子字符串
- regexp_replace(s, regex, replacement):按照正则表达式regex将字符串s中符合条件的部分天秤replacement
- repeat(s):重复输出n次字符串s
- reverse:反转字符串
- rtrim(s):将字符串s后面的空格全部去除掉
- size(map/array):返回map/array中元素的个数
- space(int n):返回n个空格
- split(s, pattern):按照正则表达式pattern分割字符串s,并将分割后的部分以字符串数组的方式返回
- str_to_map(s, delim1, delim2):将字符串s按照指定分隔符转换成map,delim1是键值对之间的分隔符,第三个分隔符是键和值之间的分隔符
- substr/substring(s, start_index, length):对于字符串s,从start位置开始截取length长度的字符串
- trim(s):将字符串s前后出现的空格全部去除掉
- from_unixtime(unixtime):将时间戳转换为UTC时间,并用字符串表示(UTC时间=北京时间-8小时)
- unix_timestamp(date):将此时间字符串转换为unix时间戳。(输入的时间字符串格式必须为yyyy-MM-dd HH:mm:ss)
- unix_timestamp(date, pattern):将指定时间字符串格式的字符串转换成unix时间戳,eg:unix_timestamp('2009-03-30','yyyy-MM-dd')
- to_date(string timestamp):返回时间字符串的日期部分
- year/month/day/hour/minute/second(string date):返回时间字符串中的年份/月份/天/小时/分钟/秒并使用int类型表示
- weekofyear(string date):位于1年的第几周内
- datediff(enddate, startdate):计算相差天数
- date_add/date_sub(start_date, int days)
- from_utc_timestamp(timestamp, timezone):如果给定的时间戳并非UTC,则将其转化为指定时区下的时间戳
- to_utc_timestamp(timestamp, timezone):如果给定的时间戳是指定时区下的时间戳,则将其转化成UTC下的时间戳
- A [not] like B:_匹配单个字符,%匹配多个字符;A rlike/regexp B:正则表达式匹配
- Hive的join只支持等值连接
- 先执行join,后执行where,即where语句在连接操作执行后才会执行
- 类型转换:cast(value as type)
- 抽样查询:select * from bi.mbk_scan_picture tablesample(bucket 1 out of 1000000 on rand()) s
- 数据块抽样(按照抽样百分比进行抽样):select * from numbersfloat TABLESAMPLE(0.1 PERCENT) s;
- 视图:视图可以允许保存一个查询并像对待一个表一样对这个查询进行操作,这是一个逻辑结构,因为它不像一个表一样会存储数据;
- 使用视图来限制基于条件的过滤的数据
- 使用视图来降低查询复杂度:封装复杂的部分可以使用户最终通过重用重复的部分来构建复杂的查询
- 索引:
- show formatted index on employees
- drop index if exists employees_index on employees
- 模式设计:分区、同一份数据多种处理、分桶表数据存储
- hive没有主键或基于序列密钥生成的自增键的概念
- 调优
- explain
- join优化:将大表放在join的右边