Hive 与 SQL 标准和主流 SQL DB 的语法区别

文章目录

  • 1.Hive 简介
  • 2.Hive 与 SQL 标准和主流 SQL DB 的语法区别
  • 参考文献

1.Hive 简介

Hive是一种基于Hadoop的数据仓库软件,可以将结构化数据文件映射为一张数据库表,并提供了类SQL查询接口,使得用户可以使用SQL类语言来查询数据。Hive可以处理包括文本、CSV、JSON、ORC和Parquet等格式的数据文件,支持数据的导入、导出、转换等操作。Hive可以在Hadoop集群上运行,利用Hadoop的分布式计算能力,可以处理大规模的数据集。

Hive基于Hadoop MapReduce进行计算,并提供了用于数据处理和分析的一系列工具和库,例如HiveQL(类SQL查询语言)、UDF(用户自定义函数)、HiveServer、Hive Metastore等。HiveQL类SQL查询语言支持大多数标准SQL操作,如SELECT、JOIN、GROUP BY、HAVING、ORDER BY等,同时还支持自定义函数和自定义聚合函数。

Hive还支持数据仓库中常见的分区、分桶、索引等特性,可以提高查询性能和数据管理效率。Hive可以与其他大数据工具和框架进行集成,例如Hadoop、HBase、Spark、Pig等,可以方便地进行数据处理和分析。

总之,Hive是一个强大的数据仓库工具,提供了方便的SQL查询接口和大规模数据处理能力,可以帮助用户快速构建和管理数据仓库,进行数据分析和挖掘。

2.Hive 与 SQL 标准和主流 SQL DB 的语法区别

(1)Hive 通过 SELECT 进行 INSERT INTO TABLE 时,无法指定待插入的列。

这是因为 Hive SQL 中的 INSERT 子句是按照列的位置顺序进行插入的,而不是按照列名进行插入的,并且要插入全部字段。

这与 SQL 标准语法有所差异。比如 MySQL 在 INSERT 时可以指定目标表的列。

解决办法是严格保证 INSERT 语句中的字段和建表语句中的字段的顺序一致,如果没有则显示指定缺省值。

比如源表 source_table 列如下:

CREATE TABLE source_table (a STRING,b STRING,c STRING
);

目标表 target_table 定义如下:

CREATE TABLE target_table (a STRING,b STRING,c STRING
);

如果从 source_table 查询 a 和 c 插入到 target_table,插入时指定列名将报错:

INSERT OVERWRITE TABLE target_table(a, c)
SELECT a, c FROM source_table;

应该是:

INSERT OVERWRITE TABLE target_table
SELECT a, NULL, c FROM source_table;

(2)Hive 中不能将列别名用于 GROUP BY 子句。

在 Hive 中,不能在 GROUP BY 子句中使用列别名,只能使用原始列名。这是因为在查询执行顺序中,GROUP BY 子句是在列别名之后执行的,因此无法识别别名。

假设有一个表 my_table 包含两个列 col1 和 col2,其中 col1 的值为 ‘A’ 或 ‘B’,col2 的值为整数。现在需要按照 col1 列的值进行分组,并计算每组中 col2 的平均值。以下是一个错误的查询语句:

SELECT col1 AS my_col, AVG(col2) as avg_col
FROM my_table
GROUP BY my_col;

正确的语句应该是:

SELECT col1, AVG(col2) as avg_col
FROM my_table
GROUP BY col1;

SQL 标准GROUP BY 子句中不允许使用列别名,只能使用原始列名。这与 HiveSQL 中的规则相同。

MySQL 在某些情况下支持使用列别名,但是这并不是标准行为。具体而言,如果使用的是 MySQL 5.7.5 或更高版本,并且在 SELECT 子句中使用了列别名,则可以在 GROUP BY 子句和 ORDER BY 子句中使用相同的别名。例如:

SELECT col1 + col2 AS my_col, COUNT(*)
FROM my_table
GROUP BY my_col
ORDER BY my_col DESC;

(3)Hive 子查询一定要设置别名。

Hive 即使不需要对子查询进行引用,也要设置别名。

在 SQL 标准中,并没有强制规定子查询一定要设置别名。不同的数据库实现可能会有不同的规定。但是,大多数数据库实现都要求子查询设置别名,比如 MySQL、SQL Server 和 PostgreSQL。

