Hive(5):数据定义语言(DDL)

news2024/12/31 5:54:27

1 数据定义语言(DDL)概述

1.1 DDL语法的作用

数据定义语言 (Data Definition Language, DDL),是SQL语言集中对数据库内部的对象结构进行创建,删除,修改等的操作语言,这些数据库对象包括database(schema)、table、view、index等。核心语法由CREATE、ALTER与DROP三个所组成。DDL并不涉及表内部数据的操作。

在某些上下文中,该术语也称为数据描述语言,因为它描述了数据库表中的字段和记录。

 

1.2 Hive中DDL使用

Hive SQL(HQL)与SQL的语法大同小异,基本上是相通的,学过SQL的使用者可以无痛使用Hive SQL。只不过在学习HQL语法的时候,特别要注意Hive自己特有的语法知识点,比如partition相关的DDL操作。

基于Hive的设计、使用特点,HQL中create语法(尤其create table)将是学习掌握DDL语法的重中之重。可以说建表是否成功直接影响数据文件是否映射成功,进而影响后续是否可以基于SQL分析数据。通俗点说,没有表,表没有数据,你分析什么呢?

选择正确的方向,往往比盲目努力重要。

2 Hive DDL建表基础

2.1 完整建表语法树

 

  • 蓝色字体是建表语法的关键字,用于指定某些功能。
  • []中括号的语法表示可选。
  • 表示使用的时候,左右语法二选一。
  • 建表语句中的语法顺序要和上述语法规则保持一致。

2.2 Hive数据类型详解

2.2.1 整体概述

Hive中的数据类型指的是Hive表中的列字段类型。Hive数据类型整体分为两个类别:原生数据类型(primitive data type)和复杂数据类型(complex data type)。

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

复杂数据类型包括:array数组、map映射、struct结构、union联合体。

 

关于Hive的数据类型,需要注意:

  • 英文字母大小写不敏感;
  • 除SQL数据类型外,还支持Java数据类型,比如:string;
  • int和string是使用最多的,大多数函数都支持;
  • 复杂数据类型的使用通常需要和分隔符指定语法配合使用。
  • 如果定义的数据类型和文件不一致,hive会尝试隐式转换,但是不保证成功。

2.2.2 原生数据类型

Hive支持的原生数据类型如下图所示:

 

其中标注的数据类型是使用较多的,详细的描述请查询语法手册:

https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Types

2.2.3 复杂数据类型

Hive支持的复杂数据类型如下图所示:

 

其中标注的数据类型是使用较多的,详细的描述请查询语法手册:

https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Types

2.2.4 数据类型隐式、显示转换

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

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

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

 

https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Types

显式类型转换使用CAST函数。

例如,CAST('100'as INT)会将100字符串转换为100整数值。 如果强制转换失败,例如CAST('INT'as INT),该函数返回NULL。

2.3 Hive读写文件机制

2.3.1 SerDe是什么

SerDe是Serializer、Deserializer的简称,目的是用于序列化和反序列化。序列化是对象转化为字节码的过程;而反序列化是字节码转换为对象的过程。

Hive使用SerDe(和FileFormat)读取和写入行对象。

 

 

需要注意的是,“key”部分在读取时会被忽略,而在写入时key始终是常数。基本上行对象存储在“value”中。

可以通过desc formatted tablename查看表的相关SerDe信息。默认如下:

 

2.3.2 Hive读写文件流程

Hive读取文件机制:首先调用InputFormat(默认TextInputFormat),返回一条一条kv键值对记录(默认是一行对应一条记录)。然后调用SerDe(默认LazySimpleSerDe)的Deserializer,将一条记录中的value根据分隔符切分为各个字段。

Hive写文件机制:将Row写入文件时,首先调用SerDe(默认LazySimpleSerDe)的Serializer将对象转换成字节序列,然后调用OutputFormat将数据写入HDFS文件中。

2.3.3 SerDe相关语法

在Hive的建表语句中,和SerDe相关的语法为:

 

其中ROW FORMAT是语法关键字,DELIMITED和SERDE二选其一。

如果使用delimited表示使用默认的LazySimpleSerDe类来处理数据。如果数据文件格式比较特殊可以使用ROW FORMAT SERDE serde_name指定其他的Serde类来处理数据,甚至支持用户自定义SerDe类。

2.3.4 LazySimpleSerDe分隔符指定

LazySimpleSerDe是Hive默认的序列化类,包含4种子语法,分别用于指定字段之间、集合元素之间、map映射 kv之间、换行的分隔符号。在建表的时候可以根据数据的特点灵活搭配使用。

 

2.3.5 默认分隔符

