Hive常用DDL操作

2023-11-02

一、Database

1.1 查看数据列表

show databases;

1.2 使用数据库

USE database_name;

1.3 新建数据库

语法:

CREATE (DATABASE|SCHEMA) [IF NOT EXISTS] database_name   --DATABASE|SCHEMA 是等价的
  [COMMENT database_comment] --数据库注释
  [LOCATION hdfs_path] --存储在 HDFS 上的位置
  [WITH DBPROPERTIES (property_name=property_value, ...)]; --指定额外属性

示例:

CREATE DATABASE IF NOT EXISTS hive_test
  COMMENT 'hive database for test'
  WITH DBPROPERTIES ('create'='heibaiying');

1.4 查看数据库信息

语法:

DESC DATABASE [EXTENDED] db_name; --EXTENDED 表示是否显示额外属性

示例:

DESC DATABASE  EXTENDED hive_test;

1.5 删除数据库

语法:

DROP (DATABASE|SCHEMA) [IF EXISTS] database_name [RESTRICT|CASCADE];
  • 默认行为是 RESTRICT,如果数据库中存在表则删除失败。要想删除库及其中的表,可以使用 CASCADE 级联删除。

示例:

  DROP DATABASE IF EXISTS hive_test CASCADE;

二、创建表

2.1 建表语法

CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name     --表名
  [(col_name data_type [COMMENT col_comment],
    ... [constraint_specification])]  --列名 列数据类型
  [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
  ]  --分桶表分桶规则
  [SKEWED BY (col_name, col_name, ...) ON ((col_value, col_value, ...), (col_value, col_value, ...), ...)  
   [STORED AS DIRECTORIES] 
  ]  --指定倾斜列和值
  [
   [ROW FORMAT row_format]    
   [STORED AS file_format]
     | STORED BY 'storage.handler.class.name' [WITH SERDEPROPERTIES (...)]  
  ]  -- 指定行分隔符、存储文件格式或采用自定义存储格式
  [LOCATION hdfs_path]  -- 指定表的存储位置
  [TBLPROPERTIES (property_name=property_value, ...)]  --指定表的属性
  [AS select_statement];   --从查询结果创建表

2.2 内部表

  CREATE TABLE emp(
    empno INT,
    ename STRING,
    job STRING,
    mgr INT,
    hiredate TIMESTAMP,
    sal DECIMAL(7,2),
    comm DECIMAL(7,2),
    deptno INT)
    ROW FORMAT DELIMITED FIELDS TERMINATED BY "\t";

2.3 外部表

  CREATE EXTERNAL TABLE emp_external(
    empno INT,
    ename STRING,
    job STRING,
    mgr INT,
    hiredate TIMESTAMP,
    sal DECIMAL(7,2),
    comm DECIMAL(7,2),
    deptno INT)
    ROW FORMAT DELIMITED FIELDS TERMINATED BY "\t"
    LOCATION '/hive/emp_external';

使用 desc format emp_external 命令可以查看表的详细信息如下:

2.4 分区表

  CREATE EXTERNAL TABLE emp_partition(
    empno INT,
    ename STRING,
    job STRING,
    mgr INT,
    hiredate TIMESTAMP,
    sal DECIMAL(7,2),
    comm DECIMAL(7,2)
    )
    PARTITIONED BY (deptno INT)   -- 按照部门编号进行分区
    ROW FORMAT DELIMITED FIELDS TERMINATED BY "\t"
    LOCATION '/hive/emp_partition';

2.5 分桶表

  CREATE EXTERNAL TABLE emp_bucket(
    empno INT,
    ename STRING,
    job STRING,
    mgr INT,
    hiredate TIMESTAMP,
    sal DECIMAL(7,2),
    comm DECIMAL(7,2),
    deptno INT)
    CLUSTERED BY(empno) SORTED BY(empno ASC) INTO 4 BUCKETS  --按照员工编号散列到四个 bucket 中
    ROW FORMAT DELIMITED FIELDS TERMINATED BY "\t"
    LOCATION '/hive/emp_bucket';

2.6 倾斜表

通过指定一个或者多个列经常出现的值(严重偏斜),Hive 会自动将涉及到这些值的数据拆分为单独的文件。在查询时,如果涉及到倾斜值,它就直接从独立文件中获取数据,而不是扫描所有文件,这使得性能得到提升。

  CREATE EXTERNAL TABLE emp_skewed(
    empno INT,
    ename STRING,
    job STRING,
    mgr INT,
    hiredate TIMESTAMP,
    sal DECIMAL(7,2),
    comm DECIMAL(7,2)
    )
    SKEWED BY (empno) ON (66,88,100)  --指定 empno 的倾斜值 66,88,100
    ROW FORMAT DELIMITED FIELDS TERMINATED BY "\t"
    LOCATION '/hive/emp_skewed';   

