网站怎么投放广告,优秀学习网站,国家企业信息公示网查询全国,tool站长工具目录 一、Hive的数据导出
1#xff09;导出数据到本地目录
2#xff09;导出到hdfs的目录下
3#xff09;直接将结果导出到本地文件中
二、一个案例
三、表类型
1、表类型介绍
2、内部表和外部表转换
3、两种表的区别
4、练习 一、Hive的数据导出
数据导出的分类导出数据到本地目录
2导出到hdfs的目录下
3直接将结果导出到本地文件中
二、一个案例
三、表类型
1、表类型介绍
2、内部表和外部表转换
3、两种表的区别
4、练习 一、Hive的数据导出
数据导出的分类
1. 从hive表中导出本地文件系统中(目录、文件)
2. 从hive表中导出hdfs文件系统中
3. hive表中导出到其它hive表中
1导出数据到本地目录
insert overwrite local directory /root/out/00 select * from t_user;这个00不是文件名而是文件夹的名字没有可以自动创建 2导出到hdfs的目录下
insert overwrite directory /root/out/00 select * from t_user; 假如你导出的数据想要一个分隔符比如 逗号
insert overwrite directory /root/out/00
row format delimited fields terminated by ,
select * from t_user; 3直接将结果导出到本地文件中
hive -e sql语句 不需要进入hive直接执行hive的语句
hive -e select * from databaseName.t_user /root/out/a.txt
hive -e use databaseName;select * from t_user /root/out/a.txt 制表符就是 Tab 键Tab 键就是 \t
二、一个案例
数据整理emp.txt
7369,SMITH,CLERK,7902,1980-12-17,800,null,20
7499,ALLEN,SALESMAN,7698,1981-02-20,1600,300,30
7521,WARD,SALESMAN,7698,1981-02-22,1250,500,30
7566,JONES,MANAGER,7839,1981-04-02,2975,null,20
7654,MARTIN,SALESMAN,7698,1981-09-28,1250,1400,30
7698,BLAKE,MANAGER,7839,1981-05-01,2850,null,30
7782,CLARK,MANAGER,7839,1981-06-09,2450,null,10
7788,SCOTT,ANALYST,7566,1987-04-19,3000,null,20
7839,KING,PRESIDENT,null,1981-11-17,5000,null,10
7844,TURNER,SALESMAN,7698,1981-09-08,1500,0,30
7876,ADAMS,CLERK,7788,1987-05-23,1100,null,20
7900,JAMES,CLERK,7698,1981-12-03,950,null,30
7902,FORD,ANALYST,7566,1981-12-02,3000,null,20
7934,MILLER,CLERK,7782,1982-01-23,1300,null,10
3423,cfxj,MANAGER,8899,2022-01-01,50000,100000,40
根据数据的字段和格式建表
create table emp(
empno int,
ename string,
job string,
mgr int,
hiredate string,
sal int,
comm int,
deptno int
)
row format delimited
fields terminated by ,;
加载数据
load data local inpath /home/hivedata/emp.txt into table emp; 编写指标
1、统计有领导的员工有哪些
不完美
select * from emp where mgr is not null;
完美的写法
select * from emp e1 where exists (select * from emp e2 where e2.empno e1.mgr);还有其他写法
select * from emp where mgr in (select distinct empno from emp);2、统计每个部门的员工的总工资和总薪水是多少
select sum(sal),sum(commsal),deptno from emp group by deptno;8750 NULL 10
10875 NULL 20
9400 7800 30
50000 150000 40
Time taken: 1.965 seconds, Fetched: 4 row(s)null 任何数字 结果为null
需要一个函数 IFNULL(mysql中的函数)在hive中的对应的函数是nvl
select sum(sal),sum(nvl(comm,0)sal),deptno from emp group by deptno; Hive中的函数是非常重要的课下多留意积累
三、表类型
1、表类型介绍
内部表
表面来看我们建的所有的表默认都是内部表内部表又叫做管理表它的位置也很固定/user/hive/warehouse下面。
外部表
创建的时候需要加关键字external 修饰而且外部表它的数据的存储位置可以不在/user/hive/warehouse可以指定位置。
建表的语法格式 create external table tableName(id int,name string) [location path];
举例
create external table t_user7(
id int,
name string
)
row format delimited
fields terminated by ,
location /publicData这个location 是本地的意思还是hdfs的路径呢答案是必须在hdfs上。
2、内部表和外部表转换
内部表转外部表
desc extended t_user; 查看表结构的详细信息 alter table tableName set tblproperties(EXTERNALTRUE); 注意内部表转外部表true一定要大写;
外部表转内部表 alter table tableName set tblproperties(EXTERNALfalse); 说明false不区分大小
3、两种表的区别
用的最多的都是外部表因为可以分析数据(OLAP)。
OLAP: 为分析而生的数据库 A(分析)
OLTP: 存储数据保证数据的安全。 T(事务的意思)
最大的区别就是删除表的时候内部表会删除元数据和真正的hdfs上的数据。而外部表只删除元数据。
思考为什么这么做
Hive是一个数据分析的工具存储数据不是它的本意。
假如一个人将数据上传至hdfs这个数据量很大一般不挪动位置你可以建一个外部表数据的位置指向hdfs的某个文件夹然后就可以分析了。
/home a.txt 2G
建一个外部表指向/home/a.txt , 分析完毕之后删除表就可以了干嘛要删除数据没必要。--用后即焚
微信小程序-- 阅后即焚。
1) 内部表和外部表在创建时的差别
就差两个关键字EXTERNAL 和 LOCATION 举例 - 内部表 -- CREATE TABLE T_INNER(ID INT); - 外部表 -- CREATE EXTERNAL TABLE T_OUTER(ID INT) LOCATION HDFS:///AA/BB/XX;
2) Hive表创建时要做的两件事
1、在hdfs下创建表目录
2、在元数据库mysql创建相应表的描述数据元数据
3) drop时有不同的特性
1、drop时元数据都会被清除
2、drop时内部表的表目录会被删除但是外部表的表目录不会被删除。
4) 使用场景
内部表: 平时用来测试或者少量数据,并且自己可以随时修改删除数据.
外部表使用后数据不想被删除的情况使用外部表推荐使用所以整个数据仓库的最底层的表使用外部表。
4、练习
创建不存在的文件夹
hdfs dfs -mkdir -p /user/hdfs/source/out_table
接着创建一个外部表
create external table out_table (id int,name string
)
row format delimited
fields terminated by ,
location /user/hdfs/source/out_table;加载数据load data local inpath /home/hivedata/user.txt into table out_table;
查看数据存放的位置 drop table out_table;
发现数据依然存在 假如我再创建一个表数据指向这个文件夹表中是否会有数据
create external table student (sid int,sname string
)
row format delimited
fields terminated by ,
location /user/hdfs/source/out_table;
查看表数据数据即可出现根本不需要导入操作