HIVE 表的使用
1.官网链接:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-CreateTableCreate/Drop/TruncateTable
2.创建表和数据库
注[]表示可有可无1.
create table if not exists db_name.table( 数据库名.表名
ip string COMMENT 'remote ip addr', 这里的comment是对列的注释
user string
)
COMMENT 'logs' 这里是对表的注释
ROW FORMAT DELIMITED FIELDS TERMINATED BY char 每行数据通过什么样的char分隔
STORED AS TEXTFILE 存储类型 默认是textfile 官网还有别的类型
LOCATION '' 表的位置
详细参数官网都有,不想赘述。
写一下as和like的用法,其实和以前的SQL语句也是一样的哇
2.也就是分表的概念
create table if not exists db_name.table
as
select .... ;将查询结果结构和数据作为一个新表。
3.
create table if not exists db_name.table
like
exists_tablename or view name ;复制结构
4.关于外部表
通常创建外部表的时候,会指定location也就是位置。
先创建目录dfs -mkdir -p '/user/wsm/hive/warehouse/dept' ;
create external table dept(
deptno int,
dname string,
loc string
)
row format delimited fields terminated by '\t'
location '/user/wsm/hive/warehouse/dept';
desc formatted default.dept;
可以看到表的类型是external table
直接把文件数据传到hdfs上面
dfs -put /root/hive_datas/dept.txt /user/wsm/hive/warehouse/dept ;
关于内部表和外部表的区别:
删除外部表之前:
删除外部表之后,路径和文件仍然存在。只会删除表的元数据,不会删除表的数据
删除内部表之后,可以看到dept的文件夹不存在了,表数据和元数据都被删除了。
5.分区表
hive中的分区其实就是分目录,根据业务需要,把一个大的数据集分割成更小的数据集。
在查询时,通过where子句中的表达式来选择查询所需要的指定的分区,这样的查询效率会提供很多
创建分区表
create table dept_part(
deptno int,
dname string,
loc string
)
partitioned by(month string)
row format delimited fields terminated by '\t';
添加数据到分区
load data local inpath'/root/hive_datas/dept.txt' into table db_hive.dept_part partition(month='201809');
在50070页面上会看到表多了一个月份的目录,数据文件就在里面
查询分区里面的数据
select * from dept_part where month='201809';
分区表连接查询
1.再加载2018年10月的数据
load data local inpath'/root/hive_datas/dept.txt' into table db_hive.dept_part partition(month='201810') ;
2.连接查询
这里我还有点问题,记录在问题博客里面,解决了会把正确的代码添上。
6.二级分区表
create table dept_part2(
deptno int,
dname string,
loc string
)
partitioned by(month string,day string)
row format delimited fields terminated by '\t';
从本地加载数据到分区表
load data local inpath'/root/hive_datas/dept.txt' into table db_hive.dept_part2 partition(month='201809',day='13') ;
查询
select * from dept_part2 where month='201809' and day='13' ;
查看表的分区:
show partitions tableName;
6.关于数据库
CREATE (DATABASE|SCHEMA) [IF NOT EXISTS] database_name
[COMMENT database_comment]
[LOCATION hdfs_path] 存储在hdfs上的位置 创建表时会自动创建该路径
[WITH DBPROPERTIES (property_name=property_value, ...)];
2.实例 oracle中的员工表和部门表
员工表
create table emp(
empno int ,
ename string,
job string ,
mgr int,
hiredate string,
sal double,
comm double ,
deptno int
)
row format delimited fields terminated by '\t';
部门表
create table dept(
deptno int,
dname string,
loc string
)
row format delimited fields terminated by '\t';
加载数据,在Windows里面讲文件另存为UTF-8
load data local inpath '/root/hive_datas/dept.txt' [overwrite] into table db_hive.dept;
load data local inpath '/root/hive_datas/emp.txt' into table db_hive.emp;
overwrite 覆盖原来的数据
创建子表 数据为dept表的dname和loc
create table db_hive.dept_cats
as
select dname,loc from dept ;
清除表的数据
truncate table dept_cats;
删除表
drop table if exists dept_cats ;
创建一个与dept表结构相同的表
create table dept_likes
like
dept;
修改表的名称 (通常hive不会修改列)
alter table dept_likes rename to dept_like ;
关于分区表的一些注意事项
1.创建一个非分区表 ,通过dfs -put的方式将文件上传到表的路径中, 可以查看到数据。如果是分区表,先-mkdir -p创建分区的目录(建表的时候之会创建到表名的路径,分区的路径需要自己手动创建,然后将文件数据put进去),最后select查询不到数据。解决方式一:msck repair table tableName;解决方式二:alter table tablename add partition()。
3.数据类型
官网链接:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Types
上一篇: JAVA读取.properties文件的几种方式:
下一篇: Springboot 简单的定时器