网站被k了,做网站敲代码的图片,舆情监测工作要怎么做,湖南手机版建站系统哪家好Hive高级操作
1 Hive的数据类型
1.1 原子数据类型 #xff08;1#xff09;Hive 是用 Java 开发的#xff0c;Hive 里的基本数据类型和 java 的基本数据类型也是一一对应的#xff0c; 除了 String 类型。
#xff08;2#xff09;有符号的整数类型#xff1a;TINYIN… Hive高级操作
1 Hive的数据类型
1.1 原子数据类型 1Hive 是用 Java 开发的Hive 里的基本数据类型和 java 的基本数据类型也是一一对应的 除了 String 类型。
2有符号的整数类型TINYINT、SMALLINT、INT 和 BIGINT 分别等价于 Java 的 Byte1 字节、Short2 字节、 Int 4 字节和 Long 8 字节有符号整数。
3Hive 的浮点数据类型 FLOAT 和 DOUBLE,对应于 Java 的基本类型 Float 和 Double 类型。
4Hive 的 BOOLEAN 类型相当于 Java 的基本数据类型 Boolean。
5Hive 的 String 类型相当于数据库的 Varchar 类型该类型是一个可变的字符串不能声明其中最多能存储多少个字符理论上它可以存储 2GB 的字符数。
6TIMESTAMP支持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提供的内置函数无法满足我们的需求时就需要自定函数
函数分类
1UDFuser-defined function作用于单个数据行产生一个数据行作为输出。如substr,round等
2UDAFUser- Defined Aggregation Funcation用户定义聚集函数 接收多个输入数据行并产 生一个输出数据行。如countmax等
3UDTFUser-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;