hive表ddl导出_【大数据10回】Hive的DDL建库和建表

学习hive的HQL的DDL相关语法,建议对照官方WIKI,因为语法参数较多,而且和SQL多有相似,不建议记忆,梳理记住相关可以实现的功能和注意点以及和SQL之间的区别即可。

找到”Getting Started Guide”,

找到”DDL Operations”,点击进入”Hive Data Definition Language.”,

因为hive的WIKI特别慢,建议下载下来方便下次查看。

1. DDL: Data Definition Language

以create,delete,drop,alter 关键字开头的操作,就是对数据库,表等数据单元的创建/删除/更改。

hive的database,table,partition,bucket这四个里面前三个在hdfs上面都是文件夹,而具体的数据是存储在文件里面的。所以当我们添加数据的时候实际上就是往这个表所代表的文件夹里添加文件。

Hive默认数据库存放位置:/user/hive/warehouse

位置是由参数决定:hive.metastore.warehouse.dir

修改方法:

2. 数据库操作

1) 创建数据库

--模版:CREATE DATABASE [IF NOT EXISTS] database_name

[COMMENT database_comment]

[LOCATION hdfs_path]

[WITH DBPROPERTIES (property_name=property_value, …)];

中括号里为选填内容。if not exists (不会创建重复的数据库),comment(备注),location(重新选择在hdfs上面的存储路径),dbproperties()(这个就是记录一些key-value对,用于记录创建人,时间等自定义信息)。

创建完数据库后,我们想看下数据库:

desc database db_name

desc database extended db_name # 更详细

进入数据库/切库:

2) 修改、删除数据库

--修改:ALTER DATABASE database_name SET DBPROPERTIES (property_name=property_value, …);

ALTER DATABASE database_name SET OWNER [USER|ROLE] user_or_role;

ALTER (DATABASE|SCHEMA) database_name SET LOCATION hdfs_path;

--删除:drop database if exists d5_hive_2;--数据库里有表,表里有分区,操作无效drop database if exists d5_hive_2 cascade;

cascade:一对多的时候,删除一的同时删除多,慎用。

3. 表的操作

hive里面的数据结构和MySQL类似的,主要是string, int, bigint, float, double, boolean, date, timestamp。尽量只使用string和int,其他数据类型诸如boolean和date以及timestamp尽量使用string。

hive创建表也是存储在HDFS之上的,数据是文本文件形式储存。所以在hive里面建表需要定义好对文件内容的分隔符。

\n 默认的行分隔符;

^A 默认的列分隔符;

\t 一般建表时指定列分隔符为tab。

1)创建表

CREATE TABLE ruoze_emp (

empno int,

ename string,

job string,

mgr int,

hiredate string,

sal double,

comm double,

deptno int

)

row format delimited fields terminated by ‘\t’ --分隔符;

我们也可以通过命令desc formatted table_name来查看一个表的详细信息。

2)拷贝表

只要表结构不要数据:

要表结构和表数据:

这个过程是要跑mapreduce作业的,所以yarn是要启起来的。

3)修改表

4)导数据

使用load data这中方法从hdfs上面导入文件数据相当于剪切。

4. 内部表和外部表

刚才我们所创建的表都是内部表,什么是内部表呢?就是这个表的整个生命周期都是又hive来管理的,如果你删除这个表的话,那么hdfs上面的数据也将被删除,表对应的hdfs上面的路径也被删除了,MySQL上面的元数据也没了。

而外部表就是只删除MySQL上面的元数据,hdfs上面的路径和数据都还在,所以我们一般在创建外部表的时候也同时会指定一个hdfs数据存储的路径给他,不再使用默认情况。

CREATE EXTERNAL TABLE ruoze_emp_external (

empno int,

ename string,

job string,

mgr int,

hiredate string,

sal double,

comm double,

deptno int

)

row format delimited fields terminated by ‘\t’

location ‘ruoze_emp_external’

;

生产上我们都是使用外部表来存储数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值