日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

hive metastore mysql_Hive MetaStore的结构

發布時間:2023/12/20 数据库 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hive metastore mysql_Hive MetaStore的结构 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本篇主要是介紹Hive在MySQL中存儲的源數據的表結構。

Hive MetaStore 數據庫表結構圖

test.png

TBLS

記錄數據表的信息

字段

解釋

TBL_ID

在hive中創建表的時候自動生成的一個id,用來表示,主鍵

CREATE_TIME

創建的數據表的時間,使用的是時間戳

DBS_ID

這個表是在那個數據庫里面

LAST_ACCESS_TIME

最后一次訪問的時間戳

OWNER

數據表的所有者

RETENTION

保留時間

SD_ID

標記物理存儲信息的id

TBL_NAME

數據表的名稱

TBL_TYPE

數據表的類型,MANAGED_TABLE, EXTERNAL_TABLE, VIRTUAL_VIEW, INDEX_TABLE

VIEW_EXPANDED_TEXT

展開視圖文本,非視圖為null

VIEW_ORIGINAL_TEXT

原始視圖文本,非視圖為null

TBLS的SD_ID與SDS的SD_ID進行關聯,TBLS的DB_ID與DBS的DB_ID進行關聯,相關的thrift類為Table,StorageDescriptor。

//由于TBLS與DBS有關聯,可以看到當前表是數據那個數據庫。

//表的信息

mysql> select * from tbls where tbl_id=71 and db_id=1;

+--------+-------------+-------+------------------+--------+-----------+-------+----------+---------------+--------------------+--------------------+

| TBL_ID | CREATE_TIME | DB_ID | LAST_ACCESS_TIME | OWNER | RETENTION | SD_ID | TBL_NAME | TBL_TYPE | VIEW_EXPANDED_TEXT | VIEW_ORIGINAL_TEXT |

+--------+-------------+-------+------------------+--------+-----------+-------+----------+---------------+--------------------+--------------------+

| 71 | 1548340018 | 1 | 0 | hadoop | 0 | 91 | emp | MANAGED_TABLE | NULL | NULL |

+--------+-------------+-------+------------------+--------+-----------+-------+----------+---------------+--------------------+--------------------+

//數據庫的信息

mysql> select * from dbs where db_id=1;

+-------+-----------------------+-------------------------------------------+---------+------------+------------+

| DB_ID | DESC | DB_LOCATION_URI | NAME | OWNER_NAME | OWNER_TYPE |

+-------+-----------------------+-------------------------------------------+---------+------------+------------+

| 1 | Default Hive database | hdfs://hadoop001:9000/user/hive/warehouse | default | public | ROLE |

+-------+-----------------------+-------------------------------------------+---------+------------+------------+

Version

這個表是記錄Hive的版本,這個表里面只能有一條記錄,這樣Hive才能啟動。在創建源數據表的時候,自動寫入的信息。相關的thrift類為version。

在初始化源數據表的時候,插入一條數據。

INSERT INTO VERSION (VER_ID, SCHEMA_VERSION, VERSION_COMMENT) VALUES (1, '1.1.0', 'Hive release version 1.1.0');

//獲取到的結果為:

mysql> select * from version;

+--------+----------------+--------------------------------------+

| VER_ID | SCHEMA_VERSION | VERSION_COMMENT |

+--------+----------------+--------------------------------------+

| 1 | 1.1.0 | Set by MetaStore hadoop@10.140.42.16 |

+--------+----------------+--------------------------------------+

DBS

記錄數據庫的信息

字段

解釋

DB_ID

數據庫的編號,默認的數據庫編號為1,如果創建其他數據庫的時候,這個字段會自增,主鍵

DESC

對數據庫進行一個簡單的介紹

DB_LOCATION_URI

數據庫的存放位置,默認是存放在hdfs://ip:9000/user/hive/warehouse,如果是其他數據庫,就在后面添加目錄,默認位置可以通過參數hive.metastore.warehouse.dir來設置

NAME

數據庫的名稱

OWNER_NAME

數據庫所有者名稱

OWNER_TYPE

數據庫所有者的類型

DBS的DB_ID與DATABASE_PARAMS的DB_ID進行關聯。

相關的thrift類為Database

#查看所有的數據庫

mysql> select * from dbs;

+-------+-----------------------+------------------------------------------------------+---------+------------+------------+

| DB_ID | DESC | DB_LOCATION_URI | NAME | OWNER_NAME | OWNER_TYPE |

+-------+-----------------------+------------------------------------------------------+---------+------------+------------+

| 1 | Default Hive database | hdfs://hadoop001:9000/user/hive/warehouse | default | public | ROLE |

| 2 | NULL | hdfs://hadoop001:9000/user/hive/warehouse/xiaoyao.db | xiaoyao | hadoop | USER |

