DML(Data Manipulation Language) 数据操纵语言 :主要用来对数据库的数据进行一些操作,常用的就是INSERT、UPDATE、DELETE。

DDL (Data Define Language) 数据定义语言:常用的有CREATE和DROP,用于在数据库中创建新表或删除表,以及为表加入索引等

DCL(Data Control Language) 数据控制语言:通过GRANT和REVOKE,确定单个用户或用户组对数据库对象的访问权限

hiveDDL操作

  • hive数据类型
  • hive数据编码
  • hive数据类型转换
  • hive创建数据库
  • hive创建表(三种方式)
  • hive表修改
  • hive内部表和外部表
  • hive表压缩格式

hiveDDL操作

  • hive数据类型

基本数据类型包括:整型、浮点型、时间类型、字符串类型、布尔类型、二进制

复杂数据类型:array数组类型、Maps类型、Structs结构类型

数值类型

42118e888ea44bdf8861dc9469cca445.png

复合类型

Array数组类型:

一组有序的且字段类型相同的内容 比如:ARRAY<data_type>

array(“a”,“b”,“c”,“d”)

Maps类型:

一组无序的键/值对,键的类型必须是原子的,值可以是任意类型,同一键映射的值得类型必须相同

Structs:一组由任意数据类型组成的结构,一组命名的字段,字段类型可以不同

hive数据编码

(hive默认的编码格式)

cceb7309b0f7e0ea3a265295cd276504.png
create table test_tbl ( 
col1 ARRAY<INT> 
col2 MAP<STRING,INT>, 
col3 STRUCT<a:STRING,b:INT,c:DOUBLE>); 

hive数据类型转换

和java一样,hive也支持隐事类型转换和显式类型转换;

hive中类型转换通过cast函数来完成,比如 select cast(name as String) from tbl ;

bca3079648858652d14e5da1d2a94194.png

hive创建数据库

hive中最简单的创建数据库的语法和mysql一样

create database db_test; 

// 当数据库不存在时创建

create database if not exists db_test; 

// 创建库时,添加库的说明

create database if not exists db_test comment ’this is test db'

// 指定HDFS中的目录位置

create database db_test location ‘/hive/db/db_test’; 

// 查看已经创建的数据库

show databases 

// 通过通配符查看db开头的数据库

show databases like 'db.*’; 

// 查看创建数据库的语句

show create database db_test ; 

// 显示数据库中文件目录位置路径

describe database db_test ;

// 切换到指定数据库

use db_test

注意:

默认情况下是不允许直接删除一个有表的数据库的:

删除一个有表的数据库有两种办法

1、 先把表删干净,再删库

2、删库时在后面加上cascade,表示级联删除此数据库下的所有表

drop database if exists foo cascade; 

Hive创建表(三种方式)

方式一:直接创建

Hive中最简单的创建数据表语法和mysql一样

create table test_tbl (col_name data_type);

创建表时需要指定数据切分格式,会用到ROW FORMAT关键字。下面是Hive官网关于ROW FORMAT的用法:

row_format 
  : DELIMITED [FIELDS TERMINATED BY char [ESCAPED BY char]] [COLLECTION ITEMS TERMINATED BY char] 
        [MAP KEYS TERMINATED BY char] [LINES TERMINATED BY char] 
        [NULL DEFINED AS char]   -- (Note: Available in Hive 0.13 and later) 
  | SERDE serde_name [WITH SERDEPROPERTIES (property_name=property_value, property_name=property_value, …)]   

[xx] 表示可选 ,| 表示二选一

FIELDS TERMINATED BY char 指定HDFS文件中以指定的符号为分割列,默认是001

,COLLECTION ITEMS TERMINATED BY ‘x’ 该属性用于分割数组形式的数据,比如[1-2-3]

MAP KEYS TERMINATED BY ‘xx’ 用于分割map键值之间的分割 比如<1:3>

LINES TERMINATED BY ‘x’ 用于区分不同行的数据,默认是换行符n

SERDE 用于指定hive的文本格式,默认是TextFile

SERDE 内置的一个类型:Avro,ORC,RegEx,Thrift,Parquet,CSV,JsonSerDe

LOCATION '/usr/hive/text/‘ 指定表数据存储在HDFS上的目录地址

方式二:复制表结构

create table tbl_test like select * from tbl_test1;

方式三:直接复制表结构以及数据

create table tbl_test as select * from tbl_test1;

hive修改表

// 查询重命名表

ALTER TABLE test1 RENAME TO test2;

修改表字段命名

// ALTER TABLE employee CHANGE name ename String; 

// 修改表字段类型

 ALTER TABLE employee CHANGE salary salary double ; 

// 添加列语句

ALTER TABLE employee ADD COLUMNS (dept STRING COMMENT 'Department name’); 

//加分区表字段

ALTER TABLE  table_name  add columns( dept string COMMENT '') CASCADE;

hive内部表和外部表

何为内部表和外部表:

创建表时:创建内部表时,会将数据移动到数据仓库指向的路径;若创建外部表,仅记录数据所在的路径, 不对数据的位置做任何改变。

删除表时:在删除表的时候,内部表的元数据和数据会被一起删除, 而外部表只删除元数据,不删除数据。

hive中默认创建的是内部表;

如果需要创建外部表需要使用external关键字

create external table fz_external_table(id int,name string,age int,tel string);

hive表存储格式

hive中常用的存储格式:

textFile : hive默认的存储格式 ,默认为行存储

ORCFile :ORC数据压缩率比较高,通过采用数据按照行分块,每个块按照列存储,其中每个存储都一个索引

Parquet :Parquet具有很好的压缩性能,可以减少大量的表扫描和反序列化的时间

创建表时通过stored as 关键字指定表的存储格式,默认为textFile

通过对比这三种磁盘占用:orc<parquet<textfile

通过对比这三种格式查询时间:orc<parquet<textfile

希望本文对你有帮助!

感谢关注“码农星球”。本文版权属于“码农星球”。我们提供咨询和培训服务,关于本文有任何困惑,请关注并联系我们。

更多推荐