Hive数仓操作(五)

一、Hive 信息查看

  1. Hive的元数据管理

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

    • 查询表信息:

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

    • 查看表的结构信息:

      sql 复制代码
      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 语句,可以将一个查询的结果创建成一个新表。这种方法将同时复制表的结构和数据。

sql 复制代码
CREATE TABLE emp1 AS 
SELECT * FROM emp;

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

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

sql 复制代码
CREATE TABLE emp2 AS 
SELECT empno, ename, deptno FROM emp;

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

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

sql 复制代码
CREATE TABLE emp3 AS 
SELECT empno, ename, deptno FROM emp WHERE deptno = 20;

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

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

sql 复制代码
CREATE TABLE emp4 LIKE emp;

三、 Hive表的插入方式

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

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

sql 复制代码
INSERT OVERWRITE TABLE empl 
SELECT * FROM emp;

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

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

sql 复制代码
INSERT INTO TABLE empl 
SELECT * FROM emp;

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

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

sql 复制代码
INSERT OVERWRITE LOCAL DIRECTORY '/opt/module/export/emp' 
SELECT * FROM emp;

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

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

sql 复制代码
INSERT OVERWRITE DIRECTORY '/datas/emp' 
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY ','
SELECT * FROM emp;

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

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

sql 复制代码
INSERT OVERWRITE LOCAL DIRECTORY '/opt/module/export/emp1' 
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY '\t' 
SELECT * FROM emp;
相关推荐
2501_941805935 小时前
在大阪智能零售场景中构建支付实时处理与高并发顾客行为分析平台的工程设计实践经验分享
数据库
李慕婉学姐6 小时前
【开题答辩过程】以《基于JAVA的校园即时配送系统的设计与实现》为例,不知道这个选题怎么做的,不知道这个选题怎么开题答辩的可以进来看看
java·开发语言·数据库
珠海西格电力6 小时前
零碳园区有哪些政策支持?
大数据·数据库·人工智能·物联网·能源
LJ97951116 小时前
AI如何重构媒介宣发:从资源博弈到智能匹配的技术跃迁
大数据
数据大魔方6 小时前
【期货量化实战】日内动量策略:顺势而为的短线交易法(Python源码)
开发语言·数据库·python·mysql·算法·github·程序员创富
Chasing Aurora7 小时前
数据库连接+查询优化
数据库·sql·mysql·prompt·约束
倔强的石头_7 小时前
【金仓数据库】ksql 指南(六)—— 创建与管理用户和权限(KingbaseES 安全控制核心)
数据库
数据皮皮侠AI7 小时前
上市公司股票名称相似度(1990-2025)
大数据·人工智能·笔记·区块链·能源·1024程序员节
小熊officer8 小时前
Python字符串
开发语言·数据库·python
Zoey的笔记本8 小时前
金融行业数据可视化平台:破解数据割裂与决策迟滞的系统性方案
大数据·信息可视化·数据分析