CREATE HCATALOG SCHEMA

使用 HCatalog 连接器为存储在 Hive 数据仓库中的数据定义架构。有关详细信息,请参阅使用 HCatalog 连接器

大多数可选参数均从 Hadoop 配置文件(如果可用)读出。如果按照为 HCatalog 配置 Vertica 中的描述复制了 Hadoop 配置文件,则可以忽略多数参数。默认情况下,此语句使用这些配置文件中指定的值。如果配置文件是完整的,则以下语句有效:

=> CREATE HCATALOG SCHEMA hcat;

如果配置文件中未指定值,并且参数列表中显示了默认值,则使用该默认值。

某些参数仅在您使用 HiveServer2(默认值)时适用。仅当您使用的是旧版 Hadoop 服务 WebHCat 时,其他选项才适用。使用 HiveServer2 时,使用 HIVESERVER2_HOSTNAME 指定服务器主机。使用 WebHCat 时,使用 WEBSERVICE_HOSTNAME 指定服务器主机。

如果需要使用 WebHCat,还必须将 HCatalogConnectorUseHiveServer2 配置参数设置为 0。请参阅Hadoop 参数

创建架构后,您可以使用 ALTER HCATALOG SCHEMA 更改许多(但不是全部)参数。

语法

CREATE HCATALOG SCHEMA [IF NOT EXISTS] schemaName
    [AUTHORIZATION user-id]
    [WITH [param=value [,...] ] ]

参数

[IF NOT EXISTS]
如果给定默认值,则当 schemaName 中指定的架构已经存在时,该语句将无错退出。
schemaName
要在 Vertica 编录中创建的架构的名称。Hive 数据库中的表将通过此架构提供。
AUTHORIZATION user-id
要拥有正在创建的架构的 Vertica 帐户的名称。如果正在使用 Kerberos 身份验证,则此参数将被忽略;在这种情况下,使用当前的 vsql 用户。

参数

HOSTNAME
存储 Hive 数据仓库的元存储信息的数据库服务器的主机名、IP 地址或 URI。

如果您指定此参数且未同时指定 PORT,则此值必须采用 hive-site.xml 中用于 hive.metastore.uris 的 URI 格式。

如果 Hive 元存储支持高可用性,您可以为此值指定逗号分隔的 URI 列表。

如果未指定此值,则 hive-site.xml 必须可用。

PORT
运行 metastore 数据库的端口号。如果指定此参数,则还必须指定 HOSTNAME 并且它必须是名称或 IP 地址(不是 URI)。
HIVESERVER2_HOSTNAME
HiveServer2 服务的主机名或 IP 地址。如果在 hive-site.xml 中设置以下属性之一,则此参数可选:
  • 将 hive.server2.thrift.bind.host 设置为有效的主机

  • 将 hive.server2.support.dynamic.service.discovery 设置为 true

如果您使用 WebHCat,则忽略此参数。

WEBSERVICE_HOSTNAME
WebHCat 服务的主机名或 IP 地址(如果使用 WebHCat 而不是 HiveServer2)。如果未指定此值,则 webhcat-site.xml 必须可用。
WEBSERVICE_PORT
运行 WebHCat 服务的端口号(如果使用 WebHCat 而不是 HiveServer2)。如果未指定此值,则 webhcat-site.xml 必须可用。
WEBHDFS_ADDRESS
WebHDFS 服务的主机和端口(“主机:端口”)。此参数仅用于读取 ORC 和 Parquet 文件。如果未设置此值,则 hdfs-site.xml 必须可用,以通过 HCatalog 连接器读取这些文件类型。
HCATALOG_SCHEMA
Vertica 架构映射至的 Hive 架构或数据库的名称。默认值为 schemaName
CUSTOM_PARTITIONS
Hive 架构是否使用自定义分区位置('YES' 或 'NO')。如果架构使用自定义分区位置,则 Vertica 会在执行查询时查询 Hive 以获取这些位置。这些额外的 Hive 查询可能很昂贵,因此仅在需要时才使用此参数。默认值为 'NO'(禁用)。有关详细信息,请参阅使用分区数据
HCATALOG_USER
调用 HiveServer2 或 WebHCat 服务器时使用的 HCatalog 用户的用户名。默认为当前数据库用户。
HCATALOG_CONNECTION_TIMEOUT
HCatalog 连接器等待成功连接到 HiveServer 或 WebHCat 服务器的秒数。值 0 表示无限期等待。
HCATALOG_SLOW_TRANSFER_LIMIT
来自 HiveServer2 或 WebHCat 服务器且为 HCatalog 连接器所接受的最低数据传输率(以每秒字节数为单位)。有关详细信息,请参阅 HCATALOG_SLOW_TRANSFER_TIME。
HCATALOG_SLOW_TRANSFER_TIME
强制采用数据传输率下限之前 HCatalog 连接器等待的秒数。此时间过后,HCatalog 连接器将测试数据传输率是否至少达到了 HCATALOG_SLOW_TRANSFER_LIMIT 中设置的值。如果未达到,HCatalog 连接器会断开连接并终止查询。
SSL_CONFIG
Hadoop ssl-client.xml 配置文件的路径。如果您使用 HiveServer2 并且它使用 SSL 线路加密,则此参数是必需的。如果您使用 WebHCat,则忽略此参数。

