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

news/2024/4/20 16:33:54/文章来源:https://blog.csdn.net/weixin_43820556/article/details/130344995

探索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.luyixian.cn/news_show_102967.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【KingSCADA】什么是精灵图以及如何创建精灵图

大家好&#xff0c;我是雷工&#xff01; 本篇学习精灵图的制作&#xff0c;以下为学习内容及相关笔记。 一、什么是精灵图 精灵图是一种在外观上类似组合图&#xff0c;但内部嵌入了比较丰富的动画链接与逻辑控制&#xff0c;工程开发人员只要将其从精灵图库中调出来放置在开…

MySQL基础练习——创建数据库、数据表,并进行修改

目录 题目&#xff1a; 创建库和表&#xff1a; 创建库&#xff1a; 创建表&#xff1a; 将 c_contact 字段插入到 c_birth 字段后面&#xff1a; 将 c_name 字段数据类型改为VARCHAR(70)&#xff1a; 将 c_contact 字段改名为 c_phone&#xff1a; 将表名修改为 customer…

AD9208调试经验分享

背景概述 FMC137 是一款基于 VITA57.4 标准规范的 JESD204B 接口FMC 子 卡 模 块 &#xff0c; 该 模 块 可 以 实 现 4 路 14-bit 、 2GSPS/2.6GSPS/3GSPSADC 采集功能。该板卡 ADC 器件采用 ADI 公司的 AD9208 芯片&#xff0c;&#xff0c;与 ADI 公司的 AD9689 可以实现 …

量子力学 学习

对于同一个竖直向上量子比特&#xff0c;不对他进行任何的干扰&#xff0c;进行第一次水平测试实验会随机得到一个一或者负一&#xff0c;之后再进行多少次水平测试实验都与第一次的试验结果是相同的。 我们换用其他的竖直向上量子比特&#xff0c;或者对原来的量子比特进行干扰…

Matlab绘图中的一些技能

目录 1、matlab坐标轴设置多种字体(复合字体) 2、matlab图片中title生成的标题转移至图像下端 3、指定对应格式和期望dpi的图像进行保存、以及不留白保存 4、设置字体字号&#xff08;x、y轴&#xff0c;标题。全局字体等&#xff09; 5、设置刻度值信息&#xff0c;只有左…

引领文旅新体验!实时云渲染助力打造“永不落幕”的湾区文采会元宇宙

2022年11月25日至27日&#xff0c;2022年粤港澳大湾区公共文化和旅游产品&#xff08;东莞&#xff09;采购会&#xff08;简称“湾区文采会”&#xff09;在广东省东莞市文化馆举行。 文采会期间&#xff0c;文采会元宇宙线上虚拟展厅全新亮相&#xff0c;这艘承载着科技与文化…

5款十分小众的软件,知道的人不多但却很好用

今天推荐5款十分小众的软件&#xff0c;知道的人不多&#xff0c;但是每个都是非常非常好用的&#xff0c;有兴趣的小伙伴可以自行搜索下载。 1.视频直播录制——OBS Studio OBS Studio可以让你轻松地录制和直播你的屏幕、摄像头、游戏等内容。你可以使用OBS Studio来创建多种…

Mysql设置表只存储一段时间的数据

使用MySQL的事件调度器&#xff08;Event Scheduler&#xff09;来定期删除表中的数据。 假设你要删除的表是mytable&#xff0c;并且表中有一个名为created_at的日期时间类型的列&#xff0c;存储了每条记录的创建时间。你可以通过以下步骤设置表只存储30天的数据&#xff1a…

机器学习 协同过滤算法

协同过滤算法 协同过滤算法是根据已有的数据来推测出未知的数据&#xff0c;从海量的数据中找到相似度达到指定范围的数据&#xff0c;而这些数据成为你的邻居&#xff0c;系统将会为你推荐心仪的物品。 余弦相似法 通过计算两个向量的夹角余弦值来评估它们的相似度 修正余弦…

《站在巨人的肩膀上学习Java》

Java从诞生距今已经有28年了&#xff0c;在这段时间里&#xff0c;随着Java版本的不断迭代&#xff0c;Java新特性的不断出现&#xff0c;使得Java被使用的越来越广泛。在工程界Java语言一直是大家最喜欢的语言之一&#xff0c;Java一直排行在编程语言热门程度的前3名。 可想而…

