10、堆内存错误
报错:
Error while processing statement: FAILED: Execution Error, return code -101 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask. Java heap space
解决方案: 在node1上面操作即可
方式1: 找到/export/server/hive/conf/hive-env.sh,添加以下内容
export HADOOP_HEAPSIZE=2048
方式2: 找到hive-site.xml添加以下内容
<!-- hive堆内存--><property><name>hive.heapsize</name><value>2048</value></property>
修改完以后,先把Hadoop和Hive进程全部关掉。先启动Hadoop,再启动Hive。
11、JSON数据处理
get_json_object:解析json内容优点:能够解析嵌套的json缺点:每次只能解析一个json_tuple:优点:每次能够同时解析多个字段缺点:不能解析嵌套的json。如果需要解析嵌套的,那么只能一层层解析
示例:
create database day09; use day09; /*get_json_object:解析json内容优点:能够解析嵌套的json缺点:每次只能解析一个*/selectget_json_object('{"name":"zhangshan","age":18,"addr":{"province":"广东省","city":"广州市"}}','$.name') as name,get_json_object('{"name":"zhangshan","age":18,"addr":{"province":"广东省","city":"广州市"}}','$.addr.province') as province; /*json_tuple:优点:每次能够同时解析多个字段缺点:不能解析嵌套的json。如果需要解析嵌套的,那么只能一层层解析*/ selectjson_tuple('{"name":"zhangshan","age":18,"addr":{"province":"广东省","city":"广州市"}}','name','age','addr'); selectjson_tuple('{"name":"zhangshan","age":18,"addr":{"province":"广东省","city":"广州市"}}','name','age','addr') as (name,age,addr); with tmp_1 as (select json_tuple('{"name":"zhangshan","age":18,"addr":{"province":"广东省","city":"广州市"}}', 'addr') as addr ) select get_json_object(addr,'$.province') from tmp_1; with tmp_1 as (select json_tuple('{"name":"zhangshan","age":18,"addr":{"province":"广东省","city":"广州市"}}', 'addr') as addr ) select json_tuple(addr,'province') from tmp_1;
12、炸裂函数
把一个容器的多个数据炸裂出单独展示: explode(字段名称) 炸裂函数配合侧视图使用如下 格式:select 字段,侧视图中字段名称 from 原始表名lateral view UDTF函数名称(原始表名中的字段) 侧视图别名 as 侧视图中字段名称1,侧视图中字段名称解释: 1- 侧视图别名、侧视图中字段名称自己取名字2- 侧视图别名前面不能有as3- 侧视图里面只需要定义字段名称即可,不要设置数据类型
简单示例:
use day09; -- 基础使用 select array(1,2,3,4,5); select explode(array(1,2,3,4,5)); select map('a',1,'b',2,'c',3); select explode(map('a',1,'b',2,'c',3));
实践:
-- NBA例子 create table nba(team_name string,year_str array<string> )row format delimited fields terminated by ',' collection items terminated by '|'; -- 加载导入数据 load data inpath '/dir/The_NBA_Championship.txt' into table nba; -- 验证数据 select * from nba; -- 炸裂 select explode(year_str) as `year` from nba; -- UDTF函数一般会和侧视图一起出现 /*侧视图语法select 字段,侧视图中字段名称 from 原始表名lateral view UDTF函数名称(原始表名中的字段) 侧视图别名 as 侧视图中字段名称1,侧视图中字段名称2....*/ select team_name,year from nba lateral view explode(year_str) years as year; -- 侧视图和json_tuple配合使用 with tmp_1 as (select json_tuple('{"name":"zhangshan","age":18,"addr":{"province":"广东省","city":"广州市"}}', 'addr') as addr ) select json_tuple(addr,'province') from tmp_1; with tmp_1 as (select 1 as id,'{"name":"zhangshan","age":18,"addr":{"province":"广东省","city":"广州市"}}' as info ) select id,name,age from tmp_1 lateral view json_tuple(info,'name','age') info_view as name,age