hive数据库和传统的sql查询,在语法上有什么相同点和差别?

问题

背景:最近测试的项目中涉及到大数据的测试工作内容~,但之前本人只涉及一些关系型数据库的使用,对hive这种非关系型数据库知之甚少。在测试一段时间之后,除了自行百度了解到的一些区别外,另外就是在使用hive数据库测试的时候会更多地使用一些开窗函数。
想了解到的信息:想具体知道两者在语法上有哪些具体的相同点和不同点~所以求教行业大佬指点迷津。跪求~

报错信息

环境

相同点:

  1. 数据查询:HiveQL 和传统的 SQL 都用于从数据库中查询数据。
  2. 数据操作:两者都支持数据操作,如插入、更新和删除数据。
  3. 表操作:HiveQL 和传统的 SQL 都支持创建和管理表格。

差异点:

HiveQL 在语法上与传统的 SQL 有一些差异。例如,HiveQL 使用 SELECT 语句来查询数据,但它的语法可能与传统的 SQL 有所不同,特别是在处理复杂的数据类型和嵌套查询时

语法上的不同可以说的再细点吗

  1. 关键字:HiveQL 和传统的 SQL 使用一些相同的关键字,如 SELECTFROMWHERE 等,但也有一些差异。例如,HiveQL 使用 INSERT OVERWRITE 来覆盖写入表格,而传统的 SQL 使用 INSERT INTO
  2. 数据类型:HiveQL 支持更多的复杂数据类型,如结构体、数组和映射。传统的 SQL 通常只支持基本的数据类型,如整数、字符串和日期。
  3. 表操作:在传统的 SQL 中,表格通常是以事先定义的模式(Schema)存在的,查询和操作表格时,需要根据模式来处理字段。而在 HiveQL 中,表格可以是无模式的(Schema-less),这意味着可以动态地根据数据来解析和处理字段。
  4. 函数:HiveQL 和传统的 SQL 都提供了一系列的内置函数,用于处理数据。然而,HiveQL 的内置函数通常更加面向大数据处理,包括对复杂数据类型的操作和处理。
  5. 优化和执行:传统的 SQL 数据库通常有自己的优化器和执行引擎,用于优化查询和执行计划。而 HiveQL 则是基于 Hadoop 的批处理系统,使用 MapReduce 或 Tez 等底层执行引擎来处理查询,这可能导致查询性能较慢。

好的 感谢 另外想问下 比如常用的一些开窗函数在两者之间是不是都可以正常使用呢?(像…()over(partion by … order by … ))

窗口函数都支持的
语法基本上是一样的,我知道的有以下几点不同的地方,供参考
1.hive由于是使用在大数据场景下,一般表都会分区,使用partition,通常可以按时间分区,例如每天一个分区,show partitions + 表名 可以查看表的分区
2.hive由于数据量比较大,容易有数据倾斜的问题,需要关注一下大小表join的先后顺序哪张先加载进内存,还有空值等处理(更具体我也不太懂了)
3.hive中不支持update和delete单条数据,一般是用insert overwrite直接覆盖,重写分区
4.hive支持 with table as(类似临时表)写起来结构比较清晰,mysql不支持
5.hive不适合处理实时计算任务

好的 谢谢