【文档说明】Hadoop数据仓库实战-Hive数据库及表操作课件.pptx,共(31)页,449.381 KB,由小橙橙上传
转载请保留链接:https://www.ichengzhen.cn/view-6053.html
以下为本文档部分文字说明:
Hive数据库及表操作◆熟悉Hive的数据类型◆使用Hive管理雇员信息◆使用JDBC操作雇员表本章任务2/29◆掌握Hive的数据类型◆掌握Hive数据库和表操作◆理解Hive内部表和外部表◆理解Hive数据分区、
分桶◆掌握HiveShell命令行模式◆掌握HiveJavaAPI编程本章目标3/29◆整型◼TINYINT、SMALLINT、INT、BIGINT◼使用整数面量时,默认是INT,其他整型需要加后缀,TINYINT、SMALLINT、BIGINT后缀为Y、S、L◆浮点型◼
FLOAT、DOUBLE、DECIMAL◆文本类型◼STRING、CHAR、VARCHARHive的基本数据类型-14/29◆布尔及二进制◼BOOLEAN(布尔值型),值为true和false◼BINARY(二进制型)◆时间类型◼DAT
E,存储日期◼TEMESTAMP,存储纳秒级别时间戳◼INTERVAL,存储时间间隔Hive的基本数据类型-25/29◆ARRAY◼具有相同类型变量的集合,如:[“a”,”b”]◆MAP◼一组键值对组合,
如:{“a”:”b”,”c”:”d”}◆STRUCT◼封装了一组有名字的字段,其类型可以是任意基本类型◆UNIONTYPE◼类似于Java中的泛型,任一时刻只有其中一种类型生效Hive的复杂数据类型6/29◆HiveDDL操作常用命令◼create、drop、alt
er、truncate、show、describe◆Hive数据库操作Hive数据库/表定义操作(DDL)-1#创建数据库CREATE(DATABASE|SCHEMA)[IFNOTEXISTS]database_name[COMMENTdatabase_comment][LOC
ATIONhdfs_path][WITHDBPROPERTIES(property_name=property_value,...)]#修改数据库ALTER(DATABASE|SCHEMA)database_nameSETDBPROPER
TIES(property_name=property_value,...)#删除数据库DROP(DATABASE|SCHEMA)[IFEXISTS]database_name[RESTRICT|CASCADE]演示示例1:Hive数据库操作7/29◆Hive数据表
操作-创建数据表Hive数据库/表定义操作(DDL)-2#创建数据表CREATE[TEMPORARY][EXTERNAL]TABLE[IFNOTEXISTS][db_name.]table_name[(co
l_namedata_type[COMMENTcol_comment],...[constraint_specification])][COMMENTtable_comment][PARTITIONEDBY(col_namedata_type[COMMENTc
ol_comment],...)][CLUSTEREDBY(col_name,col_name,...)[SORTEDBY(col_name[ASC|DESC],...)]INTOnum_bucketsBUCKETS][SKEWEDBY(col_name,col_name,...)]O
N((col_value,col_value,...),(col_value,col_value,...),...)[STOREDASDIRECTORIES][[ROWFORMATrow_format][STORE
DASfile_format]|STOREDBY'storage.handler.class.name'[WITHSERDEPROPERTIES(...)]][LOCATIONhdfs_path][TBLPROPERTIES(property_name=property_va
lue,...)]演示示例2:Hive创建表操作8/29◆Hive数据表操作-修改数据表Hive数据库/表定义操作(DDL)-3#修改数据表表名ALTERTABLEtable_nameRENAMETOnew_table_name#添加或替换列AL
TERTABLEtable_nameADD|REPLACECOLUMNS(col_namedata_type)演示示例3:Hive修改数据表表名演示示例4:Hive表增加列9/29◆HiveDDL其他操作Hive数据库/表定义操作(DDL)-4命令示例说明dropdropd
atabasedatabase_name删除数据库droptabletable_name删除表truncatetruncatetabletable_name清空表showshowdatabases显示所有数据库名showtabl
es列出当前库中所有表showviews列出当前库中所有视图showpartitionstable_name列出表中所有分区showcreatetable_name显示建表语句showfunctions“a.*”列出所有函
数describedescribedatabasedatabse_name显示数据库信息describetable_name显示表信息describetable_name.col_name显示表中某列的信息10/29◆Hive创建分区表语句H
ive定义分区/分桶表CREATETABLEemployee_partitioned(namestring,work_placeARRAY<string>,sex_ageSTRUCT<sex:string,age:int>,skills_scoreMAP<st
ring,int>,depart_titleMAP<STRING,ARRAY<STRING>>)PARTITIONEDBY(yearINT,monthINT)CLUSTEREDBY(employee_id)I
NTO2BUCKETSROWFORMATDELIMITEDFIELDSTERMINATEDBY'|'COLLECTIONITEMSTERMINATEDBY','MAPKEYSTERMINATEDBY':';定义按哪个字段分区定义按哪个字段分桶分桶11/29◆Hive分区表
描述回顾◼分区列的值将表划分为文件夹◼查询时使用“分区”列和常规列类似◼查询时Hive自动过滤掉不用于提高性能的分区◆Hive分桶表描述回顾◼分桶是相对分区进行更细粒度的划分◼根据“桶列”的哈希函数将数据进行分桶◼更高的查询处理效率Hive分区表/分桶表描述12/29◆Hive分区
◼静态分区◼动态分区◆Hive分桶◼动态分桶Hive操作分区/分桶类型及设置#使用动态分区需设置sethive.exec.dynamic.partition=true;sethive.exec.dynamic.partition.mode=nons
trict;#使用动态分桶需设置sethive.enforce.bucketing=true;13/29◆静态分区操作示例◆动态分区操作示例Hive操作分区ALTERTABLEemployee_partitionedADDPARTITION(
year=2017,month=3)PARTITION(year=2017,month=4);ALTERTABLEemployee_partitionedDROPPARTITION(year=2017,month=4);INSERTINTOTABLEemployee_partitio
nedPARTITION(year,month)SELECTname,array('Toronto')ASwork_place,named_struct("sex","male","age",30)ASsex_age,map("python",90)ASskills_score,map("r&d
",array('developer'))ASdepart_title,year(start_date)ASyear,month(start_date)ASmonthFROMemployee_hr;14/29◆随机抽样基于整行数据◆随机抽样基于指定列(使用分桶列更高效)◆随
机抽样基于blocksizeHive操作分桶SELECT*FROMtable_nameTABLESAMPLE(BUCKET3OUTOF32ONrand())s;SELECT*FROMtable_nameTABLESAMPLE(
10PERCENT)s;SELECT*FROMtable_nameTABLESAMPLE(1M)s;SELECT*FROMtable_nameTABLESAMPLE(10rows)s;SELECT*FROMtable_nameTABLESAMPLE(BUCK
ET3OUTOF32ONid)s;15/29◆HiveDML操作常用命令◼load、insert、update、delete、merge、explain等◆数据装载◼load命令实现,将数据复制或移动到Hive表对应的位置◼insert命令实现,执行MR作业将数据插入Hive表中Hiv
eDML操作-1LOADDATA[LOCAL]INPATH‘filepath’[OVERWRITE]INTOTABLEtable_name[PARTITION(partcol1=val1,partcol2=val2,……)];INSERT(INTO|OVERWRITE)TABLEta
ble_name[PARTITIONPARTITION(partcol1=val1,partcol2=val2,……)]select_statement1FROMfrom_statement;演示示例6:使用insert完成数据装载演示示例5:使用load完成数据装
载16/29◆Hive更新、删除、合并数据◼执行这些操作需要开启ACID(事务)支持◼Hive是数据仓库解决方案,不适合做这种操作◆数据导入/导出◼使用import/export实现数据导入/导出HiveDML操作-2#数据导入IMPORT
[[EXTERNAL]TABLEnew_or_original_tablename[PARTITION(partcol1=val1,……)]]FROM‘source_path’[LOCATION‘im
port_target_path’]#数据导出EXPORTTABLEtable_name[PARTITION(partcol1=val1,……)]TO‘export_target_path’17/29◆Hive分区表描述回顾◼分区列的值将表划分为文件夹◼查询时使用“
分区”列和常规列类似◼查询时Hive自动过滤掉不用于提高性能的分区◆Hive分桶表描述回顾◼分桶是相对分区进行更细粒度的划分◼根据“桶列”的哈希函数将数据进行分桶◼更高的查询处理效率Hive分区表/分桶表描述18/29◆Hive创建分区表语句Hive定义分
区/分桶表CREATETABLEemployee_partitioned(namestring,work_placeARRAY<string>,sex_ageSTRUCT<sex:string,age:int>,skills_scoreMAP<string,in
t>,depart_titleMAP<STRING,ARRAY<STRING>>)PARTITIONEDBY(yearINT,monthINT)CLUSTEREDBY(employee_id)INTO2BUCKETSROWFORMATDE
LIMITEDFIELDSTERMINATEDBY'|'COLLECTIONITEMSTERMINATEDBY','MAPKEYSTERMINATEDBY':';定义按哪个字段分区定义按哪个字段分桶分桶19/29演示示例7:分区表与
数据装载演示示例8:分桶表与数据插入◆Hive分区◼静态分区◼动态分区◆Hive分桶◼动态分桶Hive操作分区/分桶类型及设置#使用动态分区需设置sethive.exec.dynamic.partition=true;sethive.exec.dynami
c.partition.mode=nonstrict;#使用动态分桶需设置sethive.enforce.bucketing=true;20/29◆静态分区操作示例◆动态分区操作示例Hive操作分区ALTERTABLEemployee_partitionedADDPARTITION(
year=2017,month=3)PARTITION(year=2017,month=4);ALTERTABLEemployee_partitionedDROPPARTITION(year=2017,month=4);INSERTINTOTABLEe
mployee_partitionedPARTITION(year,month)SELECTname,array('Toronto')ASwork_place,named_struct("sex","male","age",30)ASse
x_age,map("python",90)ASskills_score,map("r&d",array('developer'))ASdepart_title,year(start_date)ASyear,month(sta
rt_date)ASmonthFROMemployee_hr;21/29◆随机抽样基于整行数据◆随机抽样基于指定列(使用分桶列更高效)◆随机抽样基于blocksizeHive操作分桶SELECT*FROMtable_nameTABLESAMPLE(BUCKET3OUTOF32ONrand())
;SELECT*FROMtable_nameTABLESAMPLE(10PERCENT);SELECT*FROMtable_nameTABLESAMPLE(1M);SELECT*FROMtable_nameTABLESAMPLE(10rows);SE
LECT*FROMtable_nameTABLESAMPLE(BUCKET3OUTOF32ONid);22/29◆Hive命令行操作◼-i:从文件初始化HQL◼-e:从命令行执行指定的HQL◼-f:执行HQL脚本,与-i作用类似◼-
S:静默模式◼-d:自定义变量,以便在HQL脚本中使用◼-hiveconfx=y:配置Hive/Hadoop参数HiveShell操作hive[-hiveconfx=y]*[<-ifilename>]*[<-ff
ilename>|<-equery-string>][-S][-d]演示示例9~11:使用Hive命令行操作数据23/29◆配置文件配置◼配置$HIVE_HOME/conf/hive-site.xml,全局永久配
置◆命令行参数配置◼启动Hive时,可以添加命令来设定参数◆SET参数声明配置◼在HQL中使用SET关键字设定参数Hive参数配置方式hive–hiveconfhive.root.logger=INFO.console#参数设置只对本次session有效setmapred.
reduc.tasks=100#参数设置只对本次session有效24/29◆关键步骤:◼创建数据库empdb,并使用该数据库◼新建分区表emp_hr_partitioned◼包含字段name、employee_id、sin_num
ber、start_date按照入职时间中的年份(year)进行分区操作◼使用desc查看表的信息◼通过查询语句向表中插入数据◼使用HQL语句查询一共有多少条数据学员操作1—使用HiveShell命
令进行操作完成时间:30分钟25/29◆常见问题及解决办法◆代码规范问题◆调试技巧共性问题集中讲解共性问题集中讲解26/29◆开发环境搭建◼启动HiveServer2◼在IDEA中创建maven项目hive-javaapi◼添加Maven依赖包h
ive-jdbchivehive-jdbc使用HiveJavaAPI进行操作$hive–servicehiveserver2&27/29◆创建数据库连接◼JDBC连接数据库需要提供四个必要参数驱动类”org.apache.hive.jdbc.HiveDriver”
连接地址”jdbc:hive2://HOSTNAME:10000”用户名密码使用JDBC操作Hive数据库演示示例12~16:使用JDBC操作Hive28/29◆关键步骤:◼创建Maven项目◼使用JDBC方式连接HiveServer2◼使用JDBCA
PI创建数据库◼使用JDBCAPI创建表emp_id_buckets◼使用JDBCAPI对表做数据装载,查询等操作学员操作2—使用JDBCAPI进行操作完成时间:30分钟29/29◆常见问题及解决办法◆代码规范问题◆调试技巧共性问题集中讲解共性问题集中讲解30/29◆Hive的基本数
据类型有◼整数类型、浮点类型、文本类型、布尔及二进制、时间类型等等◆Hive的复杂数据类型有◼ARRAY、MAP、STRUCT、UNION◆Hive表的类型有◼内部表、外部表、分区表、分桶表◆Hive表的常用操作
是表创建、数据装载、查询◆使用HiveJavaAPI操作前需要先启动HiveServer2服务总结31/29