SYNC_WITH_HCATALOG_SCHEMA_TABLE

将通过 HCatalog 连接器可用的 Hive 数据库架构中的单个表结构复制到 Vertica 表。

该函数可以直接同步 HCatalog 架构。在这种情况下,对 vertica_schemahcatalog_schema 参数使用相同的架构名称调用该函数。该函数还可以将不同的架构同步到 HCatalog 架构。

这是元函数。您必须在顶级 SELECT 语句中调用元函数。

行为类型

易变

语法

SYNC_WITH_HCATALOG_SCHEMA_TABLE( vertica_schema, hcatalog_schema, table_name )

参数

vertica_schema
用于存储复制的 HCatalog 架构元数据的现有 Vertica 架构。这可以是与 hcatalog_schema 相同的架构,也可以是使用 CREATE SCHEMA 创建的单独架构。
hcatalog_schema
要复制的 HCatalog 架构,使用 CREATE HCATALOG SCHEMA 创建。
table_name
hcatalog_schema 中要复制的表。如果 vertica_schema 中已经存在 table_name,该函数将会覆盖它。

特权

非超级用户:vertica_schema 上的 CREATE 权限。

用户还需要 Hive 数据的以下访问权限之一:

  • hcat_schema 的使用权限(如果 Hive 不使用授权服务来管理访问权限)。

  • 通过授权服务(Sentry 或 Ranger)进行管理的权限,以及 HDFS 中的底层文件的访问权限。(Sentry 可以通过 ACL 同步提供该访问权限。)

  • dbadmin 用户权限(有/无授权服务)。

数据类型匹配

在 Vertica 中,Hive STRING 和 BINARY 数据类型与 VARCHAR(65000) 和 VARBINARY(65000) 类型相匹配。创建架构后,根据需要使用 ALTER TABLE调整数据类型。Vertica 中的 VARCHAR 或 VARBINARY 的最大大小为 65000,但您可以使用 LONG VARCHAR 和 LONG VARBINARY 指定更大的值。

Hive 和 Vertica 以不同的方式定义字符串长度。在 Hive 中,长度是指字符的数量;在 Vertica 中,长度是指字节的数量。因此,使用多个字节的字符编码(例如 Unicode)可能会导致两者之间不匹配。为避免数据截断,请根据字节而不是字符设置 Vertica 中的值。

如果数据大小超出列大小,Vertica 将在读取时间在 QUERY_EVENTS 系统表中记录一个事件。

示例

以下示例使用 SYNC_WITH_HCATALOG_SCHEMA_TABLE 来同步 "nation" 表:

=> CREATE SCHEMA 'hcat_local';
CREATE SCHEMA

=> CREATE HCATALOG SCHEMA hcat WITH hostname='hcathost' HCATALOG_SCHEMA='hcat'
   HCATALOG_USER='hcatuser';
CREATE SCHEMA

=> SELECT sync_with_hcatalog_schema_table('hcat_local', 'hcat', 'nation');
sync_with_hcatalog_schema_table
-----------------------------------------------------------------------------
    Schema hcat_local synchronized with hcat for table nation
    table nation is created in schema hcat_local
    (1 row)

以下示例显示本地架构中已存在 "nation" 表时的行为:

=> SELECT sync_with_hcatalog_schema_table('hcat_local','hcat','nation');
sync_with_hcatalog_schema_table
-----------------------------------------------------------------------------
    Schema hcat_local synchronized with hcat for table nation
    table nation is altered in schema hcat_local
    (1 row)