企业里面常用的SQL函数,以及一些SQL注意事项

注意: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),还有许多的函数还没接触到,以及很多数据库相关的知识还需要学习,后续有时间我也会补充,希望帮到大家

猜你喜欢

转载自blog.csdn.net/m0_71695472/article/details/132023727