Hive 的元信息存储在 mysql 数据库里。我们可以在 hive 数据库里,做一个映射,把存储 Hive 元信息的数据库,映射为 hive 的 sys 数据库。就像 mysql 的 sys 数据库存储所有的数据库和表一样。
hive-site.xml
首先,hive-site.xml 里已经设置好连接 mysql 的用户名,密码和 url。然后要增加以下内容
<property>
<name>hive.metastore.db.type</name>
<value>MYSQL</value>
<description>
Expects one of [derby, oracle, mysql, mssql, postgres].
Type of database used by the metastore. Information schema & JDBCStorageHandler depend on it.
</description>
</property>
然后执行以下命令在 hive 中生成 sys 数据库:
${HIVE_HOME}/bin/schematool -dbType hive -metaDbType mysql -initSchema
然后可以进入 hive 环境,查看 hive 的元信息,不用进入到 mysql 中了。
查看 sys 表中的定义
use sys;
hive> show create table tbls;
OK
CREATE EXTERNAL TABLE `tbls`(
`tbl_id` bigint COMMENT 'from deserializer',
`create_time` int COMMENT 'from deserializer',
`db_id` bigint COMMENT 'from deserializer',
`last_access_time` int COMMENT 'from deserializer',
`owner` string COMMENT 'from deserializer',
`retention` int COMMENT 'from deserializer',
`sd_id` bigint COMMENT 'from deserializer',
`tbl_name` string COMMENT 'from deserializer',
`tbl_type` string COMMENT 'from deserializer',
`view_expanded_text` string COMMENT 'from deserializer',
`view_original_text` string COMMENT 'from deserializer',
`is_rewrite_enabled` boolean COMMENT 'from deserializer')
ROW FORMAT SERDE
'org.apache.hive.storage.jdbc.JdbcSerDe'
STORED BY
'org.apache.hive.storage.jdbc.JdbcStorageHandler'
WITH SERDEPROPERTIES (
'serialization.format'='1')
TBLPROPERTIES (
'bucketing_version'='2',
'hive.sql.database.type'='METASTORE',
'hive.sql.query'='SELECT `TBL_ID`, `CREATE_TIME`, `DB_ID`, `LAST_ACCESS_TIME`, `OWNER`, `RETENTION`, `SD_ID`, `TBL_NAME`, `TBL_TYPE`, `VIEW_EXPANDED_TEXT`, `VIEW_ORIGINAL_TEXT`, `IS_REWRITE_ENABLED` FROM `TBLS`',
'transient_lastDdlTime'='1642735432')
‘hive.sql.database.type’=‘METASETORE’ 是有特殊含义的,指连接 metastore 后端数据库,用户名,密码,url,driver 都用 MetaStore 的配置,不用重输一遍。