HIVE DDL

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HIVE DDL相关的知识,希望对你有一定的参考价值。

CREATE (DATABASE|SCHEMA) [IF NOT EXISTS] database_name
[COMMENT database_comment]//关于数据块的描述
[LOCATION hdfs_path]//指定数据库在HDFS上的存储位置
[WITH DBPROPERTIES (property_name=property_value, ...)];//指定数据块属性
默认地址:/user/hive/warehouse/db_name.db/table_name/partition_name/…

---创建数据库脚本
CREATE DATABASE plusorg
COMMENT
‘plusorg db‘
LOCATION
‘hdfs://hmaster:9000/user/hive/warehouse/plusorg.db‘
WITH DBPROPERTIES (
‘creator‘=‘zhoujun‘,
‘date‘=‘2018-11-09‘)

create database if not exists plusorg comment ‘plusorg db‘ location ‘hdfs://hmaster:9000/user/hive/warehouse/plusorg.db‘ with dbproperties(‘creator‘=‘zhoujun‘,‘date‘=‘2018-11-09‘);
--显示所有数据库
show databases;
desc database extended plusorg; 显示数据详细信息
hdfs dfs -ls /user/hive/warehouse/ 查看hive创建的库,表存在hadoop的目录
select current_database(); 查看正在使用哪个数据库
show create database plusorg; 查询创建数据库的详细脚本信息
drop database dbname; 删除数据库
drop database if exists dbname;
默认情况下,hive 不允许删除包含表的数据库,有两种解决办法,手动删除库下所有表,然后删除库, 使用 cascade 关键字
drop database if exists dbname cascade;
show tables in t1; 显示数据库中所有表信息
use database_name 切换数据库
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]
详情请参见: https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualD DL-CreateTable

?CREATE TABLE 创建一个指定名字的表。如果相同名字的表已经存在,则抛出异常;用户可以用 IF NOT EXIST 选项来忽略这个异常
?EXTERNAL 关键字可以让用户创建一个外部表,在建表的同时指定一个指向实际数据的路径(LOCATION)
?LIKE 允许用户复制现有的表结构,但是不复制数据
?COMMENT可以为表与字段增加描述
?PARTITIONED BY 指定分区
?ROW FORMAT
DELIMITED [FIELDS TERMINATED BY char] [COLLECTION ITEMS TERMINATED BY char]
MAP KEYS TERMINATED BY char] [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 确定表的具体的列的数据。
?STORED AS
SEQUENCEFILE //序列化文件
| TEXTFILE //普通的文本文件格式
| RCFILE//行列存储相结合的文件
| INPUTFORMAT input_format_classname OUTPUTFORMAT output_format_classname //自定义文件格式
如果文件数据是纯文本,可以使用 STORED AS TEXTFILE。如果数据需要压缩,使用 STORED AS SEQUENCE 。
?LOCATION指定表在HDFS的存储路径

创建内部表
create table student(id int, name string, sex string, age int,department string) row format delimited fields terminated by ",";
desc student;查看表结构
创建外部表
create external table student_ext
(id int, name string, sex string, age int,department string) row format delimited fields terminated by "," location "/hive/student";
创建分区表
create external table student_ptn(id int, name string, sex string, age int,department string)
partitioned by (city string)
row format delimited fields terminated by ","
location "/hive/student_ptn";
alter table student_ptn add partition(city="beijing"); 添加分区
如果某张表是分区表。那么每个分区的定义,其实就表现为了这张表的数据存储目录下的一个子目录
如果是分区表。那么数据文件一定要存储在某个分区中,而不能直接存储在表中。
分桶表
create external table student_bck(id int, name string, sex string, age int,department string)
clustered by (id) sorted by (id asc, name desc) into 4 buckets
row format delimited fields terminated by ","
location "/hive/student_bck";
向表中导入数据
load data local inpath "/home/hadoop/student.txt" into table student;
使用CTAS创建表
create table student_ctas as select from student where id < 95012;
复制表结构
create table student_copy like student;
注意:如果在table的前面没有加external关键字,那么复制出来的新表。无论如何都是内部表
如果在table的前面有加external关键字,那么复制出来的新表。无论如何都是外部表
Show tables; 查看所有表
Show tables in dbname; 查看某数据库中的所有表
Show tables like ‘student_c
‘ ; 查看数据中以XXX开头的表
Desc tablename; 查看表信息
Desc extended tablename; desc formatted tablename; 查看表的详细信息
Show partitions tablename; 查看分区信息
Show create table tablename; 查看表的详细建表信息
alter table student rename to new_student; 修改表名
alter table new_student add columns (score int); 增加一个字段
alter table new_student change name new_name string; 修改一个字段名字的定义
alter table new_student replace columns (id int, name string, address string); 替换所有字段
alter table student_ptn add partition(city="chongqing"); 添加一个或多个静态分区
alter table student_ptn add partition(city="chongqing2") partition(city="chongqing3") partition(city="chongqing4");
动态分区;先向student_ptn表中插入数据,数据格式如下图
0: jdbc:hive2://hadoop3:10000> load data local inpath "/home/hadoop/student.txt" into table student_ptn partition(city="beijing");
现在我把这张表的内容直接插入到另一张表student_ptn_age中,并实现sex为动态分区(不指定到底是哪中性别,让系统自己分配决定)
首先创建student_ptn_age并指定分区为age
0: jdbc:hive2://hadoop3:10000> create table student_ptn_age(id int,name string,sex string,department string) partitioned by (age int);
从student_ptn表中查询数据并插入student_ptn_age表中
insert overwrite table student_ptn_age partition(age)
select id,name,sex,department,age from student_ptn;

修改分区,一般来说,都是指修改分区的数据存储目录
在添加分区的时候,直接指定当前分区的数据存储目录
0: jdbc:hive2://hadoop3:10000> alter table student_ptn add if not exists partition(city=‘beijing‘)
. . . . . . . . . . . . . . .> location ‘/student_ptn_beijing‘ partition(city=‘cc‘) location ‘/student_cc‘;
No rows affected (0.306 seconds)
0: jdbc:hive2://hadoop3:10000>
修改已经指定好的分区的数据存储目录
0: jdbc:hive2://hadoop3:10000> alter table student_ptn partition (city=‘beijing‘) set location ‘/student_ptn_beijing‘;
此时原先的分区文件夹仍存在,但是在往分区添加数据时,只会添加到新的分区目录
alter table student_ptn drop partition (city=‘beijing‘); 删除分区
drop table new_student; 删除表
truncate table student_ptn; 清空表

create view view_cdt as select * from cdt; 创建视图
Show views; 显示所有视图
Desc view_name ; 查看某视图详细信息
drop view view_name; 删除视图元数据
Show functions; 查看内置函数
Desc function substr; 显示函数的详细信息
Desc function extended substr; 显示函数的扩展信息
当 Hive 提供的内置函数无法满足业务处理需要时,此时就可以考虑使用用户自定义函数。
UDF(user-defined function)作用于单个数据行,产生一个数据行作为输出。(数学函数,字 符串函数)
UDAF(用户定义聚集函数 User- Defined Aggregation Funcation):接收多个输入数据行,并产 生一个输出数据行。(count,max)
UDTF(表格生成函数 User-Defined Table Functions):接收一行输入,输出多行(explode)

以上是关于HIVE DDL的主要内容,如果未能解决你的问题,请参考以下文章

Hive 官方手册翻译 -- Hive DDL(数据定义语言)

Hive的DDL数据定义语言

03hive_DDL数据定义

Hive基础sql语法(DDL)

Hive 系列—— Hive 常用 DDL 操作

数据仓库工具——Hive表操作