在Hive SQL中,单表查询操作至关重要。首先,理解order by和sort by的区别至关重要。order by对所有数据进行全局排序,可能导致大规模数据处理时耗时较长,而sort by则在数据进入reducer前完成局部排序,适用于mapred.reduce.tasks大于1的情况,但仅保证每个reducer输出有序,不保证全局有序。WHERE语句用于指定查询条件,例如排除null值,例如:SELECT * FROM table WHERE s_score IS NOT NULL。GROUP BY用于分组处理数据,GROUP BY后的select只能包含分组字段或聚合函数。where与having的区别在于,having在分组后筛选,只能用于分组字段或聚合,而where则对数据表直接筛选,不能与GROUP BY连用。JOIN操作在Hive 2版本中支持不等值连接,可以使用>、<符号。多个JOIN将启动多个作业,提高效率。逗号连接表与inner join效果相同,但书写方式不同。order by和sort by用于排序,order by是全局排序,而sort by则在每个reducer内完成。在编写SQL时,distribute by应置于sort by之前,以决定数据如何分配到reducer中。函数是Hive的强大工具。聚合函数如COUNT(), MAX(), MIN(), SUM(), AVG()在处理数据时需注意,null值会影响某些操作的结果。例如,COUNT(*)会包含null,而COUNT(id)则不包含。关系、数学、逻辑和数值运算提供了多种计算选项,如log2(), log(), hex(), unhex(), conv()等。日期函数如from_unixtime(), unix_timestamp()有助于处理时间数据。字符串函数丰富多样,包括长度、反转、连接、截取、转换大小写、去空格、正则表达式处理等。此外,处理JSON数据的函数如get_json_object(), explode(),以及lateral view用于处理数组和复杂的列转行操作。内置函数如NVL用于处理NULL值,而split(), explode()和lateral view则用于数据转换和列转行操作,它们常与UDTF(用户定义的转换函数)结合使用,实现数据的灵活处理。