2.7 临时表

临时表仅对当前 session 可见,临时表的数据将存储在用户的暂存目录中,并在会话结束后删除。如果临时表与永久表表名相同,则对该表名的任何引用都将解析为临时表,而不是永久表。临时表还具有以下两个限制:

  • 不支持分区列;
  • 不支持创建索引。
  CREATE TEMPORARY TABLE emp_temp(
    empno INT,
    ename STRING,
    job STRING,
    mgr INT,
    hiredate TIMESTAMP,
    sal DECIMAL(7,2),
    comm DECIMAL(7,2)
    )
    ROW FORMAT DELIMITED FIELDS TERMINATED BY "\t";

2.8 CTAS创建表

支持从查询语句的结果创建表:

CREATE TABLE emp_copy AS SELECT * FROM emp WHERE deptno='20';

2.9 复制表结构

语法:

CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name  --创建表表名
   LIKE existing_table_or_view_name  --被复制表的表名
   [LOCATION hdfs_path]; --存储位置

示例:

CREATE TEMPORARY EXTERNAL TABLE  IF NOT EXISTS  emp_co  LIKE emp

2.10 加载数据到表

加载数据到表中属于 DML 操作,这里为了方便大家测试,先简单介绍一下加载本地数据到表中:

-- 加载数据到 emp 表中
load data local inpath "/usr/file/emp.txt" into table emp;

其中 emp.txt 的内容如下,你可以直接复制使用,也可以到本仓库的resources 目录下载:

7369	SMITH	CLERK	7902	1980-12-17 00:00:00	800.00		20
7499	ALLEN	SALESMAN	7698	1981-02-20 00:00:00	1600.00	300.00	30
7521	WARD	SALESMAN	7698	1981-02-22 00:00:00	1250.00	500.00	30
7566	JONES	MANAGER	7839	1981-04-02 00:00:00	2975.00		20
7654	MARTIN	SALESMAN	7698	1981-09-28 00:00:00	1250.00	1400.00	30
7698	BLAKE	MANAGER	7839	1981-05-01 00:00:00	2850.00		30
7782	CLARK	MANAGER	7839	1981-06-09 00:00:00	2450.00		10
7788	SCOTT	ANALYST	7566	1987-04-19 00:00:00	1500.00		20
7839	KING	PRESIDENT		1981-11-17 00:00:00	5000.00		10
7844	TURNER	SALESMAN	7698	1981-09-08 00:00:00	1500.00	0.00	30
7876	ADAMS	CLERK	7788	1987-05-23 00:00:00	1100.00		20
7900	JAMES	CLERK	7698	1981-12-03 00:00:00	950.00		30
7902	FORD	ANALYST	7566	1981-12-03 00:00:00	3000.00		20
7934	MILLER	CLERK	7782	1982-01-23 00:00:00	1300.00		10

加载后可查询表中数据:

三、修改表

3.1 重命名表

语法:

ALTER TABLE table_name RENAME TO new_table_name;

示例:

ALTER TABLE emp_temp RENAME TO new_emp; --把 emp_temp 表重命名为 new_emp

3.2 修改列

语法:

ALTER TABLE table_name [PARTITION partition_spec] CHANGE [COLUMN] col_old_name col_new_name column_type
  [COMMENT col_comment] [FIRST|AFTER column_name] [CASCADE|RESTRICT];

示例:

-- 修改字段名和类型
ALTER TABLE emp_temp CHANGE empno empno_new INT;
 
-- 修改字段 sal 的名称 并将其放置到 empno 字段后
ALTER TABLE emp_temp CHANGE sal sal_new decimal(7,2)  AFTER ename;

-- 为字段增加注释
ALTER TABLE emp_temp CHANGE mgr mgr_new INT COMMENT 'this is column mgr';

3.3 新增列

示例:

ALTER TABLE emp_temp ADD COLUMNS (address STRING COMMENT 'home address');

四、清空表/删除表

4.1 清空表

语法:

-- 清空整个表或表指定分区中的数据
TRUNCATE TABLE table_name [PARTITION (partition_column = partition_col_value,  ...)];
  • 目前只有内部表才能执行 TRUNCATE 操作,外部表执行时会抛出异常 Cannot truncate non-managed table XXXX

