DDL,Hive Data Definition Language,数据定义语言;

通俗理解就是数据库与库表相关的操作,本文总结一下基本方法

hive 数据仓库配置

hive 数据仓库默认位置在 hdfs 上的 /user/hive/warehouse 路径下;

hive 有个默认的数据库叫 default;

但是在 /user/hive/warehouse 路径下没有创建 default 文件夹,default 下的表是直接在 /user/hive/warehouse 路径下 创建文件夹

在 hive 中,数据库对应 hdfs 上一个路径(叫文件夹或者更合适),数据表也对应 hdfs 上一个路径,数据对应 hdfs 上一个文件

管理表 vs 外建表

管理表也称内建表;hive 默认创建的表都是管理表;

管理表和外建表的数据都存储在 hdfs,因为都是 hive 的表;

区别

hive 在创建内部表时,会把数据移动到数据仓库指定的路径,如 hdfs 某个地方;

如果创建外部表,不会移动数据,仅在元数据中记录数据所在的位置;

最大的区别在于:当删除内部表时,同时删除数据和元数据;当删除外部表时,仅删除元数据,不删除数据;

鉴于这种特性,管理表不适合共享数据,容易产生安全问题;

在实际工作中,一般使用外建表

相互转换

查看表的类型

hive> desc formatted student_p;
Table Type: MANAGED_TABLE

管理表 to 外部表

hive> alter table student_p set tblproperties('EXTERNAL'='TRUE');
Table Type: EXTERNAL_TABLE

外部表 to 管理表

hive> alter table student_p set tblproperties('EXTERNAL'='FALSE');

注意必须大写

Database

Create Database

CREATE (DATABASE|SCHEMA) [IF NOT EXISTS] database_name
[COMMENT database_comment]
[LOCATION hdfs_path]
[WITH DBPROPERTIES (property_name=property_value, ...)];

示例

hive> create database hive1101 location '/usr/hive_test';
OK
Time taken: 0.12 seconds

注意这里 location 的地址并不是 hive 默认的 hdfs 地址,说明是可以指定非默认地址的

Drop Database

数据库必须是空的

DROP (DATABASE|SCHEMA) [IF EXISTS] database_name [RESTRICT|CASCADE];

Alter Database

改变数据库的属性

ALTER (DATABASE|SCHEMA) database_name SET DBPROPERTIES (property_name=property_value, ...);   -- (Note: SCHEMA added in Hive 0.14.0)
ALTER (DATABASE|SCHEMA) database_name SET OWNER [USER|ROLE] user_or_role; -- (Note: Hive 0.13.0 and later; SCHEMA added in Hive 0.14.0)
ALTER (DATABASE|SCHEMA) database_name SET LOCATION hdfs_path; -- (Note: Hive 2.2.1, 2.4.0 and later)

示例

hive> alter database hive1101 set dbproperties ('edit_by'='wjd');
OK
Time taken: 0.118 seconds

注意,location 无法更改

可能只有 Hive 2.2.1, 2.4.0 and later 才可以,我的是 2.3.6,没有测试

Use Database

切换到目标数据库下

USE database_name;
USE DEFAULT;

Show Database

显示所有数据库名称

show databases;

显示数据库信息

hive> desc database hive1101;
OK
hive1101 hdfs://hadoop10:9000/usr/hive_test root USER
Time taken: 0.182 seconds, Fetched: 1 row(s)

只显示了元数据信息,也可以 在 database 后加 extended,能多显示一些信息

Table

Create Table

CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name    -- (Note: TEMPORARY available in Hive 0.14.0 and later)
[(col_name data_type [column_constraint_specification] [COMMENT col_comment], ... [constraint_specification])]
[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]
[SKEWED BY (col_name, col_name, ...) -- (Note: Available in Hive 0.10.0 and later)]
ON ((col_value, col_value, ...), (col_value, col_value, ...), ...)
[STORED AS DIRECTORIES]
[
[ROW FORMAT row_format]
[STORED AS file_format]
| STORED BY 'storage.handler.class.name' [WITH SERDEPROPERTIES (...)] -- (Note: Available in Hive 0.6.0 and later)
]
[LOCATION hdfs_path]

