Hive高级操作

                                          Hive高级操作

1 Hive的数据类型

1.1 原子数据类型

(1)Hive 是用 Java 开发的,Hive 里的基本数据类型和 java 的基本数据类型也是一一对应的, 除了 String 类型。

(2)有符号的整数类型:TINYINT、SMALLINT、INT 和 BIGINT 分别等价于 Java 的 Byte(1 字节)、Short(2 字节)、 Int (4 字节)和 Long (8 字节)有符号整数。

(3)Hive 的浮点数据类型 FLOAT 和 DOUBLE,对应于 Java 的基本类型 Float 和 Double 类型。

(4)Hive 的 BOOLEAN 类型相当于 Java 的基本数据类型 Boolean。

(5)Hive 的 String 类型相当于数据库的 Varchar 类型,该类型是一个可变的字符串,不能声明其中最多能存储多少个字符,理论上它可以存储 2GB 的字符数。

(6)TIMESTAMP支持Unix timesstamp,可达纳秒级别

1.2 复杂数据类型

复杂数据类型包括数组(ARRAY)、映射(MAP)和结构体(STRUCT)。

ARRAY:是由一系列相同数据类型的元素组成,通过下标访问。 如有一个 ARRAY 类型的变量 letter,它是由['aa','bb','cc']组成,那么 我们可以通过 letter[1]来访问元素 bb,下标是从 0 开始的

MAP: key->value 键值对,可以通过 key 来访问元素。如”users”是一个 map 类 型 , 其 中 username 是 key , password 是 value ; 那 么 我 们 可 以 通 过 userlist['username']来得到这个用户对应的 password

STRUCT:可以包含不同数据类型的元素。这些元素可以通过”点语法”的方式来得到所需要的元素,比如 user 是一个 STRUCT 类型,那么可以通过 user.address 得 到这个用户的地址。

CREATE TABLE user( name STRING, hobby ARRAY, scores MAP, address STRUCT )

ROW FORMAT DELIMITED

FIELDS TERMINATED BY '\t'

COLLECTION ITEMS TERMINATED BY ';'

MAP KEYS TERMINATED BY ':' ;

2 Hive函数

2.1 内置函数

查看内置函数: show functions;

显示函数的详细信息: desc function abs;

显示函数的扩展信息: desc function extended concat;

内置函数的详细相关使用及介绍见:https://blog.csdn.net/weixin_43786255/article/details/99642835

2.2 自定义UDF函数

当Hive提供的内置函数无法满足我们的需求时就需要自定函数

函数分类:

(1)UDF(user-defined function)作用于单个数据行,产生一个数据行作为输出。如:substr,round等

(2)UDAF(User- Defined Aggregation Funcation)用户定义聚集函数 :接收多个输入数据行,并产 生一个输出数据行。如count,max等

(3)UDTF(User-Defined Table Functions)表格生成函数 :接收一行输入,输出多行,如:explode

在工作当中我们一般较多的是自定义UDF函数,聚合函数Hive提供的一般够用,下面介绍自定义UDF函数步骤:

①自定义一个类承 org.apache.hadoop.hive.ql.exec.UDF,重载 evaluate 方法

②在自定义类的evaluate 方法中实现逻辑,注意参数与返回值

③打成 jar 包上传到服务器

④将jar添加到hive的classpath下:add jar “jar包在服务器上的路径”

⑤创建一个临时函数并关联udf (自定义的class类):craete temporary function name as "自定义的class类的全类名";

3 Hive特殊分割符处理与Json解析

hive 读取数据的机制: 首先用 InputFormat的一个具体实现类读入文件数据,返回一条一条的记录;然后利用SerDe的一个具体实现类,对上面返回的一条一条的记录进行字段切割。

Hive 对文件中字段的分隔符默认情况下只支持单字节分隔符。

3.1 RegexSerDe

RegexSerDe是SerDe的一个具体实现类,通过正则表达式来抽取字段。现有如下数据:

01||小明::18

02||小红::20

创表语句如下

create table regex_test(id string,name string,age int)

row format serde 'org.apache.hadoop.hive.serde2.RegexSerDe'

