HIVE注释修改、元数据管理

1、概述

  • 元数据(Metadata):描述数据的数据
    例如学生信息表中,小黄15是数据,student_nameage是元数据
元数据分类说明示例
技术元数据数仓的设计和管理人员 用于开发和管理数仓时用的数据数据源信息、数据转换的描述、源数据到目的数据的映射
业务元数据能体现业务逻辑表和字段的业务描述
  • 元数据管理:注释管理、血缘分析、元数据分类、元数据查询…
    目的:帮助开发人员快速理解业务和查找字段,降低开发的运维成本

2、HIVE注释管理

  • 在本文,HIVE元数据信息存到MySQL
    在数仓建设中,建库建表时要添加注释(COMMENT)
    对于一些历史遗留的缺乏注释的表,要对其添加注释

  • 解决HIVE中文注释乱码:
    https://yellow520.blog.csdn.net/article/details/115960751

2.1、DDL

2.1.1、创建时添加注释

建库时添加注释

CREATE DATABASE b0 COMMENT '测试库';
USE b0;

建表时添加注释

CREATE TABLE t0(
    c0  INT     COMMENT '字段注释0',
    c1  STRING  COMMENT '字段注释1'
)COMMENT "表注释"
PARTITIONED BY (
    p0 STRING COMMENT "分区注释0",
    p1 INT COMMENT "分区注释1"
);

创建视图时添加注释

CREATE VIEW v0(
    c0  COMMENT '列注释0',
    c1  COMMENT '列注释1')
COMMENT '视图注释'
AS
SELECT c0,c1 FROM t0;

2.1.2、修改注释

修改表注释

ALTER TABLE t0 SET TBLPROPERTIES('comment'='修改表注释');

修改字段注释ALTER TABLE 表名 CHANGE COLUMN 旧列名 新列名 数据类型 COMMENT '修改列注释';

ALTER TABLE t0 CHANGE COLUMN c1 c1 STRING COMMENT '修改列注释';

修改库和分区的注释可以去MySQL那边改(去HIVE官网找了一圈,暂时没找到😭)

-- 修改库注释(2个参数:库名、库注释)
UPDATE `DBS` SET `DESC`='修改库注释' WHERE `NAME`='b0';
-- 修改分区注释(4个参数:库名、表名、分区名、分区注释)
UPDATE `PARTITION_KEYS` SET `PKEY_COMMENT`='修改分区注释'
WHERE `TBL_ID` IN (
  SELECT t.TBL_ID
  FROM `DBS`b
  LEFT JOIN `TBLS`t ON b.`DB_ID`=t.`DB_ID`
  WHERE b.`NAME`='b0' AND t.`TBL_NAME`='t0'
)AND `PKEY_NAME`='p0';

2.2、在MySQL查看HIVE元数据

切换到存储HIVE元数据的库

USE metastore;

ER图

2.2.1、查看库

SELECT
    `DB_ID`,            -- 库ID
    `DESC`,             -- 库注释
    `DB_LOCATION_URI`,  -- 库在HDFS的位置
    `NAME`              -- 库名
FROM `DBS`;

2.2.2、查看表

查看表和表注释

SELECT
	b.`NAME`,               -- 库名
	t.`TBL_NAME`,           -- 表名
	t.`TBL_TYPE`,           -- 表类型
	c.`PARAM_VALUE`,        -- 表注释
	t.`VIEW_EXPANDED_TEXT`  -- 视图的SQL
FROM `DBS` b
LEFT JOIN `TBLS` t ON b.`DB_ID`=t.`DB_ID`
LEFT JOIN (
	SELECT `TBL_ID`,`PARAM_VALUE`
	FROM `TABLE_PARAMS`
	WHERE `PARAM_KEY`='comment'
)c ON t.`TBL_ID`=c.`TBL_ID`;

2.2.3、查看列

列注释:COLUMNS_V2COMMENT

SELECT
    t.`TBL_NAME`,     -- 表名
    c.`COLUMN_NAME`,  -- 字段名
    c.`COMMENT`,      -- 字段注释
    c.`TYPE_NAME`     -- 字段的数据类型
FROM `TBLS`t
LEFT JOIN `SDS`s ON s.`SD_ID`=t.`SD_ID`
LEFT JOIN `COLUMNS_V2`c ON s.`CD_ID`=c.`CD_ID`;

2.2.4、查看分区

SELECT
    t.`TBL_NAME`,      -- 表名
    p.`PKEY_NAME`,     -- 分区名
    p.`PKEY_COMMENT`,  -- 分区注释
    p.`PKEY_TYPE`      -- 分区的数据类型
FROM `PARTITION_KEYS`p
LEFT JOIN `TBLS`t ON t.`TBL_ID`=p.`TBL_ID`;

2.2.5、查看全部

