• hive location更新&hive元数据表详解


    1.hive location更新方式

    一、通过修改表DDL:

    alter table table_name set location 'hdfs://nm:8020/table_path'

    二、直接修改hive 的meta info:

    1. update `DBS` set `DB_LOCATION_URI` = replace(DB_LOCATION_URI,"oldpath","newpath")
    2.  
    3. update SDS  set location =replace(location,'oldpath,'newpath')

    2. hive命令操作方式

    hive分为内部表和外部表,两种表修改路径方式不一样。

    内部表

    设置新的路径

    alter table tb_table1 set location 'hdfs://cluster/hive/warehouse/test.db/tb_table2

    移动表的文件

    hdfs dfs -mv /hive/warehouse/test.db/tb_table1 /hive/warehouse/test.db/tb_table2

    外部表
    因为外部表删除表并不会删除文件,所以可以先删除表

    drop table table1;

    移动文件到新位置

    hdfs dfs -mv /hive/warehouse/test.db/tb_table1 /hive/warehouse/test.db/tb_table2

    新建新表, 并且指定路径为新地址

    create external table table2 (....) location '/hive/warehouse/test.db/table2'

    恢复元数据

    msck repair table table2;

    3.1 存储Hive版本的元数据表(VERSION)

    该表比较简单,但很重要。

    VER_IDSCHEMA_VERSIONVERSION_COMMENT
    ID主键Hive版本版本说明
    10.13.0Set by MetaStore

    如果该表出现问题,根本进入不了Hive-Cli。

    比如该表不存在,当启动Hive-Cli时候,就会报错”Table ‘hive.version’ doesn’t exist”。

    3.2 Hive数据库相关的元数据表(DBS、DATABASE_PARAMS)

    • DBS

    该表存储Hive中所有数据库的基本信息,字段如下:

    元数据表字段说明示例数据
    DB_ID数据库ID2
    DESC数据库描述测试库
    DB_LOCATION_URI数据库HDFS路径hdfs://namenode/user/hive/warehouse/lxw1234.db
    NAME数据库名lxw1234
    OWNER_NAME数据库所有者用户名lxw1234
    OWNER_TYPE所有者角色USER

    • DATABASE_PARAMS

    该表存储数据库的相关参数,在CREATE DATABASE时候用

    WITH DBPROPERTIES (property_name=property_value, …)指定的参数。

    元数据表字段说明示例数据
    DB_ID数据库ID2
    PARAM_KEY参数名createdby
    PARAM_VALUE参数值lxw1234

    DBS和DATABASE_PARAMS这两张表通过DB_ID字段关联。

    3.3 Hive表和视图相关的元数据表

    主要有TBLS、TABLE_PARAMS、TBL_PRIVS,这三张表通过TBL_ID关联。

    • TBLS

    该表中存储Hive表、视图、索引表的基本信息。

    元数据表字段说明示例数据
    TBL_ID表ID1
    CREATE_TIME创建时间1436317071
    DB_ID数据库ID2,对应DBS中的DB_ID
    LAST_ACCESS_TIME上次访问时间1436317071
    OWNER所有者liuxiaowen
    RETENTION保留字段0
    SD_ID序列化配置信息86,对应SDS表中的SD_ID
    TBL_NAME表名lxw1234
    TBL_TYPE表类型MANAGED_TABLE、EXTERNAL_TABLE、INDEX_TABLE、VIRTUAL_VIEW
    VIEW_EXPANDED_TEXT视图的详细HQL语句select `lxw1234`.`pt`, `lxw1234`.`pcid` from `liuxiaowen`.`lxw1234`
    VIEW_ORIGINAL_TEXT视图的原始HQL语句select * from lxw1234

    • TABLE_PARAMS

    该表存储表/视图的属性信息。

    元数据表字段说明示例数据
    TBL_ID表ID1
    PARAM_KEY属性名totalSize、numRows、EXTERNAL
    PARAM_VALUE属性值970107336、21231028、TRUE

    • TBL_PRIVS

    该表存储表/视图的授权信息

    元数据表字段说明示例数据
    TBL_GRANT_ID授权ID1
    CREATE_TIME授权时间1436320455
    GRANT_OPTION0
    GRANTOR授权执行用户liuxiaowen
    GRANTOR_TYPE授权者类型USER
    PRINCIPAL_NAME被授权用户username
    PRINCIPAL_TYPE被授权用户类型USER
    TBL_PRIV权限Select、Alter
    TBL_ID表ID22,对应TBLS表中的TBL_ID

    3.4 Hive文件存储信息相关的元数据表

    主要涉及SDS、SD_PARAMS、SERDES、SERDE_PARAMS

    由于HDFS支持的文件格式很多,而建Hive表时候也可以指定各种文件格式,Hive在将HQL解析成MapReduce时候,需要知道去哪里,使用哪种格式去读写HDFS文件,而这些信息就保存在这几张表中。

    • SDS

    该表保存文件存储的基本信息,如INPUT_FORMAT、OUTPUT_FORMAT、是否压缩等。

    TBLS表中的SD_ID与该表关联,可以获取Hive表的存储信息。

    元数据表字段说明示例数据
    SD_ID存储信息ID1
    CD_ID字段信息ID21,对应CDS表
    INPUT_FORMAT文件输入格式org.apache.hadoop.mapred.TextInputFormat
    IS_COMPRESSED是否压缩0
    IS_STOREDASSUBDIRECTORIES是否以子目录存储0
    LOCATIONHDFS路径hdfs://namenode/hivedata/warehouse/ut.db/t_lxw
    NUM_BUCKETS分桶数量5
    OUTPUT_FORMAT文件输出格式org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
    SERDE_ID序列化类ID3,对应SERDES表

    • SD_PARAMS

    该表存储Hive存储的属性信息,在创建表时候使用

    STORED BY ‘storage.handler.class.name’ [WITH SERDEPROPERTIES (…)指定。

    元数据表字段说明示例数据
    SD_ID存储配置ID1
    PARAM_KEY存储属性名
    PARAM_VALUE存储属性值
    • SERDES

    该表存储序列化使用的类信息

    元数据表字段说明示例数据
    SERDE_ID序列化类配置ID1
    NAME序列化类别名
    SLIB序列化类org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe

    • SERDE_PARAMS

    该表存储序列化的一些属性、格式信息,比如:行、列分隔符

    元数据表字段说明示例数据
    SERDE_ID序列化类配置ID1
    PARAM_KEY属性名field.delim
    PARAM_VALUE属性值,

    3.5 Hive表字段相关的元数据表

    主要涉及COLUMNS_V2

    • COLUMNS_V2

    该表存储表对应的字段信息。

    元数据表字段说明示例数据
    CD_ID字段信息ID1
    COMMENT字段注释
    COLUMN_NAME字段名pt
    TYPE_NAME字段类型string
    INTEGER_IDX字段顺序2

    3.6 Hive表分区相关的元数据表

    主要涉及PARTITIONS、PARTITION_KEYS、PARTITION_KEY_VALS、PARTITION_PARAMS

    • PARTITIONS

    该表存储表分区的基本信息。

    元数据表字段说明示例数据
    PART_ID分区ID1
    CREATE_TIME分区创建时间
    LAST_ACCESS_TIME最后一次访问时间
    PART_NAME分区名pt=2015-06-12
    SD_ID分区存储ID21
    TBL_ID表ID2
    • PARTITION_KEYS

    该表存储分区的字段信息。

    元数据表字段说明示例数据
    TBL_ID表ID2
    PKEY_COMMENT分区字段说明
    PKEY_NAME分区字段名pt
    PKEY_TYPE分区字段类型string
    INTEGER_IDX分区字段顺序1

    • PARTITION_KEY_VALS

    该表存储分区字段值。

    元数据表字段说明示例数据
    PART_ID分区ID2
    PART_KEY_VAL分区字段值2015-06-12
    INTEGER_IDX分区字段值顺序0

    • PARTITION_PARAMS

    该表存储分区的属性信息。

    元数据表字段说明示例数据
    PART_ID分区ID2
    PARAM_KEY分区属性名numFiles、numRows
    PARAM_VALUE分区属性值15、502195

    3.7 其他不常用的元数据表

    • DB_PRIVS

    数据库权限信息表。通过GRANT语句对数据库授权后,将会在这里存储。

    • IDXS

    索引表,存储Hive索引相关的元数据

    • INDEX_PARAMS

    索引相关的属性信息。

    • TAB_COL_STATS

    表字段的统计信息。使用ANALYZE语句对表字段分析后记录在这里。

    • TBL_COL_PRIVS

    表字段的授权信息

    • PART_PRIVS

    分区的授权信息

    • PART_COL_STATS

    分区字段的统计信息。

    • PART_COL_PRIVS

    分区字段的权限信息。

    • FUNCS

    用户注册的函数信息

    • FUNC_RU

    用户注册函数的资源信息

    3.8 示例

    建表语句:

    1. CREATE TABLE lxw1234 (
    2. cookieid STRING,
    3. url STRING,
    4. ua STRING,
    5. ip STRING,
    6. createtime STRING
    7. )
    8. COMMENT 'This is the page view table'
    9. partitioned BY (day STRING,site STRING)
    10. ROW FORMAT DELIMITED
    11. FIELDS TERMINATED BY ','
    12. stored AS ORC;

    建表执行之后,元数据中以下表的数据会有所变化

    • TBLS

    生成了表lxw1234的基本信息

    SELECT * FROM TBLS WHERE TBL_NAME = ‘lxw1234’;

    元数据表字段数据
    TBL_ID41509
    CREATE_TIME1436324659
    DB_ID11
    LAST_ACCESS_TIME0
    OWNERliuxiaowen
    RETENTION0
    SD_ID91740
    TBL_NAMElxw1234
    TBL_TYPEMANAGED_TABLE
    VIEW_EXPANDED_TEXTNULL
    VIEW_ORIGINAL_TEXTNULL

    • TABLE_PARAMS

    select  *  from  TABLE_PARAMS  WHERE  TBL_ID=41509

    TBL_IDPARAM_KEYPARAM_VALUE
    41509commentThis is the page view table
    41509transient_lastDdlTime1436324659

    • SDS

    SELECT * FROM SDS WHERE SD_ID = 91740

    元数据表字段数据
    SD_ID91740
    CD_ID41564
    INPUT_FORMATorg.apache.hadoop.hive.ql.io.orc.OrcInputFormat
    IS_COMPRESSED0
    IS_STOREDASSUBDIRECTORIES0
    LOCATIONhdfs://namenode/hivedata/warehouse/liuxiaowen.db/lxw1234
    NUM_BUCKETS-1
    OUTPUT_FORMATorg.apache.hadoop.hive.ql.io.orc.OrcOutputFormat
    SERDE_ID91740
    • SERDES

    select * from SERDES WHERE SERDE_ID = 91740

    元数据表字段数据
    SERDE_ID91740
    NAME
    SLIBorg.apache.hadoop.hive.ql.io.orc.OrcSerde

    • SERDE_PARAMS

    select * from  SERDE_PARAMS  WHERE  SERDE_ID=91740

    SERDE_IDPARAM_KEYPARAM_VALUE
    91740field.delim,
    91740serialization.format,

    • COLUMNS_V2

    select * from COLUMNS_V2 WHERE CD_ID=41564 ORDER BY INTEGER_IDX

    CD_IDCOMMENTCOLUMN_NAMETYPE_NAMEINTEGER_IDX
    41564cookieidstring0
    41564urlstring1
    41564uastring2
    41564ipstring3
    41564createtimestring4

    • PARTITION_KEYS

    select * from  PARTITION_KEYS  WHERE  TBL_ID=41509

    TBL_IDPKEY_COMMENTPKEY_NAMEPKEY_TYPEINTEGER_IDX
    41509daystring0
    41509sitestring1

    再插入数据:

    1. INSERT OVERWRITE TABLE lxw1234 PARTITION (day = '2015-07-08', site = 'test.com')
    2. SELECT
    3. 'cookie1' AS cookieid,
    4. 'http://test.com' AS url,
    5. 'firefox' AS ua,
    6. '127.0.0.1' AS ip,
    7. '2015-07-08 11:00:01' AS createtime
    8. FROM dual
    9. limit 1;

    插入数据执行完之后,以下表的元数据发生变化:

    • PARTITIONS

    select * from  `PARTITIONS`  WHERE  TBL_ID=41509

    PART_IDCREATE_TIMELAST_ACCESS_TIMEPART_NAMESD_IDTBL_ID
    5447214363258120day=2015-07-08/site=lxw1234.com9174641509
    • SDS

    select *  from  SDS  WHERE  SD_ID=91746

    注意:这里的存储和表的存储是不同的,因为每个分区也会有一个SD

    元数据表字段数据
    SD_ID91746
    CD_ID41564
    INPUT_FORMATorg.apache.hadoop.hive.ql.io.orc.OrcInputFormat
    IS_COMPRESSED0
    IS_STOREDASSUBDIRECTORIES0
    LOCATIONhdfs://namenode/hivedata/warehouse/liuxiaowen.db/lxw1234/day=2015-07-08/site=lxw1234.com
    NUM_BUCKETS-1
    OUTPUT_FORMATorg.apache.hadoop.hive.ql.io.orc.OrcOutputFormat
    SERDE_ID91746

    • PARTITION_KEY_VALS

    select  *  from  PARTITION_KEY_VALS  where  PART_ID=54472

    PART_IDPART_KEY_VALINTEGER_IDX
    544722015-07-080
    54472lxw1234.com1

    • PARTITION_PARAMS

    select * from PARTITION_PARAMS where PART_ID = 54472

    PART_IDPARAM_KEYPARAM_VALUE
    54472COLUMN_STATS_ACCURATEtrue
    54472numFiles1
    54472numRows1
    54472rawDataSize408
    54472totalSize703
    54472transient_lastDdlTime1436325813

    在分区的属性里面,生成的该分区的统计信息(Statistics)。

     

     参考:https://www.cnblogs.com/qingyunzong/p/8710356.html

  • 相关阅读:
    Java进阶篇--死锁
    Elasticsearch7教程(2) 更新文档 painless script案例
    什么是Selenium?如何使用Selenium进行自动化测试?
    【Linux】一个小故事让你秒懂shell外壳程序
    tuend\stratis\vdo总结和案例
    STM32--WDG看门狗
    .NET6: 开发基于WPF的摩登三维工业软件 (7)
    C语言指针进阶内容讲解-成长路上必看
    使用IDEA画结构图
    初见JAVA —— 最基础的变量,选择,循环语句,数组,方法,输入与输出等
  • 原文地址:https://blog.csdn.net/ZYC88888/article/details/132807590