hive中的DDL操作以及数据的导入导出

news2025/1/24 6:13:48

文章目录

  • DDL
    • 库操作
    • 表操作
    • 内部表&外部表
    • 分区表
    • 修改表&删除表
  • 数据的导入导出
    • 数据导入
    • 数据导出

DDL

DDL(data definition language),命令有CREATE、ALTER、DROP等。主要用在定义、修改数据库对象的结构或数据类型;

理解
在这里插入图片描述

库操作

  • 创建
    语法
CREATE(DATABASE|SCHEMA) [IF EXISTS] database_name
[COMMENT database_comment]
[LOCATION hdfs_path]
[MANAGEDLOCATION hdfs_path]
[WITH DBPROPERTIES (properti_name=property_value,...)];

注意:
1)Hive有一个默认的数据库default,在操作HQL时,如果不明确指定使用哪个数据库,则使用默认数据库;

2)Hive的数据库名、表名均不区分大小写;

3)名字不能使用数字开头;

4)不能使用关键字,尽量不使用特殊符号;

5)基础命令跟RDBMS创建数据库命令相同,RDBMS不会指定LOCATION的HDFS的存储路径;

6)选项参数【MANAGEDLOCATION】、【WITH DBPROPERTIES】 使用较少;

  • 查看
查看所有数据库
show databases;

查看数据库信息
desc database database_name;
desc database extended database_name;
describe database extended database_name;
  • 使用
use database_name;
  • 删除
删除一个空数据库
drop database database_name;

如果不为空,使用cascade强制删除
drop database database_name cascade;

表操作

  • 语法
create [external] table [IF NOT EXISTS] table_name
[(colName colType [comment 'comment'], ...)]
[comment table_comment]
[partition by (colName colType [comment col_comment], ...)]
[clustered BY (colName, colName, ...)
[sorted by (col_name [ASC|DESC], ...)] into num_buckets
buckets]
[row format row_format]
[stored as file_format]
[LOCATION hdfs_path]
[TBLPROPERTIES (property_name=property_value, ...)]
[AS select_statement];

CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS]
[db_name.]table_name
LIKE existing_table_or_view_name
[LOCATION hdfs_path];
  • 参数说明

create table
按给定名称创建表,如果表已经存在则抛出异常。可使用if not;

external关键字
加上创建的是部表,则创建的是部表(管理表);
删除内部表时,数据和表的定义同时被删除;
删除外部表时,仅仅删除了表的定义,数据保留;

生产环境中,多使用外部表

comment
表的注释;

partition by
对表中数据进行分区,指定表的分区字段;

clustered by
创建分桶表,指定表的分桶字段;

sorted 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是 Serialize/Deserilize 的简称, hive使用Serde进行 行对象的序列与反序列化;

建表时可指定 SerDe 。如果没有指定 ROW FORMAT 或者 ROW FORMAT DELIMITED,将会使用默认的SerDe;

建表时还需要为表指定列,在指定列的同时也会指定自定义的 SerDe。Hive通过 SerDe 确定表的具体的列的数据;

stored as SEQUENCEFILE|TEXTFILE|RCFILE
如果文件数据是纯文本,可以使用 STORED AS TEXTFILE(缺省);
如果数据需要压缩,使用 STORED ASSEQUENCEFILE(二进制序列文件);
SEQUENCEFILE(二进制序列文件)、TEXTFILE(文本)、RCFILE(列式存储格式文件);

LOCATION
定义 hive 表的数据在 hdfs 上的存储路径,一般管理表(内部表不要自定义),但是如果定义的是外部表,则需要直接指定一个路径;

TBLPROPERTIES
定义表的属性;

AS
后面可以接查询语句,表示根据后面的查询结果创建表;

LIKE
like 表名,允许用户复制现有的表结构,但是不复制数据;

内部表&外部表

  • 内部表
创建内部表
create table t1(
    id int,
    name string,
    hobby array<string>,
    addr map<string, string>
)
row format delimited
fields terminated by ";"
collection items terminated by ","
map keys terminated by ":";

显示表的定义,显示的信息较少
desc t1;

显示表的定义,显示的信息多,格式友好
desc formatted t1;

