赞
踩
语法:
CREATE DATABASE [IF NOT EXISTS] database_name
[COMMENT database_comment] -- 注释
[LOCATION hdfs_path] -- 指定库在HDFS的路径
[WITH DBPROPERTIES (property_name=property_value, ...)]; -- 一些额外信息
案例:
create database db_hive2 location '/db_hive2.db';
显示所有数据库:
show databases;
过滤查询数据库:
show databases like 'hive*';
显示数据库信息:
desc database db_name;
显示数据库详细信息:
desc database extended db_name;
切换数据库:
use db_name;
alter database db_hive set dbproperties(property1=value1,...);
删除空数据库
drop database [if exists] db_name;
删除非空数据库
drop database db_name [if exists] cascade;
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name
[(col_name data_type [COMMENT col_comment], ...)]
[COMMENT table_comment]
[PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)]
[CLUSTERED BY (col_name, col_name, ...)
[SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS]
[ROW FORMAT row_format]
[STORED AS file_format]
[LOCATION hdfs_path]
[TBLPROPERTIES (property_name=property_value, ...)]
[AS select_statement]
EXTERNAL
:表示创建一个外部表,在建表的同时可以指定一个指向实际数据的路径(LOCATION), 在删除表的时候,内部表的元数据和数据会被一起删除,而外部表只删除元数据,不删除实际数据
COMMENT
:为表和列添加注释
PARTITIONED BY
:创建分区表
CLUSTERED BY
:创建分桶表
SORTED BY
:不常用,对桶中的一个或多个列另外排序
ROW FORMAT DELIMITED
:指定行的格式
FIELDS TERMINATED BY char
:指定每行字段之间的分隔符COLLECTION ITEMS TERMINATED BY char
:指定字段值为集合时元素之间的分隔符MAP KEYS TERMINATED BY char
:指定 Map 里 Key 和 value 间的分隔符LINES TERMINATED BY char
:指定每行数据之间的分隔符| SERDE serde_name [WITH SERDEPROPERTIES (property_name=property_value, property_name=property_value, ...)]
:用户在建表的时候可以自定义 SerDe 或者使用自带的 SerDe。如果没有指定 ROW FORMAT 或者 ROW FORMAT DELIMITED,将会使用自带的 SerDe。在建表的时候,用户还需要为表指定列,用户在指定表的列的同时也会指定自定义的 SerDe,Hive 通过 SerDe 确定表的具体的列的数据。SerDe 是 Serialize/Deserilize 的简称, hive 使用 Serde 进行行对象的序列与反序列化
STORED AS
:指定存储文件类型
LOCATION
:指定表在 HDFS 上的存储位置
AS
:后跟查询语句,根据查询结果创建表
LIKE
:允许用户复制现有的表结构,但是不复制数据
又称为管理表,当执行 drop 删除一个管理表时,这个表的元数据和 HDFS 上的实际目录和数据都会被删除,因此管理表不适合和其他工具共享数据
创建:
create table if not exists student(
id int,
name string
)
row format delimited fields terminated by '\t'
stored as textfile
location '/user/hive/warehouse/student';
查看表类型
desc formatted student;
Table Type: MANAGED_TABLE -- 管理表
当执行 drop 删除一个外部表时,只是删除这个表的元数据, HDFS 上的实际数据会保留
创建:
create external table if not exists dept(
deptno int,
dname string,
loc int
)
row format delimited fields terminated by '\t';
查看表类型:
desc formatted dept;
Table Type: EXTERNAL_TABLE -- 外部表
-- 内部表转外部表
alter table student set tblproperties('EXTERNAL'='TRUE');
-- 外部表转内部表
alter table dept set tblproperties('EXTERNAL'='FALSE');
注意:(‘EXTERNAL’=‘TRUE’) 和 (‘EXTERNAL’=‘FALSE’) 为固定写法,区分大小写
ALTER TABLE table_name RENAME TO new_table_name -- new_table_name 必须不存在
修改的是表的元数据
增加列:代表新增字段,字段位置在所有列后面(partition 列前)
ALTER TABLE table_name ADD COLUMNS (col_name data_type [COMMENT col_comment], ...);
alter table dept add columns(deptdesc string);
替换列:表示替换表中所有字段
ALTER TABLE table_name REPLACE COLUMNS (col_name data_type [COMMENT col_comment], ...);
alter table dept replace columns(deptno string, dname string, loc string);
更新列 (列名及类型)
ALTER TABLE table_name CHANGE [COLUMN] col_old_name col_new_name column_type [COMMENT col_comment] [FIRST|AFTER column_name];
alter table dept change deptdesc dept string;
drop table tbl_name; -- 内外表不同
load data [local] inpath '数据的path' [overwrite] into table tbl_name [partition (partcol1=val1,…)];
load data
:表示加载数据local
:表示从本地加载数据到 hive 表;否则从 HDFS 加载数据到 hive 表inpath
:表示加载数据的路径overwrite
:表示覆盖表中已有数据,否则表示添加 (非追加)into table
:表示加载到哪张表partition
:表示上传到指定分区创建一张表
create table student
(
id string,
name string
)
row format delimited fields terminated by '\t';
加载数据文件到表
本地文件:复制操作
load data local inpath '/opt/module/hive/datas/student.txt' into table student;
HDFS 文件:剪切操作
load data inpath 'hdfs:///user/myuser/hive/student.txt' into table student;
覆盖加载数据文件
load data inpath 'hdfs:///user/myuser/hive/student.txt' overwrite into table student;
insert into table student values('1','wangwu'),('2','zhaoliu');
-- insert into:以追加数据的方式插入到表或分区,原有数据不会删除
insert into table student
select id, name from student;
-- insert overwrite:会覆盖表中已存在的数据(本质是先查询出结果然后删除原表中数据再插入)
insert overwrite table student
select id, name from student; -- 查询自己插入自己
--实现一次读取多次插入,减少 MR job 个数
from student
insert overwrite table student partition(month='201707')
select id, name where month='201709'
insert overwrite table student partition(month='201706')
select id, name where month='201709';
根据查询结果创建表
create table if not exists student3
as select id, name from student;
建表时指定加载数据路径导入,一般建外部表时使用
create external table if not exists student4
(
id int,
name string
)
row format delimited fields terminated by '\t'
location '/student4';
需要先用 export 导出后,再将数据导入,一般使用不多
-- 导入的表必须不能存在或为空表
import table student2 from 'hdfs:///user/hive/warehouse/export/student';
将查询的结果导出到本地
insert overwrite local directory
'/opt/module/hive/data/export/student'
select * from student;
将查询的结果格式化导出到本地
insert overwrite local directory
'/opt/module/hive/data/export/student1'
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
select * from student;
将查询的结果导出到 HDFS 上
insert overwrite directory
'hdfs:///user/atguigu/student2'
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
select * from student;
hadoop fs -get path1 path2
dfs -get path1 path2
# 语法
hive -f/-e 执行语句或者脚本 > file
# 实例
hive -e 'select * from student;' > /opt/module/hive/data/export/student4.txt;
export 和 import 主要用于两个 Hadoop 平台集群之间 Hive 表迁移
export table tbl_name to 'path';
Truncate 只能删除管理表的 HDFS 数据 (保留目录和元数据),不能删除外部表的数据
truncate table tbl_name;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。