从0搭建Vue3组件库(六):前端流程化控制工具gulp的使用

随着前端诸如webpack&#xff0c;rollup&#xff0c;vite的发展&#xff0c;gulp感觉似乎好像被取代了。其实并没有&#xff0c;只不过它从台前退居到了幕后。我们仍然可以在很多项目中看到它的身影&#xff0c;比如elementplus、vant等。现在gulp更多的是做流程化的控制。 比如…

delta.io 参数 spark.databricks.delta.replaceWhere.constraintCheck.enabled

总结 默认值true 你写入的df分区字段必须全部符合覆盖条件 .option("replaceWhere", "c2 == 2") false: df1 overwrite tb1: df1中每个分区的处理逻辑: - tb1中存在(且谓词中匹配)的分区,则覆盖 - tb1中存在(谓词中不匹配)的分区,则append - tb1中不存…

今天试了试chatgpt

今天试了试chatgpt&#xff0c;真是服了 arcade&#xff1f; Arcade是一个Python游戏开发库&#xff0c;它提供了一系列的工具和函数&#xff0c;可以帮助开发者快速地创建2D游戏。以下是Arcade的一些特点&#xff1a; 简单易用&#xff1a;Arcade提供了简单易用的API&#x…

Android分屏流程分析

本文基于Android 11。 SystemUI模块中的Divider管理着所有关于分屏的对象&#xff1a; DividerView&#xff08;分屏分割线&#xff0c;分屏显示界面&#xff09;SplitScreenTaskOrganizer&#xff08;分屏Task组织者&#xff0c;分屏逻辑&#xff09; 这里重点关注分屏逻辑…

Qt如何生成dump文件和pdb文件并进行调试定位

在main文件中增加下面代码用于可生成dump文件 #include "widget.h" #include <QApplication> #include <QDir> #include <QDateTime> #ifdef Q_OS_WIN#include <windows.h>#include <dbghelp.h> #endifstatic LONG WINAPI exceptionC…

简单介绍一下什么是“工作内存”和“主内存”(JMM中的概念)

在学习Java多线程编程里&#xff0c; volatile 关键字保证内存可见性的要点时&#xff0c;看到网上有些资料是这么说的&#xff1a;线程修改一个变量&#xff0c;会把这个变量先从主内存读取到工作内存&#xff1b;然后修改工作内存中的值&#xff0c;最后再写回到主内存。 对…

Spring 循环依赖处理之三级缓存设计

一、思考 1、Spring是如何解决循环依赖问题的? 2、为什么要使用三级缓存?二级缓存能否解决问题? 3、提前暴露对象暴露的是什么? 4、主要源码 二、循环依赖 1、介绍 如上图&#xff0c;创建A之前需要先创建B,创建B之前需要先创建A,造成循环依赖。 由于A没创建完成&am…

一个关于Mybatis和spring的公共组件starter

utils-springboot-starter 介绍使用说明 介绍 一个关于Mybatis和spring的公共组件starter&#xff0c;目前包含以下功能&#xff1a; 接口请求日志SQL执行日志数据自动加解密数据自动脱敏服务治理方面&#xff1a; 接口限流接口熔断降级&#xff1a;CPU、内存、异常数、异常率…

win11 环境下streamlit使用pycharm debug

目录 1. pycharm中配置run 脚本2. streamlit3. 开始debug调试 1. pycharm中配置run 脚本 &#xff08;一&#xff09;点击 Edit Configurations,按图操作. 2. streamlit 1.streamlit 安装在 anaconda 的 base 环境&#xff08;随意哈&#xff0c;安装哪里都可以&#xff0c…

问题定位及解决方案

1.视频沉浸页快速滑动后&#xff0c;必现不能向下划动 复现步骤&#xff1a; 进入视频沉浸页&#xff0c;快速向下划动&#xff0c;滑动到第一页最后一个时&#xff0c;不能再向下划动。 解决步骤&#xff1a; 1.确定请求API&#xff1a; mtop.aliexpress.ugc.feed.video.lis…