加载数据
load data local inpath '/home/hadoop/data/t1.dat' into table
t1;

查询数据
select * from t1;

查询数据文件
dfs -ls /user/hive/warehouse/mydb.db/t1;

删除表。表和数据同时被删除
drop table t1;
再次查询数据文件,已经被删除
  • 外部表
创建外部表
create external table t2(
    id int,
    name string,
    hobby array<string>,
    addr map<string, string>
)
row format delimited
fields terminated by ";"
collection items terminated by ","
map keys terminated by ":";

显示表的定义
desc formatted t2;

加载数据
load data local inpath '/home/hadoop/data/t1.dat' into table
t2;

查询数据
select * from t2;

删除表。表删除了,目录仍然存在
drop table t2;

再次查询数据文件,仍然存在

使用场景
想保留数据时使用,生产多用外部表;

  • 内部表与外部表的转换
内部表转外部表
alter table t1 set tblproperties('EXTERNAL'='TRUE');

外部表转内部表。EXTERNAL 大写,false 不区分大小
alter table t1 set tblproperties('EXTERNAL'='FALSE');

查询表信息,是否转换成功
desc formatted t1;

分区表

  • 分区原因
    Hive在执行查询时,一般会扫描整个表的数据。由于表的数据量大,全表扫描消耗时间长、效率低;
    有时候,查询只需要扫描表中的一部分数据即可,Hive引入了分区表的概念,将表的数据存储在不同的子目录中,每一个子目录对应一个分区。
    只查询部分分区数据时,可避免全表扫描,提高查询效率;在实际中,通常根据时间、地区等信息进行分区

  • 命令行

创建表
create table if not exists t3(
    id int
    ,name string
    ,hobby array<string>
    ,addr map<String,string>
)
partitioned by (dt string)
row format delimited
fields terminated by ';'
collection items terminated by ','
map keys terminated by ':';

加载数据
load data local inpath "/home/hadoop/data/t1.dat" into table t3
partition(dt="2020-06-01");
load data local inpath "/home/hadoop/data/t1.dat" into table t3
partition(dt="2020-06-02");
//分区字段不是表中已经存在的数据,可以将分区字段看成伪列

查看分区
show partitions t3;

新增分区并设置数据
//增加一个分区,不加载数据
alter table t3 add partition(dt='2020-06-03');
//增加多个分区,不加载数据
alter table t3 add partition(dt='2020-06-05') partition(dt='2020-06-06');
//增加多个分区,拷贝数据
hdfs dfs -cp /user/hive/warehouse/mydb.db/t3/dt=2020-06-01
/user/hive/warehouse/mydb.db/t3/dt=2020-06-07
hdfs dfs -cp /user/hive/warehouse/mydb.db/t3/dt=2020-06-01
/user/hive/warehouse/mydb.db/t3/dt=2020-06-08
//增加多个分区,定位数据路径
alter table t3 add
partition(dt='2020-06-07') location
'/user/hive/warehouse/mydb.db/t3/dt=2020-06-07'
partition(dt='2020-06-08') location
'/user/hive/warehouse/mydb.db/t3/dt=2020-06-08';

修改数据路径
alter table t3 add
partition(dt='2020-06-07') set location
'/user/hive/warehouse/mydb.db/t3/dt=2020-06-08'

删除分区
//可以删除一个或多个分区,用逗号隔开
alter table t3 drop partition(dt='2020-06-03'),
partition(dt='2020-06-04');

修改表&删除表

创建普通表
create table course_common(
    id int,
    name string,
    score int
)
row format delimited fields terminated by "\t";

修改表名-rename
alter table course_common rename to course_common1;

修改列名-change column
alter table course_common1 change column id cid int;

修改字段类型-change column
alter table course_common1 change column cid cid string;
//修改字段数据类型时,要满足数据类型转换的要求。如int可以转为string,但是string不能转为int
The following columns have types incompatible with theexisting columns in their respective positions

增加字段-add columns
alter table course_common1 add columns (common string);
	
删除字段-replace columns
//这里仅仅只是在元数据中删除了字段,并没有改动hdfs上的数据文件
alter table course_common1 replace columns(id string, cname string, score int);

删除表
drop table course_common1;

