美文网首页
Hive SQL关键字常见面试题

Hive SQL关键字常见面试题

作者: 无需言做自己 | 来源:发表于2023-02-27 22:07 被阅读0次

    1、union 和 union all的区别

    union会对结果进行去重,union all会保留重复数据

    2、窗口函数rank() over(order by )、dense_rank() over(order by)、row_number() over(order by)区别

    rank() 函数rank相同,排序值相同,且占排序位置。如113446

    dense_rank() 函数rank相同,排序值相同,不占排序位置。如1223445

    row_number() 函数rank相同,排序依次递增,占排序位置。如123456

    3、空值不占空间,null占空间。

    4、开窗函数sum() over(partition by A order by B

    5、grouping sets用法 select a,b,count(c),grouping__id from table_A where dt = 20230228 group by 1,2 grouping sets(a,b,(a,b))

    6、count (distinct )和group by的区别

    数据量不大时,两者性能相近。前者主要用于统计去重指标,后者主要用于分组统计。数据量较大时可以使用里层group by,外层count代替count (distinct )操作。由于count distinct全局只有一个reduce,数据量较大时,容易reduce端数据倾斜,性能较差。

    两者执行方式不同,distinct主要对数据进行两两比较,需要遍历整个表。group by分组类似先建立索引再查索引,当数据量大时,group by速度快于distinct。

    7、exists和in的区别

    in在查询时,先执行子查询,然后与外表进行笛卡尔积按照过滤条件进行过滤。所以内表小时,in比较快。

    exists指定一个子查询,检测行的存在。遍历循环外表,然后看外表是否有和内表一样的数据,匹配上就将结果放入结果集中。

    exists只返回true或false。因此查询的select *也可以是select 1或其他。select * from A exists (select 1 from B where A.id = B.id); exists的实际过程经过了优化,而非逐条对比;Exists子查询往往可以使用条件表达式。其他子查询或join来代替。

    当A表数据量大于B表时,in优于exists。当A表数据量小于B表时用exists优于in。【A与B表的id字段应该建立索引】。如果两个表查询性能相当,那么in和exists差别不大,如果两个表一个较小,一个是大表,则子查询的大用exists。子查询小的用in。

    相关文章

      网友评论

          本文标题:Hive SQL关键字常见面试题

          本文链接:https://www.haomeiwen.com/subject/tejkldtx.html