hive编程指南
Hive入门
Hive⼊门第⼀章 Hive 基本概念1.1 什么是 HiveApache Hive是⼀款建⽴在Hadoop之上的开源数据仓库系统,可以将存储在Hadoop⽂件中的结构化、半结构化数据⽂件映射为⼀张数据库表,基于表提供了⼀种类似SQL的查询模型,称为Hive查询语⾔(HQL),⽤于访问和分析存储在Hadoop⽂件中的⼤型数据集。
Hive核⼼是将HQL转换为MapReduce程序,然后将程序提交到Hadoop群集执⾏。
Hive由Facebook实现并开源。
1.2 为什么使⽤Hive使⽤Hadoop MapReduce直接处理数据所⾯临的问题⼈员学习成本太⾼需要掌握java语⾔MapReduce实现复杂查询逻辑开发难度太⼤使⽤Hive处理数据的好处操作接⼝采⽤类SQL语法,提供快速开发的能⼒(简单、容易上⼿)避免直接写MapReduce,减少开发⼈员的学习成本⽀持⾃定义函数,功能扩展很⽅便背靠Hadoop,擅长存储分析海量数据集1.3 Hive与Hadoop的关系从功能来说,数据仓库软件,⾄少需要具备下述两种能⼒:存储数据的能⼒分析数据的能⼒Apache Hive作为⼀款⼤数据时代的数据仓库软件,当然也具备上述两种能⼒。
只不过Hive并不是⾃⼰实现了上述两种能⼒,⽽是借助Hadoop。
Hive利⽤HDFS存储数据,利⽤MapReduce查询分析数据。
这样突然发现Hive没啥⽤,不过是套壳Hadoop罢了。
其实不然,Hive的最⼤的魅⼒在于⽤户专注于编写HQL,Hive帮您转换成为MapReduce程序完成对数据的分析。
1.4 Hive与MysqlHive虽然具有RDBMS数据库的外表,包括数据模型、SQL语法都⼗分相似,但应⽤场景却完全不同。
Hive只适合⽤来做海量数据的离线分析。
Hive的定位是数据仓库,⾯向分析的OLAP系统。
因此时刻告诉⾃⼰,Hive不是⼤型数据库,也不是要取代Mysql承担业务数据处理。
Hive用户手册)_中文版
Hive 用户指南v1.0目录1. HIVE结构 (5)1.1HIVE架构 (5)1.2Hive 和Hadoop 关系 (6)1.3Hive 和普通关系数据库的异同 (7)1.4HIVE元数据库 (8)1.4.1 DERBY (8)1.4.2 Mysql (9)1.5HIVE的数据存储 (10)1.6其它HIVE操作 (10)2. HIVE 基本操作 (11)2.1create table (11)2.1.1总述 (11)2.1.2语法 (11)2.1.3基本例子 (13)2.1.4创建分区 (14)2.1.5其它例子 (15)2.2Alter Table (16)2.2.1Add Partitions (16)2.2.2Drop Partitions (16)2.2.3Rename Table (17)2.2.4Change Column (17)2.2.5Add/Replace Columns (17)2.3Create View (18)2.4Show (18)2.5Load (18)2.6Insert (20)2.6.1Inserting data into Hive Tables from queries (20)2.6.2Writing data into filesystem from queries (21)2.7Cli (22)2.7.1Hive Command line Options (22)2.7.2Hive interactive Shell Command (23)2.7.3Hive Resources (24)2.7.4调用python、shell等语言 (25)2.8DROP (26)2.9其它 (26)2.9.1Limit (26)2.9.2Top k (26)2.9.3REGEX Column Specification (27)3. Hive Select (27)3.1Group By (27)3.2Order /Sort By (28)4. Hive Join (28)5. HIVE参数设置 (31)6. HIVE UDF (33)6.1基本函数 (33)6.1.1 关系操作符 (33)6.1.2 代数操作符 (34)6.1.3 逻辑操作符 (35)6.1.4 复杂类型操作符 (35)6.1.5 内建函数 (36)6.1.6 数学函数 (36)6.1.7 集合函数 (36)6.1.8 类型转换 (36)6.1.9 日期函数 (36)6.1.10 条件函数 (37)6.1.11 字符串函数 (37)6.2UDTF (43)6.2.1Explode (44)7. HIVE 的MAP/REDUCE (45)7.1JOIN (45)7.2GROUP BY (46)7.3DISTINCT (46)8. 使用HIVE注意点 (47)8.1字符集 (47)8.2压缩 (47)8.3count(distinct) (47)8.4JOIN (47)8.5DML操作 (48)8.6HAVING (48)8.7子查询 (48)8.8Join中处理null值的语义区别 (48)9. 优化与技巧 (51)9.1全排序 (53)9.1.1 例1 (53)9.1.2 例2 (56)9.2怎样做笛卡尔积 (59)9.3怎样写exist/in子句 (60)9.4怎样决定reducer个数 (60)9.5合并MapReduce操作 (61)9.6Bucket 与sampling (62)9.7Partition (62)9.8JOIN (63)9.8.1 JOIN原则 (63)9.8.2 Map Join (64)9.8.3 大表Join的数据偏斜 (66)9.9合并小文件 (67)9.10Group By (67)10. HIVE FAQ: (68)1.HIVE结构Hive 是建立在 Hadoop 上的数据仓库基础构架。
hive编程指南 笔记
hive编程指南笔记一、Hive基础1.Hive是一种基于Hadoop的数据仓库工具,用于处理和分析大规模数据。
2.Hive支持SQL查询语言,称为HiveQL,可以方便地对数据进行查询和分析。
3.Hive的数据存储在HDFS中,通过Hive的数据处理引擎进行查询和分析。
二、Hive安装与配置1.Hive的安装主要包括下载并解压Hive的安装包,配置Hive 的环境变量等。
2.Hive的配置主要包括设置Hive的元数据存储位置、设置Hive 的数据存储位置等。
三、Hive数据类型1.Hive支持多种数据类型,包括基本数据类型和复杂数据类型。
2.基本数据类型包括整数类型、浮点数类型、字符串类型等。
3.复杂数据类型包括数组类型、结构体类型、映射类型等。
四、Hive表操作1.Hive支持创建表、删除表、修改表等操作。
2.创建表时需要指定表的名称、表的存储位置、表的数据类型等信息。
3.删除表时需要指定表的名称。
4.修改表时可以对表的字段进行添加、删除或修改。
五、Hive查询操作1.Hive支持SQL查询语言,可以使用SELECT语句进行数据的查询。
2.Hive还支持聚合函数、连接操作、条件过滤等操作。
3.查询结果可以通过输出到文件或输出到屏幕等方式进行展示。
六、Hive优化与调优1.Hive的查询性能可以通过优化查询语句、调整Hive的参数设置等方式进行优化。
2.Hive的调优包括调整Hive的数据存储位置、调整Hive的执行引擎等。
3.还可以通过使用一些工具和技巧来提高Hive的查询性能,例如使用Hive的缓存机制、使用Hive的并行执行等。
以上是关于Hive编程指南的笔记,希望对您有所帮助。
Hive 基础操作
Hive 基础(2):库、表、字段、交互式查询的基本操作•1、命令行操作•2、表操作•3、列操作•4、查看变量•5、一个完整的建库、表例子•6、常用语句示例•7、Refer:1、命令行操作(1)打印查询头,需要显示设置:set hive.cli.print.header=true;(2)加"--",其后的都被认为是注释,但CLI 不解析注释。
带有注释的文件只能通过这种方式执行:hive -f script_name(3)-e后跟带引号的hive指令或者查询,-S去掉多余的输出:hive -S -e "select * FROM mytable LIMIT 3" > /tmp/myquery (4)遍历所有分区的查询将产生一个巨大的MapReduce作业,如果你的数据集和目录非常多,因此建议你使用strict模型,也就是你存在分区时,必须指定where语句hive> set hive.mapred.mode=strict;(5)显示当前使用数据库set hive.cli.print.current.db=true;(6)设置Hive Job 优先级set mapred.job.priority=VERY_HIGH | HIGH | NORMAL | LOW | VERY_LOW(VERY_LOW=1,LOW=2500,NORMAL=5000,HIGH=7500,VERY _HIGH=10000)set mapred.job.map.capacity=M设置同时最多运行M个map 任务set mapred.job.reduce.capacity=N设置同时最多运行N个red uce任务(7)Hive 中的Mapper个数的是由以下几个参数确定的:mapred.min.split.size ,mapred.max.split.size ,dfs.block.siz esplitSize = Math.max(minSize, Math.min(maxSize, blockSiz e));map个数还与inputfilles的个数有关,如果有2个输入文件,即使总大小小于blocksize,也会产生2个mapmapred.reduce.tasks用来设置reduce个数。
6 Hive程序设计
Hive客户端
通过将Hive运行为服务器hive –service hiveserver可以启 动一个服务,而后可以通过不同的客户端连接到这个服务去访 问Hive提供的功能
Hive中的元数据存储metastore
metastore包括两个部分:服务和后台的数据存储
• Embedded metastore: 默认使用内嵌的Derby数据库实例,每 次只能打开一个Hive会话 • Local metastore: 可以使用运行在一个进程中的metastore进 程来访问独立的数据库,可通过JDBC进行设置具体的数据库访问 • Remote metastore: 一个或者多个metastore服务器和Hive服 务运行在不同的进程内
• 数据查询语言本身的定义与构造,这是与终端用户进行交互的接 口,最简单的可以通过命令行接口的方式展开用户与系统的交互 • 构造数据查询语言的执行引擎,即将上述的查询语言进行编译, 并通过分布式的执行引擎完成查询,在Hive中,执行引擎会将查 询语言翻译为多个MapReduce的任务序列,交给MapReduce程 序去执行 • 数据查询语言本身需要定义一套数据组织的格式
jar:这个接口与hadoop jar等价,在运行jar包的时候同时将类路 径包含了Hadoop以及Hive的类路径
metastore:在通常情况下,metastore和Hive服务运行在同一个 进程,使用这个服务,也可以让metastore作为单独的进程运行, 环境变量METASTORE_PORT可以指定服务器监听端口号
桶的划分
通过使用CLUSTER BY子句可以将数据记录划分到桶中,例 如以下的对用户的划分
CREATE TABLE bucketed_users(id INT, name STRING)
通过Hive编程实现实时数据流处理
通过Hive编程实现实时数据流处理实时数据流处理已成为现代企业在快速变化的数据环境下进行数据分析和决策的重要工具。
Hive是一个基于Hadoop的数据仓库工具,可以通过编程实现实时数据流处理。
本文将介绍如何使用Hive编程实现实时数据流处理。
首先,我们需要了解Hive的基本概念和工作原理。
Hive是一个基于SQL的查询构建引擎,可以将SQL查询转化为MapReduce任务来执行,从而在Hadoop集群上处理大规模数据。
Hive支持的数据类型包括基本数据类型(例如整数、字符串等)和复杂数据类型(例如数组、结构体等)。
要使用Hive进行实时数据流处理,我们需要创建一个Hive表来存储数据。
可以使用HiveQL语言来定义表的结构和存储格式。
例如,可以使用以下命令创建一个名为“stream_data”的表:```sqlCREATE TABLE stream_data (id INT,name STRING,timestamp TIMESTAMP)ROW FORMAT DELIMITEDFIELDS TERMINATED BY ',';```上述命令创建了一个包含id、name和timestamp列的表,数据以逗号分隔。
接下来,我们需要将实时数据流导入Hive表中进行处理。
可以使用Hive的内置函数和语句来执行数据导入任务。
例如,可以使用以下命令将数据从一个文本文件导入到“stream_data”表中:```sqlLOAD DATA INPATH '/path/to/data.txt' INTO TABLE stream_data;```上述命令将数据从文件“/path/to/data.txt”导入到“stream_data”表中。
一旦数据导入到Hive表中,我们可以使用HiveQL语言执行各种查询和分析操作。
例如,可以使用以下命令计算每个小时的数据总量:```sqlSELECTHOUR(timestamp) AS hour,COUNT(*) AS countFROMstream_dataGROUP BYHOUR(timestamp);```上述命令将针对“stream_data”表执行查询操作,根据timestamp列的小时部分对数据进行分组,并计算每个小时的数据总量。
HiveSQL编译过程详解(繁体)
HiveSQL编译过程详解(繁体)目錄[-]1、MapReduce實現基本SQL操作的原理1.1Join的實現原理1.2GroupBy的實現原理1.3Ditinct的實現原理2、SQL轉化為MapReduce的過程2.1Phae1SQL詞法,語法解析2.1.1Antlr2.1.2抽象語法樹ASTTree2.1.3樣例SQL2.1.3SQL生成ASTTree2.2Phae2SQL基本組成單元QueryBlock2.2.1QueryBlock2.2.2ASTTree生成QueryBlock2.3Phae3邏輯操作符Operator2.3.1Operator2.3.2QueryBlock生成OperatorTree2.4Phae4邏輯層優化器2.4.1PredicatePuhDown優化器2.4.2NonBlockingOpDeDupProc優化器2.4.3ReduceSinkDeDuplication優化器2.5Phae5OperatorTree生成MapReduceJob的過程2.5.1對輸出表生成MoveTak2.5.2開始遍歷2.5.3Rule#1TS%生成MapReduceTak物件,確定MapWork2.5.4Rule#2TS%.某RS%確定ReduceWork2.5.5Rule#3RS%.某RS%生成新MapReduceTak物件,切分MapReduceTak2.5.6R4FS%連接MapReduceTak與MoveTak2.5.7合併Stage2.5.8切分MapReduce階段2.5.9OperatorTree生成MapReduceTak全貌2.6Phae6實體層優化器2.6.1MapJoin原理Hive是基於Hadoop的一個資料倉庫系統,在各大公司都有廣泛的應用。
美團資料倉庫也是基於Hive搭建,每天執行近萬次的HiveETL計算流程,負責每天數百GB的資料存儲和分析。
Hive的穩定性和性能對我們的資料分析非常關鍵。
利用Hive进行数据可视化与报表生成的编程指南
利用Hive进行数据可视化与报表生成的编程指南Hive是Apache软件基金会开发的一个数据仓库工具,它使得用户能够通过类似于SQL的查询语言对大规模数据进行分析。
除此之外,Hive也提供了一些功能来帮助用户进行数据可视化和报表生成。
本文将为您提供关于如何利用Hive进行数据可视化与报表生成的编程指南。
首先,为了能够进行数据可视化和报表生成,我们需要在Hive中创建相关的表。
表是Hive中存储数据的基本单位,可以通过Hive的类SQL语言来定义。
下面是一个创建表的例子:```CREATE TABLE sales (product_id INT,product_name STRING,sale_date DATE,sale_amount DOUBLE)ROW FORMAT DELIMITEDFIELDS TERMINATED BY ','STORED AS TEXTFILE;```上述代码创建了一个名为“sales”的表,它包含了产品ID、产品名称、销售日期和销售金额等列。
在这个例子中,数据以逗号分隔,并以文本文件的形式存储。
接下来,我们需要向表中插入数据。
可以使用Hive的INSERT语句来实现。
下面是一个插入数据的例子:```INSERT INTO salesVALUES (1, 'Product A', '2022-01-01', 1000.00),(2, 'Product B', '2022-01-02', 1500.00),(3, 'Product C', '2022-01-03', 2000.00);```上述代码向“sales”表插入了三条销售数据。
每条数据由产品ID、产品名称、销售日期和销售金额组成。
一旦表中的数据准备完毕,我们就可以开始进行数据可视化和报表生成了。
Hive提供了一些函数和工具,可以帮助我们对数据进行聚合、汇总和计算。
Hive开发规范
ABC项目Hive开发规范目录ABC项目 (1)Hive开发规范 (1)1. ABC架构图 (2)2. Oracle包或过程转换成Hive脚本图 (2)3. 项目文件夹命名规范 (3)4. shell脚本文件命名规范 (3)5. sql脚本文件命名规范 (4)6. 临时表命名规范 (4)7. 基表命名规范 (5)8. 结果表命名规范 (6)9. 配置表命名规范 (7)10. 维度表命名规范 (7)11. 日志记录格式 (8)12. 注释 (8)13. Partition 列 (8)14. 字符集 (8)15. Shell脚本编写规范 (8)16. SQL程序体编写规范 (9)17. Sqoop数据同步 (9)18. Sqoop手功同步脚本 (10)19. Hive程序优化 (10)20. 常用工具代码 (11)1. ABC架构图2. Oracle包或过程转换成Hive脚本图具体案例:A、Oracle 建表脚本.sql Hive 建表脚Hive 程序脚本1.sql本.shHive 程序脚本1.sql项目文件夹命名规范项目英文名称缩写如ABC 乍业成本项目:abc_cost程序文件夹命名规范p_项目名称_模型名称_Param_Job女口 ABC 乍业成本项目:p_abc_waybill_model_Param_Job4. shell 脚本文件命名规范shell 建表脚本文件命名规范p_项目名称_模型名称_Tab.shB 、Oracle 程序包.sql shell 调度脚本.shs週琐口名称模块 名称” sqlC 、Oracle 存储过程.sql 程序脚本.sql3.项目文件夹命名规范生琐甘名称_摸块客讲 甘名称模块名rHm_Job_ rur L 豔」1>tra«i_|uUshellHive 程序脚本2.sql调度脚本.sh Hive如ABC乍业成本项目:p_abc_waybill_model_Tab.shshell调度脚本命名规范一级调度脚本:p_项目名称_程序名称_Param_Job.sh (只调sql脚本)二级调度脚本:p_项目名称_程序名称_Param_Job_run.sh (只调一级shell 脚本)总调度脚本:p_项目名称_模型名称_Param_Job_Total」un.sh (只调二级shell脚本)如ABC乍业成本项目:一级调度脚本:P_abc_ waybill」nput_Param_Job.sh二级调度脚本:p_abc_ waybill」n put_Param_Job_ru n.sh总调度脚本:p_abc_ waybill_model_Param_Job_Total_ru n.sh5. sql脚本文件命名规范Sql程序体脚本文件命名p_项目名称_模型名称_程序名称_Body.sql女口ABC乍业成本项目:p_abc_ waybill_model_input_Body.sql6. 临时表命名规范项目名称模型名称程序名称TMP如ABC乍业成本项目:abc_waybill_model_input_tmpO1注意:在hive中临时表建成内部表,需要时创建不需要时删除。
Hive用户指南(Hive_user_guide)_中文版
Hive 用户指南v1.0目录1. HIVE结构 (5)1.1HIVE架构 (5)1.2Hive 和Hadoop 关系 (6)1.3Hive 和普通关系数据库的异同 (7)1.4HIVE元数据库 (8)1.4.1 DERBY (8)1.4.2 Mysql (9)1.5HIVE的数据存储 (10)1.6其它HIVE操作 (10)2. HIVE 基本操作 (11)2.1create table (11)2.1.1总述 (11)2.1.2语法 (11)2.1.3基本例子 (13)2.1.4创建分区 (14)2.1.5其它例子 (15)2.2Alter Table (16)2.2.1Add Partitions (16)2.2.2Drop Partitions (16)2.2.3Rename Table (16)2.2.4Change Column (17)2.2.5Add/Replace Columns (17)2.3Create View (17)2.4Show (18)2.5Load (18)2.6Insert (20)2.6.1Inserting data into Hive Tables from queries (20)2.6.2Writing data into filesystem from queries (21)2.7Cli (22)2.7.1Hive Command line Options (22)2.7.2Hive interactive Shell Command (23)2.7.3Hive Resources (24)2.7.4调用python、shell等语言 (25)2.8DROP (26)2.9其它 (26)2.9.1Limit (26)2.9.2Top k (26)2.9.3REGEX Column Specification (26)3. Hive Select (27)3.1Group By (27)3.2Order /Sort By (28)4. Hive Join (28)5. HIVE参数设置 (31)6. HIVE UDF (32)6.1基本函数 (32)6.1.1 关系操作符 (32)6.1.2 代数操作符 (34)6.1.3 逻辑操作符 (35)6.1.4 复杂类型操作符 (35)6.1.5 内建函数 (35)6.1.6 数学函数 (35)6.1.7 集合函数 (35)6.1.8 类型转换 (35)6.1.9 日期函数 (35)6.1.10 条件函数 (36)6.1.11 字符串函数 (36)6.2UDTF (38)6.2.1Explode (39)7. HIVE 的MAP/REDUCE (40)7.1JOIN (40)7.2GROUP BY (41)7.3DISTINCT (41)8. 使用HIVE注意点 (42)8.1字符集 (42)8.2压缩 (42)8.3count(distinct) (42)8.4JOIN (42)8.5DML操作 (43)8.6HAVING (43)8.7子查询 (43)8.8Join中处理null值的语义区别 (43)9. 优化与技巧 (46)9.1全排序 (46)9.1.1 例1 (47)9.1.2 例2 (50)9.2怎样做笛卡尔积 (53)9.3怎样写exist/in子句 (53)9.4怎样决定reducer个数 (54)9.5合并MapReduce操作 (54)9.6Bucket 与sampling (55)9.7Partition (56)9.8JOIN (57)9.8.1 JOIN原则 (57)9.8.2 Map Join (57)9.8.3 大表Join的数据偏斜 (59)9.9合并小文件 (61)9.10Group By (61)10. HIVE FAQ: (61)1.HIVE结构Hive 是建立在 Hadoop 上的数据仓库基础构架。
Hive语法及其进阶(一)
Hive语法及其进阶(⼀)1、Hive完整建表1CREATE[EXTERNAL]TABLE[IF NOT EXISTS] table_name(2[(col_name data_type [COMMENT col_comment], ...)]3 )4[COMMENT table_comment]5[PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)]6[CLUSTERED BY (col_name, col_name, ...)7 [SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS]8[9 [ROW FORMAT row_format]10[STORED AS file_format]11| STORED BY''[ WITH SERDEPROPERTIES (...) ] (Note: only available starting with0.6.0)12 ]13[LOCATION hdfs_path]14[TBLPROPERTIES (property_name=property_value, ...)] (Note: only available starting with0.6.0)15[AS select_statement] (Note: this feature is only available starting with0.5.0.)注意: []:表⽰可选 EXTERNAL:外部表 (col_name data_type [COMMENT col_comment],...:定义字段名,字段类型 COMMENT col_comment:给字段加上注释 COMMENT table_comment:给表加上注释 PARTITIONED BY (col_name data_type [COMMENT col_comment],...):分区分区字段注释 CLUSTERED BY (col_name, col_name,...):分桶 SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS:设置排序字段升序、降序 ROW FORMAT row_format:指定设置⾏、列分隔符(默认⾏分隔符为\n) STORED AS file_format:指定Hive储存格式:textFile、rcFile、SequenceFile 默认为:textFile LOCATION hdfs_path:指定储存位置(默认位置在hive.warehouse⽬录下) TBLPROPERTIES (property_name=property_value, ...):跟外部表配合使⽤,⽐如:映射HBase表,然后可以使⽤HQL对hbase数据进⾏查询,当然速度⽐较慢 AS select_statement:从别的表中加载数据 select_statement=sql语句2、使⽤默认⽅式建表1create table students012 (3 id bigint,4 name string,5 age int,6 gender string,7 clazz string8 )9 ROW FORMAT DELIMITED FIELDS TERMINATED BY',';注意:分割符不指定,默认不分割通常指定列分隔符,如果字段只有⼀列可以不指定分割符:ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';3、建表2:指定location1create table students022 (3 id bigint,4 name string,5 age int,6 gender string,7 clazz string8 )9 ROW FORMAT DELIMITED FIELDS TERMINATED BY','10 LOCATION 'data';4、建表3:指定存储格式1create table student_rc2 (3 id bigint,4 name string,5 age int,6 gender string,7 clazz string8 )9 ROW FORMAT DELIMITED FIELDS TERMINATED BY','10 STORED AS rcfile;注意: 指定储存格式为rcfile,inputFormat:RCFileInputFormat,outputFormat:RCFileOutputFormat,如果不指定,默认为textfile注意: 除textfile以外,其他的存储格式的数据都不能直接加载,需要使⽤从表加载的⽅式。
hive编程指南 笔记
hive编程指南笔记(最新版)目录1.Hive 简介2.Hive 的基本概念3.Hive 的安装与配置4.Hive 的基本操作5.Hive 的高级特性6.Hive 的应用实例7.总结正文一、Hive 简介Hive 是基于 Hadoop 的数据仓库工具,可以用来处理和分析大规模的结构化数据。
它允许用户使用类似于 SQL 的查询语言(称为 HiveQL 或HQL)来查询、汇总和分析存储在 Hadoop 分布式文件系统 (HDFS) 上的数据。
二、Hive 的基本概念1.表(Table):在 Hive 中,表是数据的基本组织单位。
表可以看作是一个文件系统目录,包含一个或多个数据文件。
2.列(Column):表中的列对应于表中的属性。
列的数据类型可以是字符串、数值、日期等。
3.行(Row):表中的行对应于表中的记录。
每个行包含一个或多个列的值。
4.分区(Partition):分区是一种组织表中数据的方式,可以将表按照某个或多个列的值进行划分。
三、Hive 的安装与配置1.安装 Hadoop:首先需要安装 Hadoop,因为 Hive 是基于 Hadoop 的。
2.下载 Hive:从 Hive 官方网站下载最新版本的 Hive。
3.配置 Hive:在 Hadoop 的配置文件中添加 Hive 的相关配置,包括 Hive 的安装路径、HDFS 的配置等。
四、Hive 的基本操作1.创建表:使用 CREATE TABLE 语句创建表。
2.插入数据:使用 INSERT INTO 语句向表中插入数据。
3.查询数据:使用 SELECT 语句查询表中的数据。
4.更新数据:使用 UPDATE 语句更新表中的数据。
5.删除表:使用 DROP TABLE 语句删除表。
五、Hive 的高级特性1.数据类型:Hive 支持多种数据类型,包括字符串、数值、日期等。
2.函数:Hive 提供了丰富的内置函数,包括聚合函数、数学函数等。
第三章hive表操作(一)
详细显示
格式化显示
Hive 编程
Hive 编程
3. 创建表时加入分隔符
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.] table_name [(col_name data_type, ... )]
[ROW FORMAT row_format] [STORED AS file_format] ……
显示数据库的属性
例4. 显示myhive1数据库的数据信息
Hive 编程
在MySQL中显示数据库的属性:
Hive 编程
3. 修改数据库—Alter Database
Hive 编程
ALTER (DATABASE|SCHEMA) database_name SET DBPROPERTIES (property_name=property_value, ...); ALTER (DATABASE|SCHEMA) database_name SET OWNER [USER|ROLE] user_or_role; ALTER (DATABASE|SCHEMA) database_name SET LOCATION hdfs_path;
布尔类型,true/false 字符串,可以指定字符集
时间戳
时间
示例
1 1 1 1 1.0 1.0 true “xmu” 1327882394(Unix新纪元 秒) 2019-05-06
TIMESTAM:偏移量,与时区无关 DATE:不包括时间
Hive 编程
2. 复杂数据类型
Hive 编程
类型
描述
ARRAY 一组有序字段,字段的类型必须相同
示例 Array(1,2)
Hive详细教程
Hive详细教程为什么选择Hive?基于Hadoop的⼤数据的计算/扩展能⼒⽀持SQL like查询语⾔统⼀的元数据管理简单编程Hive的安装1.1在hadoop⽣态圈中属于数据仓库的⾓⾊。
他能够管理hadoop中的数据,同时可以查询hadoop中的数据。
本质上讲,hive是⼀个SQL解析引擎。
Hive可以把SQL查询转换为MapReduce中的job来运⾏。
hive有⼀套映射⼯具,可以把SQL转换为MapReduce中的job,可以把SQL中的表、字段转换为HDFS中的⽂件(夹)以及⽂件中的列。
这套映射⼯具称之为metastore,⼀般存放在derby、mysql中。
1.2 hive在hdfs中的默认位置是/user/hive/warehouse,是由配置⽂件hive-conf.xml中属性hive.metastore.warehouse.dir决定的。
2.hive的安装(1)解压缩、重命名、设置环境变量(2)在⽬录$HIVE_HOME/conf/下,执⾏命令mv hive-default.xml.template hive-site.xml重命名在⽬录$HIVE_HOME/conf/下,执⾏命令mv hive-env.sh.template hive-env.sh重命名(3)修改hadoop的配置⽂件hadoop-env.sh,修改内容如下:exportHADOOP_CLASSPATH=.:$CLASSPATH:$HADOOP_CLASSPATH:$HADOOP_HOME/bin (4)在⽬录$HIVE_HOME/bin下⾯,修改⽂件hive-config.sh,增加以下内容:export JAVA_HOME=/usr/local/jdkexport HIVE_HOME=/usr/local/hiveexport HADOOP_HOME=/usr/local/hadoop3.安装mysql(1)删除linux上已经安装的mysql相关库信息。
计算机编程知识:Hive数据仓库实践
计算机编程知识:Hive数据仓库实践随着数据爆炸式增长,企业需要越来越多的数据仓库来存储和分析这些海量数据。
Hive是一种能够让数据仓库快速处理大规模数据的数据仓库解决方案,该方案在Hadoop平台上可运行。
本文将介绍Hive 数据仓库实践的一些基本知识。
Hive与Hadoop生态圈Hadoop平台是为处理大规模数据而创建,而Hive是为了让数据科学家和数据分析人员能够使用SQL来轻松查询,分析和处理这些数据。
Hive生态系统包括HQL(Hive查询语言),Hive服务器,Hive UI(用户界面)和Hive继承器。
Hive继承器是一个独立的应用程序,它允许您访问和使用Hive数据仓库中存储的数据。
在Hadoop平台上,Hive数据仓库可以快速处理大规模数据集。
Hive数据仓库简介Hive数据仓库处理的数据量很大,为此,数据为分布于一堆空闲节点上,Hadoop集群就是这些节点的集合。
您可以运行自己的Hadoop集群或使用支持Hadoop数据仓库的云服务提供商。
Hive数据仓库支持查询不同类型和大小的文件,并将这些文件转换为关系数据库表,这样您就可以使用SQL查询它们了。
Hive数据仓库中的一些重要组件HiveQL:Hive查询语言是与SQL类似的查询语言,可以查询存储在Hive数据仓库中的数据。
HiveQL允许用户操作和管理表,分区和分区表。
Hive服务器和Hive UI界面:Hive UI是一个简单的Web界面,用于管理和查询Hive数据仓库。
Hive UI与Hive服务器交互,以获取和修改数据。
Hive元数据库:Hive元数据库是Hive数据仓库的一个关键组件。
该元数据库用于存储数据的元信息,以建立表,列和分区。
元数据是数据集名称,列名,数据类型,数据格式,文件位置,文件大小等以文本形式存储的信息来表示。
Hive HDFS存储:Hive存储器使用Hadoop分布式文件系统(HDFS)。
HDFS在Hadoop集群中运行,用于处理大规模数据的存储,分发和处理。
2.Hive常见操作命令整理
2.Hive常见操作命令整理该笔记主要整理了《Hive编程指南》中⼀些常见的操作命令,⼤致如下(持续补充中):1. 查看/设置/修改变量2. 执⾏命令3. 搜索相关内容4. 查看库表信息5. 创建表6. 分区7. 修改表(重命名、修改列、删除列、增加列)8. 找到表位置并导出⾄本地9. 去空格10. case...when...then句式11. 操作符12. group by...having句式13. JOIN14. order by和sort by15. 抽样查询16. 视图17. 分桶表18. 函数19. with...as20. rank() over (partition by ... order by ... asc/desc)和row_number()21. 时间相关的函数(from_unixtime,unix_timestamp,date_add,months_between)22.substr()23.regexp_replace()和regexp_extract()24.动态分区25.nvl和grouping set26. concat_ws()、group_concat()和collect_list()teral view explode()1. 查看/设置/修改变量$ hive############# 查询环境变量############hive>set env:HOME;# 打印命名空间hivevar, hiveconf, system和env所有变量hive>set;# 还打印Hadoop所定义的所有属性hive>set -v;############# 设置hive变量############hive>set hivevar:foo=bar# 查看刚设置的变量hive>set foo;hive>set hivevar:foo;############# 修改属性变量############# hiveconf: Hive相关的配置属性# 不进⼊Hive进⾏配置属性修改hive --hiveocnf hive.cli.print.current.db=true# 进⼊hive进⾏配置修改hive>set hiveconf:hive.cli.print.current_db=true;2. 执⾏命令# 执⾏命令⽅式1:使⽤下⾯的 “⼀次使⽤”命令(-e是指⼀次执⾏,-S是指静默模式,在输出结果中不显⽰Ok和Time taken字段)hive -e -S "select * from mytable limit 3";# 执⾏命令⽅式2:调⽤Hive执⾏hql⽂件hive -f /path/query.hql# 执⾏命令⽅式3:在Hive shell内执⾏hql⽂件$ hivehive>source /path/query.hql3. 搜索相关内容# 模糊搜索set命令的输出结果中某个于warehouse相关的属性$ hive -S -e "set" | grep warehousehive.metastore.warehouse.dir=/user/hive/warehousehive.warehouse.subdir.inherit.perms=false4. 查看库表信息# 查看数据库,使⽤like是以ahf开头,以其他字符结尾(即.*)的数据库名show databases;show databases like 'ahf.*';# 查看表的详细表结构信息(formatted⽐extended输出内容更详细且可读性更⾼)describe mydb.table;describe formatted mydb.table;describe extended mydb.table;5. 创建表# 拷贝表结构,⽽不拷贝数据(⽤like)create table if not exists mydb.mytable like mydb.mytable2;# 拷贝表结构,且拷贝数据(⽤as)create table if not exists mydb.mytable asselect*from mydb.mytable2;# 直接创建表结构create table if not exists mydb.mytable(id string comment 'id',name string comment '姓名')partitioned by (class string)stored as orc;6. 分区# 建⽴分区create table(字段1 字段类型, 字段2 字段类型)paritioned by (字段名3 字段类型, 字段名4 字段类型);# 查看分区show partitions table_name;# 查看某个特定分区键的分区show partitions table_name partition(⼀个分区字段='该分区字段下的某个值');# 增加分区alter table log_message add partition(year=2012, month=1, day=2);# 删除分区alter table log_messages drop if exists partition(year=2012, month=1, day=2);7. 修改表(重命名、修改列、删除列、增加列)# 表重命名alter table log_messages rename to logmsgs;# 修改列信息, 在下⾯的例⼦中,# 我们将字段hms重命名为hour_minutes_seconds,修改其类型和注释,再转移到severity字段之后# 如果⽤户想将这个字段移动到第⼀个为位置,只需要使⽤first关键字替换after severityalter table log_messages change column hms hour_minutes_seconds intcomment 'the hours, minutes, and seconds parts of the timestamp'after severity;# 删除或替换列, 下⾯的例⼦移除了之前所有字段并重新指定了新的字段alter table log_messages replace columns(新字段1 int comment '...',新字段2 string comment '...');# 增加列alter table log_messages add columns(app_name string comment 'application name',session_id long comment 'the current session id');8. 找到表位置并导出⾄本地# 找到表位置describe formatted mydb.mytable;# 例如:Location:hdfs://alg-hdfs/warehouse/user/alvinai.mydb/mytable# 导出⽂件hadoop fs -cp [表来源][⽬标导出路径]9. 去空格# 去空格 ltrim去左空格,rtrim去右空格ltrim(string s)10. case...when...then句式select name,salary,case when salary <5000.0then'low'when salary >=5000.0and salary <70000.0then'middle'else'high'end as bracketfrom employees;11. 操作符# 常见的谓语操作符A<>B跟A!=B是⼀样的A<==>B是指任⼀为NULL,则结果为NULLA is null还有A is not nulla not betweenb and c, between是闭区间# LiKE和RELIKE谓语操作符A like B, A relike B前者是SQL,后者是JAVA的正则表达式A like B, ‘x%’表⽰A必须以字母x开头,‘%x’表⽰A必须以字母x结尾,‘%x%’表⽰A包含字母x,可以位于开头结尾或者字符串中间A relike B, .号表⽰任意字符,*表⽰重复左边的字符串零次到⽆数次,表达式(x|y)表⽰x或者y匹配例⼦:查找住址以Ave结尾的⼈select name, address from where employees where address like'Ave.';例⼦:查找地址以0开头的⼈select name, address from where employees where address like 'O%';# split操作符select split(row_key, '_')[0] as account_id12. group by...having句式# 如果想要对group by语句产⽣的分组进⾏条件过滤,可以⽤having例如:select year(ymd),avg(price_close) from stockswhere exchange ='NASDAQ'and symbol ='AAPL'group by year(ymd)having avg(price_close) >0.0;13. JOINHive连接有:inner join: 交集,就是join。
2第三章hive表操作(二)
桶表的简单原理
Hive 编程
Hive使用对列数据进行哈希取值; 并将结果除以桶的个数取余数,余数是几就放到第 几个桶里。 这样,任何一个桶里都会有一个随机的用户集合。
桶表
哈希运算
1 Tom M 60 80 96 2 Mary F 88 65 90 3 Jerry M 90 85 88 4 Rose M 79 85 90 5 Mike F 90 88 94 6 John F 85 80 80 7 Scott F 70 90 80 8 King F 90 88 75 9 Kitty M 88 77 95 10 James M 77 80 94
Hive 编程
3. 修改分区表中的分区
Hive 编程
只修改分 区列
4. 删除分区表中的分区
Hive 编程
Hive 编程
3.9 桶表
为什么使用桶表?
获得更高的查询处理效率 使取样( sampling)更高效
在处理大规模数据集时,在开发和修改查询的阶段,如 果能在数据集的一小部分数据上试运行查询,会带来很多 方便。
数据可由Hive之外的进程管理和访问; 外部表被删除时,元数据被删除,数据不删除;
例18.将Hive中创建内部表bank_m,将 /data/hivedata/bank_inf导入。
Hive 编程
Hive 编程
在HDFS中查看bank_m:
Hive 编程
导入的本地程
原始数据
(5)查看桶表中的数据
Hive 编程
Hive 编程
2. 对桶表取样
Hive 编程
select * from s_bucket tablesample(bucket x out of y on id) x表示从哪个桶开始取,一共取 总桶数/y 个。
hive 编程指南 读书笔记
hive 编程指南读书笔记Hive 是一种在 Hadoop 平台上运行的数据仓库基础设施,它提供了一个类似于 SQL 的查询语言,使用户能够方便地处理大规模的结构化和半结构化数据。
本文是笔者对《Hive 编程指南》一书的读书笔记,主要总结了其中的重要概念、特性和最佳实践。
一、Hive 的基本概念和体系结构Hive 是建立在 Hadoop 之上的一个数据仓库基础设施,它提供了一个简单、交互式的查询语言 HiveQL,让用户可以像使用 SQL 一样查询和分析大规模的数据。
Hive 的体系结构主要包括元数据、存储和执行引擎三个部分。
1. 元数据Hive 的元数据是指描述数据和表结构的信息,它存储在关系型数据库中,如 MySQL、Derby 等。
元数据包括数据库、表、分区、列、分桶等对象的定义,Hive 使用元数据来处理查询和优化执行计划。
2. 存储Hive 的存储主要依赖于 Hadoop 的文件系统 HDFS。
数据以文件的形式存储在HDFS 中,并通过表的分区和分桶等方式进行组织和管理。
此外,Hive 还支持压缩和索引等技术,以提高数据存储和查询的效率。
3. 执行引擎Hive 的执行引擎将用户的 HiveQL 查询转化为 MapReduce 程序并提交到 Hadoop 集群上执行。
Hive 支持多种执行引擎,如传统的MapReduce、Tez、Spark 等,用户可以根据实际需求选择适合的执行引擎。
二、Hive 数据模型和表操作1. 数据模型Hive 的数据模型是基于表的,它把数据组织成一张张类似于关系数据库中的表。
每张表由一组列组成,每列具有一个唯一的名称和数据类型。
Hive 支持的数据类型包括基本类型(INT、STRING、DOUBLE 等)和复杂类型(ARRAY、MAP、STRUCT 等)。
2. 表的创建和加载数据在 Hive 中,可以通过 HiveQL 语句来创建表和加载数据。
创建表时需要指定表的名称、列的名称和数据类型等,同时可以定义表的分区和分桶等属性。
大数据入门第十一天——hive详解(二)基本操作与分区分桶
⼤数据⼊门第⼗⼀天——hive详解(⼆)基本操作与分区分桶⼀、基本操作 1.DDL 官⽹的DDL语法教程: 建表语句CREATE[EXTERNAL]TABLE[IF NOT EXISTS] table_name[(col_name data_type [COMMENT col_comment], ...)][COMMENT table_comment][PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)][CLUSTERED BY (col_name, col_name, ...)[SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS][ROW FORMAT row_format][STORED AS file_format][LOCATION hdfs_path]data_type: primitive_type| array_type| map_type| struct_type| union_type -- (Note: Available in Hive 0.7.0 and later)primitive_type: TINYINT|SMALLINT|INT|BIGINT| BOOLEAN|FLOAT|DOUBLE|DOUBLE PRECISION-- (Note: Available in Hive 2.2.0 and later)| STRING|BINARY-- (Note: Available in Hive 0.8.0 and later)|TIMESTAMP-- (Note: Available in Hive 0.8.0 and later)|DECIMAL-- (Note: Available in Hive 0.11.0 and later)|DECIMAL(precision, scale) -- (Note: Available in Hive 0.13.0 and later)| DATE -- (Note: Available in Hive 0.12.0 and later)|VARCHAR-- (Note: Available in Hive 0.12.0 and later)|CHAR-- (Note: Available in Hive 0.13.0 and later)array_type: ARRAY < data_type >map_type: MAP < primitive_type, data_type >struct_type: STRUCT <col_name : data_type [COMMENT col_comment], ...>union_type: UNIONTYPE < data_type, data_type, ... >-- (Note: Available in Hive 0.7.0 and later)数据类型 说明: 1、CREATE TABLE 创建⼀个指定名字的表。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
文本文件数据编码:
CSV:以逗号分割值
TSV:以制表符分割值
\n:对记录进行分割
^A:分割列
^B:分割ARRAY数据,STRUCT数据,MAP中的键值对
^C:用于MAP键和值之间的分割
自定义分隔符(一般不自己指定):
CREATE TABLE employees(
name STRING,
$hive --hiveconf y=5;
一次性命令:
$hive -S -e "SELECT * FROM mytable LIMIT 3"> /tmp/myquery
$cat /tmp/myquery(本地文件,而不是hdfs文件)
在shell中直接执行一个hive脚本
$hive -S -e "set" | grep warehouse (不能完整记清楚某个属性的名字时可以用模糊查)
OK 正确执行
Time taken :0.834 seconds 总共花费的时间
metastore.db 和derby.log
$hive --help
命令选项和服务类型
变量和属性
>set env:HOME; 查看env命名空间下的HOME 环境变量的值
>set; 显示所有环境变量
SELECT * FROM massive_table;
只能使用hive -f script_name;执行,不能直接复制粘贴
查询时显示字段名称
>set hive.cli.print.header=true;
>SELECT * FROM sytem_logs LIMIT 3; 会显示列名
采取安全措施(对于大量读取数据时):
>set hive.mapred.mode=strict
>SELECT ,e.salary FROM employees e LIMIT 100;????怎么查无错
>set hive.mapred.mode=nonstrict;
>SHOW PARTITIONS employees;(显示所有分区)
hive中变量和属性所在的命名空间:
hivevar :用户自定义的变量 读/写
system:java定义的配置属性 读/写
env:shell定义的环境变量 读
hivecof:hive相关的配置属性 读/写
>set foo;查看
>set hivevar:foo=bar2;设置
$hive --hivevar foo=bar1;
hive的基本数据类型:
TINYINT,SMALLINT,INT,BIGINT,BOOLEAN,FLOAT,DOUBLE,STRING,TIMESTAMP,BINARY(字节数组)
hive的类型都是对java接口的实现;
集合数据类型:
MAP, ['last'] map('first','JOIN','last','Doe')
>SHOW PARTITIONS employees PARTITION(country='US');
>SHOW PARTITION employees PARTITION(country='US',state='AK');
>DESCRIBE EXTENDED employees;
LOAD DATA LOCAL INPATH '${env:HOME}/california-employees'
>COMMENT 'holds all financial tables';
>DESCRIBE DATABASE financials;
>CREATE DATABASE financials
>WITH DBPROPERTIES('creator'='mark moneybags','date'='2013-02-01');
PARTITIOINED BY (ds STRING)
ROW FORMAT SERDE 'com.linkedin.haivvreo.AvroSerDe'
WITH SEREDPROPERTIES ('schema.url'='http://schema_provider/kst.avsc')
LIKE mydb.employees
LOCATION '/path/to/data'
注意EXTERNAL关键字,有一定是外部表,没有时原表是内部表,新表才是内部表
分区表:
分区表的目录结构
/employees/country=CA/state=AB
/employees/country=CA/state=BC
hive 会自动增加两个表属性,一个是last_modified_by保存着最后修改这个表的用户名;另一个是last_modified_time,保存着最后一次修改的新纪元时间秒;
>CREATE TABLE IF NOT EXISTS mydb.employees2 LIKE mydb.employees(无需拷贝数据)???
STORED AS
INPUTFORMAT 'com.linkedin.haivvreo.AvroContainerInputFormat'
读《hive 编程指南有感》
hvie 不是一个完整的数据库,其中最大的限制是hive不支持记录级别的更新,插入,删除。
但是用户可以通过查询生成新表或者将查询结果导入到文件中。hive是基于mapreduce的,查询速度慢。
hive不支持OLTP所需的关键功能,而更新接近成为一个OLAP工具。
>dfs -ls /; hadoop的hdfs功能;更高效因为只会有一个进程,而每次hadoop dfs 都会启动一个新的jvm实例;
>dfs -help;
hive 脚本中注释:
--copyright (c)2014 Megacorp ,LLC.
--This is the best Hive script evar!!
>set -v;显示与hadoop有关的环境变量
>CREATE TABLE toss(i INT,${hiver:foo} STRING);
>CREATE TABLE toss(i INT,${foo} STRING);
>DESCRIBE toss;
>set hive.cli.print.current.db=true; 可以查看自己所在的数据库,并且可以通过use member;进行切换;
FILEDS TERMINATED BY '\001' 也可以指定 ','
COLLECTION ITEMS TERMINATED BY '\002'
MAP KEYS TERMINITED BY '\003'
LINES TERMINATED BY '\n'(目前为止,只支持换行分割符)
STORED AS TEXTFILE;
一般数据库都是'写时模式'(在写入时进行数据的检查,是否损坏),
hive采用的是读时模式(在读取数据时,进行数据检查)
如果模式与文件内容不匹配时,hive将缺少的列返回null
>CREATE DATABASE member;
>CREATE DATABASE IF NOT EXITS member;
ARRAY, [1] array('JOHN','Doe')
STRUCT .first struct(first STRING,last STRING)
MAP中的数据以键值对的形式存储,ARRAY中的数据类型必须一致,
STRUCT中的数据类型可以混合,但是一旦创建就不允许更改
salary FLOAT,
subordinates ARRAY<STRING>,
deductions MAP<STRING,FLOAT>,
address STRUCT<street:STRIGN,city:STRING,state:STRING,zip:INT>
)
ROW FORMAT DELIMITED
$echo "one row"> /tmp/myfile
$hive -e "LOAD DATA LOCAL INPATH '/tmp/myfile' INTO TABLE src";
hiverc文件:
hive:自动补全功能
>!pwd; 执行shell命令,但是不支持用户输入的交互式命令,而且不支持shell的”管道“功能和文件名的自动补全功能。
>SHOW DATABASES;
>SHOW DATABASE LIKE 'h.*'
/user/hive/warehouse/financials.db
>CREATE DATABASE financials
>LOCATION '/my/preferred/directory';