示例:

TRUNCATE TABLE emp_mgt_ptn PARTITION (deptno=20);

4.2 删除表

语法:

DROP TABLE [IF EXISTS] table_name [PURGE]; 
  • 内部表:不仅会删除表的元数据,同时会删除 HDFS 上的数据;
  • 外部表:只会删除表的元数据,不会删除 HDFS 上的数据;
  • 删除视图引用的表时,不会给出警告(但视图已经无效了,必须由用户删除或重新创建)。

五、其他命令

5.1 Describe

查看数据库:

DESCRIBE|Desc DATABASE [EXTENDED] db_name;  --EXTENDED 是否显示额外属性

查看表:

DESCRIBE|Desc [EXTENDED|FORMATTED] table_name --FORMATTED 以友好的展现方式查看表详情

5.2 Show

1. 查看数据库列表

-- 语法
SHOW (DATABASES|SCHEMAS) [LIKE 'identifier_with_wildcards'];

-- 示例:
SHOW DATABASES like 'hive*';

LIKE 子句允许使用正则表达式进行过滤,但是 SHOW 语句当中的 LIKE 子句只支持 *(通配符)和 |(条件或)两个符号。例如 employeesemp *emp * | * ees,所有这些都将匹配名为 employees 的数据库。

2. 查看表的列表

-- 语法
SHOW TABLES [IN database_name] ['identifier_with_wildcards'];

-- 示例
SHOW TABLES IN default;

3. 查看视图列表

SHOW VIEWS [IN/FROM database_name] [LIKE 'pattern_with_wildcards'];   --仅支持 Hive 2.2.0 +

4. 查看表的分区列表

SHOW PARTITIONS table_name;

5. 查看表/视图的创建语句

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

