赞
踩
其它文章请参考
数据仓库系列:StarRocks 下一代高性能分析数据仓库的架构、数据存储及表设计
数据仓库系列:StarRocks的简单试用及与clickhouse的对比
数据仓库系列:如何将StarRocks集群与Jupyter集成?
StarRocks 是一款MPP DB, 对标ClickHouse、Vertica、Teradata、Greenplum,在查询性能上远超当代最快的开源数据库 clickhouse,目前已经被一众互联网企业在生产环境中采用。
提供千亿级大数据的在线多维分析和分布式存储。
新一代极速全场景 MPP (Massively Parallel Processing) 数据库
是fork doris后独立运营的商业化版本StarRocks
可以认为是 MySQL 8.x的分布式版本,会用MySQL, 就会用StarRocks
StarRocks 可以满足企业级用户的多种分析需求,主要使用场景如下:
OLAP (Online Analytical Processing) 多维分析
如自助式报表平台,用户行为分析实时数据仓库
如电商大促数据分析、广告投放分析,支持针对数据更新高并发查询
如如广告主报表分析统一分析
详见适用场景
StarRocks 架构简洁,整个系统的核心只有 FE(Frontend)、BE(Backend)两类进程,不依赖任何外部组件,方便部署与维护
StarRocks 的整体架构如下图:
横向扩展和高可用
。
FE 有三种角色:Leader FE,Follower FE 和 Observer FE。Follower 会通过类 Paxos 的 Berkeley DB Java Edition(BDBJE)协议自动选举出一个 Leader
StarRocks 使用列式存储,采用分区分桶机制进行数据管理。
表按照日期划分为 4 个分区,第一个分区进一步切分成 4 个 Tablet。每个 Tablet 使用 3 副本进行备份,分布在 3 个不同的 BE 节点上。
相关的SQL语句
-- 建表SQL CREATE TABLE IF NOT EXISTS sr_member ( sr_id INT, name STRING, city_code INT, reg_date DATE, verified BOOLEAN ) PARTITION BY RANGE(reg_date) ( START ("2021-01-01") END ("2021-12-31") EVERY (INTERVAL 3 MONTH) ) DISTRIBUTED BY HASH(city_code) BUCKETS 4 PROPERTIES( "replication_num" = "1" ); -- 查看表分区 show partition from test.sr_member; -- 查看tablet show tablet from test.sr_member;
适用场景
建表示例
CREATE TABLE IF NOT EXISTS detail (
event_time DATETIME NOT NULL COMMENT "datetime of event",
event_type INT NOT NULL COMMENT "type of event",
user_id INT COMMENT "id of user",
device_code INT COMMENT "device code",
channel INT COMMENT ""
)
DUPLICATE KEY(event_time, event_type)
DISTRIBUTED BY HASH(user_id) BUCKETS 8
PROPERTIES("replication_num" = "1");
注意事项:
DUPLICATE KEY
显式定义。本示例中排序键为 event_time
和 event_type
。适用场景:数据统计和分析场景
建表示例
CREATE TABLE IF NOT EXISTS example_db.aggregate_tbl (
site_id LARGEINT NOT NULL COMMENT "id of site",
date DATE NOT NULL COMMENT "time of event",
city_code VARCHAR(20) COMMENT "city_code of user",
pv BIGINT SUM DEFAULT "0" COMMENT "total page views"
)
AGGREGATE KEY(site_id, date, city_code)
DISTRIBUTED BY HASH(site_id) BUCKETS 8
PROPERTIES ("replication_num" = "1");
注意事项:
适用场景
建表示例
CREATE TABLE IF NOT EXISTS orders (
create_time DATE NOT NULL COMMENT "create time of an order",
order_id BIGINT NOT NULL COMMENT "id of an order",
order_state INT COMMENT "state of an order",
total_price BIGINT COMMENT "price of an order"
)
UNIQUE KEY(create_time, order_id)
DISTRIBUTED BY HASH(order_id) BUCKETS 8
PROPERTIES ("replication_num" = "1");
注意事项:
UNIQUE KEY
定义。适用场景: 适用于实时和频繁更新的场景
建表示例
create table orders ( dt date NOT NULL, order_id bigint NOT NULL, user_id int NOT NULL, merchant_id int NOT NULL, good_id int NOT NULL, good_name string NOT NULL, price int NOT NULL, cnt int NOT NULL, revenue int NOT NULL, state tinyint NOT NULL ) PRIMARY KEY (dt, order_id) PARTITION BY RANGE(`dt`) ( PARTITION p20210820 VALUES [('2021-08-20'), ('2021-08-21')), PARTITION p20210821 VALUES [('2021-08-21'), ('2021-08-22')), PARTITION p20210929 VALUES [('2021-09-29'), ('2021-09-30')), PARTITION p20210930 VALUES [('2021-09-30'), ('2021-10-01')) ) DISTRIBUTED BY HASH(order_id) BUCKETS 4 PROPERTIES("replication_num" = "1","enable_persistent_index" = "true"); create table users ( user_id bigint NOT NULL, name string NOT NULL, email string NULL, address string NULL, age tinyint NULL, sex tinyint NULL, last_active datetime, property0 tinyint NOT NULL ) PRIMARY KEY (user_id) DISTRIBUTED BY HASH(user_id) BUCKETS 4 PROPERTIES("replication_num" = "1","enable_persistent_index" = "true");
注意事项:
PRIMARY KEY
定义。dt
、order_id
。详见用法参见: 导入总览
导出使用详见EXPORT,
注意:
EXPORT TABLE db1.tbl1 PARTITION (p1,p2) (col1, col3) TO "hdfs://HDFS_IP:HDFS_Port/export/lineorder_" PROPERTIES ( "column_separator"=",", "load_mem_limit"="2147483648", "timeout" = "3600" ) WITH BROKER ( "username" = "user", "password" = "passwd" );
外部数据:指保存在外部数据源(如 Apache Hive™、Apache Iceberg、Apache Hudi、Delta Lake、JDBC)中的数据。
通过Catalog不需要执行数据导入就可以直接查询
External catalog: 外部数据目录,用于连接外部 metastore。在 StarRocks 中,您可以通过 external catalog 直接查询外部数据,无需进行数据导入或迁移。当前支持创建以下类型的 external catalog:
CREATE EXTERNAL CATALOG jdbc0 PROPERTIES ( "type"="jdbc", "user"="postgres", "password"="changeme", "jdbc_uri"="jdbc:postgresql://127.0.0.1:5432/jdbc_test", "driver_url"="https://repo1.maven.org/maven2/org/postgresql/postgresql/42.3.3/postgresql-42.3.3.jar", "driver_class"="org.postgresql.Driver" ); CREATE EXTERNAL CATALOG jdbc1 PROPERTIES ( "type"="jdbc", "user"="root", "password"="changeme", "jdbc_uri"="jdbc:mysql://127.0.0.1:3306", "driver_url"="https://repo1.maven.org/maven2/mysql/mysql-connector-java/8.0.28/mysql-connector-java-8.0.28.jar", "driver_class"="com.mysql.cj.jdbc.Driver" );
StarRocks 支持以外部表 (External Table)
的形式,接入其他数据源。外部表指的是保存在其他数据源中的数据表,而 StartRocks 只保存表对应的元数据,并直接向外部表所在数据源发起查询。
目前 StarRocks 已支持的第三方数据源包括
对于 StarRocks 数据源,现阶段只支持 Insert 写入,不支持读取,对于其他数据源,现阶段只支持读取,还不支持写入。
CREATE EXTERNAL TABLE mysql_external_table ( k1 DATE, k2 INT, k3 SMALLINT, k4 VARCHAR(2048), k5 DATETIME ) ENGINE=mysql PROPERTIES ( "host" = "127.0.0.1", "port" = "3306", "user" = "mysql_user", "password" = "mysql_passwd", "database" = "mysql_db_test", "table" = "mysql_table_test" );
文件外部表 (File External Table) 是一种特殊的外部表。您可以通过文件外部表直接查询外部存储系统上的 Parquet 和 ORC 格式的数据文件,无需导入数据。同时,文件外部表也不依赖任何 Metastore。StarRocks 当前支持的外部存储系统包括 HDFS、Amazon S3 及其他兼容 S3 协议的对象存储、阿里云对象存储 OSS 和腾讯云对象存储 COS。
USE db_example;
CREATE EXTERNAL TABLE table_1
(
name string,
id int
)
ENGINE=file
PROPERTIES
(
"path" = "s3://bucket-test/folder1/",
"format" = "orc",
"aws.s3.use_instance_profile" = "true",
"aws.s3.iam_role_arn" = "arn:aws:iam::51234343412:role/role_name_in_aws_iam",
"aws.s3.region" = "us-west-2"
);
同步物化视图下,所有对于基表的数据变更都会自动同步更新到物化视图中。您无需手动调用刷新命令,即可实现自动同步刷新物化视图。同步物化视图的管理成本和更新成本都比较低,适合实时场景下单表聚合查询的透明加速。
相较于同步物化视图,异步物化视图支持多表关联以及更加丰富的聚合算子。异步物化视图可以通过手动调用或定时任务的方式刷新,并且支持刷新部分分区,可以大幅降低刷新成本。除此之外,异步物化视图支持多种查询改写场景,实现自动、透明查询加速。
** 单表聚合** | 多表关联 | 查询改写 | 刷新策略 | 基表 | |
---|---|---|---|---|---|
StarRocks 2.5 异步物化视图 | 是 | 是 | 是 | 异步定时刷新手动刷新 | 支持多表构建。基表可以来自:Default CatalogExternal Catalog已有异步物化视图 |
StarRocks 2.4 异步物化视图 | 是 | 是 | 否 | 异步定时刷新手动刷新 | 支持基于 Default Catalog 的多表构建 |
同步物化视图(Rollup) | 仅部分聚合算子 | 否 | 是 | 导入同步刷新 | 仅支持基于 Default Catalog 的单表构建 |
Colocate Join 功能是分布式系统实现 Join 数据分布的策略之一,能够减少数据多节点分布时 Join 操作引起的数据移动和网络传输,从而提高查询性能。
迭代新架构后
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。