SELECT
    b.`NAME`,            -- 库名
    b.`DESC`,            -- 库注释
    t.`TBL_NAME`,        -- 表名
    t.`TBL_TYPE`,        -- 表类型
    tc.`PARAM_VALUE`,    -- 表注释
    c.`COL_NAME`,        -- 字段名
    c.`COL_COMMENT`,     -- 字段注释
    c.`DATA_TYPE`,       -- 数据类型
    c.`COL_TYPE`         -- 字段类型(列or分区)
-- 库
FROM `DBS` b
-- 表
INNER JOIN `TBLS` t ON b.`DB_ID`=t.`DB_ID`
-- 表注释
LEFT JOIN (
    SELECT `TBL_ID`,`PARAM_VALUE`
    FROM `TABLE_PARAMS`
    WHERE `PARAM_KEY`='comment'
    )tc ON t.`TBL_ID`=tc.`TBL_ID`
-- 字段注释
LEFT JOIN(
    (
        -- 分区注释
        SELECT
            `TBL_ID`,                         -- 表ID
            `PKEY_NAME`      `COL_NAME`,      -- 分区名
            `PKEY_COMMENT`   `COL_COMMENT`,   -- 分区注释
            `PKEY_TYPE`      `DATA_TYPE`,     -- 数据类型
            'partition'         `COL_TYPE`    -- 类型
        FROM `PARTITION_KEYS`
        )UNION ALL(
        -- 列注释
        SELECT
            t.`TBL_ID`       `TBL_ID`,        -- 表ID
            c.`COLUMN_NAME`  `COL_NAME`,      -- 字段名
            c.`COMMENT`      `COL_COMMENT`,   -- 字段注释
            c.`TYPE_NAME`    `DATA_TYPE`,     -- 字段的数据类型
            'column'      `COL_TYPE`          -- 类型
        FROM (
            SELECT b.`TBL_ID`,s.`CD_ID` FROM `TBLS`b
            INNER JOIN `SDS`s ON s.`SD_ID`=b.`SD_ID`
        )t
        LEFT JOIN `COLUMNS_V2`c ON t.`CD_ID`=c.`CD_ID`
    )
)c ON t.`TBL_ID`=c.`TBL_ID`;

Hive中更改表注释有不同的方式,以下是几种常见的方法: 1. **修改Hive码表信息来调整表注释**:由于Hive元数据(表名、列名、数据类型、描述信息等)存储在MySQL中,可在MySQL的hive3数据库里修改Hive的码表信息。示例代码如下: ```sql -- (1)修改表字段注解和表注解 use hive3; alter table COLUMNS_V2 modify column COMMENT varchar(256) character set utf8; alter table TABLE_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8; ``` 此方法主要通过修改元数据相关表的字段属性来实现对表注释相关设置的调整 [^1]。 2. **使用`ALTER TABLE`语句添加表属性的方式模拟表注释修改**:虽然语句不报错,但这种方式并非直接修改注释,而是在`TBLPROPERTIES`下新增一个叫`COMMENT`的属性,可通过`show create table table_name`查看。示例如下: ```sql -- 修改hive表字段的注释 use dw; alter table fct_user_ctag_today CHANGE COLUMN rpt_tag rpt_tag int comment '1新客,2新转老,3新注册,4老客,5其它'; ``` 该示例展示了修改表中某字段注释的操作,其中注释部分可以根据需要修改为相应的表注释内容 [^2]。 3. **在元数据库中修改分区字段注释**:如果涉及分区字段注释修改,需要在元数据库中执行如下SQL语句: ```sql update partition_keys ps join tbls ts on ps.tbl_id = ts.tbl_id join dbs ds on ts.db_id = ds.db_id set ps.pkey_comment = '注释' where ds.name = '库名' and ts.tbl_name = '表名' and ps.pkey_name = '分区字段名'; ``` 此方法通过关联元数据库中的多个表,根据库名、表名和分区字段名来定位并修改分区字段的注释 [^3]。 4. **使用`ALTER TABLE CHANGE`语句修改列名、数据类型及添加注释**:可以通过`ALTER TABLE CHANGE`语句对列名、数据类型进行修改,同时添加列注释,也可在一定程度上辅助表注释修改和管理。示例如下: ```sql CREATE TABLE test_change (a int, b int, c int); -- First change column a's name to a1. ALTER TABLE test_change CHANGE a a1 INT; -- Next change column a1's name to a2, its data type to string, and put it after column b. ALTER TABLE test_change CHANGE a1 a2 STRING AFTER b; -- The new table's structure is: b int, a2 string, c int. -- Then change column c's name to c1, and put it as the first column. ALTER TABLE test_change CHANGE c c1 INT FIRST; -- The new table's structure is: c1 int, b int, a2 string. -- Add a comment to column a1 ALTER TABLE test_change CHANGE a1 a1 INT COMMENT 'this is column a1'; ``` 这些语句展示了如何对表的列进行修改注释添加操作,有助于完善表的相关注释信息 [^4]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小基基o_O

您的鼓励是我创作的巨大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值