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-建表基础语法(含四个实践案例)相关推荐

  1. Hive数据定义语言DDL

    文章目录 1 Apache Hive客户端使用 2 Hive编译工具 3 Hive SQL DDL建表基础语法 3.1 Hive数据类型详解 3.2 Hive读写文件机制 3.3 Hive数据存储路径 ...

  2. 大数据Hive数据定义语言DDL

    目录 1 数据定义语言(DDL)概述 1.1 DDL语法的作用 1.2 Hive中DDL使用 2 Hive DDL建表基础 2.1 完整建表语法树 3 Hive数据类型详解 3.1 整体概述 3.2 ...

  3. 带你学MySQL系列 | 什么是数据定义语言(DDL)呢?

    如果你是刚刚学习MySQL的小白,在你看这篇文章之前,请先看看下面这些文章.有些知识你可能掌握起来有点困难,但请相信我,按照我提供的这个学习流程,反复去看,肯定可以看明白的,这样就不至于到了最后某些知 ...

  4. 数据操作语言DML及数据定义语言DDL的区别

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 数据操作 ...

  5. 数据定义语言 - DDL

    写在前面:博主是一只经过实战开发历练后投身培训事业的"小山猪",昵称取自动画片<狮子王>中的"彭彭",总是以乐观.积极的心态对待周边的事物.本人的技 ...

  6. 02 数据定义语言DDL

    数据定义语言DDL Data Definition Language-数据定义语言:create / drop / alter 创建数据库 create database school default ...

  7. 【ClickHouse SQL 极简教程】ClickHouse SQL之数据定义语言 DDL

    1.1. ClickHouse SQL之数据定义语言 DDL  本节介绍 ClickHouse 中进行数据库.表结构的定义和管理. 1.1.1. 概述 在SQL中,数据定义语言( DDL ) 用来创建 ...

  8. 数据定义语言DDL(保姆级教学)

    目录 DDL: 1.数据库的创建: 2.由于重复创建同名数据库会报错 3.注意如果默认字符集为Latin1,其不支持中文,所以改为: 数据库的创建: 数据表的创建 属性的数据类型 1.数值类型: 2. ...

  9. SQL中数据操作语言 (DML) 和数据定义语言 (DDL)

     可以把 SQL 分为两个部分:数据操作语言 (DML) 和 数据定义语言 (DDL). SQL (结构化查询语言)是用于执行查询的语法.但是 SQL 语言也包含用于更新.插入和删除记录的语法. ...

最新文章

  1. 微生物组-宏基因组分析第8期(报名直播课免费参加线下2020.7,早鸟价仅剩1周)...
  2. 鼠标移到某一行 某一行变色 鼠标移开恢复
  3. 【C++】实现动态顺序表的PushBack(),PopBack(),PushFront(),PopFront(),Find(),Insert
  4. python 决策树 math库 c45算法
  5. 三星Galaxy Note 10顶配版现身:陶瓷材质+12GB内存
  6. CSE 110: Principles of Programming Languages
  7. C# 创建、部署和调用WebService的简单示例
  8. tempdb 数据文件暴涨
  9. 第一次冲刺-个人工作总结06
  10. cru使用教程_显示器刷新率超频教程
  11. Redis常用命令总结,java开发流程面试
  12. 景深 (摄影测量与遥感学术语)
  13. 计算机应用技术ps考证,2017计算机等级考试一级Photoshop应用试题及答案
  14. Leetcode(934)——最短的桥
  15. 微信公众号接入自己的客服系统,自定义客服系统
  16. PS如何制作圆角矩形图片
  17. 2021-10-01 REDIS全网最超级详细
  18. python实现数据库的增删改查
  19. matlab三大数组之构架数组
  20. word中一个表格拆分成两个单独的表格

热门文章

  1. Maven的.m2目录迁移
  2. 不懂雇主责任险的老板不是好老板
  3. 链式前向星核心代码解析 ← 数组模拟邻接表
  4. C++的成长之路(02)
  5. 遇到无法重现的BUG?两个开源免费录屏工具帮你重现测试过程
  6. Java用for输出等腰三角形
  7. 浏览器攻击框架BeEF Part 5:攻击Web应用与攻击网络
  8. laravel8实现生成二维码,二维码中间添加图片
  9. Metasploit Framework下的Exploit应用开发中文手册
  10. 如何轻松实现工业连接?