starrocks聚合表使用

本文介绍了如何在HBase或类似的分布式列族数据库中创建一个聚合表site_access_log,使用动态分区管理和初始化数据,包括设置分区范围和执行INSERT操作以自动统计访问数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 1、创建聚合表

CREATE TABLE IF NOT EXISTS site_access_log (
    `access_date` DATE NOT NULL COMMENT "访问日期",
    `ip` VARCHAR(200) COMMENT "ip",
    `cnt` BIGINT SUM DEFAULT "0" COMMENT "访问数"
)
AGGREGATE KEY(access_date, ip)
PARTITION BY RANGE(`access_date`) ( )
DISTRIBUTED BY HASH(`access_date`)
PROPERTIES (
    "dynamic_partition.enable" = "true",
    "dynamic_partition.time_unit" = "DAY",
    "dynamic_partition.start" = "-180",
    "dynamic_partition.end" = "3",
    "dynamic_partition.prefix" = "sal",
    "dynamic_partition.buckets" = "10"
);

如果要初始化之前的数据,需要执行以下脚本

ALTER TABLE site_access_log SET("dynamic_partition.enable"="false");
ALTER TABLE site_access_log ADD PARTITIONS START ("2023-11-17") END ("2023-11-30") EVERY (INTERVAL 1 DAY);
ALTER TABLE site_access_log SET("dynamic_partition.enable"="true");

2、直接执行insert语句

INSERT INTO site_access_log VALUES('2023-11-18','1.1.1.1',1);

这样就能自动统计数量

<think>嗯,用户这次想了解StarRocks内部表的特性和使用方法,特别是创建与管理方面的内容。从ta的提问方式来看,应该是个有一定数据库基础的技术人员,可能正在评估或已经在使用StarRocks。 之前对话中用户提到过外部表,现在转向内部表,说明ta对StarRocks的数据存储机制有系统性了解的需求。需要特别注意区分内部表和外部表的差异,这点在引用[2]里已经明确提到过——内部表数据保存在StarRocks内部,而外部表只是元数据映射。 关于内部表的创建,用户可能最关心的是四种表类型的选择。主键表适合需要频繁更新的场景,明细表适合日志类数据,聚合表能自动预聚合,更新表则针对缓慢变化的维度数据。在引用[2]的基础上,需要补充具体的使用场景说明。 管理方面要强调分区和分桶这两个关键概念。分区用于数据裁剪,分桶影响查询性能,这在所有引用材料里都没细说,但确实是实际使用时的核心考量。另外索引机制也得提,Bloom Filter索引对字符串查询加速效果明显。 考虑到用户后续可能遇到的问题,相关问题的设计要侧重实操:表类型选择依据、分区策略优化、性能调优方向。这些都是在真实生产环境中必然会遇到的痛点。 最后注意所有技术术语都要用$...$包裹,比如$PARTITION BY$这种语法元素。示例代码要完整展示建表语句的所有关键部分,特别是容易忽略的副本数设置和存储类型声明。</think>以下是关于StarRocks内部表的特性、创建与管理方法的详细说明,结合官方文档和实践总结: --- ### **一、内部表核心特性** 1. **数据存储** 数据**完全存储在StarRocks集群内**,支持高性能查询与分析。 2. **表类型分类** 根据数据组织方式分为四类(引用[2]): - **明细表(Duplicate Key Table)** 适合原始数据存储(如日志),支持任意维度查询。 ```sql CREATE TABLE dupe_table ( timestamp DATETIME, user_id INT, event_type VARCHAR(20) ) DUPLICATE KEY(timestamp, user_id); -- 指定排序列 ``` - **聚合表(Aggregate Table)** 预聚合数据,减少查询计算量(如SUM、MAX)。 ```sql CREATE TABLE agg_table ( date DATE, product_id INT, total_sales BIGINT SUM -- 定义聚合函数 ) AGGREGATE KEY(date, product_id); ``` - **主键表(Primary Key Table)** 支持**行级更新**(适用于CDC场景),主键唯一。 ```sql CREATE TABLE pk_table ( order_id BIGINT, status VARCHAR(20), PRIMARY KEY(order_id) -- 显式定义主键 ) DISTRIBUTED BY HASH(order_id); ``` - **更新表(Unique Key Table)** 主键覆盖更新,简化数据合并(如维度表)。 ```sql CREATE TABLE unique_table ( user_id INT, user_name VARCHAR(50) ) UNIQUE KEY(user_id); ``` 3. **分区与分桶** - `PARTITION BY`:按时间或枚举值分区,加速查询剪枝 ```sql PARTITION BY RANGE(`dt`) (START ("2023-01-01") END ("2023-12-31")) ``` - `DISTRIBUTED BY HASH()`:数据分桶到不同节点,避免数据倾斜 --- ### **二、创建与管理操作** #### **1. 建表示例(明细表)** ```sql CREATE TABLE internal_table ( dt DATE NOT NULL, user_id INT COMMENT "用户ID", cost DECIMAL(10,2) SUM NULL -- 聚合表需定义聚合函数 ) ENGINE=OLAP DUPLICATE KEY(dt, user_id) -- 明细表指定排序列 PARTITION BY RANGE(dt) ( PARTITION p2023 VALUES [('2023-01-01'), ('2024-01-01')) ) DISTRIBUTED BY HASH(user_id) BUCKETS 8 -- 分桶数建议为节点数倍数 PROPERTIES ( "replication_num" = "3", -- 副本数(高可用需≥3) "storage_medium" = "SSD" -- 存储介质 ); ``` #### **2. 关键管理命令** | **操作** | **命令示例** | |------------------|------------------------------------------------| | 查看表结构 | `DESC internal_table;` | | 修改分区 | `ALTER TABLE internal_table ADD PARTITION p2024 VALUES [("2024-01-01"), ("2025-01-01"));` | | 增加副本 | `ADMIN SET REPLICA ("replication_num" = "3")` | | 数据删除 | `DELETE FROM internal_table WHERE dt < '2023-01-01';` | | 表重命名 | `ALTER TABLE internal_table RENAME new_table;` | | 删除表 | `DROP TABLE internal_table;`(同时删除数据) | --- ### **三、最佳实践** 1. **分区选择** - 时间字段分区:按天/月分区,避免单分区过大(建议≤100GB) - 冷热分离:新分区存SSD,旧分区转HDD(通过`storage_cooldown_time`配置) 2. **分桶优化** - 分桶键选择高基数字段(如$user_id$),保证数据均匀分布 - 分桶数公式:$ \text{Bucket数量} = \text{节点数} \times \text{CPU核数} \times 2 $ 3. **索引加速** - **前缀索引**:自动为前36字节建索引(`DUPLICATE KEY`顺序影响索引效率) - **Bloom Filter索引**:对高基数字段加速等值查询 ```sql PROPERTIES ("bloom_filter_columns" = "user_id"); ``` --- ### **四、与其他组件对比** | **特性** | **内部表** | **外部表** | |------------------|-------------------------------|-------------------------------| | 数据位置 | StarRocks集群内 | 第三方系统(如MySQL、Hive) | | 数据管理 | 自动分片/副本 | 依赖外部数据源 | | 查询性能 | ⭐⭐⭐⭐⭐(列存+MPP架构) | ⭐⭐(受网络和外部源影响) | | 适用场景 | 高频分析、实时计算 | 跨源查询、数据联邦 | > 引用说明:内部表数据存储机制见StarRocks官方文档[^2],外部表特性对比参考[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值