后面还有很多参数,具体可参照官网 - 下面的参考资料

参数解释

temporary

exeternal:创建一个外部表,同时需要指定实际数据所在的路径,location 来指定

like:复制表结构,但不复制数据

row format:指定每行的格式,如果原数据的格式不符,可以写入表,但不能正确的写入表

  // delimited fields terminated by '\t'   以 \t 为间隔

  // delimited fields terminated by ','  注意逗号分隔的只能是 csv 文件,自己写的不能用,会出错

  // delimited 间隔;terminated 结尾;

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, ...)]

stored as: 加载的文件格式

  // 如果是纯文本文件,可以用 stored as textfile;如果是压缩文件,可以用 stored as  SEQUENCEFILE

  // 还有 ORC、json 等多种个数,可查看官网

partitioned by:分区表,这个很重要,后面专门讲

CLUSTERED BY:分桶表,后面和分区表一起将

示例

hive> create table student(id int,name string) row format delimited fields terminated by '\t'; 创建表,以
hive> create table if not exists student1 like student; 创建一个和表一样模式的表 hive> create table if not exists mytable(sid int,sname string)
> row format delimited fields terminated by '\005'
> stored as textfile; 创建内部表 hive> create external table if not exists pageview(
> pageid int,
> page_url string comment 'the page url'
> )
> row format delimited fields terminated by ','
> location 'hdfs://192.168.220.144:9000/user/hive/warehouse'; 创建外部表 hive> create table student_p(id int,name string,sexex string,age int,dept string)
> partitioned by(part string)
> row format delimited fields terminated by ','
> stored as textfile; 创建分区表

测试 row format 

写入如下数据到 student,以 \t 为间隔

1    a
2 b
3 c
4 d,

很显然,最后一行不是以 \t 间隔

hive> load data local inpath '/usr/lib/hive2.3.6/1.txt' into table student;
Loading data to table hive1101.student
OK
Time taken: 0.868 seconds
hive> select * from student;
OK
1 a
2 b
3 c
NULL NULL
Time taken: 0.17 seconds, Fetched: 4 row(s)

可以看到最后一行没有正确的写入

Drop Table

DROP TABLE [IF EXISTS] table_name [PURGE];     -- (Note: PURGE available in Hive 0.14.0 and later)

Truncate Table

清空表;注意不能清空外部表

TRUNCATE TABLE table_name [PARTITION partition_spec];

partition_spec:
: (partition_column = partition_col_value, partition_column = partition_col_value, ...)

Alter Table

修改表的属性

Rename Table

ALTER TABLE table_name RENAME TO new_table_name;

Alter Table Properties

ALTER TABLE table_name SET TBLPROPERTIES table_properties;

table_properties:
: (property_name = property_value, property_name = property_value, ... )
Alter Table Comment
ALTER TABLE table_name SET TBLPROPERTIES ('comment' = new_comment);

Add SerDe Properties

ALTER TABLE table_name [PARTITION partition_spec] SET SERDE serde_class_name [WITH SERDEPROPERTIES serde_properties];

ALTER TABLE table_name [PARTITION partition_spec] SET SERDEPROPERTIES serde_properties;

serde_properties:
: (property_name = property_value, property_name = property_value, ... )

Alter Column

Change Column Name/Type/Position/Comment

修改列的名字,类型,位置 等

ALTER TABLE table_name [PARTITION partition_spec] CHANGE [COLUMN] col_old_name col_new_name column_type
[COMMENT col_comment] [FIRST|AFTER column_name] [CASCADE|RESTRICT];

示例

CREATE TABLE test_change (a int, b int, c int);

// First change column a's name to a1.
ALTER TABLE test_change CHANGE a a1 INT; // Next change column a1's name to a2, its data type to string, and put it after column b.
ALTER TABLE test_change CHANGE a1 a2 STRING AFTER b;
// The new table's structure is: b int, a2 string, c int. // Then change column c's name to c1, and put it as the first column.
ALTER TABLE test_change CHANGE c c1 INT FIRST;
// The new table's structure is: c1 int, b int, a2 string. // Add a comment to column a1
ALTER TABLE test_change CHANGE a1 a1 INT COMMENT 'this is column a1';

