【Hive实战】探索Hive 2.X以及更早版本的MetaStore

news2024/10/5 17:18:36

探索Hive 2.X以及更早版本的MetaStore

文章目录

  • 探索Hive 2.X以及更早版本的MetaStore
    • 概述
    • 配置元数据服务和元数据存储库
      • 基础配置参数
      • 其他配置参数
      • 默认配置
      • 配置元服务数据库
        • 使用内嵌模式的Derby库
        • 使用远程数据存储库
      • 配置元数据服务
        • 本地/内嵌服务配置
        • 远程服务配置
      • 元数据服务配置举例
        • 元服务的服务端配置
        • 元数据服务的客户端配置
      • 元存储Schema 的一致性与升级
    • Hive Schema Tool
      • Metastore Schema Verification
      • The `schematool` Command
      • 示例
    • 元存储数据库
      • 常用表说明
      • 新增Hive库,表与元数据存储库的关系

概述

Metadata 指的是Hive元数据,元数据包含了由hive创建的库、表相关的元信息。

Metastore 指的是元数据服务。Hive元数据都是通过Hive Metastore访问的。MetaStore会被查询处理器在计划生成过程中使用。元数据服务包含以下部分

  • Metastore Server(元数据服务端) - 这是Thrift服务器(在metastore/if/hive_metastore.if中定义的接口),为客户端的元数据请求提供服务。它将大多数请求委托给底层元数据存储和包含数据的Hadoop文件系统。

  • Object Store(对象存储) - ObjectStore类处理对实际元数据的访问,并存储在SQL存储中。目前的实现使用JPOX ORM解决方案,它是基于JDA规范的。它可以与JPOX支持的任何数据库一起使用。新的元存储(基于文件或基于xml)可以通过实现接口MetaStore来添加。FileStore是一个旧版本的元存储的部分实现,可能很快就会被废弃。

  • Metastore客户端 - 在metastore/src中有python、java、php Thrift客户端。Java生成的客户端被扩展为HiveMetaStoreClient,被查询处理器(ql/metadta)使用。这是所有其他Hive组件的主要接口。

  • db(元数据存储库)- 元数据是通过JPOX ORM解决方案(Data Nucleus)进行持久化的,因此任何被其支持的数据库都可以被Hive使用。支持的数据库矩阵如下:

    数据库类型最小要求版本对应的参数值其他
    MySQL5.6.17mysql
    Postgres9.1.13postgres
    Oracle11goraclehive.metastore.orm.retrieveMapNullsAsEmptyStrings
    MS SQL Server2008 R2mssql

    在这里插入图片描述

配置元数据服务和元数据存储库

Hive 配置参数,若无特别说明,默认指在hive-site.xml文件中。

元数据服务存在三种模式

  • 内嵌模式:使用的是内嵌的Derby数据库来存储元数据,也不需要额外起Metastore服务。数据库和Metastore服务都嵌入在主Hive Server进程中。这个是默认的,配置简单,但是一次只能一个客户端连接,适用于用来实验,不适用于生产环境。

  • 本地模式:采用外部数据库来存储元数据,目前支持的数据库有:MySQL、Postgres、Oracle、MS SQL Server.在这里我们使用MySQL。 本地模式不需要单独起metastore服务,用的是跟hive在同一个进程里的metastore服务。也就是说当你启动一个hive 服务,里面默认会帮我们启动一个metastore服务。hive根据hive.metastore.uris参数值来判断,如果为空,则为本地模式

  • 远程模式:需要单独起metastore服务,然后每个客户端都在配置文件里配置连接到该metastore服务。远程模式的metastore服务和hive运行在不同的进程里。

基础配置参数

Configuration ParameterDescription功能
javax.jdo.option.ConnectionURL包含元数据的数据存储的JDBC连接字符串Hive Metastore的元数据存储库
javax.jdo.option.ConnectionDriverName包含元数据的数据存储的JDBC驱动类名称Hive Metastore的元数据存储库
hive.metastore.urisHive连接到这些URI中的一个,以向远程Metastore(以逗号分隔的URI列表)发出元数据请求。默认值为空。Hive Metastore的Server
hive.metastore.local本地或远程元存储(从Hive 0.10开始删除: 如果hive.metastore.uris为空,则假定为local模式,否则为remote模式)Hive Metastore的Server
hive.metastore.warehouse.dir用户hive表的存储默认位置URIHive Metastore的Server

Hive Metastore是无状态的,因此可以有多个Metastore实例来实现高可用性。使用hive.metastore.uris,可以指定多个远程Hive Metastore Server。Hive默认使用列表中的第一个,但在连接失败时将随机选择一个并尝试重新连接。

其他配置参数

