HQL语法

news/2024/11/15 4:36:37/

HQL基础语法

Hive中的语句叫做HQL语句,是一种类似SQL的语句,基本上和SQL相同但是某些地方也是有很大的区别.

数据库操作

创建数据库

  • 1.创建一个数据库,数据库在HDFS上的默认存储路径是/hive/warehouse/*.db。

create database hive01;
  • 避免要创建的数据库已经存在错误,增加if not exists判断。(标准写法)

create database if not exists hive01;
  • 创建数据库指定位置

create database if not exists hive01 location '/hive01.db';

修改数据库

用户可以使用ALTER DATABASE命令为某个数据库的DBPROPERTIES设置键-值对属性值,来描述这个数据库的属性信息。数据库的其他元数据信息都是不可更改的,包括数据库名和数据库所在的目录位置。

alter database hive01 set dbproperties('createtime'='20220727');

查看数据库

  • 显示所有数据库

show databases;
  • 显示数据库使用like过滤

show databases like 'h*';
  • 查看数据库详情

desc database hive01;
describe database extended hive01 ; -- 带属性
  • 切换数据库

use hive01;

删除数据库

  • 最简写法

drop database hive01;
  • 如果删除的数据库不存在,最好使用if exists判断数据库是否存在。否则会报错:FAILED:SemanticException [Error 10072]: Database does not exist: db_hive

drop database if exists hive01;
  • 如果数据库不为空,使用cascade命令进行强制删除

drop database if exists hive01 cascade;

 Hive数据类型

Hive数据类型指的是表中列的字段类型;

整体分为两类︰原生数据类型( primitive data type)和复杂数据类型( complex data type ) 。

原生数据类型包括:数值类型、时间日期类型、字符串类型、杂项数据类型.

复杂数据类型包括:array数组、map映射、struct结构.

4.2.1 原生数据类型

Java数据类型Hive数据类型长度
byteTINYINT8位有符号整型。取值范围:-128~127。
shortSMALLINT16位有符号整型。取值范围:-32768~32767。
intINT32位有符号整型。取值范围:-2 31 ~2 31 -1。
longBIGINT64位有符号整型。取值范围:-2 63 +1~2 63 -1。
booleanBOOLEAN布尔类型,true或者false
floatFLOAT单精度浮点数
doubleDOUBLE双精度浮点数
varchar(n)变长字符类型,n为长度。取值范围:1~65535。
char(n)固定长度字符类型,n为长度。最大取值255
Stringstring字符串类型
DATE日期类型,格式为 yyyy-mm-dd .
DATETIME日期时间类型。 精确到毫秒
TIMESTAMP时间戳

对于Hive的String类型相当于数据库的varchar类型,该类型是一个可变的字符串,不过它不能声明其中最多能存储多少个字符,理论上它可以存储2GB的字符数。

隐式类型转换

  • 与标准SQL类似,HQL支持隐式和显式类型转换。

  • 原生类型从窄类型到宽类型的转换称为隐式转换,反之,则不允许。

  • 下表描述了类型之间允许的隐式转换∶

  •  

强制类型转换

使用CAST函数 cast(数据 as 新类型)

select cast( '100' as double); 会将100字符串转换为100整数值。
如果强制转换失败,例如select cast ('aa' as int );,该函数返回NULL。

4.2.2 复杂数据类型

类型定义演示
Arrayarray<int>array(1,2,3,4)
Mapmap<string, string>map("k1","v1","k2","v2")
Structstruct<x:int, y:int>named_struct(‘x’:1, 'y’:2)

Hive有三种复杂数据类型ARRAY、MAP 和 STRUCT。ARRAY和MAP与Java中的Array和Map类似,而STRUCT与C语言中的Struct类似,它封装了一个命名字段集合,复杂数据类型允许任意层次的嵌套。

 数据库表基本操作

CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name 
[(col_name data_type [COMMENT col_comment], ...)] 
[COMMENT table_comment] 
[PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)] 分区
[CLUSTERED BY (col_name, col_name, ...) 分桶
[SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS] 
[ROW FORMAT DELIMITED | SERDE serde_name WITH SERDEPROPERTIES(property_name=property_value,..)] 
[STORED AS file_format] 
[LOCATION hdfs_path]
​
​
[] 中括号的语法表示可选。
|  表示使用的时候,左右语法二选一。
建表语句中的语法顺序要和语法树中顺序保持一致。
​
字段简单说明
-  CREATE TABLE 创建一个指定名字的表。如果相同名字的表已经存在,则抛出异常;用户可以用 IF NOT EXISTS 选项 来忽略这个异常。
-  EXTERNAL  外部表
-  COMMENT: 为表和列添加注释。
-  PARTITIONED BY 创建分区表
-  CLUSTERED BY 创建分桶表
-  SORTED BY  排序不常用
- ROW FORMAT DELIMITED 使用默认序列化LazySimpleSerDe 进行指定分隔符
- SERDE 使用其他序列化类 读取文件
- STORED AS 指定文件存储类型
- LOCATION 指定表在HDFS上的存储位置。
- LIKE 允许用户复制现有的表结构,但是不复制数据


http://www.ppmy.cn/news/72562.html

相关文章

网络安全前景怎么样?怎么自学?看这一篇就够了

一、网络安全前景 网络安全行业细分岗位比较多&#xff0c;目前需求量比较大的几类网络安全岗位有渗透测试、安全运维、等保测评等&#xff0c;在岗位需求量和薪资待遇方面都比较可观。 这时很多人就会问&#xff0c;网络安全人才需求量这么大&#xff0c;进入行业的人就会越来…

学会“放弃与妥协”,学会“自我牺牲”,学会“善待痛苦”

不放弃旧的&#xff0c;就难以得到新的&#xff1b;不放弃固有的&#xff0c;就难以得到未有点&#xff1b;不放弃渺小的&#xff0c;就难以得到硕大的&#xff1b;不放弃已知的&#xff0c;就难以得到未知的。————生活的妙趣就在于此。关键就在于&#xff1a;于大处着眼&a…

(13)ADDA

AD&#xff08;Analog to Digital&#xff09;&#xff1a;模拟-数字转换&#xff0c;将模拟信号转换为计算机可操作的数字信号&#xff0c;ADC模拟-数字转换器 DA&#xff08;Digital to Analog&#xff09;&#xff1a;数字-模拟转换&#xff0c;将计算机输出的数字信号转换…

全局钩子的安全退出

背景 最近在写一个鼠标检测工具&#xff0c;需要记录鼠标的按键、滚轮和回报率等信息。 使用方法 使用鼠标全局钩子&#xff0c;捕获鼠标的信息。 具体实现逻辑 1、创建线程&#xff1b; 2、在线程中&#xff0c;注册全局鼠标钩子&#xff1b; 3、鼠标消息捕获&#xff1b…

flink cdc 用mybatis-plus写到mysql5.6

背景 项目中需要做一个数据同步的功能, 在方案对比中,canal 与flink cdc 都有尝试。 起初在网上找的flink例子,要么只能支持mysql5.7以上版本,要么就是需要序列化各种bug,比如就不能直接使用 @Autowired xxxServer 来调用数据库层面的注入,getBaseMapper()为空 因为目…

vue项目封装svg组件

使用阿里巴巴 iconfont 官网提供的图标 下载图片格式的&#xff0c;宽高变化的时候&#xff0c;图片会失真。最好使用svg格式的&#xff0c;自适应还保真且可以调整样式。但是每次使用一个图片&#xff0c;下载并导入文件中使用实在是太麻烦。下面配合使用svg-sprite-loader 包…

ros的入门知识

ros的入门教程链接: linux ros安装学前小案例-键盘控制小海龟的移动创建工作空间与功能包发布者publisher订阅者subscriber ros的基础知识点 不同的linux系统安装的ros版本是不一样的&#xff0c;linux18.04安装melodic&#xff0c;linux20.04安装noetic。 roscore:所有节点…

Linux 内存管理 pt.3

哈喽大家好&#xff0c;我是咸鱼 在《Linux 内存管理 pt.2》中我们学习了多级页表和大页&#xff0c;我们知道了由于历史遗留的问题&#xff0c;Linux 的页通常为 4KB 这样就会导致一个页表里面会有特别多页&#xff0c;为了解决这个问题&#xff0c;Linux 提供了两种解决方案…