Add/Replace Columns

增加或者替换列

ALTER TABLE table_name
[PARTITION partition_spec] -- (Note: Hive 0.14.0 and later)
ADD|REPLACE COLUMNS (col_name data_type [COMMENT col_comment], ...)
[CASCADE|RESTRICT] -- (Note: Hive 1.1.0 and later)

Index

Create Index

CREATE INDEX index_name
ON TABLE base_table_name (col_name, ...)
AS index_type
[WITH DEFERRED REBUILD]
[IDXPROPERTIES (property_name=property_value, ...)]
[IN TABLE index_table_name]
[
[ ROW FORMAT ...] STORED AS ...
| STORED BY ...
]
[LOCATION hdfs_path]
[TBLPROPERTIES (...)]
[COMMENT "index comment"];

Drop Index

DROP INDEX [IF EXISTS] index_name ON table_name;

Alter Index

ALTER INDEX index_name ON table_name [PARTITION partition_spec] REBUILD;

Show

Show Databases

SHOW (DATABASES|SCHEMAS) [LIKE 'identifier_with_wildcards'];

Show Tables

SHOW TABLES [IN database_name] ['identifier_with_wildcards'];

Show Table Properties

SHOW TBLPROPERTIES tblname;
SHOW TBLPROPERTIES tblname("foo");

Show Create Table

SHOW CREATE TABLE ([db_name.]table_name|view_name);

Show Indexes

SHOW [FORMATTED] (INDEX|INDEXES) ON table_with_index [(FROM|IN) db_name];

Show Columns

SHOW COLUMNS (FROM|IN) table_name [(FROM|IN) db_name];

示例

-- SHOW COLUMNS
CREATE DATABASE test_db;
USE test_db;
CREATE TABLE foo(col1 INT, col2 INT, col3 INT, cola INT, colb INT, colc INT, a INT, b INT, c INT); -- SHOW COLUMNS basic syntax
SHOW COLUMNS FROM foo; -- show all column in foo
SHOW COLUMNS FROM foo "*"; -- show all column in foo
SHOW COLUMNS IN foo "col*"; -- show columns in foo starting with "col" OUTPUT col1,col2,col3,cola,colb,colc
SHOW COLUMNS FROM foo '*c'; -- show columns in foo ending with "c" OUTPUT c,colc
SHOW COLUMNS FROM foo LIKE "col1|cola"; -- show columns in foo either col1 or cola OUTPUT col1,cola
SHOW COLUMNS FROM foo FROM test_db LIKE 'col*'; -- show columns in foo starting with "col" OUTPUT col1,col2,col3,cola,colb,colc
SHOW COLUMNS IN foo IN test_db LIKE 'col*'; -- show columns in foo starting with "col" (FROM/IN same) OUTPUT col1,col2,col3,cola,colb,colc -- Non existing column pattern resulting in no match
SHOW COLUMNS IN foo "nomatch*";
SHOW COLUMNS IN foo "col+"; -- + wildcard not supported
SHOW COLUMNS IN foo "nomatch";

加载数据

不属于 DDL,属于 DML,后面会讲

参考资料:

https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL  官网

https://ask.hellobi.com/blog/wujiadong/9483

https://blog.csdn.net/xiaozelulu/article/details/81585867

