DDL语法
1. 数据库操作
- 创建一个数据库会在HDFS上创建一个目录,Hive里数据库的概念类似于程序中的命名空间,用数据库来组织表,在大量Hive的情况下,用数据库来分开可以避免表名冲突。Hive默认的数据库是default。
- hive不能使用关键字、数字开始的字符串来作库表名,不区分大小写。
1.1 创建数据库例子:
hive> create database [if not exists] db1;
[]中的可以不写,判断是否存在
1.2 查看数据库定义:
Describe
命令来查看数据库定义,包括:数据库名称、数据库在HDFS目录、HDFS用户名称。
hive> desc database db1;
OK
db1 hdfs://cluster1/user/hive/warehouse/db1.db root USER
Time taken: 0.059 seconds, Fetched: 1 row(s)
db1是数据库名称。
hdfs://cluster1/user/hive/warehouse/db1.db 是db1库对应的存储数据的HDFS上的根目录。
1.3 查看数据库列表:
hive> show databases;
OK
db1
default
Time taken: 0.036 seconds, Fetched: 2 row(s)
1.4 删除数据库
删除数据库时,如果库中存在数据表,是不能删除的,要先删除所有表,再删除数据库。添加上cascade
后,就可以先自动删除所有表后,再删除数据库。(友情提示:慎用啊!)删除数据库后,HDFS上数据库对应的目录就被删除掉了。
hive> drop database if exists db1 cascade;
1.5 切换当前数据库
hive> use db1;
2. 表操作
2.1 创建表
内外部表区别:
1、默认创建内部表,创建外部表需要external。
2、一般使用外部表(长期存在的表、数据量大的、不希望把数据块删除的数据),临时表或者确定使用即可清空全部数据(数据库和元数据)则可以使用内部表。
3、内部表删除时将会删除元数据和hdfs中表对应的目录,而外部表删除时只会删除元数据,hdfs中的数据目录保留。
4、alter table userinfo set tblproperties('EXTERNAL'='true');
###内部表转外部表,true一定要大写;
alter table log3 set tblproperties('EXTERNAL'='false');
##false大小写都没有关系
分区表:
静态分区:加载数据到指定分区的值。
动态分区:数据未知,根据分区的值来确定需要创建的分区。
混合分区:静态和动态都有。
动态分区的属性:
set hive.exec.dynamic.partition=true #设定动态分区
set hive.exec.dynamic.partition.mode=strict/nonstrict #设定严格模式与否
set hive.exec.max.dynamic.partitions=1000 #设定最大分区数
set hive