数据的导入导出

数据导入

  • 装载数据load
    语法:
LOAD DATA [LOCAL] INPATH 'filepath'
[OVERWRITE] INTO TABLE tablename [PARTITION(partcol1 = val1, partcol2 = val2...)]

参数说明
LOCAL
1)LOAD DATA LOCAL…
从本地文件系统加载数据到Hive表中。本地文件会拷贝到Hive表指定的位置;

2)LOAD DATA …
从HDFS加载数据到Hive表中。HDFS文件移动到Hive表指定的位置;

INPATH——加载数据的路径

OVERWRITE——覆盖表中已有数据;否则表示追加数据;

PARTITION——将数据加载到指定分区;

举例
装载数据之前做好准备工作

创建表
CREATE TABLE tabA (
    id int
    ,name string
    ,area string
) 
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' ;

数据文件
(~/data/sourceA.txt):
1,fish1,SZ
2,fish2,SH
3,fish3,HZ
4,fish4,QD
5,fish5,SR

拷贝文件到 HDFS
hdfs dfs -put sourceA.txt data/

装载数据

加载本地文件到hive(tabA)
LOAD DATA LOCAL INPATH '/home/hadoop/data/sourceA.txt' INTO TABLE tabA;
//检查本地文件还在

加载hdfs文件到hive(tabA)
LOAD DATA INPATH 'data/sourceA.txt' INTO TABLE tabA;
//检查HDFS文件,已经被转移

加载数据覆盖表中已有数据
LOAD DATA INPATH 'data/sourceA.txt'
OVERWRITE INTO TABLE tabA;

创建表时加载数据
hdfs dfs -mkdir /user/hive/tabB
hdfs dfs -put sourceA.txt /user/hive/tabB
CREATE TABLE tabB (
    id INT
    ,name string
    ,area string
) 
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
Location '/user/hive/tabB';
  • 插入数据insert