with serdeproperties('input.regex'='(.*)\\|\\|(.*)::(.*)','output.format.string'='%1$s %2$s%3$s') stored as textfile;

也可以通过 自定义inputstream类实现分割

3.3 Json解析

(1)解析json中的单个属性  get_json_object(json_str,’$.xxx’/‘$[xxx]’)

get_json_object函数第一个参数填写json对象变量(string),第二个参数使用$表示json变量标识,然后用 . 或 [] 读取对象或数组.

如:select get_json_object('{"name":"zs","age":"18"}',’$.name’) from table;

但是使用get_json_object()的时候只能一次访问一个json对象里的字段

(2)解析json中多个属性 json_tuple(json_str,’xxx1’,’xxx2’)

json_tuple函数第一个参数是json对象变量,以后参数是用单引号引起来的字段名字

如:select json_tuple('{"name":"zs","age":"18"}','name','age') from table;

如果要与原来数据进行合并使用

  select id from table lateral view json_tuple(property,'tag_id','tag_type’); 

4 视图

Hive 的视图和关系型数据库的数据是不一样的:

(1)只有逻辑视图,没有物化视图;

(2)视图只能查询,不能 Load/Insert/Update/Delete 数据;

(3)视图在创建时候,只是保存了一份元数据,当查询视图的时候,才开始执行视图对应的那些子查询

相关操作:

创建视图:create view view_name as select * from user;

查看视图:show tables;可以查看表,也可以查看视图               desc view_name查看某个具体视图的信息

删除视图:drop view if exists view_name

使用视图:select count(distinct userid) from view_name;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/473838.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

05.序列模型 W2.自然语言处理与词嵌入(作业:词向量+Emoji表情生成)

文章目录作业1:1. 余弦相似度2. 单词类比3. 词向量纠偏3.1 消除对非性别词语的偏见3.2 性别词的均衡算法作业2:Emojify表情生成1. Baseline model: Emojifier-V11.1 数据集1.2 模型预览1.3 实现 Emojifier-V11.4 在训练集上测试2. Emojifier-V2: Using L…

LeetCode 688. “马”在棋盘上的概率(DP)

文章目录1. 题目2. 解题1. 题目 已知一个 NxN 的国际象棋棋盘,棋盘的行号和列号都是从 0 开始。即最左上角的格子记为 (0, 0),最右下角的记为 (N-1, N-1)。 现有一个 “马”(也译作 “骑士”)位于 (r, c) ,并打算进行…

LeetCode 第 36 场双周赛(304/2204,前13.8%)

文章目录1. 比赛结果2. 题目1. LeetCode 5515. 设计停车系统 easy2. LeetCode 5516. 警告一小时内使用相同员工卡大于等于三次的人 medium3. LeetCode 5518. 给定行和列的和求可行矩阵 medium4. LeetCode 5517. 找到处理最多请求的服务器 hard1. 比赛结果 做出来3题&#xff0…

数据库实例:用户注册

1.根据结构创建表的脚本如下 createtable py_users( id int unsigned auto_increment not null primary key, uname varchar(20) not null, upwd char(40) not null, is_delete bit not null default 0 ); 如下流程图,接下来的代码就按照这个逻辑来写 2.创建user…

HBase原理

目录 HBase原理 1 HBase架构 2 HBase中的核心概念 3 HBase的存储机制 4 HBase的寻址机制 5 HBase的读写流程 6 HBase的设计 7 HBase和Hive的整合 HBase原理 1 HBase架构 HBase的架构为主从架构,HMaster为主节点,HRegionServer为从节点 &#x…

数据库实例:用户登录

如下遍流程图,接下来的代码就按照这个逻辑来写 创建user_login.py文件,代码如下 #codingutf-8 from MySQLdb import* from hashlib importsha1 if __name____main__: try: #接收输入用户名、密码 unameraw_input(请输入用户名&…

数据库实例:mysql与mongo结合用户登录

加入mongodb后登录逻辑如下图,将图中nosql的位置换为mongodb即可 用户数据存储的集合名称为py_users,文档格式为{uname:用户名,upwd:密码} 将原来MySQL操作的代码封装到一个方法中,代码如下 def mysql_login(): #mongodb中没有则到mysql中…

LeetCode 1609. 奇偶树(层序遍历)

文章目录1. 题目2. 解题1. 题目 如果一棵二叉树满足下述几个条件,则可以称为 奇偶树 : 二叉树根节点所在层下标为 0 ,根的子节点所在层下标为 1 ,根的孙节点所在层下标为 2 ,依此类推。偶数下标 层上的所有节点的值都…

数据的特征工程

数据的特征工程 1 什么是数据的特征工程 特征工程是将原始数据转换为更好地代表预测模型的潜在问题的特征的过程,从而提高了对未知数据的模型准确性。 特征工程的意义:将直接影响模型的预测结果。 2 数据的来源与类型 2.1 数据的来源 企业日益积累…

数据库实例:mysql与redis结合用户登录

加入redis后登录逻辑如下图,将图中nosql的位置换为redis即可 用户数据存的键为用户名,值为密码 将原来MySQL操作的代码封装到一个方法中,代码如下 defmysql_login(): #redis中没有则到mysql中查询 sqlselect upwd from py_users wher…

LeetCode 1610. 可见点的最大数目(atan2函数求夹角)

文章目录1. 题目2. 解题1. 题目 给你一个点数组 points 和一个表示角度的整数 angle ,你的位置是 location ,其中 location [posx, posy] 且 points[i] [xi, yi] 都表示 X-Y 平面上的整数坐标。 最开始,你面向东方进行观测。你 不能 进行…

[翻译]API Guides - Bound Services

官方文档原文地址:http://developer.android.com/guide/components/bound-services.html 一个Bound Service是一个客户端-服务器接口的服务。一个Bound Service允许组件(像activity)绑定一个service,发送请求,接受结果…

sklearn数据集与估计器

sklearn数据集与估计器 1 sklearn数据集 (1)数据来源:大多数以文件的形式 (csv文件..), 因为mysql有性能瓶颈、读取速度遭到限制,数据大的时候很费时间 (2)读取数据的工具&#…

LeetCode 935. 骑士拨号器(动态规划)

文章目录1. 题目2. 解题1. 题目 国际象棋中的骑士可以按下图所示进行移动: 这一次,我们将 “骑士” 放在电话拨号盘的任意数字键(如上图所示)上, 接下来,骑士将会跳 N-1 步。每一步必须是从一个数字键跳到…

k近邻算法(KNN)-分类算法

k近邻算法(KNN)-分类算法 1 概念 定义:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。 k-近邻算法采用测量不同特征值之间的距离来进行分类。 2 优缺点 优点:简单&a…

LeetCode 822. 翻转卡片游戏(哈希)

文章目录1. 题目2. 解题1. 题目 在桌子上有 N 张卡片,每张卡片的正面和背面都写着一个正数(正面与背面上的数有可能不一样)。 我们可以先翻转任意张卡片,然后选择其中一张卡片。 如果选中的那张卡片背面的数字 X 与任意一张卡片…

朴素贝叶斯算法-分类算法

朴素贝叶斯算法-分类算法 1 概率基础 概率定义为一件事情发生的可能性 联合概率:包含多个条件,且所有条件同时成立的概率,记作P(A,B) 条件概率:事件A在另一个事件B已经发生条件下的发送概率,记作P(A|B) 在A1,A2相…

django简介及环境搭建

MVC简介 MVC框架的核心思想是:解耦,让不同的代码块之间降低耦合,增强代码的可扩展性和可移植性,实现向后兼容 M全拼为Model,主要封装对数据库层的访问,内嵌ORM框架,实现面向对象的编程来操作数据…

LeetCode 1312. 让字符串成为回文串的最少插入次数(区间DP)

文章目录1. 题目2. 解题1. 题目 给你一个字符串 s ,每一次操作你都可以在字符串的任意位置插入任意字符。 请你返回让 s 成为回文串的 最少操作次数 。 「回文串」是正读和反读都相同的字符串。 示例 1: 输入:s "zzazz" 输出&…

Django创建项目

创建项目的名称为test1,完成“图书-英雄”信息的维护,创建应用名称为booktest 创建项目 cd /home/Desktop/ mkdir pytest cd pytest 创建项目的命令如下: django-admin startproject test1 项目默认目录说明 进入test1目录,查看…