除了基础配置参数,剩余的其他配置参数主要在Java文件HiveConf.java中。不同版本之间的参数的默认值存在区别,可以通过阅读源码发现或者查询默认配置文件hive-site.xmlhivemetastore-site.xml中确认。。以下是部分版本的一些配置举例:

Configuration ParameterDescriptionDefault Value
hive.metastore.metadb.dir文件库元数据基础目录的位置。(该功能在0.4.0版本中随着HIVE-143而被移除)。
hive.metastore.rawstore.impl实现org.apache.hadoop.hive.metastore.rawstore接口的类的名称。该类用于存储和检索原始元数据对象,如表、数据库。(Hive 0.8.1及以后版本。)org.apache.hadoop.hive.metastore.ObjectStore
org.jpox.autoCreateSchema如果不存在schema ,在启动时创建必要的schema 。(schema 包括表、列等。)在创建一次后设置为false。
org.jpox.fixedDatastore数据存储Schema是否是固定的。
datanucleus.autoStartMechanism是否在启动时进行初始化。
hive.metastore.ds.connection.url.hook用于获取JDO连接URL的钩子的名称。如果为空,则使用javax.jdo.option.ConnectionURL中的值作为连接URL。(Hive 0.6及以后的版本。)
hive.metastore.ds.retry.attempts如果出现连接错误,重试对后备数据存储的调用的次数。(Hive 0.6到0.12;在0.13.0中移除–使用hive.hmshandler.retry.attempts代替。)1
hive.metastore.ds.retry.interval数据存储重试间隔的毫秒数。(Hive 0.6到0.12;在0.13.0中移除–使用hive.hmshandler.retry.interval代替。)1000
hive.metastore.server.min.threadsThrift服务器池中的最小工作线程数。 (Hive 0.6及以后版本。)200
hive.metastore.server.max.threadsThrift服务器池中的最大工作线程数。 (Hive 0.6及以后版本。)100000 since Hive 0.8.1
hive.metastore.filter.hookMetastore钩子类,用于在客户端进一步过滤元数据的读取结果。(Hive 1.1.0及以后的版本。)org.apache.hadoop.hive.metastore.DefaultMetaStoreFilterHookImpl
hive.metastore.portHive元存储监听器端口。(Hive 1.3.0及以后的版本。)9083

默认配置

默认配置设置了一个嵌入的元存储数据库,在单元测试中使用。

配置元服务数据库

使用内嵌模式的Derby库

Derby是嵌入式元存储的默认数据库。

Config ParamConfig ValueComment
javax.jdo.option.ConnectionURLjdbc:derby:;databaseName=../build/test/junit_metastore_db;create=trueDerby database located at hive/trunk/build…
javax.jdo.option.ConnectionDriverNameorg.apache.derby.jdbc.EmbeddedDriverDerby embeded JDBC driver class.
hive.metastore.warehouse.dirfile://${user.dir}/../build/ql/test/data/warehouse使用本地的文件系统

使用远程数据存储库

使用一个传统的独立RDBMS服务器。下面的例子配置将在MySQL服务器中设置一个元存储。这种元存储数据库的配置被推荐用于任何实际使用。

Config ParamConfig ValueComment
javax.jdo.option.ConnectionURLjdbc:mysql://<host name>/<database name>?createDatabaseIfNotExist=true元数据存储库的连接URL
javax.jdo.option.ConnectionDriverNamecom.mysql.jdbc.DriverMySQL JDBC driver class
javax.jdo.option.ConnectionUserName<user name>MySQL server的用户名
javax.jdo.option.ConnectionPassword<password>MySQL server的用户密码

配置元数据服务

本地/内嵌服务配置

在采用内嵌式元存储配置时,元存储服务组件就像Hive客户端中的一个库一样被使用。每个Hive客户端将打开一个与数据库的连接,并对其进行SQL查询。确保数据库可以从执行Hive查询的机器上访问,因为这是一个本地存储。还要确保JDBC客户端库在Hive客户端的classpath中。这种配置通常与HiveServer2一起使用(要在HiveServer2中使用嵌入式元存储,请在hiveserver2启动命令的命令行参数中添加"–hiveconf hive.metastore.uris=’ '"或者使用hiveserver2-site.xml(在Hive 0.14中可用))。

Config ParamConfig ValueComment
hive.metastore.urisHive连接到这些URI中的一个,以向远程Metastore(以逗号分隔的URI列表)发出元数据请求。默认值为空。
hive.metastore.localfalse元存储使用本地/内嵌
hive.metastore.warehouse.dir<base hdfs path>指向HDFS中的非外部Hive表的默认位置。

远程服务配置