创建分区表
CREATE TABLE tabC (
    id INT
    ,name string
    ,area string
)
partitioned by (month string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';

插入数据
insert into table tabC partition(month='202001') values (5, 'wangwu', 'BJ'), (4, 'lishi', 'SH'), (3,'zhangsan', 'TJ');

插入查询的结果数据
insert into table tabC partition(month='202002') select id, name, area from tabC where month='202001';

多表(多分区)插入模式
from tabC
insert overwrite table tabC partition(month='202003') select id, name, area where month='202002'

insert overwrite table tabC partition(month='202004') select id, name, area where month='202002';
  • 创建表并插入数据 as select
根据查询结果创建表
create table if not exists tabD as select * from tabC;
  • 使用import导入数据
import table student2 partition(month='201709') from '/user/hive/warehouse/export/student';

数据导出

将查询结果导出到本地
insert overwrite local directory '/home/hadoop/data/tabC' select * from tabC;

将查询结果格式化输出到本地
insert overwrite local directory '/home/hadoop/data/tabC2'
row format delimited fields terminated by ' '
select * from tabC;

将查询结果导出到HDFS
insert overwrite directory '/user/hadoop/data/tabC3'
row format delimited fields terminated by ' '
select * from tabC;

dfs 命令导出数据到本地。本质是执行数据文件的拷贝
dfs -get /user/hive/warehouse/mydb.db/tabc/month=202001
/home/hadoop/data/tabC4

hive 命令导出数据到本地。执行查询将查询结果重定向到文件
hive -e "select * from mydb.tabC" > a.log

export 导出数据到HDFS
//使用export导出数据时,不仅有数据还有表的元数据信息
export table tabC to '/user/hadoop/data/tabC4';
//export 导出的数据,可以使用 import 命令导入到 Hive 表中

使用 like tname创建的表结构与原表一致,create ... as select ...结构可能不一致
create table tabE like tabc;
import table tabE from '/user/hadoop/data/tabC4';
//as...select 分区表变成普通表

**截断表,清空数据。(注意:仅能操作内部表)**
truncate table tabE;
//以下语句报错,外部表不能执行 truncate 操作
alter table tabC set tblproperties("EXTERNAL"="TRUE");
truncate table tabC;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/924544.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

在VS中使用格式化工具

在VS中使用格式化工具 官网地址: https://clang.llvm.org/ 最后更新时间&#xff1a;2023.8.25 这里以windows为例&#xff0c;使用的环境为VS。 &#xff08;一&#xff09;下载安装LLVM 下载地址: https://github.com/llvm安装&#xff08;自己选择安装路径&#xff09; &…

浅谈Java中的观察者模式

观察者模式是软件开发中常用的一种设计模式&#xff0c;它通过定义一对多的依赖关系&#xff0c;使得一个对象&#xff08;主题&#xff09;的状态变化可以通知多个其他对象&#xff08;观察者&#xff09;。 这种模式的优点是解耦和增加扩展性&#xff0c;用于实现对象之间的…

mac清理磁盘空间软件有哪些 mac清理磁盘空间怎么清理

随着时间的推移&#xff0c;Mac电脑上的文件会越来越多&#xff0c;很快就会占满磁盘空间。这时候&#xff0c;我们需要一个好的Mac清理磁盘空间软件来释放空间&#xff0c;保持电脑的良好性能。那么&#xff0c;mac清理磁盘空间软件有哪些呢&#xff1f;接下来&#xff0c;我将…

7.Oracle视图创建与使用

1、视图的创建与使用 在所有进行的SQL语句之中&#xff0c;查询是最复杂的操作&#xff0c;而且查询还和具体的开发要求有关&#xff0c;那么在开发过程之中&#xff0c;程序员完成的并不是是和数据库的所有内容&#xff0c;而更多的是应该考虑到程序的设计结构。可以没有一个项…

python 模块BeautifulSoup 从HTML或XML文件中提取数据

一、安装 Beautiful Soup 是一个HTML/XML的解析器&#xff0c;主要的功能也是如何解析和提取 HTML/XML 数据。 lxml 只会局部遍历&#xff0c;而Beautiful Soup 是基于HTML DOM的&#xff0c;会载入整个文档&#xff0c;解析整个DOM树&#xff0c;因此时间和内存开销都会大很多…

spring boot 项目整合 websocket

1.业务背景 负责的项目有一个搜索功能&#xff0c;搜索的范围几乎是全表扫&#xff0c;且数据源类型贼多。目前对搜索的数据量量级未知&#xff0c;但肯定不会太少&#xff0c;不仅需要搜索还得点击下载文件。 关于搜索这块类型 众多&#xff0c;未了避免有个别极大数据源影响整…

阿里云X森马 AIGC T恤设计大赛;SD新手入门完全指南;揭秘LLM训练中的数学;LLM高质量阅读清单 | ShowMeAI日报

&#x1f440;日报&周刊合集 | &#x1f3a1;生产力工具与行业应用大全 | &#x1f9e1; 点赞关注评论拜托啦&#xff01; &#x1f916; 阿里云X森马 | AIGC T 恤设计大赛&#xff0c;函数计算玩转 Stable Diffusion 比赛官网&#xff1a;https://developer.aliyun.com/ad…

火山引擎云调度GTM“同城容灾”与“异地多活”实践

随着企业不断推进数字化进程&#xff0c;高并发业务和海量数据的挑战也随之而来。在现实生活中&#xff0c;除了地震、台风、挖光纤这种小概率事件&#xff0c;还有很多人为造成的高概率数据丢失事件&#xff0c;比如人为操作失误、硬件故障、网络攻击等等&#xff0c;故障容灾…

RISC-V中国峰会 | 256核服务器高调亮相,谁与争锋?

8月23日&#xff0c;第三届RISC-V中国峰会&#xff08;RISC-V Summit China 2023&#xff09;在北京香格里拉饭店正式开幕&#xff0c;来自世界各地的行业精英汇聚一堂&#xff0c;为RISC-V生态系统建言献策&#xff0c;凝心聚力&#xff01; 中国工程院院士倪光南、RISC-V国际…

C++多线程编程——thread线程创建与使用(2W字保姆级介绍)

目录 前言 线程创建 标准库thread&#xff08;同步线程的创建过程&#xff09; 启动线程&#xff1a;实例thread 线程执行单元&#xff08;可调用对象&#xff09; 线程等待 线程传参 线程id 成员方法获取线程id 命名空间获取线程id 让出线程资源 sleep_for() sle…

聊一聊微前端框架的选型和实现 | 业务平台

一、项目背景 目前&#xff0c;我们开发维护的项目主要有 6 个&#xff0c;但是分别对应 PC 和 H5 两个端&#xff1a; 如上图所示&#xff0c;我们 6个项目最开始是一个一个进行开发维护的&#xff0c;但是到后期&#xff0c;这几个项目之间有的部分会有业务逻辑不同&#xff…

docker高级(mysql主从复制)

数据库密码需要设置成自己的&#xff01;&#xff01;&#xff01; 1、创建容器master13307 #docker pulldocker run -p 13307:3306 --name mysql-master \ --privilegedtrue \ -v /mysql/mysql-master/log:/var/log/mysql \ -v /mysql/mysql-master/data:/var/lib/mysql \ -…

centos 下扩容根目录

大体情况&#xff1a; 在VM虚拟机上安装了移动云的BCLinux镜像&#xff0c;磁盘设定为8G&#xff0c;但是用过一段时间之后根目录下磁盘已满&#xff0c;无法创建文件夹等操作&#xff0c;因此在VM上进行了磁盘扩容&#xff0c;扩容之后需要在系统上自行挂载&#xff0c;使用m…

【VsCode】SSH远程连接Linux服务器开发,搭配cpolar内网穿透实现公网访问(1)

文章目录 前言1、安装OpenSSH2、vscode配置ssh3. 局域网测试连接远程服务器4. 公网远程连接4.1 ubuntu安装cpolar内网穿透4.2 创建隧道映射4.3 测试公网远程连接 5. 配置固定TCP端口地址5.1 保留一个固定TCP端口地址5.2 配置固定TCP端口地址5.3 测试固定公网地址远程 前言 远程…

【linux】基本指令(二)【man、echo、cat、cp】

目录 一、man指令二、echo指令三、cat指令二、cp指令一些常见快捷键 一、man指令 Linux的命令有很多参数&#xff0c;我们不可能全记住&#xff0c;可以通过查看联机手册获取帮助。访问Linux手册页的命令是 man 语法: man [选项] 命令 常用选项 1.-k 根据关键字搜索联机帮助 2…

面试题-React(六):React组件和生命周期

一、React组件 React组件简介&#xff1a; React组件是构建用户界面的基本单元。它们将界面拆分成独立、可重用的部分&#xff0c;使得代码更加模块化、可维护性更高。React组件可以是函数组件或类组件&#xff0c;它们接收输入的数据&#xff08;称为props&#xff09;并返回…

ORB-SLAM2算法11之地图点MapPoint

文章目录 0 引言1 MapPoint类1.1 构造函数1.2 成员函数1.2.1 AddObservation1.2.2 EraseObservation1.2.3 SetBadFlag1.2.4 Replace1.2.5 ComputeDistinctiveDescriptors1.2.6 UpdateNormalAndDepth1.2.7 PredictScale 2 MapPoint类用途 0 引言 ORB-SLAM2算法7详细了解了Syste…

Webstorm 入门级玩转uni-app 项目-微信小程序+移动端项目方案

1. Webstorm uni-app语法插件 &#xff1a; Uniapp Support Uniapp Support - IntelliJ IDEs Plugin | Marketplace 第一个是不收费&#xff0c;第二个收费 我选择了第二个Uniapp Support &#xff0c;有试用30天&#xff0c;安装重启webstorm之后&#xff0c;可以提高生产率…

排序链表-归并排序

给你链表的头结点 head &#xff0c;请将其按 升序 排列并返回 排序后的链表 。 示例 1&#xff1a; 输入&#xff1a;head [4,2,1,3] 输出&#xff1a;[1,2,3,4] 示例 2&#xff1a; 输入&#xff1a;head [-1,5,3,4,0] 输出&#xff1a;[-1,0,3,4,5] 示例 3&#xff1a; 输…

vue 展开和收起

效果图 代码块 <div><span v-for"(item,index) in showHandleList" :key"item.index"><span>{{item.emailFrom}}</span></span><span v-if"this.list.length > 4" click"showAll !showAll">{…