大数据学习

Hive使用Beeline的DDL操作

2020-03-10  本文已影响0人  TZX_0710

beeline进入交互命令行

beeline -u jdbc:hive2://node01:10000 -n root
--查看数据库列表
show databases;
--使用数据库
use database_name;
--创建数据库
create database if not exists hive_db
comment 'hive database'--数据库注释
location 'hiveDB'--存放在HDFS的路径
with dbproperties ('create='MrTan'')--数据库额外属性 创建者
--查看数据库信息
desc hive_db;
--删除数据库
drop database if exists hive_db cascade;--cascade级联删除 如果数据库中存在表默认行为是 restrict会删除失败

内部表

create table user_in (
stuNo int ,
stuName string
)
row format delimited fields terminated by '\t';

外部表

create external  table user_out(
stuNo  int,
stuName string,
age int,
sex char(1)
)row format delimited fields terminated by "\t"--指定使用的分隔符
location "/hive/studentNo" --存放在hdfs上的位置

分区表

 create external table user_partition(
userNo int,userName string
)
partitioned by(deptNo int)--根据部门字段分区 在查询数据的时候deptNo如果为1就到1的分区当中查找 如果为2就到2的分区中去查找数据
row format delimited fields terminated by '\t' 
location '/hivedb/emp_partition';存储位置

分桶表

CREATE external TABLE user_bucket(
stuNo INT,stuName STRING)
clustered BY(stuNo) sorted BY (stuNo) INTO 4 buckets --根据学生编号分桶现在是分4个桶 对stuNo进行取模  也就是说stuNo /4 余数相同的会在一个文件 所以会产生4个文件 
ROW FORMAT delimited FIELDS TERMINATED BY '\t'
location '/user_bucket';

分桶表&分区表

导入数据的时候需要指定分区

CREATE TABLE page_view_bucketed(
    viewTime INT, 
    userid BIGINT,
    page_url STRING, 
    referrer_url STRING,
    ip STRING )
 PARTITIONED BY(dt STRING)
 CLUSTERED BY(userid) SORTED BY(viewTime) INTO 32 BUCKETS
 ROW FORMAT DELIMITED
   FIELDS TERMINATED BY '\001'
   COLLECTION ITEMS TERMINATED BY '\002'
   MAP KEYS TERMINATED BY '\003'
 STORED AS SEQUENCEFILE;

倾斜表

create external table stu_skewed(
stuNo int,
stuName string
)
skewed by (stuNo)on(4,7,9)--设置倾泄值 设置的数据为严重倾斜,这些数据会单独成立一个文件,查询的时候直接从独立文件拉取值
row format delimited fields terminated by '\t'
location '/stu_skewed';

临时表

临时表仅对当前session可见,临时表的数据将暂时存储在用户的暂存目录中,并在会话结束后删除。如果临时表跟永久表名称相同,则对该表的任何引用都会解析成临时表。临时表不支持分区,不支持创建索引

create temoirary table stu_temp(
stuNo int,
stuName string
)row format delimited fields terminated by '\t';

复制表结构

create temporary external table if not exists stu_co like users;

加载本地数据文件到表中

load data local inpath "/usr/local/user.txt" into table users;--加载user文本文件到users表中

重命名表

alter table users rename to stu;--修改users表为stu

修改列

alter table stu users change stuNo No int;--修改列名
alter table stu change No stuNo int,after stuName--修改No名称为stuNo,并将放在stuName后面
--为字段增加注释
alter table stu change stuNo No int comment ‘学生编号’

清空表

truncate table users;>>目前只有内部表才可以执行truncate  外部表执行报错Cannot truncate non-managed table users.

删除表

drop table users if exists users;#内部表不仅删除表的数据,同时会删除HDFS上的数据,外部表删除的时候只会删除元数据,不会删除HDFS上的数据

sql插入数据

#插入数据可以使用sql插入
insert into table  users  values()
#更新语句
update users set No=12 where No=1
#删除数据
delete from users where No=11

查看表信息

#查看表
show tables
#查看数据库
show tables;
#查看创建视图或者表语句
show create  table tableName/viewName

Hive高级查询

#MAPJOIN 用来标记小表,如果所有表只有一张是小表。Hive把这张小表加载到内存中
select /*+MAPJOIN(d)*/  from user

#STREAMTABLE 在多表进行联结的时候,
#如果每个 ON 字句都使用到共同的列(如下面的 b.key)
#,此时 Hive 会进行优化,将多表 JOIN 在同一个 map / reduce 作业上进行。
#同时假定查询的最后一个表(如下面的 c 表)是最大的一个表,
#在对每行记录进行 JOIN 操作时,
#它将尝试将其他的表缓存起来,然后扫描最后那个表进行计算。因此用户需要保证查询的表的#大小从左到右是依次增加的。

SELECT /*+ STREAMTABLE(d) */  e.*,d.* 
FROM emp e JOIN dept d
ON e.deptno = d.deptno
WHERE job='CLERK';
上一篇下一篇

猜你喜欢

热点阅读