基于湖库一体架构,统一管理结构化、半结构化与非结构化等多模态数据,一个系统承载事务处理、实时分析与 AI 工作负载。
修改表级热点缓存策略
更新时间:2025-11-05 17:31:43
本文将向您介绍如何使用 SQL 语句修改表级热点缓存策略(STORAGE_CACHE_POLICY):
- 修改普通表的热点缓存策略。
- 修改索引表的热点缓存策略。
注意事项
在共享存储模式下,才可以修改表/索引的热点缓存策略。
修改普通表的热点缓存策略
表创建成功后,可以使用 ALTER TABLE 语句修改表的热点缓存策略(STORAGE_CACHE_POLICY),语法格式如下:
ALTER TABLE table_name SET STORAGE_CACHE_POLICY (storage_cache_policy_option);
storage_cache_policy_option:
GLOBAL = {"hot" | "auto"}
| timeline_strategy_list
timeline_strategy_list:
BOUNDARY_COLUMN = column_name
| BOUNDARY_COLUMN_UNIT = {"s" | "ms"}
| HOT_RETENTION = intnum retention_time_unit
retention_time_unit:
YEAR
| MONTH
| WEEK
| DAY
| HOUR
| MINUTE
相关参数说明
storage_cache_policy_option 中不同属性以 Key-Value 格式定义。各个属性的语意如下:
GLOBAL = {"hot" | "auto"}:用于指定全表数据的热点缓存策略,取值如下:hot:表示指定表的所有数据都为热数据,在缓存盘空间足够的情况下,表下所有数据将会缓存到本地缓存盘。auto:表示指定表的热数据为系统自动识别。
timeline_strategy_list:表示时间轴策略参数列表,各参数间使用英文逗号分隔。热点缓存时间轴策略支持通过时间来判断分区数据是否为热数据的机制,系统根据配置的策略,自动调整本地缓存盘上的分区数据。说明
时间轴:按照 Range 分区定义的分区范围取值进行热数据缓存,当满足一定时间条件时,该分区的数据被判定为热数据。使用时间轴策略时,需要注意以下事项:
- 仅支持 Range 分区表使用(Range 分区为一级或者二级都可以),因为需要时间来确定是否过期,但不能是双 Range 分区,会因为无法确定以哪个 Range 分区时间为准。
- 使用时间轴时,分区表达中只能有列名,不支持表达式转换。例如
PARTITION BY RANGE COLUMNS(expr(col3))。 BOUNDARY_COLUMN必须为分区键,如果分区键有多列,BOUNDARY_COLUMN需为第一列,用来判断分区是否过期。
BOUNDARY_COLUMN = column_name:用于判定热数据的列。支持整型(BIGINT或者INT类型,格式为 Unix 时间戳)和时间类型(TIMESTAMP、DATE、DATETIME或者YEAR类型)。- 如果
BOUNDARY_COLUMN类型为整型时,表的分区方式支持 Range/Range Columns 分区类型。 - 如果
BOUNDARY_COLUMN类型为时间类型时,表的分区方式只能使用 Range Columns 分区类型。
- 如果
BOUNDARY_COLUMN_UNIT = {"s" | "ms"}:用于指定参数BOUNDARY_COLUMN的时间单位。仅支持BOUNDARY_COLUMN为整型时设置此参数,整型数值用作时间戳时,需要给定时间戳单位,否则可能会导致错解析出来错误的时间。取值如下:当分区列为
INT类型时,BOUNDARY_COLUMN_UNIT取值只能为s。当分区列为
BIGINT类型时,BOUNDARY_COLUMN_UNIT取值可以是s或者ms。注意
如果格式非 Unix 时间戳,将不能正确识别
INT类型表示的时间。
HOT_RETENTION = intnum retention_time_unit:用于配置热数据的时间范围。intnum:表示整数。retention_time_unit:表示时间单位,取值如下:YEAR:表示年。MONTH:表示月。WEEK:表示周。DAY:表示天。HOUR:表示小时。MINUTE:表示分钟。
示例
修改表
tbl1的热点缓存由系统自动识别。ALTER TABLE tbl1 SET STORAGE_CACHE_POLICY (GLOBAL = "auto");修改表
tbl2中通过col3判断的距离当前时间 2 个月内的分区数据是热数据。ALTER TABLE tbl2 SET STORAGE_CACHE_POLICY (BOUNDARY_COLUMN = col3, HOT_RETENTION = 2 MONTH);
修改索引表的热点缓存策略
可以使用 ALTER TABLE 语句修改已有索引的热点缓存策略(STORAGE_CACHE_POLICY),语法格式如下:
ALTER TABLE table_name ALTER INDEX STORAGE_CACHE_POLICY (storage_cache_policy_option);
storage_cache_policy_option:
GLOBAL = {"hot" | "auto" | "none"}
| timeline_strategy_list
timeline_strategy_list:
| BOUNDARY_COLUMN = column_name
| BOUNDARY_COLUMN_UNIT = {"s" | "ms"}
| HOT_RETENTION = intnum retention_time_unit
retention_time_unit:
YEAR
| MONTH
| WEEK
| DAY
| HOUR
| MINUTE
相关参数说明
GLOBAL = {"hot" | "auto" | "none"}:用于指定索引的数据是否为热点数据,取值如下:hot:表示指定索引为热存储,在缓存盘空间足够的情况下,索引表下所有数据将会缓存到本地缓存盘。auto:表示指定索引表热数据为系统自动识别。none:默认值,表示该索引的策略跟随主表STORAGE_CACHE_POLICY取值。
timeline_strategy_list:表示时间轴策略参数列表,各参数间使用英文逗号分隔。热点缓存时间轴策略支持通过时间来判断分区数据是否为热数据的机制,系统根据配置的策略,自动调整本地缓存盘上的分区数据,不建议在局部索引上使用此参数。说明
时间轴:按照 Range 分区定义的分区范围取值进行热数据缓存,当满足一定时间条件时,该分区的数据被判定为热数据。使用时间轴策略时,需要注意以下事项:
- 仅支持 Range 分区表使用(Range 分区为一级或者二级都可以),因为需要时间来确定是否过期,但不能是双 Range 分区,会因为无法确定以哪个 Range 分区时间为准。
- 使用时间轴时,分区表达中只能有列名,不支持表达式转换。例如
PARTITION BY RANGE COLUMNS(expr(col3))。 BOUNDARY_COLUMN必须为分区键,如果分区键有多列,BOUNDARY_COLUMN需为第一列,用来判断分区是否过期。
BOUNDARY_COLUMN = column_name:用于判定热数据的列。支持整型(BIGINT或者INT类型,格式为 Unix 时间戳)和时间类型(TIMESTAMP、DATE、DATETIME或者YEAR类型)。- 如果
BOUNDARY_COLUMN类型为整型时,表的分区方式支持 Range/Range Columns 分区类型。 - 如果
BOUNDARY_COLUMN类型为时间类型时,表的分区方式只能使用 Range Columns 分区类型。
- 如果
BOUNDARY_COLUMN_UNIT = {"s" | "ms"}:用于指定参数BOUNDARY_COLUMN的时间单位。仅支持BOUNDARY_COLUMN为整型时设置此参数,整型数值用作时间戳时,需要给定时间戳单位,否则可能会导致错解析出来错误的时间。取值如下:- 当分区列为
INT类型时,BOUNDARY_COLUMN_UNIT取值只能为s。 - 当分区列为
BIGINT类型时,BOUNDARY_COLUMN_UNIT取值可以是s或者ms。
- 当分区列为
HOT_RETENTION = intnum retention_time_unit:用于配置热数据的时间范围。intnum:表示整数。retention_time_unit:表示时间单位,取值如下:YEAR:表示年。MONTH:表示月。WEEK:表示周。DAY:表示天。HOUR:表示小时。MINUTE:表示分钟。
示例
修改索引 idx2 的热数据为系统自动识别。
ALTER TABLE test_tbl2 ALTER INDEX idx2
STORAGE_CACHE_POLICY (GLOBAL = "auto");