【文档说明】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、VARCHARHiv
e的基本数据类型-14/29◆布尔及二进制◼BOOLEAN(布尔值型),值为true和false◼BINARY(二进制型)◆时间类型◼DATE,存储日期◼TEMESTAMP,存储纳秒级别时间戳◼INTERVAL,存储时间间隔Hive的基本数据类型
-25/29◆ARRAY◼具有相同类型变量的集合,如:[“a”,”b”]◆MAP◼一组键值对组合,如:{“a”:”b”,”c”:”d”}◆STRUCT◼封装了一组有名字的字段,其类型可以是任意基本类型◆UNIONTYPE◼类似于Java中
的泛型,任一时刻只有其中一种类型生效Hive的复杂数据类型6/29◆HiveDDL操作常用命令◼create、drop、alter、truncate、show、describe◆Hive数据库操作Hive数据库/表定义操作(DDL)-1#创建数据库CREATE(DATABASE|S
CHEMA)[IFNOTEXISTS]database_name[COMMENTdatabase_comment][LOCATIONhdfs_path][WITHDBPROPERTIES(property_name=pr
operty_value,...)]#修改数据库ALTER(DATABASE|SCHEMA)database_nameSETDBPROPERTIES(property_name=property_value,...)#删除数据库DROP(DATABASE|SCHEM
A)[IFEXISTS]database_name[RESTRICT|CASCADE]演示示例1:Hive数据库操作7/29◆Hive数据表操作-创建数据表Hive数据库/表定义操作(DDL)-2#创建数据表CREATE[TEMPORARY][EXTERNAL]
TABLE[IFNOTEXISTS][db_name.]table_name[(col_namedata_type[COMMENTcol_comment],...[constraint_specification])][COMMENTtable_comment][P
ARTITIONEDBY(col_namedata_type[COMMENTcol_comment],...)][CLUSTEREDBY(col_name,col_name,...)[SORTEDBY(col_
name[ASC|DESC],...)]INTOnum_bucketsBUCKETS][SKEWEDBY(col_name,col_name,...)]ON((col_value,col_value,...),(col_value,col_value,...),...)[STOR
EDASDIRECTORIES][[ROWFORMATrow_format][STOREDASfile_format]|STOREDBY'storage.handler.class.name'[WITHSERDEPROPERTIES
(...)]][LOCATIONhdfs_path][TBLPROPERTIES(property_name=property_value,...)]演示示例2:Hive创建表操作8/29◆Hive数据表操作-修改数据表Hive数据库/表定义操作(DDL)-3#修改数据表表名AL
TERTABLEtable_nameRENAMETOnew_table_name#添加或替换列ALTERTABLEtable_nameADD|REPLACECOLUMNS(col_namedata_type)演示示例3:Hive修改数据表表名演示示例4:Hiv
e表增加列9/29◆HiveDDL其他操作Hive数据库/表定义操作(DDL)-4命令示例说明dropdropdatabasedatabase_name删除数据库droptabletable_name删除表tru
ncatetruncatetabletable_name清空表showshowdatabases显示所有数据库名showtables列出当前库中所有表showviews列出当前库中所有视图showpartitio
nstable_name列出表中所有分区showcreatetable_name显示建表语句showfunctions“a.*”列出所有函数describedescribedatabasedatabse_name显示数据库信息describeta
ble_name显示表信息describetable_name.col_name显示表中某列的信息10/29◆Hive创建分区表语句Hive定义分区/分桶表CREATETABLEemployee_partitioned
(namestring,work_placeARRAY<string>,sex_ageSTRUCT<sex:string,age:int>,skills_scoreMAP<string,int>,depart_titleMAP<STRI
NG,ARRAY<STRING>>)PARTITIONEDBY(yearINT,monthINT)CLUSTEREDBY(employee_id)INTO2BUCKETSROWFORMATDELIMITEDFIELDSTERMINATEDBY
'|'COLLECTIONITEMSTERMINATEDBY','MAPKEYSTERMINATEDBY':';定义按哪个字段分区定义按哪个字段分桶分桶11/29◆Hive分区表描述回顾◼分区列的值将表划分为文件夹◼查询时使用“分区”列和常规列类似◼查询时Hive自动
过滤掉不用于提高性能的分区◆Hive分桶表描述回顾◼分桶是相对分区进行更细粒度的划分◼根据“桶列”的哈希函数将数据进行分桶◼更高的查询处理效率Hive分区表/分桶表描述12/29◆Hive分区◼静态分区◼动态分区◆
Hive分桶◼动态分桶Hive操作分区/分桶类型及设置#使用动态分区需设置sethive.exec.dynamic.partition=true;sethive.exec.dynamic.partition.mode=nonstrict;#使用动态分桶需设
置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_partitionedPARTITION(year,mon
th)SELECTname,array('Toronto')ASwork_place,named_struct("sex","male","age",30)ASsex_age,map("python",90)ASskil
ls_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_nameTABL
ESAMPLE(10PERCENT)s;SELECT*FROMtable_nameTABLESAMPLE(1M)s;SELECT*FROMtable_nameTABLESAMPLE(10rows)s;SELECT*FROMtable_n
ameTABLESAMPLE(BUCKET3OUTOF32ONid)s;15/29◆HiveDML操作常用命令◼load、insert、update、delete、merge、explain等◆数据装载◼load命令实现,将数据复制或移动到Hive表对应的位置◼insert命令实现,执
行MR作业将数据插入Hive表中HiveDML操作-1LOADDATA[LOCAL]INPATH‘filepath’[OVERWRITE]INTOTABLEtable_name[PARTITION(partcol1=val
1,partcol2=val2,……)];INSERT(INTO|OVERWRITE)TABLEtable_name[PARTITIONPARTITION(partcol1=val1,partcol2
=val2,……)]select_statement1FROMfrom_statement;演示示例6:使用insert完成数据装载演示示例5:使用load完成数据装载16/29◆Hive更新、删除、合并数
据◼执行这些操作需要开启ACID(事务)支持◼Hive是数据仓库解决方案,不适合做这种操作◆数据导入/导出◼使用import/export实现数据导入/导出HiveDML操作-2#数据导入IMPORT[[EXTERNAL]T
ABLEnew_or_original_tablename[PARTITION(partcol1=val1,……)]]FROM‘source_path’[LOCATION‘import_target_path’]#数据导出EXPORTTABLEtable_name[PARTI
TION(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,int>,depart_titleMAP<STRING,ARRAY<STRING>>)PARTITIONEDBY(yearI
NT,monthINT)CLUSTEREDBY(employee_id)INTO2BUCKETSROWFORMATDELIMITEDFIELDSTERMINATEDBY'|'COLLECTIONITEMSTERMINAT
EDBY','MAPKEYSTERMINATEDBY':';定义按哪个字段分区定义按哪个字段分桶分桶19/29演示示例7:分区表与数据装载演示示例8:分桶表与数据插入◆Hive分区◼静态分区◼动态分区◆Hive分桶◼动态分桶Hive操作分区/分桶类型及设置#使用动态分区
需设置sethive.exec.dynamic.partition=true;sethive.exec.dynamic.partition.mode=nonstrict;#使用动态分桶需设置sethive.en
force.bucketing=true;20/29◆静态分区操作示例◆动态分区操作示例Hive操作分区ALTERTABLEemployee_partitionedADDPARTITION(year=2017,month=3)PARTI
TION(year=2017,month=4);ALTERTABLEemployee_partitionedDROPPARTITION(year=2017,month=4);INSERTINTOTABLEemplo
yee_partitionedPARTITION(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;21/29◆随机抽样基于整行数据◆随机抽样基于指定列
(使用分桶列更高效)◆随机抽样基于blocksizeHive操作分桶SELECT*FROMtable_nameTABLESAMPLE(BUCKET3OUTOF32ONrand());SELECT*FROMtable_nameTABLESAMPLE(
10PERCENT);SELECT*FROMtable_nameTABLESAMPLE(1M);SELECT*FROMtable_nameTABLESAMPLE(10rows);SELECT*FROMtable_nameTABLESAMP
LE(BUCKET3OUTOF32ONid);22/29◆Hive命令行操作◼-i:从文件初始化HQL◼-e:从命令行执行指定的HQL◼-f:执行HQL脚本,与-i作用类似◼-S:静默模式◼-d:自定义变量,以便在HQL脚本中使用◼-hivecon
fx=y:配置Hive/Hadoop参数HiveShell操作hive[-hiveconfx=y]*[<-ifilename>]*[<-ffilename>|<-equery-string>][-S][-d
]演示示例9~11:使用Hive命令行操作数据23/29◆配置文件配置◼配置$HIVE_HOME/conf/hive-site.xml,全局永久配置◆命令行参数配置◼启动Hive时,可以添加命令来设定参数◆SET参数声明配置◼在HQL中使用SET关键字设定参数H
ive参数配置方式hive–hiveconfhive.root.logger=INFO.console#参数设置只对本次session有效setmapred.reduc.tasks=100#参数设置只对本次session有效24/29◆关键步骤:◼创
建数据库empdb,并使用该数据库◼新建分区表emp_hr_partitioned◼包含字段name、employee_id、sin_number、start_date按照入职时间中的年份(year)进行分区操作◼使用desc查看表的信息◼通过查询语句向表中插入数据◼使用HQL语句查询
一共有多少条数据学员操作1—使用HiveShell命令进行操作完成时间:30分钟25/29◆常见问题及解决办法◆代码规范问题◆调试技巧共性问题集中讲解共性问题集中讲解26/29◆开发环境搭建◼启动HiveServer2◼在IDEA中创建ma
ven项目hive-javaapi◼添加Maven依赖包hive-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◼使用JDBCAPI创建数据库◼使用JDBCAPI创建表emp_id_buckets◼使用JDBCAPI对表做数据装载,查询等操作学员操作2—使用JDBCAPI进行操作完成时间:30分钟29
/29◆常见问题及解决办法◆代码规范问题◆调试技巧共性问题集中讲解共性问题集中讲解30/29◆Hive的基本数据类型有◼整数类型、浮点类型、文本类型、布尔及二进制、时间类型等等◆Hive的复杂数据类型有◼ARRAY、MAP、STRUCT、UNION◆Hive表的类型有◼内部表、外部表、分
区表、分桶表◆Hive表的常用操作是表创建、数据装载、查询◆使用HiveJavaAPI操作前需要先启动HiveServer2服务总结31/29