Hive

Hive的元数据配置信息在 conf/hive-site.xml 中, key值为:

  • javax.jdo.option.ConnectionURL , 这里我会一般用Mysql地址
  • javax.jdo.option.ConnectionDriverName, 如果是MySQL对应的驱动连接器
  • javax.jdo.option.ConnectionUserName
    • javax.jdo.option.ConnectionPassword

除了数据库连接外, 还要修改几个log存放的位置

  • hive.querylog.location 查询过程时的本地log文件存放目录
  • hive.exec.local.scratchdir Local scratch space for hive jobs
  • hive.downloaded.resources.dir 临时本地目录
-- 数据库地址
   <value>jdbc:mysql://127.0.0.1:3306/hive_metastore?createDatabaseIfNotExist=true&amp;useSSL=false</value>

-- 数据库连接器的reference
   <value>com.mysql.jdbc.Driver</value>

Hive元数据 表ER关系(MySQL)

(由MySQL Workbench 逆向生成)

核心表: DBS, TBLS,COLS, PARTITIONS

DBS

数据库表, 一个库对应一行DB_ID, 相应的数据库属性信息外连到 DATABASE_PARAMS 表 (dbid + k + v 三元组).

TBLS

TBLS, 表名称和基础信息在这个表, 核心字段


CREATE TABLE `TBLS` (
  `TBL_ID` bigint NOT NULL,    表唯一ID
  `CREATE_TIME` int NOT NULL,
  `DB_ID` bigint DEFAULT NULL,       关联数据库ID
  `LAST_ACCESS_TIME` int NOT NULL,
  `OWNER` varchar(767) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL,
  `RETENTION` int NOT NULL,
  `SD_ID` bigint DEFAULT NULL,              序列化与反序列化ID
  `TBL_NAME` varchar(256) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL,
  `TBL_TYPE` varchar(128) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL,
  `VIEW_EXPANDED_TEXT` mediumtext,
  `VIEW_ORIGINAL_TEXT` mediumtext,
  `IS_REWRITE_ENABLED` bit(1) NOT NULL,
  PRIMARY KEY (`TBL_ID`),
  UNIQUE KEY `UNIQUETABLE` (`TBL_NAME`,`DB_ID`),
  KEY `TBLS_N50` (`SD_ID`),
  KEY `TBLS_N49` (`DB_ID`),
  CONSTRAINT `TBLS_FK1` FOREIGN KEY (`SD_ID`) REFERENCES `SDS` (`SD_ID`),
  CONSTRAINT `TBLS_FK2` FOREIGN KEY (`DB_ID`) REFERENCES `DBS` (`DB_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1

表类型一共有这几种: MANAGED_TABLE, EXTERNAL_TABLE, INDEX_TABLE, VIRTUAL_VIEW

表的附加信息有 TABLE_PARAMS TBL_PRIVS

分区有关的表: PARTITIONS, PARTITION_KEYS, PARTITION_KEY_VALS, PARTITION_PARAMS

PART_ID 表示一个分区, 它关联SD_ID, TBL_ID

PARTITION表 存放了分区ID, 存有 SD_ID和TBL_ID

列相关的表 COLUMNS_V2

列明细表

存储有关的表: SDS, SD_PARAMS, SERDES, SERDE_PARAMS

SD_ID 不是 SERDE_ID 缩写, 而是指存储信息

SDS是存储的主表,包含了数据文件输入和输出格式,所在HDFS路径, 有没有压缩, 分桶数量
INPUT_FORMAT, OUTPUT_FORMAT, LOCATION, IS_COMPRESSED, NUM_BUCKETS
SD_PARAMS 是存储的附加信息表, 比如在建表时指定了 STORED BY storage.handler.class.name WITH SERDEPROPERTIES ... 就会产生对应的记录.

在SDS中表外键 SERDE_ID 关联 SERDES表 ---- 存储序列化使用的类信息, 比如常用的:
org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe 这个类

SERDE_PARAM 存储列分隔符,列分隔符, 如 field.delim

FUNCS 函数表

执行show functions