Hive常用DDL操作 的相关文章

  • Hive 和 PIG/Grunt shell 挂在 cygwin 上

    我在 Windows 7 机器 32 位 上以本地模式运行 Hadoop 我已将 HIVE PIG Hadoop Java6 全部安装在 C 驱动器上 我使用的 Cygwin 版本 2 819 我已将 C 安装在 cygwin 上 我可以从
  • Sqoop Hive 退出,状态为 1

    当我执行时 sqoop import connect jdbc mysql localhost testdb table test hive table test hive import m 1 我收到以下错误消息 13 04 21 16
  • 使用 PIG 从 Hive 表解析嵌套 XML 字符串

    我正在尝试使用 PIG 从 Hive 表中的字段而不是从 XML 文件中提取一些 XML 这是我读过的大多数示例的假设 XML 来自排列如下的表 ID XML string XML 字符串包含 n 行 始终包含最多 10 个属性中的至少一个
  • 更改配置单元中的列类型

    我昨天刚开始学习 hive 我一直致力于更改 hive 中列的类型 我想问列类型的更改是否对它们有某种限制 因为我只能进行特定类型的更改 例如我可以将 int 转换为 double string 转换为 double double 转换为
  • java.lang.RuntimeException:无法实例化 org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient

    我在 ubuntu 14 0 上安装了 Hadoop 2 7 1 和 apache hive 1 2 1 版本 为什么会出现这个错误 是否需要安装任何元存储 当我们在终端上输入 hive 命令时 xml 的内部是如何调用的 这些 xml 的
  • 如何从 hive cli 运行 hive 脚本

    我现在有 hive 脚本 custsales hql 我想从 hive cli 运行它 hive pract5 gt run user training hdfs location custsales hql 但它不执行 请指导 我知道我们
  • 在 HIVE 中选择该月的第一天

    我正在使用 Hive 它与 SQL 类似 但对于 SQL 用户来说语法可能略有不同 我看过其他的stackoverflow 但它们似乎在SQL中具有不同的语法 我试图通过此查询获取该月的第一天 这给了我今天的一天 例如 如果今天是 2015
  • 在hive中如何将字符串转换为数组?

    我使用的是蜂巢1 1 hive gt select country from releases limit 1 OK us ca fr 目前 国家在 hive 中是字符串类型 如何将其转换为数组 String 我尝试了下面的方法 但它抛出错
  • Hive 安装问题:Hive Metastore 数据库未初始化

    我尝试在树莓派 2 上安装 Hive 我通过解压缩压缩的 Hive 包安装 Hive 并在我创建的 hduser 用户组下手动配置 HADOOP HOME 和 HIVE HOME 运行 hive 时 出现以下错误消息 蜂巢 错误 Statu
  • Apache Hive regEx serde:数据类型

    对于处理日志 我想使用 Apache Hive regEx serde 但我只找到使用 String 作为表列的数据类型的示例 现在我的问题是 是否支持基于日期的类型 整数和数组 还是只是字符串 此示例 和其他示例 仅使用字符串 CREAT
  • 将 Hive 表导出到 hdfs 中的 csv

    我知道在 Hive 中将表保存到 csv 或其他文本文件 时 分隔符存在一个已知问题 所以我想知道你们是否可以帮助我解决这个问题 我有一个现有的表 表 A 我想将其以 csv 格式保存到 hdfs 通过阅读其他回复 我相信我必须首先创建一个
  • Hive Full Outer Join为相同的Join Key返回多行

    我正在对同一列上的 4 个表进行完全外连接 我想为连接列中的每个不同值仅生成 1 行 输入是 employee1 employee1 personid employee1 name 111 aaa 222 bbb 333 ccc
  • 如何获取hive中的数据库用户名和密码

    正在编写jdbc程序来连接hive数据库 我希望在连接 url 中提供用户名和密码 我不知道如何使用 hive QL 获取用户名和密码 有人可以帮我吗 Exception in thread main java sql SQLNonTran
  • Hive:转换“yyyy-MM-dd'T'HH:mm:ss.SSS'Z'”中缺少秒数的字符串日期时间

    我使用以下代码将字符串日期时间变量转换为日期时间 但转换后的字符串缺少 SSS 部分 使用的代码 cast FROM UNIXTIME UNIX TIMESTAMP oldtime yyyy MM dd T HH mm ss SSS Z y
  • Hive如何存储数据,什么是SerDe?

    当查询表时 SerDe 将将文件中的字节中的一行数据反序列化为 Hive 内部使用的对象来操作该行数据 执行 INSERT 或 CTAS 时 请参阅第 441 页上的 导入数据 表的 SerDe 将将 Hive 的一行数据的内部表示序列化为
  • 使用 python 从 hive 读取数据时的性能问题

    我在 hive 中有一个表 其中包含 351 837 110 MB 大小 记录 我正在使用 python 读取该表并写入 sql server 在此过程中 从 hive 读取数据到 pandas dataframe 需要很长时间 当我加载整
  • hive 从两个数组创建映射或键/值对

    我有两个具有相同数量值的数组 它们映射为 1 1 我需要从这两个数组创建一个键 值对或映射 键 值 任何想法或提示都会有帮助 当前表结构 USA WEST NUMBER Street City 135 Pacific Irvine USA
  • 当从 HDFS 手动删除分区数据时,如何更新 Hive 中的分区元数据

    自动更新Hive分区表元数据的方法是什么 如果新的分区数据被添加到HDFS 不执行alter table添加分区命令 然后我们可以通过执行命令 msck Repair 来同步元数据 如果从HDFS中删除了大量分区数据 没有执行alter t
  • 为 Presto 和 AWS S3 设置独立 Hive Metastore 服务

    我工作的环境中使用 S3 服务作为数据湖 但没有 AWS Athena 我正在尝试设置 Presto 以便能够查询 S3 中的数据 并且我知道我需要通过 Hive Metastore 服务将数据结构定义为 Hive 表 我正在 Docker
  • 计算 pyspark df 列中子字符串列表的出现次数

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