在远程元存储设置中,所有的Hive客户端都会与元存储服务建立连接,而元存储服务又会向数据存储(本例中为MySQL)查询元数据。元存储服务器和客户端使用Thrift协议进行通信。从Hive 0.5.0开始,你可以通过执行以下命令来启动Thrift服务器:

hive --service metastore
# 制定元数据服务的服务端口
hive --service metastore -p <port_num>

In versions of Hive earlier than 0.5.0, it’s instead necessary to run the Thrift server via direct execution of Java:

在0.5.0之前的Hive版本中,反而需要通过直接执行Java来运行Thrift服务器:

$JAVA_HOME/bin/java  -Xmx1024m -Dlog4j.configuration=file://$HIVE_HOME/conf/hms-log4j.properties -Djava.library.path=$HADOOP_HOME/lib/native/Linux-amd64-64/ -cp $CLASSPATH org.apache.hadoop.hive.metastore.HiveMetaStore

如果你直接执行Java,那么JAVA_HOMEHIVE_HOMEHADOOP_HOME必须正确设置;CLASSPATH应该包含HadoopHive(lib和auxlib)Java jars

元数据服务配置举例

采用远程元存储(数据库采用Mysql)+元服务远程模式。

在启动Hive客户端或HiveMetastore服务器之前,将MySQL jdbc库放在HIVE_HOME/lib中。

在这里插入图片描述

元服务的服务端配置

Config ParamConfig ValueComment
javax.jdo.option.ConnectionURLjdbc:mysql://<host name>/<database name>?createDatabaseIfNotExist=true数据库连接的URL
javax.jdo.option.ConnectionDriverNamecom.mysql.jdbc.DriverMySQL JDBC 驱动类
javax.jdo.option.ConnectionUserName<user name>MySQL server用户名
javax.jdo.option.ConnectionPassword<password>MySQL server用户密码
hive.metastore.warehouse.dir<base hdfs path>hive表的存储路径

从Hive 3.0.0(HIVE-16452)开始,元存储数据库存储了一个GUID,元存储客户端可以使用Thrift API get_metastore_db_uuid进行查询,以识别后端数据库实例。HiveMetaStoreClient可以通过getMetastoreDbUuid()方法访问该API。

元数据服务的客户端配置

即hive客户端配置

Config ParamConfig ValueComment
hive.metastore.uristhrift://<host_name>:<port>Thrift元存储服务器的主机和端口。如果指定了hive.metastore.thrift.bind.host,主机应该与该配置相同。请阅读动态服务发现配置参数中的更多内容。
hive.metastore.localfalse元数据服务远程模式
hive.metastore.warehouse.dir<base hdfs path>hive表的存储路径

元存储Schema 的一致性与升级

Version

Introduced in Hive 0.12.0. See HIVE-3764.

Hive现在会在元存储数据库中记录schema版本,并验证元存储schema版本是否与将要访问元存储的Hive二进制文件兼容。请注意,默认情况下,Hive的隐式创建或改变现有schema的属性是禁用的。Hive不会试图以隐式方式改变元存储模式。当你针对一个旧的schema执行Hive查询时,它将无法访问元存储。

要禁止schema检查并允许元存储隐式修改模式,你需要在hive-site.xml中设置配置属性hive.metastore.schema.verificationfalse

Hive Schema Tool

从0.12版开始,Hive发行版现在包括一个用于Hive元存储schema操作的离线工具。该工具可以用来为当前的Hive版本初始化元存储schema。它还可以处理将模式从旧版本升级到当前版本。它会尝试从元存储中找到当前的schema,如果它是可用的。这将适用于未来的升级,如0.12.0到0.13.0。如果是从0.7.0或0.10.0这样的旧版本升级,可以指定现有元存储的schema版本作为工具的命令行选项。

Metastore Schema Verification

Hive现在会在元存储数据库中记录Schema版本,并验证元存储Schema版本是否与将要访问元存储的Hive二进制文件兼容。请注意,默认情况下,Hive的隐式创建或改变现有Schema的属性是禁用的。Hive不会试图以隐式方式改变元存储Schema。当你针对一个旧模式执行Hive查询时,它将无法访问元存储:

$ build/dist/bin/hive -e "show tables"
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.metastore.HiveMetaStoreClient

日志中会出现以下错误信息

...
Caused by: MetaException(message:Version information not found in metastore. )
...

默认情况下,配置属性hive.metastore.schema.verification为false,如果模式不匹配,metastore会隐式写入Schema版本。要启用严格的模式验证,你需要在hive-site.xml中把这个属性设置为true。

schematool会找到初始化或升级schema所需的SQL脚本,然后针对后端数据库执行这些脚本。元存储数据库的连接信息,如JDBC URL、JDBC驱动和数据库凭证都是从Hive配置中提取的。如果需要,你可以提供其他的数据库凭证。