HCATALOG_CONNECTOR_TIMEOUT、HCATALOG_SLOW_TRANSFER_LIMIT 和 HCATALOG_SLOW_TRANSFER_TIME 的默认值由数据库配置参数 HCatConnectionTimeout、HCatSlowTransferLimit 和 HCatSlowTransferTime 设置。有关详细信息,请参阅Hadoop 参数

配置文件

如果您在创建架构时未覆盖这些值,HCatalog 连接器将使用 Hadoop 配置文件中的以下值。

特权

用户必须是超级用户或具有数据库的所有权限才能使用此语句。

用户还需要通过以下方式之一访问 Hive 数据:

  • 如果 Hive 不使用授权服务(Sentry 或 Ranger)来管理访问,则对 hcatalog_schema 具有 USAGE 权限。

  • 如果 Hive 使用授权服务来管理访问,则通过授权服务获得权限。在这种情况下,您必须将 EnableHCatImpersonation 设置为 0,以作为 Vertica 主体访问数据,或者授予用户访问 HDFS 数据的权限。对于 Sentry,您可以使用 ACL 同步来管理 HDFS 访问。

  • 成为 dbadmin 用户,无论有无授权服务均可访问。

示例

以下示例展示了如何使用 CREATE HCATALOG SCHEMA 为存储在 Hive 数据库中的表定义新架构,然后查询包含有关这些表的信息的系统表:

=> CREATE HCATALOG SCHEMA hcat WITH HOSTNAME='hcathost' PORT=9083
   HCATALOG_SCHEMA='default' HIVESERVER2_HOSTNAME='hs.example.com'
   SSL_CONFIG='/etc/hadoop/conf/ssl-client.xml' HCATALOG_USER='admin';
CREATE SCHEMA
=> \x
Expanded display is on.

=> SELECT * FROM v_catalog.hcatalog_schemata;
-[ RECORD 1 ]----------------+-------------------------------------------
schema_id                    | 45035996273748224
schema_name                  | hcat
schema_owner_id              | 45035996273704962
schema_owner                 | admin
create_time                  | 2017-12-05 14:43:03.353404-05
hostname                     | hcathost
port                         | -1
hiveserver2_hostname         | hs.example.com
webservice_hostname          |
webservice_port              | 50111
webhdfs_address              | hs.example.com:50070
hcatalog_schema_name         | default
ssl_config                   | /etc/hadoop/conf/ssl-client.xml
hcatalog_user_name           | admin
hcatalog_connection_timeout  | -1
hcatalog_slow_transfer_limit | -1
hcatalog_slow_transfer_time  | -1
custom_partitions            | f

=> SELECT * FROM v_catalog.hcatalog_table_list;
-[ RECORD 1 ]------+------------------
table_schema_id    | 45035996273748224
table_schema       | hcat
hcatalog_schema    | default
table_name         | nation
hcatalog_user_name | admin
-[ RECORD 2 ]------+------------------
table_schema_id    | 45035996273748224
table_schema       | hcat
hcatalog_schema    | default
table_name         | raw
hcatalog_user_name | admin
-[ RECORD 3 ]------+------------------
table_schema_id    | 45035996273748224
table_schema       | hcat
hcatalog_schema    | default
table_name         | raw_rcfile
hcatalog_user_name | admin
-[ RECORD 4 ]------+------------------
table_schema_id    | 45035996273748224
table_schema       | hcat
hcatalog_schema    | default
table_name         | raw_sequence
hcatalog_user_name | admin

以下示例展示了如何指定多个元存储主机。

=> CREATE HCATALOG SCHEMA hcat
   WITH HOSTNAME='thrift://node1.example.com:9083,thrift://node2.example.com:9083';

以下示例展示了如何包含自定义分区位置:

=> CREATE HCATALOG SCHEMA hcat WITH HCATALOG_SCHEMA='default'
    HIVESERVER2_HOSTNAME='hs.example.com'
    CUSTOM_PARTITIONS='yes';