Apache Doris Sequence介绍及使用方法

简介: Sequence列目前只支持Uniq模型,Uniq模型主要针对需要唯一主键的场景,可以保证主键唯一性约束,但是由于使用REPLACE聚合方式,在同一批次中导入的数据,替换顺序不做保证。替换顺序无法保证则无法确定最终导入到表中的具体数据,存在了不确定性。为了解决这个问题,Doris支持了sequence列,通过用户在导入时指定sequence列,相同key列下,REPLACE聚合类型的列将按照sequence列的值进行替换,较大值可以替换较小值,反之则无法替换。该方法将顺序的确定交给了用户,由用户控制替换顺序。

Sequence列目前只支持Uniq模型,Uniq模型主要针对需要唯一主键的场景,可以保证主键唯一性约束,但是由于使用REPLACE聚合方式,在同一批次中导入的数据,替换顺序不做保证。替换顺序无法保证则无法确定最终导入到表中的具体数据,存在了不确定性。


为了解决这个问题,Doris支持了sequence列,通过用户在导入时指定sequence列,相同key列下,REPLACE聚合类型的列将按照sequence列的值进行替换,较大值可以替换较小值,反之则无法替换。该方法将顺序的确定交给了用户,由用户控制替换顺序。


1. 原理


Doris为了满足顺序更新的问题,通过增加一个隐藏列DORIS_SEQUENCE_COL实现,该列的类型由用户在建表时指定,在导入时确定该列具体值,并依据该值对REPLACE列进行替换。


2. 建表


Sequence目前只能在Unique Key模型上。


创建Uniq表时,将按照用户指定类型自动添加一个隐藏列DORIS_SEQUENCE_COL,这里不需要显示的指定列只需要在PROPERTIES 里加一个属性

function_column.sequence_type

示例:

CREATE TABLE user_log_1 (
    user_id VARCHAR(20),
    item_id VARCHAR(30),
    category_id VARCHAR(30),
    behavior VARCHAR(30),
    ts datetime
) ENGINE=OLAP
UNIQUE KEY(`user_id`)
COMMENT "OLAP"
DISTRIBUTED BY HASH(`user_id`) BUCKETS 1
PROPERTIES (
"replication_num" = "1",
"function_column.sequence_type" = 'Date',
"in_memory" = "false",
"storage_format" = "V2"
);

使用下面的命令就可以看到隐藏的列:


SET show_hidden_columns=true; desc user_log_1

image.png


2.1 怎么启用sequence column支持


在新建表时如果设置了function_column.sequence_type ,则新建表将支持sequence column。 对于一个不支持sequence column的表,如果想要使用该功能,可以使用如下语句: ALTER TABLE example_db.my_table ENABLE FEATURE "SEQUENCE_LOAD" WITH PROPERTIES ("function_column.sequence_type" = "Date") 来启用。 如果确定一个表是否支持sequence column,可以通过设置一个session variable来显示隐藏列 SET show_hidden_columns=true ,之后使用desc tablename,如果输出中有DORIS_SEQUENCE_COL 列则支持,如果没有则不支持


3.导入及读取


3.1 导入


导入时,fe在解析的过程中将隐藏列的值设置成 order by 表达式的值(broker load和routine load),或者function_column.sequence_col表达式的值(stream load), value列将按照该值进行替换。隐藏列DORIS_SEQUENCE_COL的值既可以设置为数据源中一列,也可以是表结构中的一列。


3.1.1 Stream Load


stream load 的写法是在header中的function_column.sequence_col字段添加隐藏列对应的source_sequence的映射, 示例


curl --location-trusted -u root -H "columns: user_id,item_id,category_id,behavior,ts" -H "function_column.sequence_col: ts" -T testData http://host:port/api/test_2/user_log_1/_stream_load

这里给出的示例是curl的,程序的方式一样,请参照Stream load的部分


3.1.2 Broker Load


在ORDER BY 处设置隐藏列映射的source_sequence字段

