1、执行顺序:from>where>group by>having>order by>select
    2、having和where的区别:

    • where是在分组前对数据进行过滤,而having是在分组后对数据进行过滤。
    • having可以使用聚合函数,而where是不可以的。

    3、limit:limit是用来限制select出的结果的。limit2,3 第一个参数2是从0开始的。
    4、order by:进行全局排序。不管有多少数据量,都只会有一个reducer,结果输出在同一个文件上。数据量大效率就会很低。
    5、cluster by:将数据按照一个字段进行分组,并且在分组内按照这个字段进行正序排序。
    6、distribute by + sort by = cluster by
    distribute by 功能为按照一个字段进行分组,sort by为按照一个字段进行排序。
    7、union:作用是将多个select查询的结果集变为一个。
    union distinct 去重(默认为去重)
    union all 不去重
    8、concat()将多个字符串连接成一个字符串,有一个为null,则结果为null。
    concat_ws()参数一为分隔符,分隔符为空则返回结果均为空,如果有空字段则不会影响其他结果输出。
    9、<> 不等于
    10、regexp_replace (a,b,c)正则表达式替换:a被执行的字符串,b正则匹配规则,c为被替换的字符串。
    11、create view 视图名 as (查询语句)
    12、cast(替换字符串)
    13、substr:截取字符串 substr(a,b,c)a待截取的字符串,b起始位置,c截取长度
    14、insert overwrite table 表名 「查询语句」:将查询结果插入到表中。
    15、正则表达式:https://www.runoob.com/regexp/regexp-rule.html(菜鸟教程)
    ^abc 可以匹配 abcde,但是不能匹配 bbabc。
    abc$ 可以匹配bbabc,但是不能匹配abcde。
    如果什么都不加,如abc,则它既可以匹配abcde,也可以匹配bbabc。
    [a-z] // 匹配所有的小写字母 [A-Z] // 匹配所有的大写字母 [a-zA-Z] // 匹配所有的字母 [0-9] // 匹配所有的数字 [0-9.-] // 匹配所有的数字,句号和减号 [ \f\r\t\n] // 匹配所有的白字符

    [^a-z] //除了小写字母以外的所有字符 [^\\/\^] //除了()(/)(^)之外的所有字符 [^\”\’] //除了双引号(“)和单引号(‘)之外的所有字符

    [[:alpha:]] 任何字母
    [[:digit:]] 任何数字
    [[:alnum:]] 任何字母和数字
    [[:space:]] 任何空白字符
    [[:upper:]] 任何大写字母
    [[:lower:]] 任何小写字母
    [[:punct:]] 任何标点符号
    [[:xdigit:]] 任何16进制的数字,相当于[0-9a-fA-F]

    *和{0,}是相等的,都代表出现0次或者多次,+和{1,}是相等的,都代表1或者多次