这是本节的多页打印视图。 点击此处打印.

返回本页常规视图.

新功能

本指南简要介绍了最新版本 Vertica 中引入的新功能并提供了文档集中的详细信息的参考。

有关最新版本中的已知问题和已解决问题,请参阅 Vertica 发行说明

1 - Vertica 12.0.0 中的新增功能和更改

1.1 - JDBC: CallableStatement

客户端驱动程序

Node.js 客户端驱动程序

vertica-nodejs 客户端驱动程序现在可用

集中式 OAuth 配置

为了简化 OAuth 配置,您现在可以使用包含新的 oauthjsonconfig (ODBC) 和 OAuthJsonConfig (JDBC) 参数的单个 JSON 字符串设置 OAuth 参数。

要保留现有配置,请将旧参数的优先级设置为高于新的 JSON 参数,但推荐使用新的 JSON 参数进行配置,且旧参数已被弃用

JDBC 数据源用户属性

您现在可以分别使用 getUser()setUser() 获取和设置数据源的 user 属性。有关详细信息,请参阅 JDBC API。

ODBC 客户端驱动程序增强功能

为更好地符合 ODBC 规范,在以下多个方面对 ODBC 客户端驱动程序进行了增强。这些更改可能会导致现有 ODBC 客户端程序执行回归:

  • 如果应用程序调用 SQLSetDescField 来设置以下字段以外的任何字段,则记录将变成未绑定状态:

    • SET_DESC_COUNT

    • 延迟字段

      • SQL_DESC_DATA_PTR

      • SQL_DESC_INDICATOR_PTR

      • SQL_DESC_OCTET_LENGTH_PTR

  • SQLSetDescField 必须按照 Microsoft 文档中指定的顺序调用。

  • 如果应用程序要为某个数字或日期类型设置精度或比例字段,则必须使用 SQLSetDescField 来显式设置这些字段,而不是依赖于 SQLBindParameter。有关详细信息,请参阅 Microsoft 文档

  • 如果应用程序调用 SQLGetData,则 StrLen_or_IndPtr 可以返回可用数据的实际长度,SQL_NO_TOTALSQL_NULL_DATA。如果数据被截断,Vertica 将返回 SQL_NO_TOTAL。检查可用缓冲区的长度时,必须考虑所有情况,包括 SQL_NO_TOTALSQL_NULL_DATA。有关详细信息,请参阅有关 SQLGetData获取长数据的 Microsoft 文档。

  • 如果应用程序调用 SQLExecute,响应将始终尝试设置 SQLSTATE,包括状态和其他元数据。

  • 改进了多个异常消息,使其能够显示更详细的错误信息。

1.2 - 数据库管理

架构和表的磁盘配额

您可以为架构、单个表或两者设置磁盘配额。大多数增加存储大小的用户操作都会检查磁盘配额。配额不影响恢复、重新平衡或 Tuple Mover 操作。

在 Eon 模式下,磁盘使用量是架构或表的所有分片使用的所有磁盘空间的总和。此值仅针对主订阅计算。在 Enterprise 模式下,磁盘使用量是架构或表的所有节点上的所有存储容器使用的磁盘空间的总和。该总和不包括伙伴实例投影,但包括所有其他投影。

DISK_QUOTA_USAGES 系统表记录了设置有配额的对象的配额和配额当前使用情况。

有关详细信息,请参阅磁盘配额

1.3 - 诊断工具

Scrutinize

scrutinize 现在通过运行以下命令收集完整时区:

timedatectl | grep "Time zone"

输出将定向到:

scrutinize-output-dir/VerticaScrutinize.timestamp/node-name/context/Commands/timezone

例如,在运行 scrutinize 之后:

$ cat ./VerticaScrutinize.20220513110429/v_vmart_node0001/context/Commands/timezone
       Time zone: America/New_York (EDT, -0400)

1.4 - 投影

针对聚合投影的分区范围支持

目前支持为实时聚合和 top-K 投影指定分区范围

1.5 - SDK 更新

多态聚合函数

用户定义的聚合函数 (UDAF) 现在可以为多态函数。多态函数可以接受任意数量和类型的实参。有关如何编写多态函数的信息,请参阅创建多态 UDx

