功能概述

创建对象存储策略后,如需使用冷热分离存储数据,将冷热数据分离存储,可在建表时添加语句指定冷热存储策略。冷热存储策略,可基于磁盘容量和 TTL 时间进行配置。

  • 基于磁盘容量

    当数据盘存储容量达到使用阈值时,自动将最早写入的数据迁移,实现冷热数据的自动分离。建表时支持指定存储数据盘,包括 default 默认磁盘或对象存储。

  • 基于 TTL 时间

    基于 TTL 时间的冷热存储策略,是通过添加 TTL 语句,设置数据存储生命周期,将指点时间之前的所有冷数据进行转移,实现数据的指定时间转移存储。

约束限制

  • 添加 TTL 语句后,将优先基于 TTL 时间规则存储,再基于磁盘容量规则存储。

  • 不支持修改冷热存储策略参数值。

操作步骤

步骤一:创建对象存储策略

详情可参考创建对象存储策略

步骤二:配置冷热存储策略

  • 基于磁盘容量规则

    1. 连接数据库。详情参考访问 ClickHouse 数据库

    2. 添加冷热存储策略语句如下。

      SETTINGS storage_policy = '<策略名称_hot_to_cold>'
    3. 以下示例建表语句,在 ossp_hot_to_cold 冷热存储策略上,将数据将先存储在热数据盘 default,当热数据盘达到存储阈值,更早的数据将转移到 ossp 对象存储磁盘。

      $ echo "CREATE TABLE test.t_local
      (
         EventDate DateTime,
         CounterID UInt32,
         UserID UInt32
      )
      ENGINE = MergeTree()
      PARTITION BY toYYYYMM(EventDate)
      ORDER BY (CounterID, EventDate)
      SETTINGS storage_policy = 'ossp_hot_to_cold'"
      | curl 'http://<ClickHouse 用户名>:<ClickHouse 密码>@<高可用 IP>:8123/' --data-binary @-
  • 基于 TTL 时间规则

    在基于磁盘容量规则存储基础上,添加 TTL 语句,可将指定时间前冷数据全部迁移。添加 TTL 语句后,系统将优先基于 TTL 时间规则存储,再基于磁盘容量规则存储。

    1. 连接数据库。详情参考访问 ClickHouse 数据库

    2. 添加 TTL 存储语句。

      TTL <time_column> + INTERVAL <number> TO DISK '<disk_name>' |TO VOLUME '<volume_name>'
      SETTINGS storage_policy = '<策略名称_hot_to_cold>'

      部分参数说明如下,更多 TTL 语句说明,请参见 官方文档

      参数 说明

      time_column

      日期或日期时间类型的列。只能包含字母、数字、下划线。

      number

      间隔时间和单位。常用单位包括 Day、Week、Month、Year。

      disk_name

      将数据片段移动到该磁盘。

      volume_name

      将数据片段移动到该卷。

    3. 以下建表语句示例,是以 date 为时间列,在 ossp_hot_to_cold 策略上,将 180 之前所有数据转移到 ossp 冷数据盘。

      $ echo "CREATE TABLE test.t_local
      (
          `date` EventDate DateTime,
          `f1` CounterID UInt32,
          `f2` UserID UInt32,
      )
      ENGINE = MergeTree()
      PARTITION BY toYYYYMM(EventDate)
      ORDER BY (CounterID, EventDate)
      TTL EventDate + INTERVAL 180 DAY TO DISK 'ossp'
      SETTINGS storage_policy = 'ossp_hot_to_cold'"
      | curl 'http://<ClickHouse 用户名>:<ClickHouse 密码>@<高可用 IP>:8123/' --data-binary @-
    4. 添加 TTL 语句后,可修改 TABLETTLINTERVAL 等参数。可参考如下语法,修改 TTL 存储规则。

      说明
      • 更改 TTL 存储策略后,存量数据和新增数据将全部按照新策略进行存储。

      • 修改 TTL 存储策略后,已存入冷数据盘中的数据,将不能自动移动到热数据盘。如果需要移动,请参见移动冷热数据盘的数据。

      ALTER TABLE <table_name> ON CLUSTER default MODIFY TTL <time_column> + INTERVAL <number> TO DISK '<disk_name>'
      SETTINGS storage_policy = '<策略名称_hot_to_cold>'

      部分参数说明如下,更多 TTL 语句说明,请参见 官方文档

      参数 说明

      table_name

      表名称。

      time_column

      日期或日期时间类型的列。只能包含字母、数字、下划线。

      number

      间隔时间和单位。常用单位包括 Day、Week、Month、Year。

      disk_name

      将数据片段移动该磁盘。

步骤三:查看存储数据和空间

配置冷热存储策略后,可分别查看冷热数据盘中存储数据,以及查看存储空间使用情况。

  • 查看存储数据

    • 查看热数据盘上的数据。

       $ echo "select * from system.parts where database = '<database_name>' and table = '<table_name>' and disk_name ='default' and active = 1" | curl 'http://<ClickHouse 用户名>:<ClickHouse 密码>@<高可用 IP>:8123/' --data-binary @-
    • 查看冷数据盘上的数据。

       $ echo "select * from system.parts where database = '<database_name>' and table = '<table_name>' and disk_name ='<disk_name>' and active = 1" | curl 'http://<ClickHouse 用户名>:<ClickHouse 密码>@<高可用 IP>:8123/' --data-binary @-
  • 查看存储空间

    执行以下语句,即可查看冷热数据盘空间。

    $ echo "select * from system.disks" | curl 'http://<ClickHouse 用户名>:<ClickHouse 密码>@<高可用 IP>:8123/' --data-binary @-

步骤四:删除对象存储策略

详情可参考删除对象存储策略