The schematool Command

schematool会找到初始化或升级schema所需的SQL脚本,然后针对后端数据库执行这些脚本。元存储数据库的连接信息,如JDBC URL、JDBC驱动和数据库凭证都是从Hive配置中提取的。

schematool 命令用以下选项调用Hive模式工具:

$ schematool -help
usage: schemaTool
 -dbType <databaseType>             Metastore database type
 -driver <driver>                   Driver name for connection
 -dryRun                            List SQL scripts (no execute)
 -help                              Print this message
 -info                              Show config and schema details
 -initSchema                        Schema initialization
 -initSchemaTo <initTo>             Schema initialization to a version
 -metaDbType <metaDatabaseType>     Used only if upgrading the system catalog for hive
 -passWord <password>               Override config file password
 -upgradeSchema                     Schema upgrade
 -upgradeSchemaFrom <upgradeFrom>   Schema upgrade from a version
 -url <url>                         Connection url to the database
 -userName <user>                   Override config file user name
 -verbose                           Only print SQL statements
(Additional catalog related options added in Hive 3.0.0 (HIVE-19135] release are below.
 -createCatalog <catalog>       Create catalog with given name
 -catalogLocation <location>        Location of new catalog, required when adding a catalog
 -catalogDescription <description>  Description of new catalog
 -ifNotExists                       If passed then it is not an error to create an existing catalog
 -moveDatabase <database>                     Move a database between catalogs.  All tables under it would still be under it as part of new catalog. Argument is the database name. Requires --fromCatalog and --toCatalog parameters as well
 -moveTable  <table>                Move a table to a different database.  Argument is the table name. Requires --fromCatalog, --toCatalog, --fromDatabase, and --toDatabase 
 -toCatalog  <catalog>              Catalog a moving database or table is going to.  This is required if you are moving a database or table.
 -fromCatalog <catalog>             Catalog a moving database or table is coming from.  This is required if you are moving a database or table.
 -toDatabase  <database>            Database a moving table is going to.  This is required if you are moving a table.
 -fromDatabase <database>           Database a moving table is coming from.  This is required if you are moving a table.

dbType的取值以下一种:

derby|mysql|postgres|oracle|mssql

示例

  • 为新的Hive设置初始化为当前schema :schematool -dbType mysql -initSchema

    $ schematool -dbType derby -initSchema
    Metastore connection URL:        jdbc:derby:;databaseName=metastore_db;create=true
    Metastore Connection Driver :    org.apache.derby.jdbc.EmbeddedDriver
    Metastore connection User:       APP
    Starting metastore schema initialization to 0.13.0
    Initialization script hive-schema-0.13.0.derby.sql
    Initialization script completed
    schemaTool completed
    
  • 获取schema 的信息:

    $ schematool -dbType derby -info
    Metastore connection URL:        jdbc:derby:;databaseName=metastore_db;create=true
    Metastore Connection Driver :    org.apache.derby.jdbc.EmbeddedDriver
    Metastore connection User:       APP
    Hive distribution version:       0.13.0
    Metastore schema version:        0.13.0
    schemaTool completed
    
  • 试图用较早的元存储获取schema信息:

    $ schematool -dbType derby -info
    Metastore connection URL:        jdbc:derby:;databaseName=metastore_db;create=true
    Metastore Connection Driver :    org.apache.derby.jdbc.EmbeddedDriver
    Metastore connection User:       APP
    Hive distribution version:       0.13.0
    org.apache.hadoop.hive.metastore.HiveMetaException: Failed to get schema version.
    *** schemaTool failed ***
    

    由于旧的元存储没有存储版本信息,该工具报告了一个检索错误。

  • 通过指定’from’版本,从0.10.0版本升级schema :

    $ schematool -dbType derby -upgradeSchemaFrom 0.10.0
    Metastore connection URL:        jdbc:derby:;databaseName=metastore_db;create=true
    Metastore Connection Driver :    org.apache.derby.jdbc.EmbeddedDriver
    Metastore connection User:       APP
    Starting upgrade metastore schema from version 0.10.0 to 0.13.0
    Upgrade script upgrade-0.10.0-to-0.11.0.derby.sql
    Completed upgrade-0.10.0-to-0.11.0.derby.sql
    Upgrade script upgrade-0.11.0-to-0.12.0.derby.sql
    Completed upgrade-0.11.0-to-0.12.0.derby.sql
    Upgrade script upgrade-0.12.0-to-0.13.0.derby.sql
    Completed upgrade-0.12.0-to-0.13.0.derby.sql
    schemaTool completed
    
  • 升级试运行可以用来列出给定升级所需的脚本

    $ build/dist/bin/schematool -dbType derby -upgradeSchemaFrom 0.7.0 -dryRun
    Metastore Connection Driver :    org.apache.derby.jdbc.EmbeddedDriver
    Metastore connection User:       APP
    Starting upgrade metastore schema from version 0.7.0 to 0.13.0
    Upgrade script upgrade-0.7.0-to-0.8.0.derby.sql
    Upgrade script upgrade-0.8.0-to-0.9.0.derby.sql
    Upgrade script upgrade-0.9.0-to-0.10.0.derby.sql
    Upgrade script upgrade-0.10.0-to-0.11.0.derby.sql
    Upgrade script upgrade-0.11.0-to-0.12.0.derby.sql
    Upgrade script upgrade-0.12.0-to-0.13.0.derby.sql
    schemaTool completed
    

    如果你只是想找出模式升级所需的所有脚本,这很有用。

  • 将一个数据库及其下的表从默认的Hive目录移到自定义的spark目录中

    build/dist/bin/schematool -moveDatabase db1 -fromCatalog hive -toCatalog spark
    
  • 将表从Hive目录移至Spark目录

    # Create the desired target database in spark catalog if it doesn't already exist.
    beeline ... -e "create database if not exists newdb";
    schematool -moveDatabase newdb -fromCatalog hive -toCatalog spark
    
    # Now move the table to target db under the spark catalog.
    schematool -moveTable table1 -fromCatalog hive -toCatalog spark  -fromDatabase db1 -toDatabase newdb
    

元存储数据库

2.X的元数据服务采用Mysql作为元存储数据库表结构如下:

Hive Metastore 2.X 表结构
Hive Metastore 2.X 表结构 Mysql
序号表名备注关联
1dbs记录Hive数据库的信息
2database_params记录DB的一些扩展信息,便于进行特殊属性的扩展
3db_privs记录该DB下的权限记录信息
4funcs记录hive中函数的信息
5tbls记录Hive数据表的信息
6partitions记录Hive表的DDL分区的信息
7idxs记录Hive表的索引信息
8partition_keys记录Hive表的分区字段
9tab_col_stats记录Hive表的列信息的统计
10table_params记录Hive表的一些扩展信息,便于进行特殊属性的扩展
11tbl_col_privs记录hive表的列权限认证信息
12tbl_privs记录hive表的表权限认证信息
13sds 记录Hive表的存储信息,计算引擎运行时需要的input与output 、location路径以及序列化的class信息
14bucketing_cols记录Hive表bucket信息
15sd_params记录Hive表的存储信息的扩展信息
16skewed_col_names数据倾斜相关
17skewed_col_value_loc_map数据倾斜相关
18skewed_values数据倾斜相关
19sort_cols记录要进行排序的列
20cds记录字段的编号
21serdes记录序列化和反序列化信息
22index_params记录hive表索引的扩展信息
23global_privs记录全局权限信息
24part_col_privs记录分区字段的权限信息
25part_privs记录分区的权限信息
26roles用户角色
27role_map记录角色权限
28func_ru用于存储该udf的类型及指向的路径。
29part_col_stats记录分区的字段的统计信息
30skewed_string_list数据倾斜相关
31skewed_string_list_values数据倾斜相关
32compaction_queue压缩相关
33completed_compactions压缩相关
34next_compaction_queue_id压缩相关
35completed_txn_components事务管理?
36txn_components事务管理?
37txns事务管理?
38next_txn_id事务管理?
39version记录Hive的版本
40sequence_table记录Hive元数据mode的下一个序列值
41columns_v2记录列的基本信息
42delegation_tokens???
43aux_table
44hive_locks锁?
45next_lock_id锁?
46key_constraints表约束?
47type_fields类型字段??
48types类型??
49nucleus_tables这些表是被管理的由DataNucleus ORM层创建
50notification_sequence通知序列 ?
51notification_log通知日志 ?
52master_keys管理主键?
53write_set
54partition_events分区上的事件
55partition_key_vals分区键的值
56partition_params分区上的扩展信息
57serde_params序列化相关扩展信息

常用表中文支持

alter table hive_metastore.dbs modify column `DESC` varchar(4000) character set utf8;
alter table hive_metastore.database_params modify column PARAM_VALUE varchar(4000) character set utf8;

alter table hive_metastore.COLUMNS_V2 modify column `COMMENT` varchar(256) character set utf8;
alter table hive_metastore.TABLE_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;
alter table hive_metastore.PARTITION_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;
alter table hive_metastore.PARTITION_KEYS modify column PKEY_COMMENT varchar(4000) character set utf8;

alter table hive_metastore.INDEX_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;

常用表说明

DAM业务使用表

DBS

字段注释
DB_ID数据库的编号,默认的数据库编号为1,如果创建其他数据库的时候,这个字段会自增,主键
DESC对数据库进行一个简单的介绍
DB_LOCATION_URI数据库的存放位置,default库是存放在hdfs://ip:9000/user/hive/warehouse,如果是其他数据库,就在后面添加目录,默认位置可以通过参数hive.metastore.warehouse.dir来设置
NAME数据库的名称
OWNER_NAME数据库拥有主体的名称
OWNER_TYPE数据库拥有主体的类型,USER:代表OWNER_NAME存放的是用户名;ROLE:代表OWNER_NAME存放的是角色名

DATABASE_PARAMS

字段注释
DB_ID数据库编号
PARAM_KEY参数的key值
PARAM_VALUE参数值

DB_PRIVS

新建的库时,无需对本用户进行授权(无默认新增记录)

字段注释
DB_GRANT_ID数据库授权编号
CREATE_TIME授权时间
DB_ID被授权的数据库ID
GRANT_OPTION授权操作
GRANTOR授权账户
GRANTOR_TYPE授权类型
PRINCIPAL_NAME被授权主体名称
PRINCIPAL_TYPE被授权主体类型
DB_PRIV数据库权限

TBLS

字段注释
TBL_ID在hive中创建表的时候自动生成的一个id,用来表示,主键
CREATE_TIME创建的数据表的时间,使用的是时间戳
DB_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

TBL_PRIVS

苏宁内部改造(在新建表之后,会向此表中插入一条授权记录 bigdata拥有此表所有权限)

字段注释
TBL_GRANT_ID表授权编号
CREATE_TIME授权时间
GRANT_OPTION授权操作
GRANTOR授权者
GRANTOR_TYPE授权类型 USER ROLE GROUP
PRINCIPAL_NAME被授权主体名称
PRINCIPAL_TYPE被授权主体类型 USER ROLE GROUP
TBL_PRIV表权限类别
TBL_ID表的编号

TABLE_PARAMS

字段注释
TBL_ID数据的编号
PARAM_KEY参数的key值
PARAM_VALUE参数的值

COLUMNS_V2

所有Hive表中的字段都存于此表。用于描述列的信息

字段注释
CD_ID表的编号
COMMENT字段注释说明
COLUMN_NAME列的名称
TYPE_NAME列的类型

BUCKETING_COLS

桶表字段

字段注释
SD_ID表的编号
BUCKET_COL_NAME作为分桶的列名称
INTEGER_IDX列的索引

SORT_COLS

记录要进行排序的列

字段注释
SD_ID数据表物理信息描述的编号
COLUMN_NAME用来列的名称
ORDER排序方式

PARTITIONS

字段注释
PART_ID分区的编号
CREATE_TIME创建分区的时间
LAST_ACCESS_TIME最近一次访问时间
PART_NAME分区的名字
SD_ID存储描述的id
TBL_ID数据表的id

PARTITION_KEYS

字段注释
TBL_ID数据表的编号
PKEY_COMMENT分区字段的描述
PKEY_NAME分区字段的名称
PKEY_TYPE分区字段的类型

PARTITION_PARAMS

字段注释
PART_ID分区的编号
PARAM_KEY参数的key值
PARAM_VALUE参数的值

SDS

字段注释
SD_ID主键
CD_ID数据表ID
INPUT_FORMAT数据输入格式
IS_COMPRESSED是否对数据进行了压缩
IS_STOREDASSUBDIRECTORIES是否进行存储在子目录
LOCATION数据存放位置
NUM_BUCKETS分桶的数量
OUTPUT_FORMAT数据的输出格式
SERDE_ID序列和反序列的信息

SD_PARAMS

字段注释
SD_ID主键,记录序列化的编号
PARAM_KEY参数的key值
PARAM_VALUE参数的值

SERDE_PARAMS

字段注释
SERDE_ID主键,记录序列化的编号
PARAM_KEY参数的key值
PARAM_VALUE参数的值

SERDES

记录序列化和反序列化信息

字段注释
SERDE_ID主键,记录序列化的编号
NAME序列化和反序列化名称,默认为表名
SLIB使用的是哪种序列化方式

新增Hive库,表与元数据存储库的关系

新建Hive库会向元数据库写入数据,

  • 一个库,dbs表中新增一条记录
  • 库用有几个扩展参数,database_params表新增几条记录

新建非分区表会向元数据库中以下表写入数据:

  • 一张表,表中有几个字段columns_v2表中就新增几条记录
  • 一张表, tbls中新增一条记录
  • table_params表新增几条记录???(comment,last_modified_by, last_modified_time,numFiles,totalSize,transient_lastDdlTime)
  • 一张表, cds中新增一条记录
  • 一张表, sds中新增一条记录
  • 一张表,有几个序列扩展字段sds_params就新增几条记录
  • sds中新增几条记录serder, serder_params就新增几条记录
  • tbl_privs与授权数相关

分区层级

  • 在非分区表的基础上 新建一个分区就会 sds中新增一条记录
  • 一个分区,PARTITIONS表中就增加一条记录,与 sds表的记录应该是一对一
  • sds中新增几条记录serder, serder_params就新增几条记录
  • PARTITIONS_params表新增几条记录???(last_modified_by, last_modified_time,numFiles,totalSize,transient_lastDdlTime)
  • 表有几个分区字段,partition_keys就增加几条记录
  • partition_key_vals,按照分区层级,每增加一个分区就增加与层级数相同的记录

分桶表

与分区表取并集

  • 有几个分桶字段,bucketing_cols就增加几条记录,
  • 粒度与sds表相关,sds表一条记录可以对应bucketing_cols表几条记录

排序表

与分桶表取并集

  • 有几个排序字段,sort_cols表就增加几条记录
  • 粒度与sds表相关,sds表一条记录可以对应sort_cols表几条记录

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/457983.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java Collection源码分析(JDk corretto 11)

文章目录 Collection 系列源码分析 (JDK Amazon corretto 11)Collection接口Iterable接口 子接口 QueueQueue的子接口 Deque双端队列 子接口ListArrayList 实现类序列化与反序列化(后续解决)获取Calss对象的方式 主要有三种&#xff1a;Arrays工具类System类 LinkedList实现类t…

kotlin的let,with,run,apply,also,异同区别

kotlin的let&#xff0c;with&#xff0c;run&#xff0c;apply&#xff0c;also&#xff0c;异同区别 例如&#xff1a; class Person(var name: String, var age: Int) {fun eat() {println("吃饭")}fun work(hour: Int): Int {println("$name $age 工作 $ho…

【论文写作】如何写引言?应该思考什么问题?总体架构!!!

结构 大多数的科技论文都聚焦于简单地说明&#xff0c;做了什么&#xff0c;发现了什么&#xff1f;虽然这个可以帮助你写出一篇研究型论文当中的核心的东西&#xff08;方法论和结果&#xff09;&#xff0c;但是不能完全把引言的部分完成。在这篇文章当中&#xff0c;将展示…

【Python】Python学习笔记(三)条件语句

条件语句 Python中的条件语句与c/cpp基本无异。 if语句 基本结构见以下代码。 Python使用缩进控制if/else语句之间的嵌套关系。 #判断两数是否相等。a int(input(a:)) b int(input(b:))if a b:print(Same) else:print(No Same)elif 代替了cpp中“else if”的写法&#…

数据结构(顺序结构、链式结构、索引结构、散列结构)

文章目录 1.概述2.数据间逻辑关系3.数据的存储结构&#xff08;或物理结构&#xff09;3.1顺序结构3.2链式结构3.3索引结构3.4散列结构 4.运算结构 1.概述 数据结构&#xff0c;就是一种程序设计优化的方法论&#xff0c;研究数据的逻辑结构和物理结构以及它们之间相互关系&am…

STM32 DMA详解

1.DMA简介 DMA (Direct Memory Access) 直接存储器存取 DMA 可以提供外设和存储器或者存储器和存储器之间的高速数据传输&#xff0c;无须CPU干预&#xff0c;节省了CPU的资源( 比如想把Flash里的一批数据转运到SRAM里&#xff0c;需要软件触发&#xff0c;使用软件触发之后&a…

NAT网络地址转换技术入门到详解

本文目录 1、NAT简介1.1、SNAT 和IP伪装(Masquerade)1.2、DNAT1.3、Full NAT (也称为Full Cone NAT)1.4、PAT (也称为NAPT) 2、如何通过iptables将一台多网卡的主机配置成NAT路由器3、汇总 本文会从NAT的简介入手&#xff0c;详解NAT技术本身&#xff0c;通过本文&#xff0c;你…

巧用千寻位置GNSS软件| 电力线勘测如何实现?

正如大家所知&#xff0c;电力线勘测是在做电力线路设计之前对设计线路沿途自然环境进行勘察测量&#xff0c;最后把手簿测量数据在电脑端经过转换输出为电力软件专用格式数据的专用功能。 那么在千寻位置GNSS软件中该如何操作完成电力线的勘察测量呢&#xff1f; 点击【测量】…

市场岗位都在通缩,Framework开发就业环境怎么样?

随着 Android 设备的普及和应用领域的不断扩大&#xff0c;Android Framework 开发需求量将会持续增长&#xff0c;并且会越来越多地向行业、企业级应用和系统优化等方向发展。以下是一些 Android Framework 开发相关的应用场景&#xff1a; 特定垂直领域的智能设备&#xff1…

写最好的Nacos Server稳定版(nacos-server-2.1.1)在Centos、Docker和Windows上安装部署(单机、集群)教程

写最好的Nacos Server稳定版&#xff08;nacos-server-2.1.1&#xff09;在Centos、Docker和Windows上安装部署&#xff08;单机、集群&#xff09;教程 一、前言二、Nacos Server在 Centos7 安装部署&#xff08;单机模式&#xff09;2.1 下载 nacos-server-2.1.1 安装包2.1.1…

Matplotlib绘图库的高级使用

Matplotlib绘图库的高级使用 Matplotlib的三层结构容器层辅助显示层图像层 Matplotlib的绘图配置设置画布属性绘图保存自定义x与y刻度解决中文显示异常网格显示多次plot绘图标记显示图例多个坐标系显示 Matplotlib的三层结构 Matplotlib从层次结构上分&#xff0c;可以分为三层…

在线安装QT5.15.2+VS2019-16.11.26

在线安装QT5.15.2VS2019-16.11.26 一、安装QT5 官方下载&#xff1a; https://download.qt.io/archive/online_installers/4.5/ 选择【qt-unified-windows-x64-4.5.2-online.exe】 登录账户 需要提前注册&#xff0c;过程省略。 安装位置&#xff08;自定义&#xff09; …

GitHub Repo

GitHub Repo 之前笔记写了 git 和 gitup&#xff08;pullpush&#xff09;&#xff0c;这里记一下 giehub repo 二三事。 权限 我不是很确定 github 的企业版是什么样的&#xff0c;不过我们用的是 gitlab 的企业版&#xff0c;这个是需要通过 vpn 才能连接的&#xff0c;如…

【C语言】基础语法6:字符串和字符处理

上一篇&#xff1a;数组和指针 下一篇&#xff1a;文件操作 ❤️‍&#x1f525;前情提要❤️‍&#x1f525;   欢迎来到C语言基本语法教程   在本专栏结束后会将所有内容整理成思维导图&#xff08;结束换链接&#xff09;并免费提供给大家学习&#xff0c;希望大家纠错…

redis7 安装 与 启动

文章目录 1. redis 的 概述2. redis 的 安装3. redis 的启动4. redis 的卸载 1. redis 的 概述 redis : 是 远程 词典服务器 &#xff0c;是 一个基于内存的 键值型 Nosql 数据库. 官方解释 : Remote Dictionary Server(远程字典服务)是完全开源的&#xff0c;使用ANSIC语言编写…

QMS-云质说质量 - 6 中小企业常用的结构化问题解决方法有哪些?

云质QMS原创 转载请注明来源 作者&#xff1a;王洪石 引言 爱因斯坦如何解决问题 面对问题时&#xff0c;有的人可能很盲目地开始行动&#xff0c;干到一定程度&#xff0c;却突然发现自己所做的是无用功。 有人问过科学巨匠爱因斯坦&#xff0c;如果给他一个关系到他生命的问…

R基础函数概览(一)

rep 函数形式&#xff1a;rep(x, time , length , each ,) 参数说明&#xff1a; x&#xff1a;代表的是你要进行复制的对象&#xff0c;可以是一个向量或者是一个因子。 times&#xff1a;代表的是复制的次数&#xff0c;只能为正数。负数以及NA值都会为错误值。复制是指的…

[oeasy]python0139_尝试捕获异常_ try_except_traceback

尝试捕获异常 回忆上次内容 变量相加 整型数字变量可以相加字符串变量也可以拼接 但是 字符串 和 整型数字整型数字 和 字符串不能相加 怎么办&#xff1f; 转格式int(“1”)str(2) 可是 如果输入的苹果数量是 字符串"abc" int(“abc”)会发生什么&#xff1f;&…

通信算法之149:EVM测量

1.星座图 h scatterplot(sqrt(sps)*txSig(sps*span1:end-sps*span),sps,offset); hold on scatterplot(rxSigFilt(span1:end-span),n,offset,bx,h) scatterplot(dataMod,n,offset,r,h) legend(Transmit Signal,Received Signal,Ideal,location,best) 2. 眼图 Eye Diagram D…

华为OD机试真题(Java),简单密码(100%通过+复盘思路)

一、题目描述 现在有一种密码变换算法。 九键手机键盘上的数字与字母的对应&#xff1a; 1--1&#xff0c; abc--2, def--3, ghi--4, jkl--5, mno--6, pqrs--7, tuv--8 wxyz--9, 0--0&#xff0c;把密码中出现的小写字母都变成九键键盘对应的数字&#xff0c;如&#xff1a;a …