Hive中的DDL操作

2023-05-16

参考文章:https://www.cnblogs.com/qingyunzong/p/8723271.html

官方文档:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-CreateTableCreate/Drop/TruncateTable

首先引入什么是DDL、DML、DCL:

DDL(data manipulation language)

它们是SELECT、UPDATE、INSERT、DELETE,就象它的名字一样,这4条命令是用来对数据库里的数据进行操作的语言。

DML(data definition language)

DDL比DML要多,主要的命令有CREATE、ALTER、DROP等,DDL主要是用在定义或改变表(TABLE)的结构,数据类型,表之间的链接和约束等初始化工作上,它们大多在建立表时使用。

DCL

(Data Control Language)

是数据库控制功能。是用来设置或更改数据库用户或角色权限的语句,包括(grant,deny,revoke等)语句。在默认状态下,只有sysadmin,dbcreator,db_owner或db_securityadmin等人员才有权力执行DCL。

一、库操作

1、创建库

语法结构:

CREATE (DATABASE|SCHEMA) [IF NOT EXISTS] database_name

  [COMMENT database_comment]      //关于数据块的描述

  [LOCATION hdfs_path]          //指定数据库在HDFS上的存储位置

  [WITH DBPROPERTIES (property_name=property_value, ...)];    //指定数据块属性

创建库的方式:

(1)创建普通的数据库

> create database db_name;

> show databases;                //可看到库已建好

(2)创建库的时候检查存与否

> create database if not exists db_name;

(3)创建库的时候带注释

> create database if not exists db_name comment '表名';

> desc database db_name                //查看数据库的基本信息

(4)创建带属性的库