而在 Oracle 中是可以不加别名。

SELECT  * FROM (SELECT * FROM t);

(4)关于窗口函数。

Hive 对窗口函数的支持比较早,自 Hive 0.11 版本便开始支持窗口函数。

而 MySQL 从 8.0 版本才开始支持窗口函数。

窗口函数是一种基于窗口(Window)的计算方式,可以对数据集中的一个子集(称为窗口)进行聚合、排序、排名等操作,同时不影响原始数据集中的数据。

通常的窗口函数的语法如下:

function_name(expression) OVER ([PARTITION BY partition_expression, ... ][ORDER BY sort_expression [ASC | DESC], ... ][ROWS | RANGE frame_specification]
)

其中,function_name(expression) 表示要进行计算的窗口函数和参数;PARTITION BY 子句用于对数据进行分组,确定窗口的大小;ORDER BY 子句用于对数据进行排序,确定窗口的位置;ROWS 或者 RANGE 用于指定窗口的类型;frame_specification 用于进一步指定窗口的大小和位置。

需要注意的是,不同的数据库实现对于窗口函数语法的支持和细节可能会有所不同,实际使用中需要查看所使用的数据库实现的文档,以了解其具体的语法和使用方式。


参考文献

LanguageManual - Apache Hive
MySQL 8.0 Reference Manual :: 14.20 Window Functions

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/10728.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

7-117 死亡隧道

小毛驴要回家了,凭借着刚从老毛驴处学到的闪烁魔法,小毛驴信心满满地出发了。这一次它来到了另一条死亡隧道口,但是,小毛驴不知道死亡威胁随时存在,因为它所打算穿过的这条死亡隧道即将于T秒时间后坍塌。 已知小毛驴行走的速度是每秒17米,而小毛驴拥有的闪烁法术可以使它…

返回类型后置,一个用途是为了逻辑上的体现?

大家一般都是先关心参数,然后最后再看返回的是什么类型。 在这里把返回类型后置,可能就是一种逻辑上的体现吧 fmt的一个函数。 \fmt\core.h 这个函数的意义,应该就是用变长参数初始化成一个format_arg_store类型的变量,并返回。…

Rust学习笔记(上)

前言 笔记的内容主要参考与《Rust 程序设计语言》,一些也参考了《通过例子学 Rust》和《Rust语言圣经》。 Rust学习笔记分为上中下,其它两个地址在Rust学习笔记(中)和Rust学习笔记(下)。 编译与运行 Ru…

成功解决No module named ‘huggingface_hub.inference._text_generation‘

成功解决No module named huggingface_hub.inference._text_generation 目录 解决问题 解决思路 解决方法 解决问题 No module named huggingface_hub.inferen

python使用yaml文件以及元组样式字符串使用eval的类型转换

编程中,对于可变内容,最好是将其放入配置文件中,经过这段时间的学习,感觉使用yaml文件很方便。我的环境:win10,python3.8.10。 python使用yaml文件,首先要安装库。 pip38 install pyyaml 安装…

AWTK 开源串口屏开发(18) - 用 C 语言自定义命令

AWTK-HMI 内置了不少模型,利用这些模型开发应用程序,不需要编写代码即可实现常见的应用。但是,有时候我们需要自定义一些命令,以实现一些特殊的功能。 本文档介绍如何使用 C 语言自定义命令。 1. 实现 hmi_model_cmd_t 接口 1.1…

实现二叉树的基本操作