+-------+-----------------------+------------------------------------------------------+---------+------------+------------+

TABLE_PARAMS

字段

解釋

TBL_ID

數據的編號

PARAM_KEY

參數

PARAM_VALUE

參數的值

TABLE_PARAMS的TBL_ID與TBLS的TBL_ID的進行關聯,TBL_ID與PARAM_KEY作為聯合主鍵。

每個表的信息基本上都有如下屬性:

參數

COLUMN_STATS_ACCURATE

精確統計列

numFiles

文件數

numRows

行數

rawDataSize

原始數據大小

totalSize

當前大小

transient_lastDdlTime

最近一次操作的時間戳

Spark相關有其他的屬性暫不解釋。

//對tbls中的數據表進行一個介紹:文件的數量、數據行數、數據總的大小等介紹

mysql> select * from table_params where tbl_id=71;

+--------+-----------------------+-------------+

| TBL_ID | PARAM_KEY | PARAM_VALUE |

+--------+-----------------------+-------------+

| 71 | COLUMN_STATS_ACCURATE | true |

| 71 | numFiles | 1 |

| 71 | numRows | 0 |

| 71 | rawDataSize | 0 |

| 71 | totalSize | 701 |

| 71 | transient_lastDdlTime | 1548340028 |

+--------+-----------------------+-------------+

SDS

此對象包含有關屬于表的數據的物理存儲的所有信息,數據表的存儲描述

字段

解釋

SD_ID

主鍵

CD_ID

數據表編號

INPUT_FORMAT

數據輸入格式

IS_COMPRESSED

是否對數據進行了壓縮

IS_STOREDASSUBDIRECTORIES

是否進行存儲在子目錄

LOCATION

數據存放位置

NUM_BUCKETS

分桶的數量

OUTPUT_FORMAT

數據的輸出格式

SERDE_ID

序列和反序列的信息

SDS的SERDE_ID與SERDES的SERDE_ID進行關聯,SDS的CD_ID與CDS的CD_ID進行關聯。相關的thrift表為StorageDescriptor。

//數據的存儲格式

mysql> select * from sds where sd_id=91;

+-------+-------+------------------------------------------+---------------+---------------------------+-----------------------------------------------+-------------+------------------------------------------------------------+----------+

| SD_ID | CD_ID | INPUT_FORMAT | IS_COMPRESSED | IS_STOREDASSUBDIRECTORIES | LOCATION | NUM_BUCKETS | OUTPUT_FORMAT | SERDE_ID |

+-------+-------+------------------------------------------+---------------+---------------------------+-----------------------------------------------+-------------+------------------------------------------------------------+----------+

| 91 | 71 | org.apache.hadoop.mapred.TextInputFormat | | | hdfs://hadoop001:9000/user/hive/warehouse/emp | -1 | org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat | 91 |

+-------+-------+------------------------------------------+---------------+---------------------------+-----------------------------------------------+-------------+------------------------------------------------------------+----------+

CDS

記錄數據表的編號

字段

解釋

CD_ID

主鍵,記錄數據表的編號

這個是一個自增的序列,就是一個標識。

SERDES

記錄序列化和反序列化信息

字段

解釋

SERDE_ID

主鍵,記錄序列化的編號

NAME

序列化和反序列化名稱,默認為表名

SLIB

使用的是哪種序列化方式

相關的thrift表為SerDeInfo

//使用何種序列化

mysql> select * from serdes where serde_id=91;

+----------+------+----------------------------------------------------+

| SERDE_ID | NAME | SLIB |

+----------+------+----------------------------------------------------+

| 91 | NULL | org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe |

+----------+------+----------------------------------------------------+

SERDES_PARAMS

字段

解釋

SERDE_ID

主鍵,記錄序列化的編號

PARAM_KEY

參數名稱

PARAM_VALUE

參數的值

SERDES_PARAMS的SERDE_ID與SERDES的SERDE_ID進行關聯。

//序列化的方式

mysql> select * from serde_params where serde_id=91;

+----------+----------------------+-------------+

| SERDE_ID | PARAM_KEY | PARAM_VALUE |

+----------+----------------------+-------------+

| 91 | field.delim | |

| 91 | serialization.format | |

+----------+----------------------+-------------+

DATABASE_PARAMS

字段

解釋

DB_ID

數據庫的編號

PARAM_KEY

參數名稱

PARAM_VALUE

參數值

DB_ID是一個主鍵,使得DBS與DATABASE_PARAMS關聯。

TAB_COL_STATS

數據表的列信息統計

字段

解釋

CS_ID

列統計編號

AVG_COL_LEN

數據的平均長度

MAX_COL_LEN

數據的最大長度

COLUMN_NAME

列的名字

COLUMN_TYPE

列的類型

DB_NAME

數據庫的名稱

