欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

HIVE 表的使用

程序员文章站 2022-05-08 10:00:37
...

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 ;

关于内部表和外部表的区别:

删除外部表之前:HIVE 表的使用

删除外部表之后,路径和文件仍然存在。只会删除表的元数据,不会删除表的数据

HIVE 表的使用

删除内部表之后,可以看到dept的文件夹不存在了,表数据和元数据都被删除了。

HIVE 表的使用

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页面上会看到表多了一个月份的目录,数据文件就在里面

HIVE 表的使用

查询分区里面的数据

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

相关标签: