Hive数据定义语言-DDL-建表基础语法(含四个实践案例)
1. 概述
- 数据定义语言DDL,是SQL语言集中对数据库内部的对象结构进行创建、删除、修改等的操作语言,这些数据库对象包括database、table、view、index等。
- DDL核心语法由CREATE、ALTER与DROP三个所组成。DDL并不涉及表内部数据的操作。
- 在某些上下文中,该术语也称为数据描述语言,因为它描述了数据库表中的字段何记录。
2. 建表语法
2.1 完整建表语法树
注意事项
- 蓝色字体是建表语法的关键字,用户指定某些功能。
- [ ] 中括号的语法表示可选。
- | 表示使用的时候,左右语法二选一。
- 建表语句中的语法顺序要和语法树中顺序保持一致
2.2 数据类型
Hive数据类型指的是表中列的字段类型
- 整体分为两类:原生数据类型和复杂数据类型。
- 原生数据类型包括:数据类型、时间日期类型、字符串类型、杂项数据类型。
- 复杂数据类型包括:array数据、map映射、struct结构、union联合体。
- 原生数据类型:
- 复杂数据类型:
注意事项
- HIive SQL中,数据类型英文字母大小写不敏感;
- 除SQL数据类型外,还支持Java数据类型,比如字符串string;
- 复杂数据类型的使用通常需要和分隔符指定语法配合使用;
- 如果定义的数据类型和文件不一致,Hive会尝试隐式转换,但不保证成功。
隐式转换
- 与标准SQL类似,HQL支持隐式和显示类型转换。
- 原生类型从窄类型到宽类型的转换成为隐式转换,反之,则不允许。
- 下表描述了类型之间允许的隐式转换:
显示转换
- 显示转换使用CAST函数。
例如,CAST (‘100’ as INT) 会将100字符串转换为100整数值。
如果强制转换失败,例如CAST (’Allen’ as INT) ,该函数返回NULL。
3. 案例练习
3.1 原生数据类型使用
目标要求:
- 文件archer.txt记录手游《王者荣耀》射手的相关信息,包括生命、物防、物攻等属性信息,其中字段之间分隔符额为制表符\t,要求Hive中建表映射成功该文件。
分析思路:
实现过程及结果: - 创建数据库并切换使用:
create database if not exists kox01;
use kox01;
- 创建表:
create table t_archer(id int comment "ID",name string comment "英雄名称",hp_max int comment "最大生命",mp_max int comment "最大法力",attack_max int comment "最高物攻",defense_max int comment "最大物防",attack_range string comment "攻击范围",role_main string comment "主要定位",role_assist string comment "次要定位"
) comment "王者荣耀射手信息"
row format delimited
fields terminated by "\t";
验证是否创建成功
- 将文件上传到对应表文件夹下:
mkdir hivedata
cd hivedata/
- 上传archer.txt:pass
- 将文件上传到HDFS表所对应的目录下:
hadoop fs -put archer.txt /user/hive/warehouse/kox01.db/t_archer
验证查询是否成功
3.2 复杂数据类型使用
目标要求:
- 文件hot_hero_skin_price.txt中记录了手游《王者荣耀》热门英雄的相关皮肤价格信息,要求在Hive中建表映射成功该文件。
实现过程及结果
- 创建表:
create table t_hot_hero_skin_price(id int,name string,win_rate int,skin_price map<string,int> -- 复杂类型
) row format delimited
fields terminated by ',' -- 指定字段之间分隔符
collection items terminated by '-' -- 指定集合元素之间的分隔符
map keys terminated by ':'; -- 指定map元素kv之间的分隔符
验证是否创建成功
- 将文件上传到对应表文件夹下:
- 将文件上传到HDFS表所对应的目录下:
hadoop fs -put hot_hero_skin_price.txt /user/hive/warehouse/kox01.db/t_hot_hero_skin_price
验证查询是否成功
3.3 默认分隔符使用
目标任务:
- 文件team_ace_player.txt中记录了手游《王者荣耀》主要战队内最受欢迎的王牌选手信息,字段之间使用的是\001作为分隔符,要求在Hive中建表
实现过程及结果: - 创建表:
create table t_team_ace_player(id int,team_name string,ace_player_name string
); --没有指定row format语句 此时采用的是默认的\001作为字段的分割符
验证是否创建成功
- 将文件上传到对应表文件夹下:
- 将文件上传到HDFS表所对应的目录下:
hadoop fs -put team_ace_player.txt /user/hive/warehouse/kox01.db/t_team_ace_player
验证查询是否成功
3.4 指定数据存储路径
任务目标:
- 文件team_ace_player.txt中记录了手游《王者荣耀》主要战队内最受欢迎的王牌选手信息,字段之间使用的是\001作为分隔符。
要求把文件上传到HDFS任意路径下,不能移动复制,并在Hive中建表映射成功该文件。
实现过程及结果: - 在根目录创建文件夹:
hadoop fs -mkdir /data
- 上传文件:
hadoop fs -put team_ace_player.txt /data
- 创建表:
create table t_team_ace_player_location(id int,team_name string,ace_player_name string
) location '/data'; -- 使用loacation关键字指代指定本张表数据在hdfs上的存储路径
验证查询是否成功
Hive数据定义语言-DDL-建表基础语法(含四个实践案例)相关推荐
- Hive数据定义语言DDL
文章目录 1 Apache Hive客户端使用 2 Hive编译工具 3 Hive SQL DDL建表基础语法 3.1 Hive数据类型详解 3.2 Hive读写文件机制 3.3 Hive数据存储路径 ...
- 大数据Hive数据定义语言DDL
目录 1 数据定义语言(DDL)概述 1.1 DDL语法的作用 1.2 Hive中DDL使用 2 Hive DDL建表基础 2.1 完整建表语法树 3 Hive数据类型详解 3.1 整体概述 3.2 ...
- 带你学MySQL系列 | 什么是数据定义语言(DDL)呢?
如果你是刚刚学习MySQL的小白,在你看这篇文章之前,请先看看下面这些文章.有些知识你可能掌握起来有点困难,但请相信我,按照我提供的这个学习流程,反复去看,肯定可以看明白的,这样就不至于到了最后某些知 ...
- 数据操作语言DML及数据定义语言DDL的区别
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 数据操作 ...
- 数据定义语言 - DDL
写在前面:博主是一只经过实战开发历练后投身培训事业的"小山猪",昵称取自动画片<狮子王>中的"彭彭",总是以乐观.积极的心态对待周边的事物.本人的技 ...
- 02 数据定义语言DDL
数据定义语言DDL Data Definition Language-数据定义语言:create / drop / alter 创建数据库 create database school default ...
- 【ClickHouse SQL 极简教程】ClickHouse SQL之数据定义语言 DDL
1.1. ClickHouse SQL之数据定义语言 DDL 本节介绍 ClickHouse 中进行数据库.表结构的定义和管理. 1.1.1. 概述 在SQL中,数据定义语言( DDL ) 用来创建 ...
- 数据定义语言DDL(保姆级教学)
目录 DDL: 1.数据库的创建: 2.由于重复创建同名数据库会报错 3.注意如果默认字符集为Latin1,其不支持中文,所以改为: 数据库的创建: 数据表的创建 属性的数据类型 1.数值类型: 2. ...
- SQL中数据操作语言 (DML) 和数据定义语言 (DDL)
可以把 SQL 分为两个部分:数据操作语言 (DML) 和 数据定义语言 (DDL). SQL (结构化查询语言)是用于执行查询的语法.但是 SQL 语言也包含用于更新.插入和删除记录的语法. ...
最新文章
- 微生物组-宏基因组分析第8期(报名直播课免费参加线下2020.7,早鸟价仅剩1周)...
- 鼠标移到某一行 某一行变色 鼠标移开恢复
- 【C++】实现动态顺序表的PushBack(),PopBack(),PushFront(),PopFront(),Find(),Insert
- python 决策树 math库 c45算法
- 三星Galaxy Note 10顶配版现身:陶瓷材质+12GB内存
- CSE 110: Principles of Programming Languages
- C# 创建、部署和调用WebService的简单示例
- tempdb 数据文件暴涨
- 第一次冲刺-个人工作总结06
- cru使用教程_显示器刷新率超频教程
- Redis常用命令总结,java开发流程面试
- 景深 (摄影测量与遥感学术语)
- 计算机应用技术ps考证,2017计算机等级考试一级Photoshop应用试题及答案
- Leetcode(934)——最短的桥
- 微信公众号接入自己的客服系统,自定义客服系统
- PS如何制作圆角矩形图片
- 2021-10-01 REDIS全网最超级详细
- python实现数据库的增删改查
- matlab三大数组之构架数组
- word中一个表格拆分成两个单独的表格