BIG_DECIMAL_HIGH_VALUE

數據中最大的Decimal值

BIG_DECIMAL_LOW_VALUE

數據中最小的Decimal值

DOUBLE_HIGH_VALUE

數據中最大的Double值

DOUBLE_LOW_VALUE

數據中最小的Double值

LAST_ANALYZED

最新一次解析的時間戳

LONG_HIGH_VALUE

數據中最大的Long值

LONG_LOW_VALUE

數據中最小的Long值

NUM_DISTINCTS

不同記錄的數量

NUM_FALSES

為false的數量

NUM_NULLS

為null的數量

NUM_TRUES

為true的數量

TBL_ID

數據表的編號

TABLE_NAME

數據表的名稱

通過tbl_id使得TAB_COL_STATS與tbls關聯。

相關的thrift類有:BooleanColumnStatsData、DoubleColumnStatsData、LongColumnStatsData、StringColumnStatsData、BinaryColumnStatsData、

Decimal、DecimalColumnStatsData、ColumnStatisticsData、ColumnStatisticsObj、ColumnStatisticsDesc、ColumnStatistics

Sort_COLS

記錄要進行排序的列

字段

解釋

SD_ID

數據表物理信息描述的編號

COLUMN_NAME

列的名稱

ORDER

排序方式

COLUMNS_V2

用于描述列的信息

字段

解釋

CD_ID

表的編號

COMMENT

相關描述信息

COLUMN_NAME

列的名稱

TYPE_NAME

類的類型

這個表與cds通過cd_id關聯。

mysql> select * from columns_v2 where cd_id=71;

+-------+---------+-------------+-----------+-------------+

| CD_ID | COMMENT | COLUMN_NAME | TYPE_NAME | INTEGER_IDX |

+-------+---------+-------------+-----------+-------------+

| 71 | NULL | common | double | 6 |

| 71 | NULL | deptno | int | 7 |

| 71 | NULL | empno | int | 0 |

| 71 | NULL | ename | string | 1 |

| 71 | NULL | hiredate | string | 4 |

| 71 | NULL | job | string | 2 |

| 71 | NULL | mgr | int | 3 |

| 71 | NULL | sal | double | 5 |

+-------+---------+-------------+-----------+-------------+

FUNCS

記錄hive中函數的信息

字段

解釋

FUNC_ID

函數的編號

CLASS_NAME

自定義函數的類的名稱

CREATE_TIME

函數創建時間

DB_ID

作用于那個數據庫

FUNC_NAME

方法名稱

FUNC_TYPE

方法類型

OWNER_NAME

所有者名稱

OWNER_TYPE

所有者類型

這個表里面記錄一些hive自帶的函數和用戶自定義的函數。

相關的thrift類為Function。

FUNC_RU

對函數的相關參數進行描述。

字段

解釋

FUNC_ID

函數的便阿訇

RESOURCE_TYPE

資源的類型

RESOURCE_URI

資源的uri

相關的thrift類為:ResourceUri、ResourceType。

分區表

PARTITIONS

字段

解釋

PART_ID

分區的編號

CREATE_TIME

創建分區的時間

LAST_ACCESS_TIME

最近一次訪問時間

PART_NAME

分區的名字

SD_ID

存儲描述的id

TBL_ID

數據表的id

相關的thrift類為:Partition。

#記錄要按照某個字段的值進行分區

mysql> select * from partitions;

+---------+-------------+------------------+-----------------+-------+--------+

| PART_ID | CREATE_TIME | LAST_ACCESS_TIME | PART_NAME | SD_ID | TBL_ID |

+---------+-------------+------------------+-----------------+-------+--------+

| 16 | 1543046086 | 0 | pt=xiaoyao | 46 | 26 |

| 21 | 1543071202 | 0 | date=2016-05-05 | 56 | 32 |

+---------+-------------+------------------+-----------------+-------+--------+

PARTITION_PARAMS

字段

解釋

PART_ID

分區的編號

PARAM_KEY

參數

PARAM_VALUE

參數的值

mysql> select * from partition_params where part_id=21;

+---------+-----------------------+-------------+

| PART_ID | PARAM_KEY | PARAM_VALUE |

+---------+-----------------------+-------------+

| 21 | COLUMN_STATS_ACCURATE | true |

| 21 | numFiles | 1 |

| 21 | numRows | 0 |

| 21 | rawDataSize | 0 |

| 21 | totalSize | 604236 |

| 21 | transient_lastDdlTime | 1543071202 |

+---------+-----------------------+-------------+

PARTITION_KEYS

字段

解釋

TBL_ID

數據表的編號

PKEY_COMMENT

分區字段的描述

PKEY_NAME

分區字段的名稱

PKEY_TYPE

分區字段的類型

相關的thrift類為:FieldSchema。

//指定按照那個字段進行分區