博主主页: 码农派大星. 关注博主带你了解更多数据结构知识 1我们先来模拟创建一个二叉树 public class TestBinaryTreee {static class TreeNode{public char val;public TreeNode left;public TreeNode right;public TreeNode(char val) {this.val val;}}public TreeNode …

交叉编译u-boot,qemu启动测试

交叉编译u-boot 1 配置交叉编译工具链: 下载地址 https://releases.linaro.org/components/toolchain/binaries/ ### CROSS-COMPILE export AARCH64_LINUX_GNU_TOOLS/media/wmx/cross_compile_tools/aarch64-linux-gun/gcc-x86_64_aarch64-linux-gnu/bin export …

linux 安装 mangodb 并设置服务开机自启

1、下载 wget http://mosquitto.org/files/source/mosquitto-1.6.8.tar.gz 2、解压 tar -zxvf mosquitto-1.6.8.tar.gz 3、编译安装cd mosquitto-1.6.8 make sudo make install4、在当前目录。进入mosquitto服务文件存放的文件夹 cd service/systemd可以看到3个文件 点击read…

【C/C++】设计模式——工厂模式:简单工厂、工厂方法、抽象工厂

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;c系列专栏&#xff1a;C/C零基础到精通 &#x1f525; 给大…

二.基础篇: 面向对象进阶

1. 基础篇语法篇&#xff1a;一.基础篇&#xff1a;基础语法-CSDN博客 面向对象进阶 本章主要学习内容&#xff1a; static继承包&#xff0c;final&#xff0c;权限修饰符&#xff0c;代码块抽象类接口多态内部类 1. static static翻译过来就是静态的意思static表示静态&am…

AI语音模型PaddleSpeech踩坑(安装)指南

PaddleSpeech简介 PaddleSpeech 是基于飞桨 PaddlePaddle 的语音方向的开源模型库&#xff0c;用于语音和音频中的各种关键任务的开发&#xff0c;包含大量基于深度学习前沿和有影响力的模型。 PaddleSpeech安装步骤 提示&#xff1a;要找到一个合适的PaddleSpeech版本与pad…

STM32开发学习——使用 Cortex-M3M4M7 故障异常原因与定位

STM32开发学习——使用 Cortex-M3/M4/M7 故障异常原因与定位 文章目录 STM32开发学习——使用 Cortex-M3/M4/M7 故障异常原因与定位文档说明&#xff1a;官方参考文档线上链接&#xff08;可在线阅读与下载&#xff09;&#xff1a;故障异常处理程序HardFault优先级升级说明故障…

java项目之相亲网站的设计与实现源码(springboot+mysql+vue)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的相亲网站的设计与实现。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 相亲网站的设计与实…

连升三级!openGauss单机版从2.1.0经停3.0.0升级至5.0.0

前言 如前文所述&#xff0c;我们的小demo项目起初安装了openGauss的2.1.0版本&#xff0c;由于2.1.0不是长期维护&#xff08;LTS&#xff09;版本&#xff0c;所以要升级到5.0.0LTS。考虑到虽然是DEMO项目&#xff0c;但也有些体验用户&#xff0c;所以为了保障业务连续性&a…

2023版brupsuite专业破解安装

安装教程&#xff0c;分两部分&#xff1a; 1、安装java环境、参考链接JAVA安装配置----最详细的教程&#xff08;测试木头人&#xff09;_java安装教程详细-CSDN博客 2、安装2023.4版本brupsuite&#xff1a;参考链接 2023最新版—Brup_Suite安装配置----最详细的教程&…

Java---类和对象第一节

目录 1.面向对象初步认识 1.1什么是面向对象 1.2面向对象和面向过程的区别 2.类的定义和使用 2.1简单认识类 2.2类的定义格式 2.3类的实例化 2.4类和对象的说明 3.this关键字 3.1访问本类成员变量 3.2调用构造方法初始化成员变量 3.3this引用的特性 4.对象的构造以…

一文弄懂 Linux 系统调用函数之 exec 函数族

目录 简介函数原型参数说明返回值函数区别使用示例采用参数列表传递参数&#xff0c;以 execl 为例采用参数数组传递参数&#xff0c;以 execv 为例调用 PATH 下可执行文件&#xff0c;以 execlp 为例使用新的环境变量给新进程&#xff0c;以 execle 为例 更多内容 简介 exec …

【Java】/*方法的使用-快速总结*/

目录 一、什么是方法 二、方法的定义 三、实参和形参的关系 四、方法重载 五、方法签名 一、什么是方法 Java中的方法可以理解为C语言中的函数&#xff0c;只是换了个名称而已。 二、方法的定义 1. 语法格式&#xff1a; public static 返回类型 方法名 (形参列表) { //方…

windows server 2019 安装 docker环境

一、根据官方说明进行安装 , 看起来过程相当简单, 但问题还是有的 准备 Windows 操作系统容器 | Microsoft Learn // 一个 powershell 脚本&#xff0c;该脚本配置环境以启用与容器相关的 OS 功能并安装 Docker 运行时。 Invoke-WebRequest -UseBasicParsing "https://r…