Python SDK 中的复杂类型

您现在可以使用以 Python 编写的用户定义扩展读取和写入复杂类型。复杂类型支持包括数组、行和两者。有关详细信息,请参阅实参和返回值。有关使用复杂类型的 Python UDx 的示例,请参阅 Python 示例:矩阵乘法Python 示例:复杂类型的 JSON 解析器

1.6 - 安全性和身份验证

通用身份验证错误

为了提高安全性,当用户尝试进行连接和身份验证时,Vertica 不再发出以下错误:

Invalid username or password

此外,Vertica 不再发出特定于方法的错误消息,任何身份验证失败都将生成相同的错误消息:

authentication failed for username "name"

此更改可能会影响根据连接错误代码类型尝试重新连接的客户端。例如 vsql,它之前会在 TLS 失败(且 TLSMODEENABLE)时尝试进行明文连接,但如果 vsql 收到报告用户凭据不正确的错误代码,则不会进行连接。

因为新的通用消息和错误代码没有指定失败的原因,因此 vsql 无法区分身份验证错误是由于无效的 TLS 配置还是无效的用户凭据,它会尝试在这两种情况下建立明文连接。

默认身份验证记录

Vertica 目前创建了 3 个默认身份验证记录,并将其授予 public 角色。这些身份验证记录的优先级为 -1,因此所有用户创建的身份验证记录均优先于这些默认记录。

在以前版本的 Vertica 中,如果未启用任何身份验证记录,则会应用以下隐式身份验证记录:

  • 没有密码的用户使用 trust 方法进行身份验证。在 12.0.0 中,此隐式身份验证记录仍适用于没有密码的用户。

  • 具有密码的用户使用 password 方法进行身份验证。此隐式身份验证记录已被移除,取而代之的是默认记录。

Fallthrough 身份验证

您现在可以允许身份验证记录在失败时贯穿到下一条记录(按优先级顺序)。有关详细信息,请参阅Fallthrough 身份验证

升级行为

在以前的版本中,此 Fallthrough 行为仅适用于 ident(可以贯穿到任何其他身份验证方法)和 ldap(只能贯穿到其他 ldap 方法)身份验证方法,且无法禁用。从 Vertica 12.0.0 开始,默认情况下对所有新身份验证记录禁用此行为,包括 identldap

为了保留依赖于 ident 的 Fallthrough 的现有数据库的行为,如果满足以下所有条件,Vertica 会在升级时自动为 ident 身份验证记录启用 Fallthrough:

  • 数据库包含一个 ident 身份验证记录。

  • ident 身份验证记录具有最高的优先级

  • 数据库包含另一个用户定义的身份验证记录。

同样,在以前的版本中,ldap 记录只会贯穿到其他的 ldap 记录,并跳过使用其他方法的记录。目前情况已不再如此;ldap 记录可与许多其他方法兼容贯穿。

因此,要复制 ldap 的旧 fallthrough 行为,您的 ldap 记录必须是连续的(按优先级顺序),可相互贯穿。

1.7 - SQL 函数和语句

INFER_TABLE_DDL 支持 JSON

您现在可以使用 INFER_TABLE_DDL 函数从 JSON 文件生成候选表定义。因为 JSON 文件不含显式架构,因此该函数会直接检查数据本身。JSON 数据可能因记录或文件而异,因此该函数可能会返回多个候选定义。在以下示例中,以高亮方式显示了差异:

=> SELECT INFER_TABLE_DDL ('/data/*.json'
    USING PARAMETERS table_name='restaurants', format='json',
max_files=3, max_candidates=3);
WARNING 0:  This generated statement contains one or more float types which might lose precision
WARNING 0:  This generated statement contains one or more varchar/varbinary types which default to length 80

                INFER_TABLE_DDL
------------------------------------------------------------------------
 Candidate matched 1/2 of total files(s):
  create table "restaurants"(
    "cuisine" varchar,
    "location_city" Array[varchar],
    "menu" Array[Row(
      "item" varchar,
      "price" float
    )],
    "name" varchar
  );