随机推荐

  • PHP[多维数组转字符串]和{多维数组转一维数组}

    http blog csdn net aoyoo111 article details 8554585 php view plain copy print method 多维数组转字符串 param type array return ty
  • 基于Echarts4.0实现旭日图

    昨天Echarts4 0正式发布 随着4 0而来的是一系列的更新 挑几个主要的简单说明 1 展示方面通过增量渲染技术 4 0 ECharts 能够展现千万级的数据量 2 针对移动端优化 移动端小屏上适于用手指在坐标系中进行缩放 平移 可选的
  • 探索AIDL(1) -- 初识AIDL

    探索AIDL 1 初识AIDL 前言 1 在讨论这个问题之前必须先理解IPC的概念 IPC全称是Inner Process Communication 即跨进程通信 是指两个进程进行数据交换的过程 2 如果要传递对象必须先进行序列化 序列化
  • RV1126 SDK编译错误及解决记录

    RV1126 SDK编译错误及解决记录 1 错误 you need to install unbuffer from package expect or expect dev log saved on home h00003 RV1126
  • Win11怎么设置开机启动项?

    我们在使用电脑的时候经常会打开非常多的软件 而每次开机都需要手动去点击 就会变得非常的麻烦 那么在Win11操作系统中我们应该怎么设置呢 其实方法非常简单 下面小编就带着大家一起看看吧 操作方法 方法一 1 首先 按键盘上的 Win 键 或
  • 关于线索二叉树的详解

    线索二叉树的详解 目录 线索二叉树的详解 前言 一 线索二叉树是什么 三种二叉树线索化实例图 二 实现线索二叉树 1 二叉树的线索化 2 线索二叉树的遍历 中序线索二叉树寻找遍历的首节点 中序线索二叉树寻找节点的直接后继 遍历中序线索二叉树
  • 【国仁网络资讯】个人如何快速学会制作短视频的方法技巧

    对于微信视频号运营中 个人创作者们了解到视频号的一般设置选项 以及选择完毕视频号的创作领域方向之后 那就需要创作出短视频出来 就好比我们写文章需要有作品才可以 如果我们有创作能力的 那可以根据我们标准的风格 以及创作标准元素创作和分享就可以
  • python 读取图片 图片预处理 二值化

    python 读取图片 图片预处理 二值化 需求 毕设项目 需要从文件夹中批量读取文件 并将图片二值化处理 def preprocessing image directory in name directory out name 准备储存之
  • Firefox 中文语言包安装方法

    一 自动安装法 在mozilla的FTP上找到的 http ftp mozilla org 选择版本和对应操作系统http releases mozilla org pub mozilla org firefox releases 语言包在
  • dd命令使用详解

    1 命令简介 dd 的主要选项 指定数字的地方若以下列字符结尾乘以相应的数字 b 512 c 1 k 1024 w 2 xm number m if file 输入文件名 缺省为标准输入 of file 输出文件名 缺省为标准输出 ibs
  • HTML <rt> 标签

    实例 一个 ruby 注释
  • Verilog学习笔记——有符号数的乘法和加法

    有符号数的计算在 Verilog 中是一个很重要的问题 也很容易会被忽视 在使用 Verilog 语言编写 FIR 滤波器时 需要涉及到有符号数的加法和乘法 在之前的程序中我把所有的输入输出和中间信号都定义成有符号数 这样在计算时没有出现问
  • JS实现抽奖效果

    这种效果很常见 所以对我们前段开发者来说是基本功 必须掌握 页面布局 实现思路如图 一条流水线的思路 代码也很简单啦 部分 div div
  • 清华大数据,365天我们持续在发声——数据院四周年系列报道之传播篇

    2014年 宏大的时代又催生了一个弱小的组织 清华大学数据科学研究院 这个 初来乍到 的非实体机构 在清华大学官网首页院系设置的树状图上我找不到她的 身影 平心而论 技术进步这么快 校内类似的机构有很多 如果都放上去 那将是一棵枝叶茂密的参
  • AttributeError: ‘Axes‘ object has no property ‘axisbg‘

    在使用python画图的时候报了这些错 说明axibg这个属性已经被取消了 定位报错的axibg 将其改为fc就可以了 正确的如下
  • muduo网络库浅谈(一)

    muduo网络库浅谈 一 序言 第一章 muduo的关键结构 class EventLoop class Channel class Poller 番外 定时任务 class Timestamp class Timer class Time
  • Java 处理图片-压缩本地图片及远程图片,按照BASE64格式输出

    Java 处理图片 压缩本地图片及远程图片 按照BASE64格式输出 很久没有写博客了 不是我颓废了 而是实在是太忙了 抽不出时间也抽不出经历写东西了 幸亏项目已经落地 没有那么的忙了 记录一下 最近在做导出 发现很多时候导出的图片太大了
  • 简单聊聊Echarts伪3D地图实现的相关配置

    知识和技能真的是用进废退 还是得多实践 才不至于遗忘 目录 前言 二 实现原理 三 从0开始实现 1 目录结构 2 地图JSON数据获取 3 具体实现 重头戏 3 一些常见问题的解决方法 总结 前言 本文简单来聊一聊Echarts伪3D地图
  • 网管联盟

    http wglm net
  • Hive常用DDL操作

    一 Database 1 1 查看数据列表 show databases 1 2 使用数据库 USE database name 1 3 新建数据库 语法 CREATE DATABASE SCHEMA IF NOT EXISTS datab