Hive 教程(三)-DDL基础的更多相关文章

  1. Hive 教程(七)-DML基础

    DML,Hive Data Manipulation Language,数据操作语言: 通俗理解就是数据库里与数据的操作,如增删改查,统计汇总等: Loading files into tables ...

  2. JavaScript 入门教程三 语言基础【1】

     一.基本介绍 1.JavaScript 是一种区分大小写的语言.(var Hello 与 var hello 是不同的变量) 2.JavaScript 中标志符就是指变量.函数.属性的名字,或者函数 ...

  3. Java 教程整理:基础、项目全都有

    Java 在编程语言排行榜中一直位列前排,可知 Java 语言的受欢迎程度了. 网上有很多 Java 教程,无论是基础入门还是开发小项目的教程都比比皆是,可是系统的很少,对于Java 学习者来说找到系 ...

  4. Laravel教程 三:视图变量传递和Blade

    Laravel教程 三:视图变量传递和Blade 此文章为原创文章,未经同意,禁止转载. Blade 上一篇我们简单地说了Router,Views和Controllers的工作流程,这一次我就按照上一 ...

  5. Windows 8实例教程系列 - 数据绑定基础实例

    原文:Windows 8实例教程系列 - 数据绑定基础实例 数据绑定是WPF,Silverlight以及Windows Phone应用开发中最为常用的开发技术,在基于XAML的Windows Stor ...

  6. Nmap扫描教程之网络基础服务DHCP服务类

    Nmap扫描教程之网络基础服务DHCP服务类 Nmap网络基础服务 网络基础服务是网络正常工作的基石,常见的网络基础服务包括DHCP服务和DNS服务.其中,DHCP服务用来为计算机动态分配IP地址:D ...

  7. 在Hive中执行DDL之类的SQL语句时遇到的一个问题

    在Hive中执行DDL之类的SQL语句时遇到的一个问题 作者:天齐 遇到的问题如下: hive> create table ehr_base(id string); FAILED: Execut ...

  8. Java基础教程:泛型基础

    Java基础教程:泛型基础 引入泛型 传统编写的限制: 在Java中一般的类和方法,只能使用具体的类型,要么是基本数据类型,要么是自定义类型.如果要编写可以应用于多种类型的代码,这种刻板的限制就会束缚 ...

  9. CRL快速开发框架系列教程三(更新数据)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

随机推荐

  1. AcWing:112. 雷达设备(贪心 + 笛卡尔坐标系化区间)

    假设海岸是一条无限长的直线,陆地位于海岸的一侧,海洋位于另外一侧. 每个小岛都位于海洋一侧的某个点上. 雷达装置均位于海岸线上,且雷达的监测范围为d,当小岛与某雷达的距离不超过d时,该小岛可以被雷达覆 ...

  2. AWS EC2 PV Drivers 驱动升级

    问题 从2019-10-23起,我的AWS实例不断的重启(大概6个小时左右),或者连接不上(远程连接不上并PING不通IP),但控制台显示running. 分析与解决方法 通过查看dump文件,发现是 ...

  3. win7安装ElasticSearch集群

    1.单节点安装请参考上篇博客 http://www.cnblogs.com/lianliang/p/7953754.html 2.集群的安装(这里模拟两个节点) 1)集群的安装,基于之前单节点的安装 ...

  4. pl/sql 过程 函数(写一个过程,输入部门编号,在控制台打印这个部门的名称,总人数,平均工资(基本工资+奖金))

    1.编写过程,输入三角形三个表的长度.在控制台打印三角形的面积. create or replace procedure pro_s(v_a number,v_b number,v_c number) ...

  5. Robotframework之SSHLibrary库

    Robotframework之SSHLibrary库     使用robotframework做自动化测试,在流程中可能需要远程连接机器做一些简单操作,比如连接linux服务器,外面平时用的工具去连接 ...

  6. 编写 Model 层的代码

    创建 App 这里把所有 Model 划分为三类:blog 相关.配置相关和评论相关.这么分的好处是便于独立维护各个模块,也便于在开发时分配任务. blog App 创建一个名为 blog 的 app ...

  7. shell案例(6):1、创建用户 2、创建目录 3、创建文件 4、退出

    脚本基本要求 1.创建用户2.创建目录3.创建文件4.退出 #!/bin/bash #author:zhiping.wang Check_error() { ] then echo "$1 ...

  8. net.sf.json.JSONObject处理 "null" 字符串的一些坑

    转: net.sf.json.JSONObject处理 "null" 字符串的一些坑 2018年05月02日 16:41:25 大白能 阅读数:7026   版权声明:本文为博主原 ...

  9. Memtest86+ 5.0.1系统设置

    Settings: (1) Test Selection (测试选择) > (1) Default Tests (2) Skip Current Test (3) Select Test (4) ...

  10. MyEclipse 下'Publishing to Tomcat'has encountered a problem解决办法

    详情查看: MyEclipse 下'Publishing to Tomcat'has encountered a problem解决办法