> create database if not exists db_name with dbproperties(creator='Mark_Frank', date=2021-07-15');

2、查看库

查看库的方式:

(1)查看有哪些数据库

> show databases;

(2)显示数据库的详细属性信息

> desc database [extended] db_name;

例:desc database extended t3;

(3)查看正在使用哪个库

> select current_database();

(4)查看创建库的详细语句

> show create database db_name;

3、删除库

说明:

删除库操作:

> drop database db_name;

> drop database if not exists db_name;

默认情况下,hive不允许删除包含表的数据库,两种解决方法:

1、手动删除库下所有表,然后删除库

2、使用cascade关键字

> drop database if not exists db_name cascade;

默认情况下就是 restrict drop database if exists myhive,强制删除。

示例:

(1)删除不含表的数据库

> show tables in db_name;

> drop database db_name;

> show databases;

(2)删除含有表的数据库

> drop database if exists db_name cascade;            //注意:exists后面为数据库名

> show databases;

4、切换库

语法:

> use db_name;

二、表操作:

1、创建表

语法:

create [external] table [if not exists] table_name

  [(col_name data_type [comment col_comment], ...)]

  [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]

  [row format row_format]

  [stored as file_format]

  [location hdfs_path]

  • CREATE TABLE 创建一个指定名字的表。如果相同名字的表已经存在,则抛出异常;用户可以用 IF NOT EXIST 选项来忽略这个异常。
  • EXTERNAL 关键字可以让用户创建一个外部表,在建表的同时指定一个指向实际数据的路径(LOCATION)。
  • LIKE 允许用户复制现有的表结构,但是不复制数据。
  • COMMENT 可以为表与字段增加描述。
  • PARTITIONED 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 或者使用自带的 SerDe。如果没有指定 ROW FORMAT 或者 ROW FORMAT DELIMITED,将会使用自带的 SerDe。在建表的时候,用户还需要为表指定列,用户在指定表的列的同时也会指定自定义的 SerDe,Hive 通过 SerDe 确定表的具体的列的数据。 

  • STORED AS   

        SEQUENCEFILE         //序列化文件  

        | TEXTFILE                  //普通的文本文件格式  

        | RCFILE                //行列存储相结合的文件  

        | INPUTFORMAT input_format_classname OUTPUTFORMAT output_format_classname //自定义文件格式  

        如果文件数据是纯文本,可以使用 STORED AS TEXTFILE。如果数据需要压缩,使用 STORED AS SEQUENCE 。

  • LOCATION 指定表在HDFS的存储路径,如果不指定,则按照默认的规则存储在磨人的仓库路径中。

如果一份数据已经存储在HDFS上,且要被多个用户或者客户端使用,最好创建外部表,反之,最好创建内部表。

示例:

(1)创建默认的内部表

> create table student(id int, name string, sex string, age int,department string) row format delimited fields terminated by ",";

> desc student;

 (2)外部表

> create external table student_ext (id int, name string, sex string, age int, department string) row format delimited fields terminated by "," location "/hive/student";

(3)分区表

> create external table student_ptn(id int, name string, sex string, age int, department string)

> partitioned by (city string)

> row format delimited fields terminated by ","

> location "/hive/student_ptn";

添加分区:

> alter table student_ptn add partition(city="beijing");

> alter table student_ptn add partition(city="shenzhen");

如果某张表是分区表,则每个分区的定义其实就表现为这张表的数据存储目录下的一个子目录;分区表的数据文件一定要存储在某个分区中,而不能直接存储在表中。

(4)分桶表

> create external table student_bck(id int, name string, sex string, age int, department string)

> clustered by (id) sorted by (id asc, name desc) into 4 buckets

> row format delimited fields terminated by ","

> location "/hive/student_bck";

(5)使用CTAS创建表

首先,在student表中导入数据:

> load data local inpath "/home/hadoop/student.txt" into table student;

然后,使用CTAS创建表(将一个查询SQL的结果创建一个表进行存储):

> create table student_ctas as select * from student where id<95012;

(6)复制表结构

> create table student_copy like student;

注意:如果在table的前面没有加external关键字,那么复制出来的新表,无论如何都是内部表;如果在table的前面加了external关键字,那么复制出来的新表,无论如何都是外部表。

2、查看表

查看表列表:

(1)查看当前使用的数据库中有哪些表

> show tables;

(2)查看非当前使用的数据库中有哪些表

> show tables in myhive;      //myhive为其他数据库

(3)查看数据库中以xxx开头的表

> show tables like 'student_c*';

查看表的信息:

(1)简略信息

> desc student;

(2)详细信息(格式不友好):

> desc extended student;  

(3)详细信息(格式友好):

> desc formatted student; 

查看表的分区信息:

> show partitions student_ptn;

查看表的详细建表语句:

> show create table student_ptn;

3、修改表

修改表名:

> alter table student rename to new_student;

> show table;

修改字段定义:

(1)增加一个字段

> alter table new_student add columns (score int);

> desc new_student;

(2)删除一个字段

不支持删除字段。

(3)替换所有字段

> alter table new_student replace columns (id int, name string, address string);

添加分区:

  • 静态分区

> alter table student_ptn add partition(city="weihai");                //添加一个

> alter table student_ptn add partition(city="beijing") paertition(city="shanghai") partition(city="kunming");                //添加多个

  • 动态分区

先向student_ptn中插入数据:

> load data local inpath "/home/hadoop/student.txt" into table student_ptn partition(city="beijing");

再把这张表直接插入到另一张表student_ptn_age中,并实现sex为动态分区(不指定到底是哪种性别,让系统自己分配决定)。

首先创建student_ptn_age并指定分区为age:

> create table student_ptn_age (id int, name string, sex string, department string) partitioned by (age int);

从student_ptn表中查询数据并插入到student_ptn_age表中:

> insert overwrite table student_ptn_age partition(age)

select id, name, sex, department, age from student_ptn;

修改分区:

修改分区常指修改分区的数据存储目录。

在添加分区时直接指定:

> alter table student_ptn add if not exists partition(city="beijing")

location "/student_ptn_beijing" partition(city="cc") location "/student_cc";

 修改已经指定好的分区的数据存储目录:

> alter table student_ptn partition (city="beijing") set location "/student_ptn_beijing";

此时原先的分区文件夹仍然存在,只是再往分区添加数据时,只会添加到新的分区目录。

删除分区:

> alter table student_ptn drop partition (city='beijing');

> show partitions student_ptn;        //可看到分区已删除

4、删除表

> drop table new_student;

> show tables;               //可看到表已删除

5、清空表

> truncate table student_ptn;

总结:

查看数据库列表

show database;

show database like 'stu*';

查看数据表

show tables;

show tables in db_name;

查看数据表的建表语句show create table table_name;
查看hive函数列表show functions;
查看hive表的分区

show partitions table table_name;

show partitions table table_name partition(city='beijing');

查看表的详细信息(元数据信息)

desc table_name;

desc extended table_name;

desc formatted table_name;

查看数据库的详细属性信息

desc database db_name;

desc database extended db_name;

清空数据表truncate table table_name;

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Hive中的DDL操作 的相关文章

  • 如何在 Hadoop Hive 中获取给定时间戳的一周第一天的日期?

    除了编写自定义 UDF 来支持此问题之外 是否还有任何已知的方法可以实现此目的 我目前使用的是 Hive 0 13 从 Hive 1 2 开始 你还可以这样做 select next day date sub 2019 01 01 7 MO
  • ClassNotFoundException:org.apache.spark.SparkConf 与配置单元上的 Spark

    我正在尝试使用 SPARK 作为配置单元执行引擎 但出现以下错误 Spark 1 5 0 已安装 我正在使用 Hive 1 1 0 版本和 Hadoop 2 7 0 版本 hive emp表在 hive 中创建为 ORC 格式表 hive
  • Oracle:DDL 和事务回滚

    Oracle DDL 创建 更改 是否可以像 MS SQL 中那样具有事务性 从 2005 年开始 DDL 在 Oracle 中不是事务性的 来自11 2 doc http docs oracle com cd E25054 01 serv
  • Hive 左外连接长期运行

    Hortonworks HDP 2 3 0 Hive 0 14 Table T1 partition on col1 no bucket ORC 应用程序 1 2 亿行和 6GB 数据大小Table T2 partition on col2
  • 在hive中如何将字符串转换为数组?

    我使用的是蜂巢1 1 hive gt select country from releases limit 1 OK us ca fr 目前 国家在 hive 中是字符串类型 如何将其转换为数组 String 我尝试了下面的方法 但它抛出错
  • 如何使用用户提供的 Hadoop 正确配置 Spark 2.4

    我想使用 Spark 2 4 5 当前稳定的 Spark 版本 和 Hadoop 2 10 2 x 系列中当前稳定的 Hadoop 版本 此外 我需要访问 HDFS Hive S3 和 Kafka http spark apache org
  • 从hive中的子查询中获取值

    我试图参数化配置单元中的值 而不是在查询中对其进行硬编码 下面是查询 select from employee where sal gt 30000 但我不需要使用硬编码的 30000 值 而是需要来自相同的查询 如下所示 但我遇到了问题
  • 如何通过Spark Thrift Server访问自定义UDF?

    我正在 EMR 上运行 Spark Thrift 服务器 我通过以下方式启动 Spark Thrift 服务器 sudo u spark usr lib spark sbin start thriftserver sh queue inte
  • HIVE JDBC ThriftHive$Client.sendBase

    我在 Hadoop hive 上工作 我已经安装了 hadoop 和 hive 它在命令提示符下运行良好 我还创建了 hive 的 MySQL 元存储 我在 hive site xml 文件中定义了 HIVE DB 数据库名称 MySQL
  • 如果没有可用的指定分区路径,SPARK SQL 会失败

    我在 EMR 中使用 Hive Metastore 我可以通过 HiveSQL 手动查询表 但是当我在 Spark Job 中使用同一个表时 它说输入路径不存在 s3 导致 org apache hadoop mapred InvalidI
  • 如何获取hive中的数据库用户名和密码

    正在编写jdbc程序来连接hive数据库 我希望在连接 url 中提供用户名和密码 我不知道如何使用 hive QL 获取用户名和密码 有人可以帮我吗 Exception in thread main java sql SQLNonTran
  • 在 Hive 中分解一行 XML 数据

    我们将 XML 数据作为名为 XML 的单个字符串列加载到 Hadoop 中 我们正在尝试检索数据级别 并将其标准化或分解为单行进行处理 你知道 就像表格一样 已经尝试过分解功能 但没有得到我们想要的 示例 XML
  • Hive 中 Sortby 和 orderby 查询的区别

    Hive sort by and order by命令用于按排序顺序获取数据 例如 Sort by hive gt SELECT E EMP ID FROM Employee E SORT BY E empid Order by hive
  • 使用 python 从 hive 读取数据时的性能问题

    我在 hive 中有一个表 其中包含 351 837 110 MB 大小 记录 我正在使用 python 读取该表并写入 sql server 在此过程中 从 hive 读取数据到 pandas dataframe 需要很长时间 当我加载整
  • Spark 上的 Hive 2.1.1 - 我应该使用哪个版本的 Spark

    我在跑蜂巢2 1 1 Ubuntu 16 04 上的 hadoop 2 7 3 根据Hive on Spark 入门 https cwiki apache org confluence display Hive Hive on Spark
  • Hadoop:读取ORC文件并放入RDBMS中?

    我有一个以 ORC 文件格式存储的配置单元表 我想将数据导出到 Teradata 数据库 我研究了 sqoop 但找不到导出 ORC 文件的方法 有没有办法让 sqoop 为 ORC 工作 或者有什么其他工具可以用来导出数据 Thanks
  • 将日期字符串转换为“MM/DD/YY”格式

    我刚刚看到这个例子 我该如何解决这个问题 Hive 元存储包含一个名为 Problem1 的数据库 其中包含一个名为 customer 的表 customer 表包含 9000 万条客户记录 90 000 000 每条记录都有一个生日字段
  • 在 Hive 中获取数据的交集

    我在配置单元中有以下数据 userid cityid 1 15 2 15 1 7 3 15 2 8 3 9 3 7 我只想保留具有 cityid 15 和 cityid 7 的用户 ID 在我的示例中 它将是用户 ID 1 和 3 我试过
  • 计算 pyspark df 列中子字符串列表的出现次数

    我想计算子字符串列表的出现次数 并根据 pyspark df 中包含长字符串的列创建一个列 Input ID History 1 USA UK IND DEN MAL SWE AUS 2 USA UK PAK NOR 3 NOR NZE 4
  • hive sql查找最新记录

    该表是 create table test id string name string age string modified string 像这样的数据 id name age modifed 1 a 10 2011 11 11 11 1

随机推荐

  • 曼孚科技:7种常用的数据标注工具

    工欲善其事 xff0c 必先利其器 标注工具是数据标注行业的基础 xff0c 一款好用的标注工具是提升标注效率与产出高质量标注数据的关键 常用的数据标注工具主要有以下几种 xff1a 2D框 语义分割 多边形分割 点标注 线标注 视频标注
  • python14(绘图工具matplotlib和echart)

    1 matplotlib 1 绘制折线图 1 温度变化折线图 需求1 绘制10点到12点每分钟的气温 xff0c 如何绘制折线图观察每分钟气温的变化情况 temps 61 random randint 20 35 for i in rang
  • Ubuntu下安装TeamViewer[命令行方式]

    第一步 下载 安装包 从官网下载ubuntu的deb安装包 下载链接 xff1a https downloadus1 teamviewer com download version 12x teamviewer 12 0 71510 i38
  • 树莓派4安装Ubuntu20.04

    1 下载Ubuntu20 04 https ubuntu com download raspberry pi 2 下载image工具 https www raspberrypi org downloads 3 写入镜像 4 安装完成之后 x
  • encoder 基于品高云数据湖的大数据开发实践课程(随手记)-HDFS 的基本操作和 Java API 操作

    文章目录 61 61 1 使用FSDataInputStream获取HDFS的 user hadoop 目录下的task txt的文件内容 xff0c 并输出 xff0c 其中uri为hdfs localhost 9000 user had
  • navicat连接数据库(MySQL)报错1251解决。以及可能报错1045解决

    怀玉 点个关注 xff0c 必回关 话不多说线上结果 图 xff1a 问题说明 xff1a 报错1251是因为root用户密码没有设置或者密码错误 xff0c 我们要做的就是修改或者更新root用户密码 步骤图奉上 xff1a 连接MySQ
  • pvs Error reading device /dev/xxx at 0 length 512.

    背景 xff1a ceph osd 服务器磁盘坏掉 xff0c 将坏掉的 osd 从集群中踢出后 xff0c pvs 报错 系统 centos7 xff0c ceph luminous 1 查看错误信息 root 64 cmp15 pvs
  • 用word发CSDN blog,免去插图片的烦恼

    用csdn自带的网页编辑器 xff0c 最不方便的 xff0c 不是排版 xff0c 而是图片的发布 xff0c 希望能通过下面这个方式得到改善 1 注册博客账号 1 1 打开一个新的Word文档 如果之前没有用过博客功能的话 xff0c
  • openstack如何支持vlan trunk功能

    大多数场景下 xff0c 主机收发的是不带tag的报文 xff0c 但是在实际环境中 xff0c 无论是windows还是Linux环境都通过各自的方法可以收发带有vlan tag的报文 而一个虚机要想接收不同vlan tag的报文 xff
  • 在vscode中调试webpack

    前言 接手了公司的新项目 xff0c 但是由于对整个运作流程不了解 xff0c 想要一步步进行调试加深对项目印象 xff0c 所以搜索了相关资料 xff0c 结合自己实际情况进行调试 调试的两个关键文件 package json 正常的pa
  • AD和DA转换-第1季第16部分-朱有鹏-专题视频课程

    AD和DA转换 第1季第16部分 2091人已学习 课程介绍 本课程是 朱有鹏老师单片机完全学习系列课程 第1季第16个课程 xff0c 主要讲解AD转换和DA转换 目标是理解模拟量和数字量的概念 xff0c 并且学会使用AD转换来采集现实
  • vnc viewer登陆问题

    这里操作的前提是已经 安装了vnc server 登陆SUN 210 server xff0c solaris 10 采用VNC viewer 但是并不是每次登陆都成功 开始总是不成功 采用以下两条命令 xff1a vncserver ki
  • 光谱分布、光谱辐射通量密度与不同时间段分布光谱(图示)

    1 光谱分布图 2 太阳辐射能量图 3 不同时间段的太阳分布光谱图 4 不同波长的光的能量分布主要区域 5 不同波段的使用场景
  • 电磁波波谱及不同波长成像图

    1 电磁辐射波 实际的图像处理应用中 xff0c 最主要的图像来源于电磁 辐射成像 电磁辐射波包括无线电波 微波 红外线 可见光 紫外线 X射线 射线 电磁辐射波的波谱范围很广 xff0c 波长最长的是无线电波 为3 102m xff0c
  • 写给VR手游开发小白的教程:(四)补充篇,详细介绍Unity中相机的投影矩阵

    这篇作为上一篇的补充介绍 xff0c 主要讲Unity里面的投影矩阵的问题 xff1a 上篇的链接写给VR手游开发小白的教程 xff1a xff08 三 xff09 UnityVR插件CardboardSDKForUnity解析 xff08
  • 阿里云centos修改ssh端口后连接失败

    话说本人虽然工作多年 xff0c 一直是linux小白一个 xff0c 估计像我这样的也是没谁了 每次面试的时候面试官一问是否会linux xff0c 都老脸一红啊 为了解决这种情况 xff0c 自己去阿里云买了一台centos的服务器 x
  • linux进程调度方法(SCHED_OTHER,SCHED_FIFO,SCHED_RR)

    linux内核的三种调度方法 xff1a 1 xff0c SCHED OTHER 分时调度策略 xff0c 2 xff0c SCHED FIFO实时调度策略 xff0c 先到先服务 3 xff0c SCHED RR实时调度策略 xff0c
  • 12- 降维算法 (PCA降维/LDA分类/NMF) (数据处理)

    数据降维就是一种对高维度特征数据预处理方法 降维是将高维度的数据保留下最重要的一些特征 xff0c 去除噪声和不重要的特征 xff0c 从而实现提升数据处理速度的目的 PCA算法有两种实现方法 xff1a 基于特征值分解协方差矩阵实现PCA
  • 软件体系整理5-6章

    第五章 软件体系结构风格 1 管道过滤器风格 特征 xff1a xff08 1 xff09 构件即过滤器 xff08 Filter xff09 xff0c 对输入流进行处理 转换 xff0c 处理后的结果在输出端流出 而且 xff0c 这种
  • Hive中的DDL操作

    参考文章 xff1a https www cnblogs com qingyunzong p 8723271 html 官方文档 xff1a https cwiki apache org confluence display Hive La