mysql> select * from partition_keys;

+--------+--------------+-----------+-----------+-------------+

| TBL_ID | PKEY_COMMENT | PKEY_NAME | PKEY_TYPE | INTEGER_IDX |

+--------+--------------+-----------+-----------+-------------+

| 26 | NULL | pt | string | 0 |

| 32 | NULL | date | string | 0 |

+--------+--------------+-----------+-----------+-------------+

PARTITION_KEY_VALS

字段

解釋

PART_ID

分區編號

PART_KEY_VAL

分區字段的值

//按照值分區之后,這是第幾個分區

mysql> select * from partition_key_vals;

+---------+--------------+-------------+

| PART_ID | PART_KEY_VAL | INTEGER_IDX |

+---------+--------------+-------------+

| 16 | xiaoyao | 0 |

| 21 | 2016-05-05 | 0 |

+---------+--------------+-------------+

查看表的信息

//可以使用命令查看表的所有信息,分區表亦如是。

hive (default)> desc formatted emp;

#表類的信息,對應的表為:COLUMNS_V2

# col_name data_type comment

empno int

ename string

job string

mgr int

hiredate string

sal double

common double

deptno int

# 數據表的詳細信息 ,對應的數據表為:TBLS

Database: default

Owner: hadoop

CreateTime: Thu Jan 24 22:26:58 CST 2019

LastAccessTime: UNKNOWN

Protect Mode: None

Retention: 0

Location: hdfs://hadoop001:9000/user/hive/warehouse/emp

Table Type: MANAGED_TABLE

Table Parameters:

COLUMN_STATS_ACCURATE true

numFiles 1

numRows 0

rawDataSize 0

totalSize 701

transient_lastDdlTime 1548340028

# 表的存儲信息 對應的數據表為:TBLS

SerDe Library: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe

InputFormat: org.apache.hadoop.mapred.TextInputFormat

OutputFormat: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat

Compressed: No

Num Buckets: -1

Bucket Columns: []

Sort Columns: []

Storage Desc Params:

field.delim \t

serialization.format \t

Time taken: 0.253 seconds, Fetched: 39 row(s)

分區表信息

hive (xiaoyao)> desc formatted emp_test_p;

#列的信息

# col_name data_type comment

empno int

ename string

job string

mgr int

hiredate string

sal double

common double

deptno int

# 分區信息

# col_name data_type comment

pt string

# 表信息

Database: xiaoyao

Owner: hadoop

CreateTime: Sat Nov 24 15:50:25 CST 2018

LastAccessTime: UNKNOWN

Protect Mode: None

Retention: 0

Location: hdfs://hadoop001:9000/user/hive/warehouse/xiaoyao.db/emp_test_p

Table Type: MANAGED_TABLE

Table Parameters:

transient_lastDdlTime 1543045825

# 存儲信息

SerDe Library: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe

InputFormat: org.apache.hadoop.mapred.TextInputFormat

OutputFormat: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat

Compressed: No

Num Buckets: -1

Bucket Columns: []

Sort Columns: []

Storage Desc Params:

field.delim \t

serialization.format \t

刪除表

1.Hive中刪除

drop table emp;

2.在MetaStore刪除數據表

drop procedure if exists t1;

create procedure t1 ( in tbinput int)

begin

declare v_sd_id int ;

declare v_part_id int ;

declare v_cd_id int ;

declare v_serde_id int ;

select tbinput;

select SD_ID into v_sd_id from tbls where TBL_ID = tbinput;

select part_id into v_part_id from partitions where tbl_id = tbinput;

select cd_id , serde_id into v_cd_id,v_serde_id from sds where sd_id = v_sd_id;

select v_sd_id,v_part_id,v_cd_id,v_serde_id;

if v_part_id is not null then

delete from partition_params where part_id = v_part_id;

delete from partition_key_vals where part_id = v_part_id;

end if;

delete from serdes where serde_id = v_serde_id;

delete from serde_params where serde_id = v_serde_id;

delete from columns_v2 where cd_id = v_cd_id;

delete from sds where sd_id = v_sd_id;

delete from partitions where tbl_id = tbinput;

delete from partition_keys where tbl_id = tbinput;

delete from table_params where tbl_id = tbinput;

delete from tbls where tbl_id = tbinput;

end ;

存放sql語句的位置:hive-1.1.0-cdh5.7.0/metastore/scripts/upgrade/mysql/hive-schema-1.1.0.mysql.sql

存放thrift相關文件的位置:hive-1.1.0-cdh5.7.0/metastore/if/hive_metastore.thrift

存放java相關文件的位置:hive-1.1.0-cdh5.7.0/metastore/src/gen/thrift/gen-javabean/org/apache/hadoop/hive/metastore/api

參考文檔:

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的hive metastore mysql_Hive MetaStore的结构的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。