Candidate matched 1/2 of total files(s):
  create table "restaurants"(
    "cuisine" varchar,
    "location_city" Array[varchar],
    "menu" Array[Row(
      "items" Array[Row(
        "item" varchar,
        "price" numeric
      )],
      "time" varchar
    )],
    "name" varchar
  );

(1 row)

不可变表

不可变表只能插入,无论用户权限如何,都无法修改其中的现有数据。禁止更新行值和删除行。同时禁止对表元数据的某些更改(例如,重命名表),以防止尝试避开这些限制。

您可以使用 ALTER TABLE 将现有表设置为不可变:

ALTER TABLE table SET IMMUTABLE ROWS;

有关详细信息,请参阅不可变表

2 - 已弃用和移除的功能

Vertica 分两个阶段停用功能:

  • 已弃用:Vertica 声明了已在主要或次要版本中弃用的功能。已弃用的功能保留在产品中,可正常运行。已发布的版本文档在此页面上发布弃用声明。当用户访问此功能时,它可能会返回信息性消息,指示此功能待移除。

  • 已移除:Vertica 在宣布弃用之后,将在主要或次要版本中移除功能。用户无法再访问该功能,且此页面将更新以确认移除(请参阅下面的历史记录)。描述该功能的文档已经移除,但仍保留在之前版本的文档中。

已弃用

以下功能已被弃用,且会在未来版本中移除:

已移除

以下功能已被移除:

历史记录

以下功能或支持已被弃用或移除,如下所示:

3 - SDK updates

多态聚合函数

用户定义的聚合函数 (UDAF) 现在可以为多态函数。多态函数可以接受任意数量和类型的实参。有关如何编写多态函数的信息,请参阅创建多态 UDx

Python SDK 中的复杂类型

您现在可以使用以 Python 编写的用户定义扩展读取和写入复杂类型。复杂类型支持包括数组、行和两者。有关详细信息,请参阅实参和返回值。有关使用复杂类型的 Python UDx 的示例,请参阅 Python 示例:矩阵乘法Python 示例:复杂类型的 JSON 解析器

4 - Eon 模式

重新分片 Eon 模式数据库

通过新的 RESHARD_DATABASE 函数,您可以更改 Eon 模式数据库中的分片数量。在此之前,分片数量是在数据库创建期间设置的,且无法更改。

有关重新分片的详细信息,请参阅更改数据库中的分片数

正常关闭

如果您想在关闭子群集之前排空客户端连接,则可以使用 SHUTDOWN_WITH_DRAIN 优雅地关闭子群集。此函数允许子群集上的现有连接继续工作,直到所有连接关闭或达到用户指定的超时。当满足这两个条件之一时,函数将继续关闭子群集。

有关正常关机过程的详细信息,请参阅正常关机

5 - 管理控制台

编辑自定义警报

您可以编辑现有自定义警报的以下属性:

  • 警报名称

  • SQL 查询

  • 变量值

有关详细信息,请参阅自定义警报

在 Microsoft Azure 上恢复 Eon 模式数据库

管理控制台 (Management Console) 支持在 Microsoft Azure 上 恢复 Eon 模式数据库群集

用于在 AWS 上恢复和扩展的备用文件系统布局

在 Amazon Web Services (AWS) 上,您可以为 depot、temp 和 catalog Vertica 目录使用备用文件系统布局来执行以下操作:

  • 恢复数据库

  • 创建子群集

  • 扩展子群集

有关详细信息,请参阅“MC 中的 Amazon Web Services”和“MC 中的子群集”。

6 - 机器学习

隔离森林

Vertica 现在支持孤立森林 (iForest) 算法。iForest 是一种无监督异常值检测算法,可用于欺诈检测和系统运行状况监控等应用程序,或用于从数据中移除异常值。您可以使用 IFOREST 函数来训练 iForest 模型,并使用 APPLY_IFOREST 函数将模型应用于输入关系。

有关 iForest 算法的详细讨论,请参阅孤立森林

选择构建不计算截距的 LINEAR_REG 和 LOGISTIC_REG 模型