LOAD LABEL db1.label1
(
    DATA INFILE("hdfs://host:port/user/data/*/test.txt")
    INTO TABLE `user_log_1`
    COLUMNS TERMINATED BY ","
    (user_id,item_id,category_id,behavior,ts)
    ORDER BY ts
)
WITH BROKER 'broker'
(
    "username"="user",
    "password"="pass"
)
PROPERTIES
(
    "timeout" = "3600"
);

3.1.3 Routine Load


CREATE ROUTINE LOAD test_2.test1 ON user_log_1 
    [WITH MERGE|APPEND|DELETE]
    COLUMNS(user_id,item_id,category_id,behavior,ts),
    [ORDER BY ts]
    PROPERTIES
    (
        "desired_concurrent_number"="3",
        "max_batch_interval" = "20",
        "max_batch_rows" = "300000",
        "max_batch_size" = "209715200",
        "strict_mode" = "false"
    )
    FROM KAFKA
    (
        "kafka_broker_list" = "broker1:9092,broker2:9092,broker3:9092",
        "kafka_topic" = "my_topic",
        "kafka_partitions" = "0,1,2,3",
        "kafka_offsets" = "101,0,0,200"
    );

3.2 读取


请求包含value列时需要需要额外读取DORIS_SEQUENCE_COL列,该列用于在相同key列下,REPLACE聚合函数替换顺序的依据,较大值可以替换较小值,反之则不能替换


4.使用示例


我们继续以上面创建的表为例,通过Stream Load 方式来演示

1,112321,10023,pv,2021-09-27 10:40:34
1,112326,10023,pv,2021-09-27 10:41:34
1,112325,10023,pv,2021-09-27 10:42:34
1,112324,10023,pv,2021-09-27 10:43:34
1,112323,10023,pv,2021-09-27 10:44:34
1,112327,10023,pv,2021-09-27 10:47:34

将上面的数据保存成文本文件,然后执行下面命令:

curl --location-trusted -u root: -H "function_column.sequence_col: ts" -H "column_separator:," -T user_log.csv http://10.220.146.10:8030/api/test_2/user_log_1/_stream_load

image.png


去查看数据,这个应该只有一条数据,最新时间的那条数据,验证结果如下,是正常的

image.png 


4.1 替换数据的保证


我们接着导入下面数据


这里的ts字段时间都是小于doris数据表里的那个时间的

1,112321,10023,pv,2021-09-27 10:40:34
1,112326,10023,pv,2021-09-27 10:41:34
1,112325,10023,pv,2021-09-27 10:42:34
1,112324,10023,pv,2021-09-27 10:43:34
1,112323,10023,pv,2021-09-27 10:44:34

我们执行导入

image.png



查看结果

image.png


发现由于新导入的数据的sequence column都小于表中已有的值,无法替换。我们重新换一条数据,大于表中已有值的

1,100034,10043,pv,2021-09-28 11:50:34

查看结果,发现数据修改了

image.png




