
Hive
文章平均质量分 53
Hello Hive
卜塔
但行好事,莫问前程
展开
-
【Hive】自定义函数从编写到应用的整个流程(以UDF为例)
【代码】【Hive】自定义函数从编写到应用的整个流程(以UDF为例)原创 2024-04-26 20:12:04 · 692 阅读 · 2 评论 -
【Hive】UDF、UDAF
UDF(User-Defined-Function) 一进一出编程步骤: (1)继承org.apache.hadoop.hive.ql.UDF (2)需要实现evaluate函数;evaluate函数支持重载;注意事项: (1)UDF必须要有返回类型,可以返回null,但是返回类型不能为void; (2)UDF中常用Text/LongWritable等类型,不推荐使用java类型;原创 2023-04-20 11:26:13 · 383 阅读 · 1 评论 -
【Hive】解析字符串(类似array嵌套map结构)
背景业务开展新活动,活动规则中有阶梯奖励,即:达到某个区间,奖励对应的金钱。如:成交1单,每单奖励0元;成交2-4单,每单奖励100元;成交5单以上,每单奖励200元;业务库中以字符串的形式存放活动规则,举例如下:[{"min":1,"money":0,"max":1},{"min":2,"max":4,"money":100},{"min":5,"money":200,"max":99999}]解析思路如果要按照某人成交单数,计算出应得奖励,则需要把上面的字符串解析为3列:min、ma原创 2021-03-23 13:15:28 · 1559 阅读 · 0 评论 -
【Hive】性能调优 - map-side JOIN
Hive版本: hive-1.1.0-cdh5.14.2概述如果表关联时,有一张表很小,那么可以在大表通过mapper时将小表完全加载到内存中,Hive可以在map端完成关联过程,这就是所谓的map-side JOIN。使用map-side JOIN可以省掉常规的reduce过程,从而提升Hive的效率。Hive中有三个和map-side JOIN相关的参数:参数默认值hive.auto.convert.jointrue (Hive 0.11.0+)hive.aut.原创 2020-07-01 08:17:58 · 669 阅读 · 0 评论 -
【Hive】性能调优 - EXPLAIN
Hive版本: hive-1.1.0-cdh5.14.2用户提交HiveQL查询后,Hive会把查询语句转换为MapReduce作业。Hive会自动完成整个执行过程,一般情况下,我们并不用知道内部是如何运行的。但当查询遇到性能瓶颈时,就需要对HiveQL进行调优。EXPLAIN是调优时查看执行计划的工具,执行计划可以清晰的告诉我们查询的stage、map、reduce等阶段的信息。EXPLAIN的使用非常简单,只需要在正常HiveQL前面加上就可以了。此时的HiveQL不会真正执行作业,只是基于.原创 2020-06-30 08:01:28 · 980 阅读 · 0 评论 -
【Hive】压缩格式
常见压缩格式压缩方式压缩比压缩速度解压缩速度是否可分割gzip13.4%21 MB/s118 MB/s否bzip213.2%2.4MB/s9.5MB/s是lzo20.5%135 MB/s410 MB/s是snappy22.2%172 MB/s409 MB/s否压缩格式对应的编/解码器压缩格式对应的编/解码器DEFLATEorg.apache.hadoop.io.compress.DefaultCode原创 2020-06-29 06:41:39 · 4781 阅读 · 0 评论 -
【Hive】hive表的文件存储格式
在Hive中,文件的存储格式主要有:TEXTFILE、SEQUENCEFILE、ORC、PARQUET。其中,TEXTFILE、SEQUENCEFILE是基于行存储,ORC、PARQUET基于列存储。实际生产环境,使用ORC和PARQUET的情况比较多。1. 行存储和列存储上图中左边为逻辑表,右上为行存储,右下为列存储。当查询结果为一整行的时候,行存储效率会高一些;当查询表中某几列时,列存储的效率会更高。在对数据的压缩方面,列存储比行存储更有优势,所以列存储占用空间相对小一些。2. TEXT原创 2020-06-26 18:53:18 · 3202 阅读 · 0 评论 -
【Hive】表生成(Table-Generating)函数
Hive版本: hive-1.1.0-cdh5.14.21. 列转行函数:explode(1) 输入类型为array语法:explode(ARRAY a)返回值:T描述:展开array,其中每个元素占一行0: jdbc:hive2://node03:10000> select explode(array('A', 'B', 'C'));+------+--+| col |+------+--+| A || B || C |+------+--+(2).原创 2020-06-26 10:52:51 · 557 阅读 · 0 评论 -
【Hive】字符串函数
Hive版本: hive-1.1.0-cdh5.14.21. 首字符转ascii码函数:ascii语法:ascii(string str)返回值:int描述:返回字符串str首字符的ascii编码0: jdbc:hive2://node03:10000> select ascii('hello') as col1, ascii('hehe') as col2, ascii('Hi') as col3;+-------+-------+-------+--+| col1 | col2.原创 2020-06-21 19:45:32 · 1183 阅读 · 0 评论 -
【Hive】条件函数
Hive版本: hive-1.1.0-cdh5.14.21. if函数语法:if(boolean testCondition, T valueTrue, T valueFalseOrNull)返回值: T描述:如果testCondition为true,返回valueTrue,否则返回valueFalseOrNull0: jdbc:hive2://node03:10000> select if(1=2, 'TrueValue', 'FalseOrNull');+-------------.原创 2020-06-20 23:52:05 · 689 阅读 · 0 评论 -
【Hive】日期函数
1. Unix时间戳转日期函数名称:from_unixtime(bigint unixtime[, string format])返回值:string描述: Unix时间戳转换为日期格式0: jdbc:hive2://node03:10000> select from_unixtime(1237573801, 'yyyy-MM-dd HH:mm:ss') as time_string;+----------------------+--+| time_string |+原创 2020-06-20 19:26:27 · 1487 阅读 · 0 评论 -
【Hive】集合函数
函数名称返回值类型描述size(Map<K,V>)int返回map类型数据的长度size(Array)int返回array类型数据的长度map_keys(Map<K,V>)array返回map类型数据的键map_values(Map<K,V>)array返回map类型数据的值array_contains(Array, value)boolean判断value是否存在于array中sort_array(...原创 2020-06-20 10:53:06 · 567 阅读 · 0 评论 -
【Hive】动态分区插入
动态分区是指在插入数据时,无需指定分区键值,系统根据插入的数据,自动分配分区。动态分区需注意以下几点:需有一个同构的普通表做为源表;分区键值和源表字段之间是根据位置来判断的,而不是根据命名来匹配的;动态分区默认是关闭的,使用前要设置相关参数;下面是一个动态分区的例子:# 创建分区表和普通表# 上传数据文件到HDFS# 普通表导入数据# 使用动态分区插入数据到分区表中...原创 2020-06-18 21:51:38 · 1053 阅读 · 0 评论 -
【Hive】Hive分区表
分区作为一种提高数据操作灵活性的手段,被广泛应用于关系型数据库中。在Hive中我们同样可以采用分区的方式来提高数据操作效率,和关系型数据库(如Oracle)所不同,Hive的分区表既可以是内部表,也可以是外部表。本篇文章主要介绍如何在Hive中创建分区表,外部表上的DDL操作,以及使用外部表的注意事项。1. 创建分区表1.1 创建内部分区表create table myhive.test_internal(id int) partitioned by (date string) row format原创 2020-06-15 23:20:58 · 532 阅读 · 0 评论 -
【Hive】Hive内部表/外部表
1. 建表语句Hive官网有详细的建表语句。CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name -- (Note: TEMPORARY available in Hive 0.14.0 and later) [(col_name data_type [column_constraint_specification] [COMMENT col_comment], ... [constraint_spec原创 2020-06-12 06:29:27 · 454 阅读 · 0 评论 -
【Hive】Hive的数据类型
Hive中数据类型可以分为基本数据类型和复合数据类型。这些数据类型都是用Java实现的。1. 基本数据类型类型名称描述举例booleantrue/falsetruetinyint1byte有符号整数30smallint2byte有符号整数30int4byte有符号整数30bigint8byte有符号整数30float4byte单精度浮点数1.0double8byte单精度浮点数1.0string字符串(无长度限原创 2020-06-11 21:02:25 · 759 阅读 · 0 评论 -
【Hive】Hive的三种交互方式
1. Hive shell[hadoop@node03 ~]$ cd /kkb/install/hive-1.1.0-cdh5.14.2/[hadoop@node03 hive-1.1.0-cdh5.14.2]$ bin/hive2. JDBC2.1 后台先启动hive服务[hadoop@node03 ~]$ nohup hive --service hiveserver2 &...原创 2020-04-06 10:25:31 · 659 阅读 · 0 评论 -
【Hive】分桶表
1. 什么是分桶表分桶表是按照某列属性值,把数据打散存储在不同文件的Hive表.2. 分桶的原理Hive官网解释:How does Hive distribute the rows across the buckets? In general, the bucket number is determined by the expression hash_function(bucketing...原创 2020-03-28 20:53:19 · 405 阅读 · 0 评论 -
【Hive】多字符分隔
在创建Hive表时,一般我们会指定字段间的分隔符,如空格,\t,逗号等,这些是都单字符。那么,如果我们想要按照多个字符分隔,如##,|+|等,这时候就要用到如下两种方式:MultiDelimitSerDe解决多字符分隔创建表0: jdbc:hive2://node03:10000> create table test1 (id string, name string). . . ...原创 2020-02-09 11:22:52 · 1218 阅读 · 1 评论 -
【Hive】数据导出
Hive版本:Hive 1.1.0-cdh5.14.2INSERT导出到目录官方链接Standard syntax:INSERT OVERWRITE [LOCAL] DIRECTORY directory1[ROW FORMAT row_format] [STORED AS file_format] (Note: Only available starting with Hive 0....原创 2020-02-08 09:38:44 · 288 阅读 · 0 评论 -
【Hive】数据导入方法
Hive版本:Hive 1.1.0-cdh5.14.21. INSERT插入1.1 单条插入INSERT INTO TABLE tablename [PARTITION (partcol1[=val1], partcol2[=val2] ...)] VALUES values_row [, values_row ...]举例如下:0: jdbc:hive2://node03:10000...原创 2020-02-06 11:21:10 · 557 阅读 · 0 评论 -
【Hive】命令行提示符中显示当前所在数据库
Hive 0.8.0之后的版本开始支持此功能,可以在命令行中显示当前所在的数据库。设置命令为:set hive.cli.print.current.db=true#设置前hive> use default;OKTime taken: 0.102 secondshive> # 设置后hive> set hive.cli.print.current.db=true;hive (原创 2018-01-27 15:12:38 · 2559 阅读 · 0 评论 -
【Hive】Caused by: MetaException(message:Hive metastore database is not initialized. Please use schema
启动Hive报错如下:Caused by: MetaException(message:Hive metastore database is not initialized. Please use schematool (e.g. ./schematool -initSchema -dbType ...) to create the schema. If needed, don't for原创 2018-01-23 00:24:46 · 1366 阅读 · 1 评论