hive建表时如果没有row format语法。此时字段之间默认的分割符是'\001',是一种特殊的字符,使用的是ascii编码的值,键盘是打不出来的。

 

在vim编辑器中,连续按下Ctrl+v/Ctrl+a即可输入'\001' ,显示^A

在一些文本编辑器中将以SOH的形式显示:

2.4 Hive数据存储路径

2.4.1 默认存储路径

Hive表默认存储路径是由${HIVE_HOME}/conf/hive-site.xml配置文件的hive.metastore.warehouse.dir属性指定。默认值是:/user/hive/warehouse。

 

 

在该路径下,文件将根据所属的库、表,有规律的存储在对应的文件夹下。

 

 

2.4.2 指定存储路径

在Hive建表的时候,可以通过location语法来更改数据在HDFS上的存储路径,使得建表加载数据更加灵活方便。

语法:LOCATION '<hdfs_location>'。

对于已经生成好的数据文件,使用location指定路径将会很方便。

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

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

相关文章

面试官问 ,Mybatis SELECT 查询, 集合或者单个对象,如果数据库不存在数据,需要判空吗?

前言 于昨日下班时段&#xff0c;本人正在与生活作斗争&#xff0c;收到了金三银四一线作战小队成员紧急反应的战况问题。 不熟悉的或者是不知道怎么去看源码的看官&#xff0c;上车了。 正文 这面试题问的&#xff0c; 考察的是什么&#xff1f; ① mybatis框架的应用掌握情…

如何实现报表集成?(三)——资源集成

在上一篇&#xff0c;我们介绍了用户同步和单点登录&#xff0c;帮助用户了解什么是用户同步、如何做用户验证&#xff0c;以及如何实现单点登录。 这一篇&#xff0c;我们看下如何做资源集成。行文过程中得到了来自报表软件厂商 Smartbi 的报表产品&#xff1a;电子表格软件的…

leetcode-每日一题-1663-具有给定数值的最小字符串(简单,贪心)

很久没有做过贪心类型的题目了&#xff0c;因为用的很少&#xff0c;大多都用的dp&#xff0c;这道题第一眼看过去以为是dp&#xff0c;因为力扣里面的中等题很多都是dp&#xff0c;但仔细一看发现是贪心&#xff0c;思路其实很简单&#xff0c;先全部最小&#xff0c;中间插一…

机械设备ERP系统可以给企业带来哪些好处?

随着信息化技术的进步与智能制造的发展趋势&#xff0c;很多制造企业也在一直探寻适合自己的信息化管理转型之路。机械设备EPR系统对于机械设备制造企业来说就是关键一环。要充分发挥出机械设备ERP系统的赋能作用&#xff0c;必不可少的是从生产制造的各个环节出发&#xff0c;…

ONLYOFFICE 文档 v7.3 现已发布:表单角色、SmartArt、安全性设置、查看窗口等功能

在 ONLYOFFICE 最新版本的在线编辑器中现已提供高级表单、SmartArt 图形插入、增强密码保护和公式计算、幻灯片特殊粘贴项等多项功能。继续阅读以了解所有更新。 字段填写接收人角色 现在&#xff0c;数字表单将更加高效。您可为需要填写表单的用户分配各种角色&#xff0c;简…

中医名词看不懂?用PaddleNLP做一个中医“百科全书”

我是一个深度学习爱好者&#xff0c;目前对自然语言处理感兴趣&#xff0c;热衷于了解一些人工智能中的数学推导和经典论文复现&#xff0c;正在成长的“小趴菜”一枚&#xff0c;在PPDE指导计划中&#xff0c;创作了中医文献阅读理解项目&#xff0c;下面将由我介绍在项目创作…

Java开发面试(技术面)经历 (二)

2022-11-08&#xff0c;应聘Java开发 &#xff1a;云智慧&#xff08;实训机构&#xff0c;个人观点&#xff0c;与培训没区别&#xff09; 今天二面技术面&#xff0c;问了一些问题 1.集合有哪些&#xff1f; 两大容器如图&#xff1a;Collection集合 list下面还有Vector&…

Veeam Backup Replication v12 发布 (含下载) - 面向所有工作负载的备份软件

Veeam Availability Suite v12 请访问原文链接&#xff1a;https://sysin.org/blog/veeam-backup-12/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;www.sysin.org 全球首屈一指的备份和恢复提供商 管理、控制、保护您的 数据&#xff…

数字化基本概念

数字化是什么&#xff1f;为什么要做数字化转型&#xff1f;感觉只是用计算机软件替代了原有的工作和流程。 听多了&#xff0c;每天的工作也被冠以数字化&#xff0c;说来很重要&#xff0c;确是不清楚为何&#xff0c;也来了解一下。 数字化&#xff1a;改变做事方式、发…