目录
相关文章
|
3月前
|
消息中间件 OLAP Kafka
Apache Doris 实时更新技术揭秘:为何在 OLAP 领域表现卓越?
Apache Doris 为何在 OLAP 领域表现卓越?凭借其主键模型、数据延迟、查询性能、并发处理、易用性等多方面特性的表现,在分析领域展现了独特的实时更新能力。
260 9
|
2月前
|
存储 自然语言处理 分布式计算
Apache Doris 3.1 正式发布:半结构化分析全面升级,湖仓一体能力再跃新高
Apache Doris 3.1 正式发布!全面升级半结构化分析,支持 VARIANT 稀疏列与模板化 Schema,提升湖仓一体能力,增强 Iceberg/Paimon 集成,优化存储引擎与查询性能,助力高效数据分析。
337 4
Apache Doris 3.1 正式发布:半结构化分析全面升级,湖仓一体能力再跃新高
|
2月前
|
SQL 人工智能 数据挖掘
Apache Doris 4.0 AI 能力揭秘(二):为企业级应用而生的 AI 函数设计与实践
Apache Doris 4.0 原生集成 LLM 函数,将大语言模型能力深度融入 SQL 引擎,实现文本处理智能化与数据分析一体化。通过十大函数,支持智能客服、内容分析、金融风控等场景,提升实时决策效率。采用资源池化管理,保障数据一致性,降低传输开销,毫秒级完成 AI 分析。结合缓存复用、并行执行与权限控制,兼顾性能、成本与安全,推动数据库向 AI 原生演进。
214 0
Apache Doris 4.0 AI 能力揭秘(二):为企业级应用而生的 AI 函数设计与实践
|
3月前
|
存储 分布式计算 Apache
湖仓一体:小米集团基于 Apache Doris + Apache Paimon 实现 6 倍性能飞跃
小米通过将 Apache Doris(数据库)与 Apache Paimon(数据湖)深度融合,不仅解决了数据湖分析的性能瓶颈,更实现了 “1+1>2” 的协同效应。在这些实践下,小米在湖仓数据分析场景下获得了可观的业务收益。
666 9
湖仓一体:小米集团基于 Apache Doris + Apache Paimon 实现 6 倍性能飞跃
|
3月前
|
人工智能 运维 监控
智能运维与数据治理:基于 Apache Doris 的 Data Agent 解决方案
本文基于 Apache Doris 数据运维治理 Agent 展开讨论,如何让 AI 成为 Doris 数据运维工程师和数据治理专家的智能助手,并在某些场景下实现对人工操作的全面替代。这种变革不仅仅是技术层面的进步,更是数据运维治理思维方式的根本性转变:从“被动响应”到“主动预防”,从“人工判断”到“智能决策”,从“孤立处理”到“协同治理”。
475 11
智能运维与数据治理:基于 Apache Doris 的 Data Agent 解决方案
|
3月前
|
SQL 存储 运维
Apache Doris 在菜鸟的大规模湖仓业务场景落地实践
本文介绍了 Apache Doris 在菜鸟的大规模落地的实践经验,菜鸟为什么选择 Doris,以及 Doris 如何在菜鸟从 0 开始,一步步的验证、落地,到如今上万核的规模,服务于各个业务线,Doris 已然成为菜鸟 OLAP 数据分析的最优选型。
218 2
Apache Doris 在菜鸟的大规模湖仓业务场景落地实践
|
3月前
|
SQL 存储 JSON
Apache Doris 2.1.10 版本正式发布
亲爱的社区小伙伴们,Apache Doris 2.1.10 版本已正式发布。2.1.10 版本对湖仓一体、半结构化数据类型、查询优化器、执行引擎、存储管理进行了若干改进优化。欢迎大家下载使用。
198 5
|
3月前
|
人工智能 自然语言处理 数据挖掘
Apache Doris 4.0 AI 能力揭秘(一):AI 函数之 LLM 函数介绍
在即将发布的 Apache Doris 4.0 版本中,我们正式引入了一系列 LLM 函数,将前沿的 AI 能力与日常的数据分析相结合,无论是精准提取文本信息,还是对评论进行情感分类,亦或生成精炼的文本摘要,皆可在数据库内部无缝完成。
207 0
Apache Doris 4.0 AI 能力揭秘(一):AI 函数之 LLM 函数介绍
|
4月前
|
SQL 人工智能 数据挖掘
Apache Doris + MCP:Agent 时代的实时数据分析底座
数据不再是静态的存储对象,而是流动的智能资源;数据库不再是单纯的存储系统,而是智能化的服务平台。Apache Doris 以其在 AI 方向的深度布局和技术创新,正在成为连接数据与智能的重要桥梁。
1002 0
Apache Doris + MCP:Agent 时代的实时数据分析底座
|
3月前
|
存储 人工智能 Apache
ApacheCon 2025中国开源年度报告:Apache Doris 国内第一
在 Apache 基金会管理的近 300 个顶级项目中,Doris 已经成为仅次于 Apache Airflow 的全球第二大影响力项目。
179 0

推荐镜像

更多
下一篇
开通oss服务