注意:hive的SQL函数和MySQL中的函数基本上一样,他们2个语法都差不多,所以大胆去用就行
COALESCE:在Hive中,函数用于从一组表达式中返回第一个非空(不为NULL)的值。如果所有的表达式都为NULL,则COALESCE函数返回NULL。它类似于SQL中的COALESCE函数。
COALESCE(expr1, expr2, ..., exprn)
举例:
SELECT COALESCE(col1, col2) AS result
FROM your_table;
NVL:在 Hive 中,NVL 函数用于判断一个表达式是否为 NULL,如果表达式为 NULL,则返回指定的默认值;如果表达式不为NULL,则返回表达式本身的值。
NVL(expr, default_value)
举例:
SELECT NVL(col1, 'default_value1') AS processed_col1,
NVL(col2, 'default_value2') AS processed_col2
FROM your_table;
substr :在 Hive 中,substr 函数用于从一个字符串中提取子串。它允许你指定字符串的起始位置(注意下标从1开始)和要提取的子串长度。
substr(str, start [, length])
举例:
SELECT substr('Hello, World!', 8, 5) AS extracted_substring;
SELECT substr('Hello, World!', 8) AS extracted_substring;
通配符:在 Hive 中,模糊查询可以通过使用通配符来实现,常用的通配符有 % 和 _。
% 通配符:匹配任意长度的字符串,可以出现在模式的开头、中间或末尾。
_ 通配符:匹配单个字符。
查找以特定字符串开头的记录:
举例:
SELECT column1, column2
FROM your_table
WHERE column1 LIKE 'prefix%';
TRUNCATE :在 Hive 中,TRUNCATE 是用于截断(清空)表中所有数据的操作。使用 TRUNCATE 后,表的结构(Schema)仍然保持不变,但表中的所有数据将被删除。
请注意,TRUNCATE 操作在执行时是非事务性的,这意味着它不能回滚。因此,在执行 TRUNCATE 操作之前,应该谨慎考虑,确保您不需要表中的数据,因为一旦执行,数据将不可恢复。
CAST :CAST 是 SQL 中的一个函数,用于将一个数据类型转换为另一个数据类型。在 SQL 中,有时候可能需要将某些列或表达式的数据类型进行转换,以便进行特定的计算、比较或其他操作,将无效的字符串转换为数字,将返回NULL:
举例:
SELECT name, CAST(age AS INT) AS age_int
FROM your_table;
${} :在 Hive SQL 中,${} 格式的字符串通常用作模板变量或参数占位符。这种形式的字符串在 Hive SQL 中被称为变量引用
在 Hive SQL 的查询或脚本中,${variable_name} 的形式用于表示一个变量或参数,并且可以在运行时由具体的值替代。这样可以在编写查询或脚本时不指定具体的值,而在运行时根据需要动态地替换这些变量。
SELECT *
FROM your_table
WHERE column1 > '${my_variable}';(注意加这个''引号)
LEAD :在 Hive SQL 中,LEAD 函数是一种窗口函数,用于获取指定行后的下一个行的值。它允许在结果集中访问当前行之后的某一行的值,从而可以进行与后续行相关的计算或分析。
LEAD(expression, offset, default_value) OVER (
[PARTITION BY partition_col1, partition_col2, ...]
ORDER BY order_col1 [ASC | DESC], order_col2 [ASC | DESC], ...)
参数说明:
expression: 要获取后续行值的表达式或列。
offset: 表示要获取的后续行的偏移量,即要获取第几个后续行的值。偏移量是一个整数值,可以是正数、负数或零。如果 offset 为正数,则表示后续第几行;如果为负数,则表示前几行;如果为零,则表示当前行本身。
default_value: 当后续行不存在时,即偏移量超过结果集范围时,返回的默认值。这是可选参数,可以不指定,默认为 NULL。
LEAD 函数计算的是当前行之后的某一行的值,因此 LEAD 函数在结果集的最后几行将返回 NULL 或默认值,因为后续行不存在。
注意事项:
1.在 SQL 中,如果一个字符串类型的字段里面存储的是数字,可以在 WHERE 子句中直接比较大小。SQL 数据库通常会在执 行比较操作时,将字符串类型的字段自动转换为数值类型进行比较,这个过程被称为隐式转换。
2.sum()函数只能用于数值型数据,而你尝试对varchar类型的数据应用sum()函数,将导致错误
3.在使用左右连接时,一定要保障主表与关联表的on条件是1:1的关系,以保障正常查询主表数据。
表的分类:
事实表
事实表的特征是表里没有存放实际的内容,它是一堆主键的集合,这些 ID 分别能对应到维度表 中的一条记录
事实表包含了与各维度表相关联的外键,可与维度表关联
事实表的度量通常是数值类型,且记录数会不断增加,表数据规模迅速增长
明细表(宽表)
事实表的数据中,有些属性共同组成了一个字段(糅合在一起),比如年月日时分秒构成了时 间,当需要根据某一属性
进行分组统计的时候,需要截取拼接之类的操作,效率极低
为了分析方便,可以事实表中的一个字段切割提取多个属性出来构成新的字段,因为字段变多了,所以称为宽表,原来的成为窄表。因为宽表的信息更加清晰明细,所以也称之为明细表
维度表
维度表是对数据进行分析时所用的一个量,每个维度表都包含单一的主键列
维度表的主键可以作为与之关联的任何事实表的外键,维度表中行的描述环境应与事实表中行 完 全对应
维度表通常比较宽,是扁平型非规范表,包含大量的低粒度的文本属性
最后:我本人是刚入公司实习了半个月(说是开发岗,结果成了SQLboy),还有许多的函数还没接触到,以及很多数据库相关的知识还需要学习,后续有时间我也会补充,希望帮到大家