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

Hive数仓操作(五)

一、Hive 信息查看

  1. Hive的元数据管理

    • Hive 将表的元数据(如表名、列名、类型等)存储在关系型数据库中,通常是 MySQL。元数据的主要表包括:
      • TBLS:存储表的信息(表名、类型、ID 等)。
      • COLUMNS_V2:存储每个列的详细信息(列名、类型等)。
      • DBS:存储数据库的信息。
      • SDS:存储数据文件的位置。
  2. Mysql数据字典查询

    • 查询表信息:
      SELECT * FROM TBLS;               -- 查询表名
      SELECT * FROM COLUMNS_V2;         -- 查询列信息
      SELECT * FROM DBS;                 -- 查询数据库信息
      SELECT * FROM SDS;                 -- 查询数据文件位置信息
      
  3. Hive查看表定义的命令

    • 查看表的结构信息:
      DESC table_name;                    -- 查看表定义信息
      DESC EXTENDED table_name;           -- 查看表详细信息
      DESC FORMATTED table_name;          -- 格式化显示表定义的详细信息
      SHOW CREATE TABLE table_name;        -- 查看创建表的语句
      
  4. Hive与MySQL的关系

在这里插入图片描述

  • Hive 将其元数据存储在 MySQL 数据库中,使用 MySQL 作为 Hive 的 metastore。
  • MySQL 负责存储 Hive 表、列、数据库等的结构信息,而实际数据则存储在 HDFS 中。
  • Hive 依赖于 Hadoop 提供的数据存储能力,同时通过 MySQL 管理其结构化的元数据。

二、 Hive表的复制方式

1. 复制一个表的结构(复制列的定义和数据类型,不包括分隔符,表属性等)和数据

使用 CREATE TABLE AS SELECT 语句,可以将一个查询的结果创建成一个新表。这种方法将同时复制表的结构和数据。

CREATE TABLE emp1 AS 
SELECT * FROM emp;

2. 复制一个表的某些列来创建新表

如果只想复制表中的特定列,可以在 SELECT 子句中指定所需的列。

CREATE TABLE emp2 AS 
SELECT empno, ename, deptno FROM emp;

3. 复制一个表的某些行来创建新表

如果想要根据特定条件复制表中的某些行,可以在 WHERE 子句中指定条件。

CREATE TABLE emp3 AS 
SELECT empno, ename, deptno FROM emp WHERE deptno = 20;

4. 复制表完整结构 (保留原表的所有属性包括分隔符、表注释等,但没有复制数据)

如果只想复制表的结构而不复制数据,可以使用 CREATE TABLE LIKE 语句。

CREATE TABLE emp4 LIKE emp;

三、 Hive表的插入方式

1. 将 SQL 语句的结果覆盖到已存在的表中

使用 INSERT OVERWRITE 语句将查询结果覆盖写入到一个已存在的表中。

INSERT OVERWRITE TABLE empl 
SELECT * FROM emp;

2. 将 SQL 语句的结果追加到已存在的表中

使用 INSERT INTO 语句将查询结果追加到已存在的表中。这将产生新的文件。

INSERT INTO TABLE empl 
SELECT * FROM emp;

3. 将 SQL 语句的结果保存到本地目录

使用 INSERT OVERWRITE LOCAL DIRECTORY 语句将查询结果保存到本地文件系统中。建议使用一个新空目录,以避免覆盖原有内容。

INSERT OVERWRITE LOCAL DIRECTORY '/opt/module/export/emp' 
SELECT * FROM emp;

4. 将 SQL 语句的结果格式化保存到 HDFS

使用 INSERT OVERWRITE DIRECTORY 语句将查询结果保存到 HDFS 目录中。需要指定结果的格式和分隔符。

INSERT OVERWRITE DIRECTORY '/datas/emp' 
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY ','
SELECT * FROM emp;

5. 将查询结果格式化导出到本地

使用 INSERT OVERWRITE LOCAL DIRECTORY 并设置格式化选项,将查询结果导出到本地。

INSERT OVERWRITE LOCAL DIRECTORY '/opt/module/export/emp1' 
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY '\t' 
SELECT * FROM emp;

相关文章:

  • STM32--GPIO点亮LED灯(手把手,超详细)
  • @antv/x6 动态的修改attr与prop,以及动态改变节点的大小
  • 2024年_ChatGPT 及类似的人工智能技术带来的影响与改变 怎样利用 ChatGPT 提高学习效率
  • 【JAVA源码授权】
  • 计算机毕业设计Hadoop+Spark知识图谱美团美食推荐系统 美团餐厅推荐系统 美团推荐系统 美食价格预测 美团爬虫 美食数据分析 美食可视化大屏
  • ​IAR全面支持国科环宇AS32X系列RISC-V车规MCU
  • Spring Boot CLI命令行工具
  • Java中的PriorityQueue详解
  • 爬虫库是什么?是ip吗
  • 分享国产RISC-V单片机通用
  • 【MySQL】视图、用户和权限管理
  • 每一个云手机的ip是独立的吗
  • 【2025】基于Django的鱼类科普网站(源码+文档+调试+答疑)
  • 观测云链路追踪分析最佳实践
  • 升级 Windows 后如何恢复丢失的文件
  • JavaScript 如何正确处理 Unicode 编码问题!
  • 345-反转字符串中的元音字母
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • Angular 4.x 动态创建组件
  • dva中组件的懒加载
  • iOS 系统授权开发
  • js中的正则表达式入门
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • Swift 中的尾递归和蹦床
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 程序员最讨厌的9句话,你可有补充?
  • 对象引论
  • 工作手记之html2canvas使用概述
  • 前言-如何学习区块链
  • Linux权限管理(week1_day5)--技术流ken
  • 昨天1024程序员节,我故意写了个死循环~
  • ​香农与信息论三大定律
  • ‌Excel VBA进行间比法设计
  • (2)从源码角度聊聊Jetpack Navigator的工作流程
  • (C语言)fgets与fputs函数详解
  • (原创)可支持最大高度的NestedScrollView
  • *算法训练(leetcode)第四十天 | 647. 回文子串、516. 最长回文子序列
  • .halo勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET 8.0 发布到 IIS
  • .NET CORE 第一节 创建基本的 asp.net core
  • .net core 微服务_.NET Core 3.0中用 Code-First 方式创建 gRPC 服务与客户端
  • .net dataexcel winform控件 更新 日志
  • .NET Standard、.NET Framework 、.NET Core三者的关系与区别?
  • .NET 编写一个可以异步等待循环中任何一个部分的 Awaiter
  • .net 桌面开发 运行一阵子就自动关闭_聊城旋转门家用价格大约是多少,全自动旋转门,期待合作...
  • .NET/ASP.NETMVC 大型站点架构设计—迁移Model元数据设置项(自定义元数据提供程序)...
  • .NET/C#⾯试题汇总系列:⾯向对象
  • .Net的C#语言取月份数值对应的MonthName值
  • .NET项目中存在多个web.config文件时的加载顺序
  • .NET中winform传递参数至Url并获得返回值或文件
  • /boot 内存空间不够
  • ?.的用法
  • @GlobalLock注解作用与原理解析
  • @JSONField或@JsonProperty注解使用