Hive数据定义语言-DDL-入门基础(含四个实践案例)
创始人
2024-02-06 05:34:01
0

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中建表映射成功该文件。
    archer.txt
    分析思路:
    在这里插入图片描述
    实现过程及结果:
  • 创建数据库并切换使用:
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 -- 复杂类型
) 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上的存储路径

验证查询是否成功

在这里插入图片描述

相关内容

热门资讯

72年来首次!中国“最神秘军校...   位于山东青岛的  中国人民解放军海军潜艇学院  是专门培养海军潜艇、防险救生  和水下新质作战力...
失联高中生从缅甸脱险回国,细节...   近期,全国发生了多起因轻信“高薪兼职”被诱导前往境外诈骗园区的案件,引发社会舆论关注。其中还包括...
今天起,出门多穿浅色衣服!   近期,广东部分地区出现基孔肯雅热疫情。  广州医科大学附属市八医院感染病中心主任医师洪文昕提醒,...
大运会夺冠后 中国女篮众将这样...   新华社德国埃森7月25日电 题:大运会夺冠后 中国女篮众将这样说  7月25日,中国队球员庆祝胜...
连夜囤蚊香了吗?买前必看这个标...   近日,基孔肯雅热引发高度关注。由于该疾病是一种蚊媒传播疾病,多地已经开展灭蚊工作。在电商平台,驱...
抗战英雄浩气长存   天地英雄气,千秋尚凛然。在艰苦卓绝的抗日战争中,中国人民以铮铮铁骨战强敌、以血肉之躯筑长城、以前...
辉煌60年·我们的家园|海拔3...   中新网拉萨7月26日电(记者 张东方 朱延静)网上留言,社区工作人员迅速响应;无人接送孩子,便民...
《中国智·惠世界(2025)》...   7月26日,在上海开幕的2025世界人工智能大会暨人工智能全球治理高级别会议上,国家发展改革委发...
科技报国 打造“天网”(最美...   辽阔的苍穹之上,有一张无形的信息“天网”:无论是穿行于雪域高原的边防战士,还是驻守偏远岛礁的守岛...
“在美生意已无利可图” 塞尔维...   美国总统特朗普近期表示,将从8月1日起对塞尔维亚的进口产品征收35%的关税。这让塞尔维亚出口企业...