您现在可以选择训练不计算截距的线性和逻辑回归模型。有关详细信息,请参阅 LINEAR_REGLOGISTIC_REG

7 - 加载数据

分区文件路径

数据文件有时在文件系统中使用目录结构进行分区。分区将值从原始数据中移出(在原始数据中,它们必须包含在每一行中),然后移入目录结构,从而节省磁盘空间。分区还可以通过允许跳过整个目录来提高查询性能。

在此之前,只有 Parquet 和 ORC 解析器可以利用分区文件路径。现在,通过新的 PARTITION COLUMNS 选项,COPY 支持所有解析器使用分区文件路径。Parquet 和 ORC 解析器的 hive_partition_cols 参数已被弃用。

与之前的版本相比,hive_partition_cols 参数的行为有以下变化:

  • 嵌套的分区目录必须以一致的顺序出现在文件系统中。以下路径模式无效:

    /data/created=2022-01-01/region=north
    /data/region=south/created=2022-01-02
    
  • 如果无法通过目录名称解析列值,COPY 会拒绝路径,而不是将值视为 null。

  • 如果路径缺少声明的分区列,则 COPY 始终返回错误。在此之前,如果 Parquet 解析器中的 do_soft_schema_match_by_name 为 true,解析器会用 null 值填充列。

  • 分区列不再需要是表定义中的最后一列。

请参阅分区文件路径

8 - 客户端连接

Keepalive 和心跳协议设置

这些新参数用于在数据库和会话级别调整 TCP keepalive 和心跳协议设置。

  • KeepAliveIdleTime:发送第一个 TCP keepalive 探测以确保客户端仍处于连接状态之前的时间(以秒为单位)。

  • KeepAliveProbeInterval:Keepalive 探测之间的时间间隔(以秒为单位)。

  • KeepAliveProbeCount:在客户端连接被视为丢失和关闭之前,客户端必须取消确认的连续 Keepalive 探测的数量。

有关详细信息,请参阅管理客户端连接

9 - 容器和 Kubernetes

Vertica 数据库上的 Spread 加密

您可以在 Vertica 数据库上启用 Spread 加密。使用 encryptSpreadComm 自定义资源参数为数据库设置 EncryptSpreadComm 安全参数。

有关详细信息,请参阅自定义资源定义参数

Prometheus 运算符集成

Kubernetes 上的 Vertica 通过与 Prometheus 运算符集成,以在当前使用 Prometheus 运算符的环境中采用。

有关详细信息,请参阅Prometheus 集成

10 - 文档更新

为使信息更易于查找,对组织结构进行了以下更改:

  • 对顶层主题进行了重新排序,以将类似信息放在一起。将《SQL 参考》与其他参考文档一起移至了底部附近。将配置参数列表移至了《SQL 参考》。

  • 在《SQL 参考》中,将函数和元函数合并到了函数下,且字母表中包含所有这些函数。(在此之前,字母表仅包括元函数。)元函数在其参考页面上以这样的方式标记。

  • 对客户端驱动程序的相关文档进行了重构。

  • 将《概念指南》中的信息与有关这些主题的其他文档放了在一起。例如,投影的相关部分现在与其他关于投影的文档放在一起。

  • 移除了几个重复的主题,并合并了几个简短的相关主题集合。

11 - 用户和权限

LDAP link:用户组作为默认角色

默认情况下,通过 LDAP Link 服务同步 LDAP 用户会自动将角色(派生自其 LDAP 组)授予用户。但是,这些角色不是默认角色,因此必须使用 SET ROLE 手动启用才能生效。

新的 LDAPLinkAddRolesAsDefault 参数(默认情况下禁用)可使这些角色自动成为默认角色:

=> ALTER DATABASE DEFAULT SET LDAPLinkAddRolesAsDefault = 1;

有关此参数和其他 LDAP Link 参数的详细信息,请参阅 LDAP Link 参数

12 - 云上的 Vertica

目前支持 AWS i4i、r6i 和 c6i 实例类型

Vertica 目前支持在数据库群集中使用三种 i4i 实例类型、两种 r6i 实例类型和一种 c6i EC2 实例类型。请参阅支持的 AWS 实例类型