12.0.4 New Features¶
12.0.4版本发布时间:2023年7月
0. 总结¶
- 数据库管理:增加了对Amazon SNS通知的支持,并允许设置连接和空闲超时。
- 客户端连接与驱动程序:ODBC和vsql客户端支持Apple M1/M2处理器。
- 复杂类型与查询:新增UNNEST函数,EXPLODE性能优化,支持CROSS JOIN。
- 容器和Kubernetes:支持服务器端加密,添加EventTrigger自定义资源定义,支持删除自定义资源时自动删除PVC。
- 数据加载:对外部表的性能进行了优化,支持冰山模式的数据存储。
- 机器学习:支持模型版本控制、泊松回归和ARIMA时间序列分析模型。
- 分区与性能改进:提升分区投影的刷新效率。
- 安全与认证:增加了OAuth的JSON Web令牌验证和即时用户配置功能。
- 存储过程:支持存储过程的计划执行,并允许查看重载存储过程的源代码。
- 升级机制:允许直接升级到高于当前版本的任何Vertica版本。
1. admintools¶
1.1 设置 re_ip 超时¶
您可以通过编辑admintools.conf文件的中prepare_timeout_sec参数来设置re_ip操作在超时之前可执行的时间。默认情况下,此参数设置为 7200(秒)。
2. 客户端连接¶
2.1 设置连接初始化期间的空闲超时时间¶
您可通过设置 IdleTimeoutInitializingConnectionsMs 配置参数,来调整服务器在连接初始化的每个步骤中等待空闲客户端的时长(在会话创建之前)。
2.2 客户端主机名¶
客户端的主机名(由其操作系统报告)现在记录在以下系统表的 CLIENT_OS_HOSTNAME 列中:
- SESSIONS
- CURRENT_SESSION
- USER_SESSIONS
3. 客户端驱动程序¶
3.1 ODBC 和 vsql:支持 M1 和 M2 处理器¶
ODBC 和 vsql 客户端驱动程序现在支持 Apple M1 和 M2 处理器。
4. 复杂类型¶
4.1 UNNEST 函数¶
新的 UNNEST 函数可扩展一个或多个数组列。UNNEST 与 EXPLODE 类似,但有两个主要区别:
- UNNEST 返回元素值但不返回位置。
- UNNEST 自动扩展传递给它的所有数组。
4.2 EXPLODE性能优化¶
EXPLODE 函数将单行输入转换为多行输出,集合中的每个元素对应一行。因此,通常无需对输入进行分区。 此前,使用 EXPLODE 的查询需要 OVER 子句,且 Vertica 会在调用 EXPLODE 之前对输入进行分区。现在,您可以通过使用 skip_partitioning 函数参数并省略 OVER 子句,来跳过此分区步骤。
4.3 CROSS JOIN EXPLODE¶
您可以在查询中使用 CROSS JOIN EXPLODE,将 EXPLODE 的输出作为关系(表)来使用,如下例所示:
=> ALTER SESSION SET UDPARAMETER FOR ComplexTypesLib skip_partitioning = true;
=> SELECT student, score FROM tests
CROSS JOIN EXPLODE(scores) AS t (pos, score)
ORDER BY score DESC;
student | score
---------+-------
Sam | 98
Sam | 97
Bob | 92
Tom | 91
Sam | 85
Tom | 82
Bob | 79
Bob | 78
Tom | 75
Tom | 68
(10 rows)
5. 容器和 Kubernetes¶
5.1 服务器端加密 (SSE)¶
Kubernetes 上的 Veritca 支持所有三种类型的 S3 SSE:
- SSE-3
- SSE-KMS
- SSE-C
5.2 设置配置参数¶
您可以在容器中通过communal.additionalConfig参数来配置Vertica数据库的各项数据库参数。
5.3 设置 Depot 卷类型¶
您可以使用 local.depotVolume 参数将 depot 存储在 emptyDir 卷中。当使用 emptyDir 卷时,local.storageClass 和 local.requestSize 参数仅适用于存储在 PersistentVolumes 中的数据。
5.4 EventTrigger 自定义资源定义 (CRD)¶
EventTrigger CRD 扩展了 Kubernetes Job 工作负载资源,用于监视 VerticaDB 自定义资源(CR)的状态变更。当 VerticaDB CR 上的某个条件变更为指定状态时,EventTrigger 便会运行一个 Job。
5.5 在子集群名称中使用下划线字符¶
您现在可以在子集群名称中使用下划线字符 (“_”)。
5.6 没有密钥的 Vertica 镜像¶
Vertica on Kubernetes 提供了一个不包含静态 SSH 密钥的镜像,用于 Pod 之间的内部通信。因此,您需要向自定义资源(CR)提供 SSH 密钥。您可以将 SSH 密钥通过 sshSecret 选项传递给 CR。
5.7 自定义名称标签¶
您可以通过 app.kubernetes.io/name 标签来定制 VerticaDB CRD 应用的名称。
如果您不添加自定义name标签,则默认值为vertica。5.8 删除 VerticaDB 后自动清理 PVC¶
当您删除 VerticaDB 自定义资源时,VerticaDB 会自动删除与该实例关联的所有 PVC。 有关 Vertica on Kubernetes 持久化存储的详细信息,请参阅《Containerized Vertica on Kubernetes》文档。
6. 数据库管理¶
6.1 Amazon 简单通知服务(SNS)¶
现在,您可以使用 notifiers 向 SNS 发送消息。
7. DC_CATALOG_TRUNCATIONS 改进¶
在集群重启(正常重启或崩溃后)后,系统不再提供关于回滚事务数量的指示。为了追踪工作负载需要从哪里重启以补上缺失的事务,dc_catalog_truncations 表中新增了 epoch_before_truncation 和 epoch_after_truncation 列。
8. 定向查询(directed query)¶
8.1 INSERT...SELECT hints¶
您现在可以在INSERT...SELECT语句中使用 directed query 相关的 hints。
9. 官方文档新增内容¶
9.1 Data exploration¶
当数据没有明确定义表结构时,想要确定这些表的表结构并将其加载数据库会比较麻烦。Vertica 提供了可用于探索数据和完善表定义的工具。这些工具和流程现在在官方文档的“Data exploration”中进行了说明。
10. Eon 模式¶
10.1 子集群沙箱化¶
沙箱化功能允许您从现有集群中分离出一个辅助子集群,从而形成两个相互隔离的集群。这两个集群共享相同的数据,但互不干扰。 在沙箱创建后,您可以执行标准的数据库操作和查询(例如创建新表或加载库),而不会影响另一个集群。 例如,在沙箱子集群中删除表不会删除主集群中的表,反之亦然。
沙箱支持多种使用场景,包括以下各项:
- 在不需启动新集群和重新加载数据的情况下测试新版本的 Vertica。
- 测试新功能,同时不影响主集群的一致性。
- 通过让其他团队访问沙箱子集群来共享数据。
- 在移除沙箱并执行必要的清理任务后,子集群可以重新加入主集群。
11. Apache Kafka 集成¶
11.1 kafka_conf_secret 参数¶
kafka_conf_secret 参数用于隐藏您必须传递给 rdkafka 以配置 Vertica 与 Kafka 集成的敏感数据。Vertica 不会记录或存储您在 kafka_conf_secret 中传递的值。 该选项可用于使用 kafka_conf 参数的工具和函数。
12. 加载数据¶
12.1 对象存储上的外部表的优化¶
当外部表使用存储在对象存储(S3、GCS 或 Azure)上的数据,且该数据具有多层级分区时,性能可能会受到影响。ObjectStoreGlobStrategy 配置参数允许您使用不同的策略来读取和修剪分区,从而在查询具有选择性且存在许多分区目录层级时提高性能。使用此设置后,对对象存储 API 的调用次数会减少。
12.2 Iceberg 支持¶
您现在可以定义由 Apache Iceberg 存储的 Parquet 数据支持的外部表。Iceberg 表由数据文件和描述模式的元数据组成。与其他外部表不同,Iceberg 外部表无需指定列定义(DDL)。该信息会在查询时从 Iceberg 元数据中读取。对于某些数据类型,您可以调整列定义,例如指定 VARCHAR 大小。 请参阅 CREATE EXTERNAL TABLE ICEBERG。
13. 机器学习¶
13.1 模型版本控制¶
模型版本控制提供了一个用于跟踪和管理数据库中已注册模型状态的功能。该版本控制功能提供可协作的环境,多个用户可以为单个应用程序提交候选模型。dbadmin 和拥有 MLSUPERVISOR 角色的用户可以管理和更改所有已注册模型的状态,包括当前正在生产环境中使用的模型。
Vertica 提供以下模型版本控制功能:
- REGISTER_MODEL:注册模型并将其添加到版本控制环境中。
- CHANGE_MODEL_STATUS:更改已注册模型的状态。
- REGISTERED_MODELS:列出数据库中已注册的模型。
- MODEL_STATUS_HISTORY:跟踪已注册模型的状态历史。
有关模型版本控制环境的详细信息和深入示例,请参阅《模型版本控制》。
13.2 泊松回归算法支持¶
Vertica 现已支持泊松回归(Poisson regression)算法,用于对计数数据进行建模。泊松回归为线性回归或逻辑回归提供了一种替代方案,当您的预测目标范围是非负实数或整数时,该算法非常有用。
13.3 ARIMA 模型支持¶
Vertica 现已支持用于时间序列分析的自回归积分滑动平均(ARIMA)模型。 ARIMA 模型结合了自回归(AUTOREGRESSOR)和移动平均(MOVING_AVERAGE)模型的能力,它基于先前的时间序列值和先前预测的误差来进行未来预测。您可以使用 ARIMA 函数来创建和训练 ARIMA 模型,并使用 PREDICT_ARIMA 函数进行预测。
14. 分区¶
14.1 使用 PARTITION ROW 对 1:N 转换函数进行窗口分区¶
以前,窗口分区只能用于 1:1 分析函数。现在,PARTITION ROW语法可用于窗口分区 1:N 转换函数。
15. 性能提升¶
15.1 分区表投影刷新优化¶
在之前的版本中,新的或更新的投影必须在用所有表数据完全刷新后,才能被查询使用。这延迟了投影处理查询请求的可用性。 现在,当您刷新分区表的投影时(例如,为包含现有数据的表创建新投影),刷新操作会首先加载具有最高键值范围的分区数据。在此分区刷新完成后,Vertica 会开始刷新下一个最高键值范围的分区。此过程会持续进行,直到所有投影分区都被刷新。在此期间,刷新操作仍在进行时,已完成刷新的投影分区即可用于处理查询请求。
16. 资源管理¶
16.1 默认用户资源池¶
新的配置参数DefaultResourcePoolForUsers允许您配置分配给新用户(包括 LDAP 用户)的默认用户资源池。
17. SDK 更新¶
17.1 一对多 UDTF 和 PARTITION ROW¶
现在,使用 C++ 和 Python 编写的单阶段用户定义转换函数(UDTF)支持 isExploder 类属性,该属性用于指示 UDTF 是否执行一对多转换。 如果在 getTransformFunctionProperties factory 方法中将此属性设置为 True,则该函数默认使用 OVER(PARTITION ROW) 子句,从而在调用 UDTF 时无需再指定 OVER 子句。用户还可以在调用一对多 UDTF 的 SELECT 查询中包含任何表达式。
18. 安全和身份验证¶
18.1 OAuth¶
18.1.1 JSON Web token验证¶
Vertica 现在可以在不联系身份提供程序的情况下,通过验证 OAuth token 的 signer 来验证 OAuth token。要启用此功能,请创建一个使用 'oauth' 的身份验证记录,并设置身份验证参数以使用 JWT 验证。
18.1.2 即时 (JIT) 用户配置¶
即时用户配置是指根据身份提供程序提供的信息,自动配置经过身份验证的用户及其角色的过程。 当客户端使用 OAuth token 向 Vertica 进行身份验证时,如果身份验证记录启用了即时用户配置,Vertica 会自动创建该用户(如果该用户在 Vertica 中尚不存在)。此外,如果身份提供程序是 Keycloak,Vertica 会根据 Keycloak 的指定为用户授予相应的角色。 例如,如果客户端提交一个 OAuth token 以具有 director 角色的用户 Alice 的身份进行身份验证,而 Alice 在 Vertica 中不存在,Vertica 会自动创建用户 Alice,并授予她该身份验证记录。如果此配置还使用 Keycloak 作为身份提供程序,那么 Vertica 会授予她 director 角色作为默认角色。
18.2.3 JDBC:自定义信任库¶
您可以使用自定义信任库来保护 JDBC 客户端与身份提供程序之间的连接。如果您的身份提供程序的证书不是由知名的证书颁发机构签署的,这就非常有用。 信任库的路径及其密码通过以下连接属性指定:
- oauthtruststorepath
- oauthtruststorepassword
如果未指定 oauthtruststorepath,JDBC 客户端将使用默认信任库。
19. 存储过程新功能¶
19.1 计划执行¶
您现在可以计划存储过程的自动执行。这可用于自动化各种任务,例如记录数据库活动、撤销权限或创建角色。
19.2 查看重载的存储过程¶
现在,您可以使用 EXPORT_OBJECTS 查看重载存储过程的特定实现的源代码。
20. 升级路径优化¶
20.1 升级到高于当前版本的任何 Vertica 版本¶
在之前的版本中,Vertica 升级是增量式的,要求您按照升级路径依次升级到每个主要和次要版本。 现在,您可以跳过中间版本,直接升级到高于当前版本的任意 Vertica 版本。
21. 用户定义的扩展¶
21.1 可编辑的用户定义扩展和会话参数¶
满足以下任何条件的用户定义的扩展和会话参数,将自动从日志和系统表(如QUERY_REQUESTS)中删除:
- 名称为 “secret” 或 “password”
- 以 “_secret” 或 “_password” 结尾