CREATE TABLE etherdata.dws_project_users_reflection_dim (
project_symbol String COMMENT '项目唯一标识符',
contract_address String COMMENT 'token地址',
from_address String COMMENT 'from_token地址',
first_call_time DateTime('UTC') COMMENT '首次使用时间',
last_call_time DateTime('UTC') COMMENT '最近使用时间',
total_count UInt32 COMMENT '使用次数',
update_time String COMMENT '快照时间'
)
ENGINE = ReplacingMergeTree
PRIMARY KEY (contract_address,from_address,project_symbol)
ORDER BY (
contract_address,
from_address,
project_symbol -- order by确定唯一主键,(project-->contract_address,from_address)映射关系是唯一的
)
SETTINGS index_granularity = 8192, --- 官方推荐的配置
storage_policy = 'policy_name_eth';
注:1)这里没有partition分区,默认就只有一个分区
2)一般维表为了防止数据重复,按默认一个分区来处理
3)ReplacingMergeTree 后台合并prinmary_key相同的(且在同一个分区当中)数据
4)不同的分区,ReplacingMergeTree 无法按照primary_key进行去重
5)OPTIMIZE TABLE etherdata.dws_project_users_reflection_dim; 可以手动触发数据合并
6)在数据合并以后,同一个分区,primary_key是唯一的
7)clickhouse 的primary_key并不是数据库的主键,而是数据检索的一级索引
8)order by(k1,k2...kn) 其中k1才是一级索引,检索速度最快,剩下的是指排序索引而已
CH采坑日记
最新推荐文章于 2024-07-17 23:15:19 发布