Hadoop HIVE 创建表

创建库

库名 目录 描述
default hdfs://hdp20-01:9000/user/hive/warehouse 默认数据库
create database db_test; hdfs://hdp20-01:9000/user/hive/warehouse/db_order.db 在/user/hive/warehouse/目录下创建

创建表

创建表只是定义了一个表结构,真实数据要通过hdfs上传到对应表名的指定文件夹下

内部表

内部表(MANAGED_TABLE):数据放在/user/hive/warehouse中,删除时会删除元数据和表数据目录

1.该表会映射/user/hive/warehouse/db_order.db/t_test目录, 默认分隔符是^A

use db_test; //如果不指明数据库,默认使用default数据库
create table t_test(id string,create_time string);

2.可以自己指定分隔符

create table t_test(id string,create_time string)
row format delimited
fields terminated by ',';

3.按照已有的表格式创建表
create table t_user_2 like t_user;

4.创建表时,插入数据

create table t_access_user 
as
select ip,url from t_access;

外部表

外部表(EXTERNAL_TABLE):表目录由用户指定,既映射到指定路径,删除时只会删除元数据

create external table t_log(ip string,url string)
row format delimited
fields terminated by ','
location '/access/log';

分区表

分区表是指在表目录中为数据文件创建分区子目录,MR程序可以针对分区子目录中的数据进行处理,缩减读取数据的范围。
比如按天划分分区.

创建分区表:

create table t_access(ip string,url string,access_time string)
partitioned by(dt string)  # dt是分区字段,在数据表中也可以使用
row format delimited
fields terminated by ',';

向分区表中导入数据

load data local inpath '/root/access.log.2019-08-04.log' into table t_access partition(dt='20190804');
load data local inpath '/root/access.log.2019-08-05.log' into table t_access partition(dt='20190805');

分区数据查询

select count(*) from t_access where dt='20190804'; 只对20190804这一天的数据进行运算
select count(*) from t_access;对所有的进行运算

导入数据

1.hadoop put方法
2.hive交互方式,从本地导入,load data local inpath '/root/data' into table t_order;
3.hive交互方式,从hdfs导入,这个是剪切的方式load data inpath '.log' into table t_access partition(dt='20170806');

导出数据

1.将hive数据导出hdfs

insert overwrite directory '/root/data'
row format delimited fields terminated by ','
select * from t_access;

2.将hive数据导出本地

insert overwrite local directory '/root/data'
row format delimited fields terminated by ','
select * from t_access limit 100000;

你可能感兴趣的:(hadoop,hadoop)