Vertica分区

本文翻译整理自:https://www.vertica.com/docs/9.2.x/HTML/Content/Authoring/AdministratorsGuide/Partitions/PartitioningTables.htm?tocpath=Administrator%27s%20Guide%7CPartitioning%20Tables%7C_____0

基础知识

vertica的分区方法与目的与其他数据库没有区别,都是为了更高效的对数据进行管理。

vertica中有一个活动分区的概念,特指最新创建的那个分区。非活动分区包含可能不需要经常访问的数据。在执行合并时,对于非活动分区,Tuple Mover将所有ROS容器组合到一个ROS容器中。在活动分区中,Tuple Mover使用基于分层的算法来组合ROS容器。(一个ROS(读取优化存储器)容器是一组存储在文件中的一组特定的行。ROS容器是通过Moveout或COPY DIRECT等操作创建的。您可以查询STORAGE_CONTAINERS系统表以查看ROS 容器。由于数据差异,ROS容器布局在各个节点上可能会有所不同。分段可以向一个节点传递比另一节点更多的行。两个数据负载可能适合一个节点上的WOS,而溢出到另一个节点上。)数据分区被定义为表属性,并在该表的所有投影上实现。在所有加载,刷新和恢复操作中,Vertica Tuple Mover会自动将数据分区到单独的ROS容器中。每个ROS容器包含一个分区或分区组的数据 ; 根据空间要求,一个分区或分区组可以跨越多个ROS容器。

可以通过更改ActivePartitionCount配置参数来更改每个表的活动分区数,默认值为1。
如果经常将数据加载到最后两个分区,请将ActivePartitionCount更改为2。这是一个全局配置参数,会影响每个表。如果将其设置为2,则Tuple Mover将分层算法应用于最后两个创建的分区。
增加ActivePartitionCount可减少Tuple Mover操作的数量。但是,您的投影中可能会有太多的ROS容器。

Vertica建议您仅分区大型事实表,不要对小表或维度表进行分区,这样做会创建大量的ROS容器,这会快速增加目录大小并影响查询性能。

为表定义分区表达式时,请考虑以下事项:

  • 数据保留政策
  • 经常使用的查询谓词
  • 分区粒度可能对每个节点的每个投影的ROS容器数量和每个节点的ROS文件总数产生的影响
分区和存储修剪
分区如何影响数据生命周期管理?

在Vertica数据库中对大型事实表进行分区可以简化数据生命周期管理并提高查询性能。

Vertica提供以下功能:

  • 从表中删除分区。(DROP_PARTITION函数)
  • 将很少使用的分区移动到存档表。(MOVE_PARTITIONS_TO_TABLE函数)
  • 将很少使用的分区移动到较便宜的存储。
  • 从存档还原分区。

vertica的一些分区函数可以参考:
https://www.vertica.com/docs/9.2.x/HTML/Content/Authoring/SQLReferenceManual/Functions/VerticaFunctions/PartitionManagement/PartitionManagementFunctions.htm?tocpath=SQL Reference Manual|SQL Functions|Vertica Meta-Functions|Partition Management Functions|_____0
vertica的存储策略可以参考:
https://www.vertica.com/docs/9.2.x/HTML/Content/Authoring/AdministratorsGuide/StorageLocations/CreatingStoragePolicies.htm

什么是存储修剪以及它与分区有什么关系?

分区数据被分隔到各个存储容器中。因此,在分区列上使用谓词的查询可以从Vertica存储修剪功能中获益。
在查询规划阶段,数据库优化器会识别不包含该查询所需数据的存储容器。在查询处理期间,Vertica执行引擎省略了不存储适用值的存储容器,从而减少了I / O并提高了查询性能。

如何判断我的查询是否利用了分区和存储修剪?

1.配置查询以获取transaction_id和statement_id

SELECT * FROM <table_name> WHERE <column_name> BETWEEN 5 AND 7;
NOTICE 4788:  Statement is being profiled
HINT:  Select 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vertica中,创建分区表的建表语句可以使用ALTER TABLE语句来实现。具体的语法如下: ALTER TABLE <table_name> PARTITION BY <partition_expression> 其中,<table_name>是要创建分区表的表名,<partition_expression>是用于定义分区的表达式。使用这个语句可以对现有表进行分区或更改表的分区表达式。 另外,如果需要创建临时表,在Vertica中可以使用CREATE TEMPORARY TABLE语句来实现。临时表是在会话级别存在的表,数据在会话断开前一直保存。例如: CREATE TEMPORARY TABLE <table_name> (column1 datatype, column2 datatype, ...) ON COMMIT PRESERVE ROWS; 这里的<column1>, <column2>, ...是临时表中的列名和数据类型。关键字ON COMMIT PRESERVE ROWS表示在会话断开前临时表会一直保存数据。KSAFE 0表示不创建副本,用于临时表时可以指定为0。 注意,如果使用CREATE LOCAL TEMPORARY TABLE语句创建临时表,需要将ON COMMIT PRESERVE ROWS关键词放到字段类型后面。如果使用CREATE LOCAL TEMPORARY TABLE tablename AS语句创建临时表,则不需要调整。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Vertica分区](https://blog.csdn.net/hmxz2nn/article/details/95526904)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [Vertica常用语法](https://blog.csdn.net/sinat_27475911/article/details/107450690)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值