分享企业做微信小程序开发的步骤_公司如何申请微信小程序步骤

对于小程序新手来说&#xff0c;想要建立一个小程序&#xff0c;第一步就是要拥有一个小程序。那么如何开通小程序&#xff1f;公司小程序如何申请&#xff1f;今天就来手把手教你们如何开通小程序吧&#xff1a; 一、填写帐号信息 到微信公众平台首页&#xff0c;直接点击帐号…

android——开发中哪些习惯会影响卡顿的发生

开发中哪些习惯会影响卡顿的发生&#xff0c;如下&#xff1a;1.布局太乱&#xff0c;层级太深。1.1&#xff1a;通过减少冗余或者嵌套布局来降低视图层次结构。比如使用约束布局代替线性布局和相对布局。1.2&#xff1a;用 ViewStub 替代在启动过程中不需要显示的 UI 控件。1.…

C#学习记录——C# winform程序怎么打包成安装项目(VS2019图解)

今天学习将Winform程序打包成安装项目&#xff0c;参考网上教程&#xff0c;并记录尝试过程。 测试打包的程序为用C# Winform开的的一个客户端程序。 1、安装打包插件 在程序打包之前需要安装Microsoft Visual Studio Installer Projects插件。 1.1、选择扩展管理 在VS2019…

(面经四):笔试

面试经历&#xff08;四&#xff09; 时间&#xff1a;2022-11-14 笔试 &#xff08;培训机构真该洗啊&#xff0c;写完后根本不看你写的笔试&#xff0c;直接给你说送你去培训&#xff0c;技术什么都没有问&#xff0c;直接拿着你的简历画画&#xff0c;画什么实训和培训的不同…

Docker建立自己的私有仓库

仓库&#xff08;Repository&#xff09;是集中存放镜像的地方。 一个容易混淆的概念是注册服务器&#xff08;Registry&#xff09;。实际上注册服务器是管理仓库的具体服务 器&#xff0c;每个服务器上可以有多个仓库&#xff0c;而每个仓库下面有多个镜像。从这方面来说&am…

Python学习------起步3(序列与数据类型转换)

目录 序列 1.切片 2.列表&#xff08;list&#xff09; 3.元组 数据类型转换 习题 好了&#xff0c;今天就开始序列的学习了&#xff0c;其实在C语言里面我们学过数组或者字符数组&#xff0c;Python中的序列跟它们一样是一种数据的储存方式&#xff0c;其中学习过程也是比…

LeetCode动态规划(九):完全背包(初级)

学习目标&#xff1a; 理解完全背包和0-1背包遍历顺序的区别 学习内容&#xff1a; 15. LeetCode377. 组合总和 Ⅳhttps://leetcode.cn/problems/combination-sum-iv/ 16. 爬楼梯(进阶班版) 17. LeetCode322. 零钱兑换https://leetcode.cn/problems/coin-change/ 18. Leet…

winform发布功能附加dll、db、xml、json等文件

我们日常进行程序的更新升级可能会用到winform的发布功能&#xff0c;但有些文件可能会无法伴随着发布一同发布出去或者每次发布后文件的数据被覆盖&#xff0c;下面一起看一下怎么解决&#xff1a; winform发布功能参考我另一篇文章https://blog.csdn.net/qq_39569480/articl…

筑基四层 —— 详解三子棋和扫雷

目录 一.修炼必备 二.三子棋详解 三.扫雷详解 四.三子棋和扫雷的完整代码 &#xff01;&#xff01;&#xff01;恭喜你&#xff0c;成功突破至筑基四层&#xff01;&#xff01;&#xff01; 一.修炼必备 1.入门必备&#xff1a;VS2019社区版&#xff0c;下载地址&#xff…

leetcode51,52 N皇后相关(回溯方法)

题目1&#xff1a;N皇后 按照国际象棋的规则&#xff0c;皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。n 皇后问题 研究的是如何将 n 个皇后放置在 nn 的棋盘上&#xff0c;并且使皇后彼此之间不能相互攻击。 给你一个整数 n &#xff0c;返回所有不同的 n 皇后问题…

入职一年,那个准的下班的人,比我先升职了...

最近心态崩了。 和我同期一道进公司的人又升了一级&#xff0c;可是明明大家在进公司时&#xff0c;他不论是学历还是工作经验&#xff0c;样样都不如自己&#xff0c;眼下不过短短的两年时间便一跃在自己的职级之上&#xff0c;这着实让我有几分不甘心。 我想不明白&#xff…