当前位置: 首页 > article >正文

Hive数仓操作(三)

一、Hive 数据库操作

1. 创建数据库
  • 基本创建数据库命令
CREATE DATABASE bigdata;
  • 说明

    • 数据库会在 HDFS 中以目录的形式创建和保存,数据库名称会存储在 Hive 的元数据中。
    • 如果不指定目录,数据库将在 /user/hive/warehouse 下创建。
  • 手动指定目录(了解)

CREATE DATABASE IF NOT EXISTS db_test LOCATION '/test';
  • 说明
    • 使用 IF NOT EXISTS 可以避免因数据库已存在而导致的错误。
    • LOCATION 用于指定数据库在 HDFS 中的存储位置。
2. 查看所有数据库
  • 查看数据库命令
SHOW DATABASES;
  • 说明
    • 该命令将列出所有已创建的数据库名称。
3. 切换数据库
  • 切换到指定数据库
USE bigdata;
  • 说明
    • 切换当前会话的数据库,以后执行的查询和操作将在该数据库中进行。
4. 删除数据库
  • 删除数据库命令
DROP DATABASE database_name;
  • 说明

    • 该命令将删除指定的数据库。如果数据库中存在表,默认情况下会报错。
  • 强制删除数据库

DROP DATABASE database_name CASCADE;
  • 说明

    • 使用 CASCADE 关键字可以强制递归删除,允许删除包含表的数据库。
  • 安全删除,如果数据库存在

DROP DATABASE IF EXISTS database_name CASCADE;
  • 说明
    • IF EXISTS 关键字用于避免因数据库不存在而导致的错误。

5. 显示数据库信息

  • 显示数据库信息
DESC DATABASE bigdata;
  • 说明
    • 该命令将显示指定数据库的详细信息,包括数据库的名称、位置、创建时间等。

二、Hive 创建内部表

Hive 表的类型

在 Hive 中,有多种类型的表,主要包括:

  1. 内部表(Managed Table)

    • 默认的表类型。创建时,Hive 会在默认的 warehouse 目录中创建一个以表名命名的目录,并将数据存储在该目录下。
    • 当删除内部表时,表结构和数据都将被删除。
  2. 外部表(External Table)

    • 创建时,Hive 不会管理数据的存储位置。数据可以存储在 HDFS 中的任何位置。
    • 删除外部表时,只删除表结构,而不会删除数据。
  3. 分区表(Partitioned Table)

    • 将表的数据根据某个列的值进行分区,从而提高查询效率。
    • 每个分区对应一个子目录。
  4. 分桶表(Bucketed Table)

    • 将数据分成多个桶(文件),并可以在查询时提高性能。
    • 通常与分区表结合使用。

创建内部表的步骤

在 Hive 中创建一个表通常遵循以下步骤:

  1. 准备数据文件

    • 数据文件可以在 Linux 文件系统或 HDFS 中存在。
  2. 创建表

    • 表的结构需要与数据文件的格式相对应。
  3. 加载数据

    • 使用 LOAD DATA 命令将数据导入表中。

创建表的语法结构

创建表的基本语法如下:

CREATE TABLE 表名 (
    列名1 类型,
    列名2 类型,
    ...
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '分隔符';

示例:创建一个学生表(hive的stu数据库)

stu 数据库创建:

CREATE DATABASE IF NOT EXISTS stu;

插入数据之前,需要切换到 stu 数据库:

USE stu;

创建一个学生表:

CREATE TABLE stu (
    id INT,
    name STRING,
    age INT
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ',';
  • 说明
    • ROW FORMAT DELIMITED 指定了行的格式。
    • FIELDS TERMINATED BY ',' 指定了列之间的分隔符为逗号。

从 HDFS 导入数据

假设本地 Linux 文件系统有一个文件 /opt/datas/stu.txt,可以使用 hadoop fs -put 命令将其上传到 HDFS。

hadoop fs -put /opt/datas/stu.txt /datas/

然后将数据从 HDFS 导入到表中:

LOAD DATA INPATH '/datas/stu.txt' INTO TABLE stu;

OVERWRITE

  • 语法
    LOAD DATA INPATH '/datas/stu.txt' OVERWRITE INTO TABLE stu;
    
    • 如果表 stu 已经存在数据,执行该命令后,表中的所有现有数据将被删除,并用新的数据替换。
    • 这意味着结果表只会包含新加载的 stu.txt 文件中的数据。

从本地Linux导入数据

将数据从本地文件系统导入到表中:

LOAD DATA LOCAL INPATH '/opt/datas/stu.txt' INTO TABLE stu;

查询表的数据

查询表中的数据:

SELECT * FROM stu;

注意事项

  • 当你创建 stu 表并加载数据后,HDFS 的 warehouse 目录下会生成一个名为 stu 的子目录,存储了表的数据文件。
  • /user/hive/warehouse/stu.db/stu该目录通常包含多个小文件(如从hdfs目录/datas移动而来的文件/datas/stu.txt变成 /user/hive/warehouse/stu.db/stu/stu.txt),这些文件存储的是实际的数据。


http://www.kler.cn/news/325608.html

相关文章:

  • 使用Vue.extend( ) 模仿 elementui 创建一个类似 message 消息提示框
  • AI大模型之旅-最强开源文生图工具Stable Diffusion WebUI 教程
  • Safari 浏览器中的 <audio> 标签的控件无效 - 解决方法
  • linux信号 | 学习信号三步走 | 全解析信号的产生方式
  • 数据结构双链表和循环链表
  • 高级主题:接口性能测试与压力测试
  • 0基础跟德姆(dom)一起学AI 数据处理和统计分析08-日期类型处理,Matplotlib介绍
  • 事务的四大特性(ACID)
  • 直接用Bash发送HTTP请求 —— 筑梦之路
  • 【代码随想录Day27】贪心算法Part01
  • C#基于SkiaSharp实现印章管理(10)
  • 【Linux的内存管理】
  • zy81_C#中在窗体中实现坐标变换
  • 基于SSM的“银发在线教育云平台”的设计与实现(源码+数据库+文档)
  • Race Karts Pack 全管线 卡丁车赛车模型素材
  • CSS 中的@media print 是干什么用的?
  • Spark_UDF处理缺失值或空值
  • node实现大文件切片上传的方法
  • R整理数据技巧
  • 解决sortablejs+el-table表格内限制回撤和拖拽回撤失败问题
  • Redis string类型hash类型
  • 在pycharm中怎样调试HTML网页程序
  • B-树(不是B减树)原理剖析(1)
  • 有些硬盘录像机接入视频汇聚平台EasyCVR后通道不显示/显示不全,该如何处理?
  • Qt 学习第十一天:QTableWidget 的使用
  • 启动hadoop集群出现there is no HDFS_NAMENODE_USER defined.Aborting operation
  • 基于HTML、CSS和JavaScript的滚动数字显示效果,类似于老式计数器或电子表上的数字滚动效果
  • JAVA并发编程高级——JDK 新增的原子操作类 LongAdder
  • 渗透测试实战—教育攻防演练信息收集
  • Bugku 渗透测试1