西安高端网站定制国际网站如何推做推广
- 作者: 五速梦信息网
- 时间: 2026年03月21日 07:11
当前位置: 首页 > news >正文
西安高端网站定制,国际网站如何推做推广,网站建设咨询中心,网站可以不备案吗文章目录 前言2.3 数据分布2.3.1 数据分布概览2.3.1.1 常见的数据分布方式2.3.1.2 StarRocks的数据分布方式2.3.1.3 分区2.3.1.4 分桶 2.3.2 创建分区2.3.2.1 表达式分区2.3.2.1.1 时间函数表达式分区#xff08;自v3.1#xff09;2.3.2.1.2 列表达式分区#xff08;自v3.1自v3.12.3.2.1.2 列表达式分区自v3.1 2.3.2.2 Range 分区2.3.2.3 List分区2.3.2.3.1 功能介绍2.3.2.3.2 使用方式2.3.2.3.2.1 语法2.3.2.3.2.2 参数说明2.3.2.3.2.3 示例 2.3.2.3.3 使用限制 2.3.2.4 手动创建分区2.3.2.5 批量创建分区2.3.2.6 动态分区 前言
本文为Flink-StarRocks详解后续章节主要详解StarRocks分区分桶 由于篇幅过长后续接着下面进行详解 StarRocks查询数据湖 实现即席查询案例
2.3 数据分布
建表时可以通过设置合理的分区和分桶实现数据均匀分布和查询性能提升。数据均匀分布是指数据按照一定规则划分为子集并且均衡地分布在不同节点上。查询时能够有效裁剪数据扫描量最大限度地利用集群的并发性能从而提升查询性能。 说明 自 2.5.7 版本起在建表和新增分区时可以不设置分桶数量 (BUCKETS)。StarRocks 默认自动设置分桶数量如果自动设置分桶数量后性能未能达到预期并且比较熟悉分桶机制则也可以手动设置分桶数量。 自 3.1 版本起在建表和新增分区时可以不设置分桶键即 DISTRIBUTED BY 子句。StarRocks 默认使用随机分桶将数据随机地分布在分区的所有分桶中。
2.3.1 数据分布概览
2.3.1.1 常见的数据分布方式
现代分布式数据库中常见的数据分布方式有如下几种Round-Robin、Range、List 和 Hash。如下图所示
Round-Robin以轮询的方式把数据逐个放置在相邻节点上。 Range按区间进行数据分布。如上图所示区间 [1-3]、[4-6] 分别对应不同的范围 (Range)。 List直接基于离散的各个取值做数据分布性别、省份等数据就满足这种离散的特性。每个离散值会映射到一个节点上多个不同的取值可能也会映射到相同节点上。 Hash通过哈希函数把数据映射到不同节点上。 为了更灵活地划分数据除了单独采用上述数据分布方式之一以外还可以根据具体的业务场景需求组合使用这些数据分布方式。常见的组合方式有 RangeHash、ListHash。
2.3.1.2 StarRocks的数据分布方式
StarRocks 支持单独和组合使用数据分布方式。 说明除了常见的分布方式外 StarRocks 还支持了 Random 分布可以简化分桶设置。 并且 StarRocks 通过设置分区 分桶的方式来实现数据分布。 第一层为分区在一张表中可以进行分区支持的分区方式有表达式分区、Range 分区和 List 分区或者不分区即全表只有一个分区。 第二层为分桶在一个分区中必须进行分桶。支持的分桶方式有哈希分桶和随机分桶。
2.3.1.3 分区
分区用于将数据划分成不同的区间。分区的主要作用是将一张表按照分区键拆分成不同的管理单元针对每一个管理单元选择相应的存储策略比如分桶数、冷热策略、存储介质、副本数等。StarRocks 支持在一个集群内使用多种存储介质可以将新数据所在分区放在 SSD 盘上利用 SSD 优秀的随机读写性能来提高查询性能将旧数据存放在 SATA 盘上以节省数据存储的成本。
选择分区列和分区粒度 选择合理的分区列可以有效的裁剪查询数据时扫描的数据量。业务系统中⼀般会选择根据时间进行分区以优化大量删除过期数据带来的性能问题同时也方便冷热数据分级存储此时可以使用时间列作为分区列进行表达式分区或者 Range 分区。此外如果经常按照枚举值查询数据和管理数据则可以选择枚举值的列作为分区列进行表达式分区或者 List 分区。 选择分区单位时需要综合考虑数据量、查询特点、数据管理粒度等因素。 示例 1表单月数据量很小可以按月分区相比于按天分区可以减少元数据数量从而减少元数据管理和调度的资源消耗。 示例 2表单月数据量很大而大部分查询条件精确到天如果按天分区可以做有效的分区裁剪减少查询扫描的数据量。 示例 3数据要求按天过期可以按天分区。
2.3.1.4 分桶
一个分区按分桶方式被分成了多个桶 bucket每个桶的数据称之为一个 tablet。 分桶方式StarRocks 支持随机分桶自 v3.1和哈希分桶。 随机分桶建表和新增分区时无需设置分桶键。在同一分区内数据随机分布到不同的分桶中。 哈希分桶建表和新增分区时需要指定分桶键。在同一分区内数据按照分桶键划分分桶后所有分桶键的值相同的行会唯一分配到对应的一个分桶。 分桶数量默认由 StarRocks 自动设置分桶数量自 v2.5.7。同时也支持手动设置分桶数量。
2.3.2 创建分区
按照分区类型可以分为表达式分区、Range分区和List分区。 按照分区创建方式可以分为手动创建分区、批量创建分区和动态分区。
2.3.2.1 表达式分区
自 v3.0 起StarRocks 支持表达式分区原称自动创建分区更加灵活易用适用于大多数场景比如按照连续日期范围或者枚举值来查询和管理数据。 仅需要在建表时使用分区表达式时间函数表达式或列表达式即可实现导入数据时自动创建分区不需要预先创建出分区或者配置动态分区属性。
2.3.2.1.1 时间函数表达式分区自v3.1
如果经常按照连续日期范围来查询和管理数据则只需要在时间函数分区表达式中指定一个日期类型DATE 或者 DATETIME 的分区列以及指定分区粒度年、月、日或小时。StarRocks 会根据导入的数据和分区表达式自动创建分区并且设置分区的起止时间。 不过在一些特殊场景下比如历史数据按月划分分区、最近数据按天划分分区则需要采用 Range 分区创建分区。 一语法
PARTITION BY expression
…
[ PROPERTIES( partition_live_number xxx ) ]expression ::{ date_trunc ( time_unit , partition_column ) |time_slice ( partition_column , INTERVAL N time_unit [ , boundary ] ) }
二参数解释
注意StarRocks 自动创建分区数量上限默认为 4096由 FE 配置参数 max_automatic_partition_number 决定。该参数可以防止由于误操作而创建大量分区。 三示例 示例一 假设经常按天查询数据则建表时可以使用分区表达式 date_trunc() 并且设置分区列为 event_day 分区粒度为 day实现导入数据时自动按照数据所属日期划分分区。将同一天的数据存储在一个分区中利用分区裁剪可以显著提高查询效率。
CREATE TABLE test.site_express1 (event_day DATETIME NOT NULL,site_id INT DEFAULT 10,city_code VARCHAR(100),user_name VARCHAR(32) DEFAULT ,pv BIGINT DEFAULT 0
)
DUPLICATE KEY(event_day, site_id, city_code, user_name)
PARTITION BY date_trunc(day, event_day)
DISTRIBUTED BY HASH(event_day, site_id)
PROPERTIES (
replication_num 1
);导入如下两行数据则 StarRocks 会根据导入数据的日期范围自动创建两个分区 p20230226、p20230227范围分别为 [2023-02-26 00:00:00,2023-02-27 00:00:00)、[2023-02-27 00:00:00,2023-02-28 00:00:00)。如果后续导入数据的日期属于这两个范围则都会自动划分至对应分区。
– 导入两行数据
INSERT INTO test.site_access1 VALUES (2023-02-26 20:12:04,002,New York,Sam Smith,1),(2023-02-27 21:06:54,001,Los Angeles,Taylor Swift,1);查询分区 – 查询分区 SHOW PARTITIONS FROM test.site_express1; 示例二 假设经常按周查询数据则建表时可以使用分区表达式 time_slice()设置分区列为 event_day分区粒度为七天。将一周的数据存储在一个分区中利用分区裁剪可以显著提高查询效率。
CREATE TABLE test.site_express2(event_day DATETIME NOT NULL,site_id INT DEFAULT 10,city_code VARCHAR(100),user_name VARCHAR(32) DEFAULT ,pv BIGINT DEFAULT 0
)
DUPLICATE KEY(event_day, site_id, city_code, user_name)
PARTITION BY time_slice(event_day, INTERVAL 7 day)
DISTRIBUTED BY HASH(event_day, site_id)
PROPERTIES (
replication_num 1
);导入如下几行数据则 StarRocks 会根据导入数据的日期范围自动创建两个分区 p20230220、p20230227范围分别为 [2023-02-20 00:00:00,2023-02-27 00:00:00)、[2023-02-27 00:00:00,2023-03-06 00:00:00)。如果后续导入数据的日期属于这两个范围则都会自动划分至对应分区。
– 导入三行数据
INSERT INTO test.site_express2VALUES (2023-02-20 21:06:54,001,Los Angeles,Taylor Swift,1),(2023-02-26 20:12:04,002,New York,Sam Smith,1),(2023-02-27 21:06:54,003,Los Angeles,Taylor Swift,1);
查询分区
SHOW PARTITIONS FROM test.site_express2;2.3.2.1.2 列表达式分区自v3.1
如果经常按照枚举值来查询和管理数据则只需要指定表示类型的列为分区列StarRocks 会根据导入的数据的分区列值来自动划分并创建分区。同Hive分区的用法。 不过在一些特殊场景下比如表中包含表示城市的列经常按照国家和城市来查询和管理数据希望将同属于一个国家的多个城市的数据存储在一个分区中则需要使用 List 分区。 一语法
PARTITION BY expression
…
[ PROPERTIES( partition_live_number xxx ) ]expression ::( partition_columns )partition_columns ::column, [ column [,…] ]二参数解释
三使用说明 1StarRocks 自动创建分区数量上限默认为 4096由 FE 配置参数 max_automatic_partition_number 决定。该参数可以防止由于误操作而创建大量分区。 2分区命名规则如果存在多个分区列则不同分区列的值以下划线_连接。例如存在有两个分区列 dt 和 city均为字符串类型导入一条数据 2022-04-01, beijing则自动创建的分区名称为 p20220401_beijing。 四示例 假设经常按日期范围和特定城市查询机房收费明细则建表时可以使用分区表达式指定分区列为日期 dt 和城市 city。这样属于相同日期和城市的数据分组到同一个分区中利用分区裁剪可以显著提高查询效率。
CREATE TABLE test.recharge_express(id bigint,user_id bigint,recharge_money decimal(32,2), city varchar(20) not null,dt varchar(20) not null
)
DUPLICATE KEY(id)
PARTITION BY (dt,city)
DISTRIBUTED BY HASH(id)
PROPERTIES (
replication_num 1
);导入一条数据。
INSERT INTO test.recharge_express
VALUES (1, 1, 1, Houston, 2022-04-01);查看具体分区。返回结果显示StarRocks 根据导入数据的分区列值自动创建一个分区 p20220401_Houston 如果后续导入数据的分区列 dt 和 city 的值是 2022-04-01和 Houston则都会被划分至该分区。 说明分区中只能包含各分区列的一个值如果需要一个分区中包含各分区列的多值请使用 List 分区。 查询分区
SHOW PARTITIONS from test.recharge_express;2.3.2.2 Range 分区
Range 分区适用于简单且具有连续性的数据如时间序列数据日期或时间戳或连续的数值数据。并且经常按照连续日期/数值范围来查询和管理数据。以及一些特殊场景比如一张表的分区粒度不一致历史数据需要按月划分分区而最近数据需要按天划分分区。 StarRocks 会根据显式定义的范围与分区的映射关系将数据分配到相应的分区中。 示例
CREATE TABLE test.site_access5(event_day DATE,site_id INT DEFAULT 10,city_code VARCHAR(100),user_name VARCHAR(32) DEFAULT ,pv BIGINT SUM DEFAULT 0
)
AGGREGATE KEY(event_day, site_id, city_code, user_name)
PARTITION BY RANGE(event_day)(PARTITION p1 VALUES LESS THAN (2020-01-31),PARTITION p2 VALUES LESS THAN (2020-02-29),PARTITION p3 VALUES LESS THAN (2020-03-31)
)
DISTRIBUTED BY HASH(site_id)
PROPERTIES (
replication_num 1
);2.3.2.3 List分区
自 v3.1 起StarRocks 支持 List 分区数据按照显式定义的枚举值列表进行分区适用于按枚举值来查询和管理数据。
2.3.2.3.1 功能介绍
需要显式列出每个 List 分区所包含的枚举值列表并且值不需要连续区别于包含连续日期或者数值范围的 Range 分区。当新数据导入表中时StarRocks 会根据数据的分区列值与分区的映射关系将数据分配到相应的分区中。
List 分区适用于存储具有少量枚举值列的数据、并且经常按列的枚举值来查询和管理数据的场景。例如表示地理位置、状态、类别的列。列的每个值都代表一种独立的类别。按照列的枚举值对数据进行分区可以提高查询性能和方便数据管理。 尤其适用于一个分区中需要包含各分区列的多个值的场景。例如表中存在 City 列表示个体所属的城市并且经常按照州和城市查询和管理数据则建表时可以使用 City 列作为分区列进行 List 分区指定同属一个州的多个城市的数据分在同一分区 PARTITION pCalifornia VALUES IN (“Los Angeles”,“San Francisco”,“San Diego”)可以加速查询和方便数据管理。
2.3.2.3.2 使用方式
2.3.2.3.2.1 语法
PARTITION BY LIST (partition_columns)PARTITION partition_name VALUES IN (value_list)[, …]
)partition_columns:: column [,column [, …] ]value_list ::value_item [, value_item [, …] ]value_item ::{ value | ( value [, value, [, …] ] ) } 2.3.2.3.2.2 参数说明 2.3.2.3.2.3 示例
示例一 假设经常按照州或城市查询机房收费明细则建表时可以指定分区列为城市 city 并且指定每个分区所包含城市同属一个州这样可以加速查询特定州或城市的数据并且方便按照特定州或城市进行数据管理。
CREATE TABLE test.recharge_list(id bigint,user_id bigint,recharge_money decimal(32,2), city varchar(20) not null,dt varchar(20) not null
)
DUPLICATE KEY(id)
PARTITION BY LIST (city) (PARTITION pCalifornia VALUES IN (Los Angeles,San Francisco,San Diego), – 这些城市同属一个州PARTITION pTexas VALUES IN (Houston,Dallas,Austin)
)
DISTRIBUTED BY HASH(id)
PROPERTIES (
replication_num 1
);示例二 假设经常按日期范围和特定州或城市查询机房收费明细则建表时可以指定分区列为日期 dt 和城市 city。这样属于特定日期和特定州或城市的数据分组到同一个分区中以加速查询和方便数据管理。
CREATE TABLE test.recharge_list2(id bigint,user_id bigint,recharge_money decimal(32,2), city varchar(20) not null,dt varchar(20) not null
)
DUPLICATE KEY(id)
PARTITION BY LIST (dt,city) (PARTITION p202204_California VALUES IN ((2022-04-01, Los Angeles),(2022-04-01, San Francisco),(2022-04-02, Los Angeles),(2022-04-02, San Francisco)),PARTITION p202204_Texas VALUES IN ((2022-04-01, Houston),(2022-04-01, Dallas),(2022-04-02, Houston),(2022-04-02, Dallas))
)
DISTRIBUTED BY HASH(id)
PROPERTIES (
replication_num 1
);2.3.2.3.3 使用限制
不支持动态和批量创建 List 分区。 StarRocks 存算分离模式从 3.1.1 版本开始支持该功能。 使用 ALTER TABLE table_name DROP PARTITION partition_name; 分区直接被删除并且不能被恢复。 List 分区暂时不支持备份与恢复。 异步物化视图暂不支持基于使用 List 分区的基表创建。
2.3.2.4 手动创建分区
选择合理的分区键可以有效的裁剪扫描的数据量。目前仅支持分区键的数据类型为日期和整数类型。在实际业务场景中一般从数据管理的角度选择分区键常见的分区键为时间或者区域。 如上面range分区创建的test.site_access5
2.3.2.5 批量创建分区
建表时和建表后支持批量创建分区通过 START、END 指定批量分区的开始和结束EVERY 子句指定分区增量值。其中批量分区包含 START 的值但是不包含 END 的值。分区的命名规则同动态分区一样。 建表时批量创建日期分区 当分区键为日期类型时建表时通过 START、END 指定批量分区的开始日期和结束日期EVERY 子句指定分区增量值。并且 EVERY 子句中用 INTERVAL 关键字表示日期间隔目前支持日期间隔的单位为 HOUR自 3.0 版本起、DAY、WEEK、MONTH、YEAR。 如下示例中批量分区的开始日期为 2021-01-01 和结束日期为 2021-01-04增量值为一天
CREATE TABLE test.site_access6(datekey DATE,site_id INT,city_code SMALLINT,user_name VARCHAR(32),pv BIGINT DEFAULT 0
)
DUPLICATE KEY(datekey, site_id, city_code, user_name)
PARTITION BY RANGE (datekey) (START (2021-01-01) END (2021-01-04) EVERY (INTERVAL 1 DAY)
)
DISTRIBUTED BY HASH(site_id)
PROPERTIES (replication_num 1
);则相当于在建表语句中使用如下 PARTITION BY 子句
PARTITION BY RANGE (datekey) (PARTITION p20210101 VALUES [(2021-01-01), (2021-01-02)),PARTITION p20210102 VALUES [(2021-01-02), (2021-01-03)),PARTITION p20210103 VALUES [(2021-01-03), (2021-01-04))
) 建表时批量创建不同日期间隔的日期分区 建表时批量创建日期分区时支持针对不同的日期分区区间日期分区区间不能相重合使用不同的 EVERY 子句指定日期间隔。一个日期分区区间按照对应 EVERY 子句定义的日期间隔批量创建分区例如
CREATE TABLE test.site_access7(datekey DATE,site_id INT,city_code SMALLINT,user_name VARCHAR(32),pv BIGINT DEFAULT 0
)
DUPLICATE KEY(datekey, site_id, city_code, user_name)
PARTITION BY RANGE (datekey) (START (2019-01-01) END (2021-01-01) EVERY (INTERVAL 1 YEAR),START (2021-01-01) END (2021-05-01) EVERY (INTERVAL 1 MONTH),START (2021-05-01) END (2021-05-04) EVERY (INTERVAL 1 DAY)
)
DISTRIBUTED BY HASH(site_id)
PROPERTIES (replication_num 1
);
则相当于在建表语句中使用如下 PARTITION BY 子句
PARTITION BY RANGE (datekey) (PARTITION p2019 VALUES [(2019-01-01), (2020-01-01)),PARTITION p2020 VALUES [(2020-01-01), (2021-01-01)),PARTITION p202101 VALUES [(2021-01-01), (2021-02-01)),PARTITION p202102 VALUES [(2021-02-01), (2021-03-01)),PARTITION p202103 VALUES [(2021-03-01), (2021-04-01)),PARTITION p202104 VALUES [(2021-04-01), (2021-05-01)),PARTITION p20210501 VALUES [(2021-05-01), (2021-05-02)),PARTITION p20210502 VALUES [(2021-05-02), (2021-05-03)),PARTITION p20210503 VALUES [(2021-05-03), (2021-05-04))
) 建表时批量创建数字分区 当分区键为整数类型时建表时通过 START、END 指定批量分区的开始值和结束值EVERY 子句指定分区增量值。 说明START、END 所指定的分区列的值需要使用英文引号包裹而 EVERY 子句中的分区增量值不用英文引号包裹。 如下示例中批量分区的开始值为 1 和结束值为 5分区增量值为 1
CREATE TABLE test.site_access8(datekey INT,site_id INT,city_code SMALLINT,user_name VARCHAR(32),pv BIGINT DEFAULT 0
)
DUPLICATE KEY(datekey, site_id, city_code, user_name)
PARTITION BY RANGE (datekey) (START (1) END (5) EVERY (1)
)
DISTRIBUTED BY HASH(site_id)
PROPERTIES (replication_num 1
);
则相当于在建表语句中使用如下 PARTITION BY 子句
PARTITION BY RANGE (datekey) (PARTITION p1 VALUES [(1), (2)),PARTITION p2 VALUES [(2), (3)),PARTITION p3 VALUES [(3), (4)),PARTITION p4 VALUES [(4), (5))
) 建表后批量创建分区 建表后支持通过ALTER TABLE 语句批量创建分区。相关语法与建表时批量创建分区类似通过指定 ADD PARTITIONS 关键字以及 START、END 以及 EVERY 子句来批量创建分区。示例如下 ALTER TABLE test.site_access8 ADD PARTITIONS START (“5”) END (“9”) EVERY (2);
2.3.2.6 动态分区
建表时配置动态分区属性StarRocks 会⾃动提前创建新的分区删除过期分区从而确保数据的时效性实现对分区的⽣命周期管理Time to Life简称 “TTL”。 区别于表达式分区中自动创建分区功能动态创建分区只是根据配置的动态分区属性定期提前创建一些分区。如果导入的新数据不属于这些提前创建的分区则导入任务会报错。而表达式分区中自动创建分区功能会根据导入数据创建对应的新分区。 如下示例创建一张支持动态分区的表表名为 site_access动态分区通过 PROPERTIES 进行配置。分区的区间为当前时间的前后 3 天总共 6 天。手动创建的4个分区p20200321~p20200324因为过期会被删除。 注意starrocks 的EMR Serverless StarRocks版本默认 dynamic_partition_enable 为true所以不需要再手动设置。
CREATE TABLE test.site_access_dynamic(event_day DATE,site_id INT DEFAULT 10,city_code VARCHAR(100),user_name VARCHAR(32) DEFAULT ,pv BIGINT DEFAULT 0
)
DUPLICATE KEY(event_day, site_id, city_code, user_name)
PARTITION BY RANGE(event_day)(
PARTITION p20200321 VALUES LESS THAN (2020-03-22),
PARTITION p20200322 VALUES LESS THAN (2020-03-23),
PARTITION p20200323 VALUES LESS THAN (2020-03-24),
PARTITION p20200324 VALUES LESS THAN (2020-03-25)
)
DISTRIBUTED BY HASH(event_day, site_id)
PROPERTIES(dynamic_partition.time_unit DAY,dynamic_partition.start -3,dynamic_partition.end 3,dynamic_partition.prefix p,dynamic_partition.history_partition_num 3,replication_num 1
);动态分区相关属性 PROPERTIES 动态分区相关 FE 配置项 dynamic_partition_check_interval_secondsFE 配置项动态分区检查的时间周期默认为 600单位为 s即每10分钟检查一次分区情况是否满足PROPERTIES中动态分区属性如不满足则会自动创建和删除分区。
- 上一篇: 西安电脑网站建设北京app制作哪家好
- 下一篇: 西安高端网站设计公司整合营销中的4c指的是什么
相关文章
-
西安电脑网站建设北京app制作哪家好
西安电脑网站建设北京app制作哪家好
- 技术栈
- 2026年03月21日
-
西安的网站建设泰安房价走势图
西安的网站建设泰安房价走势图
- 技术栈
- 2026年03月21日
-
西安的网站建设公司wordpress编辑页面改字体颜色
西安的网站建设公司wordpress编辑页面改字体颜色
- 技术栈
- 2026年03月21日
-
西安高端网站设计公司整合营销中的4c指的是什么
西安高端网站设计公司整合营销中的4c指的是什么
- 技术栈
- 2026年03月21日
-
西安给大学做网站公司企业网站模板psd
西安给大学做网站公司企业网站模板psd
- 技术栈
- 2026年03月21日
-
西安工程建设信息网站长沙百度关键词优化
西安工程建设信息网站长沙百度关键词优化
- 技术栈
- 2026年03月21日
