半结构化数据在 Apache Doris 里该怎么存:VARIANT 建表、调参与效果验证全记录

2026 数据仓库选型:Apache Doris、StarRocks、ClickHouse 对比与实践 数据仓库选型是构建现代数据基础设施的核心决策。在大数据技术栈中,OLAP分析引擎提供了多样的选择,不同引擎在数据模型、查询性能、更新机制等方面存在显著差异。Apache Doris、StarRocks 与 ClickHouse 是目前最受关注的三个方向:Doris 以完整 MPP 架构和统一能力见长,StarRocks 强调实时更新和高性能 Join,ClickHouse 则擅长极速单表聚合查询。实际工程中,需要结合查询特征、更新频率和运维能力综合评估。本文基于大量生产环境实践,深入对比三者的核心特性、部署 阅读详情

埋点、日志、IoT 上报这三类数据有一个共同特征:字段由上游业务代码决定,一周一小改、一月一大改。表结构写死的静态列方案会不断被 ALTER TABLE ADD COLUMN 打断,而把整条 JSON 原样塞进 STRING 列、查询时再逐行解析,规模上来之后又会把查询延迟赔进去。Apache Doris 自 2.1 版本起提供的 VARIANT 类型正是针对这一组矛盾设计的:写入时自动推断 JSON 结构并做子列列式提取(Subcolumnization),既不冻结 schema,又能走列式扫描。

本文把建表形态、关键参数、导入配置和「怎么确认真的生效」串成一条完整路径,所有语句可以直接复制到环境里执行。

一、先说结论

先看官方给出的 ClickBench 改造测试(43 条查询)结果:

观测项预定义静态列VARIANT 类型JSON 类型
存储空间12.618 GB12.718 GB35.711 GB
第一次查询(冷)233.79s248.66s大部分查询超时
第二次查询(热)86.02s94.82s789.24s
第三次查询(热)83.03s92.29s743.69s

符合下面任意两条,就值得把半结构化列从 STRING / JSON 换成 VARIANT:

  • JSON 里的字段集合会随时间增删,且无法提前收敛成固定表结构
  • 查询集中在少数高频路径上,而不是每次都要读完整条 JSON
  • 单表日增量在千万行以上,存储占用已经进入成本视野
  • 需要对某些路径做等值过滤或全文检索,希望走索引而不是全表扫描

结论一句话:VARIANT 相比 JSON 节省约 65% 存储、查询提速 8 倍以上,同时与预定义静态列的差距在热查询上只有约 10%(92.29s vs 83.03s)。

二、问题是怎么产生的

差距的根源在存储布局。JSON 类型以二进制 JSONB 格式按行写入 segment 文件;查询 payload['user']['id'] 时,存储层无法只取这一路,必须把整条 JSON 解析出来再定位,解析开销随嵌套深度和文档体积增长。上面 743.69s 这一列,主要就是解析开销。

VARIANT 换了一条路:写入时按 JSON Path 推断类型,把高频路径展开成独立的列式子列。于是:

  • 读 payload['user']['id'] 只扫这一列,享受列式压缩、稀疏索引裁剪和向量化执行
  • 后续写入出现新路径时 schema 自动合并,不需要改表
  • 子列上可以单独建倒排索引或 Bloom Filter

代价是子列规模需要被管理。参与子列列式提取的路径数越多,元数据、compaction 与内存压力越大;接近 10000 条路径时,官方建议单机至少 128G 内存、32 核,并优先评估 DOC 编码模式。这一点在第五节展开。

另一个容易被忽略的代价是类型稳定性。同一个路径上游一会儿写整数、一会儿写字符串,冲突后会被提升为 JSONB,这一路上的索引也随之失效。这是后文 Schema Template 要解决的问题。

三、怎么做:实操路径

3.1 建表:四种形态,按场景选一种

形态 A,默认 VARIANT,适合事件日志、审计日志这类路径数量可控的场景:

CREATE TABLE IF NOT EXISTS event_log (
    ts        DATETIME NOT NULL,
    event_id  BIGINT NOT NULL,
    event_type VARCHAR(64),
    payload   VARIANT                      -- 半结构化列,写入时自动推断子列
)
DUPLICATE KEY(`ts`, `event_id`)
PARTITION BY RANGE(`ts`) ()                -- 留空配合动态分区自动建分区
DISTRIBUTED BY HASH(`event_id`) BUCKETS 16
PROPERTIES (
    "replication_num" = "3",
    "storage_format" = "V3",               -- 宽列场景强烈建议 V3:列元数据与 Segment Footer 解耦
    "compression" = "zstd",
    "dynamic_partition.enable" = "true",
    "dynamic_partition.time_unit" = "DAY",
    "dynamic_partition.end" = "3",
    "dynamic_partition.prefix" = "p"
);

形态 B,稀疏列模式,适合广告、车联网、用户标签这类 JSON key 总量很大但热点路径不多的场景:

CREATE TABLE IF NOT EXISTS telemetry_wide (
    ts         DATETIME NOT NULL,
    device_id  BIGINT NOT NULL,
    attributes VARIANT<
        'device_type' : STRING,            -- 关键路径固定类型,保证类型不漂移
        'region' : STRING,
        properties(
            'variant_max_subcolumns_count' = '2048',   -- 参与子列提取的路径上限,默认即 2048
            'variant_sparse_hash_shard_count' = '64'   -- 稀疏列分片数,按「稀疏路径总数 / 128」估算
        )
    >
)
DUPLICATE KEY(`ts`, `device_id`)
DISTRIBUTED BY HASH(`device_id`) BUCKETS 32
PROPERTIES (
    "replication_num" = "3",
    "storage_format" = "V3"
);

形态 C,DOC 编码模式,适合模型输出、trace 快照这类经常要把整条 JSON 原样取回的场景:

CREATE TABLE IF NOT EXISTS trace_archive (
    ts        DATETIME NOT NULL,
    trace_id  VARCHAR(64) NOT NULL,
    span      VARIANT<
        'service_name' : STRING,
        properties(
            'variant_enable_doc_mode' = 'true',             -- 原始 JSON 作为存储字段保留
            'variant_doc_materialization_min_rows' = '10000', -- 低于该行数的小批写入先不提取子列
            'variant_doc_hash_shard_count' = '64'           -- DOC 分片数,默认 64
        )
    >
)
DUPLICATE KEY(`ts`, `trace_id`)
DISTRIBUTED BY HASH(`trace_id`) BUCKETS 32
PROPERTIES (
    "replication_num" = "3",
    "storage_format" = "V3"
);

形态 D,Schema Template,适合订单、支付这类少数关键路径必须固定类型且可索引的场景。列级属性声明在 3.1 及以上版本支持:

CREATE TABLE IF NOT EXISTS order_events (
    ts        DATETIME NOT NULL,
    order_id  BIGINT NOT NULL,
    detail    VARIANT<
        'status' : STRING,
        'amount' : DECIMAL(18, 2),
        'currency' : STRING
    >,
    INDEX idx_status(detail) USING INVERTED PROPERTIES("field_pattern" = "status")
)
DUPLICATE KEY(`ts`, `order_id`)
DISTRIBUTED BY HASH(`order_id`) BUCKETS 16
PROPERTIES (
    "replication_num" = "3",
    "storage_format" = "V3"
);

四种形态的选择口径:热点路径明确且 JSON 不宽用 A;JSON 很宽但热点集中用 B;以整文档返回或写入吞吐为先用 C;少量路径需要类型与索引确定性用 D。B 与 C 互斥,不能同时开启。

3.2 关键参数表

参数 / 属性默认值作用适用形态与场景
variant_max_subcolumns_count2048可参与子列列式提取的路径数上限,超出后新路径进入共享结构B;不建议超过 10000,0 表示不限制
variant_sparse_hash_shard_count1稀疏列的分片数量,分散长尾路径的读取压力B;按「稀疏路径总数 / 128」估算
variant_enable_typed_paths_to_sparsefalse允许声明了类型的路径也计入阈值并可被收敛到稀疏列B;Schema Template 匹配路径过多导致列数暴增时
variant_enable_doc_modefalse开启 DOC 编码,原始 JSON 作为存储字段保留C;整文档返回、超宽列、追求写入吞吐
variant_doc_materialization_min_rows—DOC 模式下触发子列提取的最小行数阈值C;小批量写入频繁时调大以减少写入开销
variant_doc_hash_shard_count64DOC 编码的分片数量C;按「JSON key 总数 / 128」估算
storage_format—V3 将列元数据与 Segment Footer 解耦全部;子列超过 2000 列的宽表强烈建议
variant_max_merged_tablet_schema_size2048合并后 Tablet Schema 的列数上限(BE 配置)2.1.x / 3.0.x 触发列数报错时调整,不建议超过 4096

3.3 索引:倒排索引与 Bloom Filter

VARIANT 列只能建倒排索引或 Bloom Filter 来加速,这一点在建表时就要想清楚。3.1.x / 4.0 及之后版本可以为部分子列单独指定索引属性,同一路径上还可以同时配分词与不分词两种倒排索引:

CREATE TABLE IF NOT EXISTS tbl (
    k BIGINT,
    v VARIANT<'content' : STRING>,         -- 先用 Schema Template 固定该路径类型
    INDEX idx_tokenized(v) USING INVERTED PROPERTIES("parser" = "english", "field_pattern" = "content"),
    INDEX idx_v(v) USING INVERTED PROPERTIES("field_pattern" = "content")
);

-- 分词索引走全文匹配
SELECT * FROM tbl WHERE v['content'] MATCH 'Doris';
-- 不分词索引走等值匹配
SELECT * FROM tbl WHERE v['content'] = 'Doris';

Bloom Filter 的写法是表属性,用于加速子列等值查询:

CREATE TABLE IF NOT EXISTS tbl_bf (
    k BIGINT,
    v VARIANT
)
DUPLICATE KEY(`k`)
DISTRIBUTED BY HASH(`k`) BUCKETS 10
PROPERTIES("replication_num" = "3", "bloom_filter_columns" = "v");

两个注意点:索引作用于子列,对 VARIANT 整体无效;如果需要对整条 JSON 文本做 LIKE 匹配,额外存一份 STRING 或 JSONB 列再建索引,比直接扫 VARIANT 划算。

3.4 导入:Stream Load 参数与攒批

curl --location-trusted -u root: \
  -H "format: json" \
  -H "read_json_by_line: true" \
  -H "strip_outer_array: false" \
  -H "fuzzy_parse: true" \
  -H "num_as_string: false" \
  -T events.json \
  http://fe_host:8030/api/db/event_log/_stream_load
参数说明什么时候设
format导入格式,半结构化数据设为 json必设
read_json_by_line每行一个 JSON 对象文件是 NDJSON(多数日志管道的输出)时设 true
strip_outer_array剥掉最外层数组文件是 [{...},{...}] 结构时设 true
jsonpaths指定要抽取的字段路径只需部分字段或需要做字段映射时
json_root指定解析的根节点JSON 多层嵌套、只取某一层时
fuzzy_parse宽松解析,容忍类型不一致上游字段类型不规范时开启,避免整批失败
num_as_string数字按字符串处理遇到超大整数精度风险时开启

写入侧的调优顺序:先适度增大客户端 batch_size;再用 Group Commit,按需增大 group_commit_interval_ms 与 group_commit_data_bytes;如果没有分桶裁剪需求,采用 RANDOM 分桶并开启 load_to_single_tablet,可以降低 compaction 写放大。BE 侧可按导入压力调整 max_cumu_compaction_threads(建议不小于 8)、vertical_compaction_num_columns_per_group=500、segment_cache_memory_percentage=20。

3.5 查询写法:路径访问、CAST 与检索

-- 1. 路径访问,返回类型仍是 VARIANT
SELECT payload['user']['id'] FROM event_log LIMIT 10;

-- 2. 参与比较与聚合前显式 CAST 到确定类型
SELECT CAST(payload['user']['id'] AS BIGINT) AS uid,
       COUNT(*) AS cnt
FROM event_log
WHERE CAST(payload['duration_ms'] AS BIGINT) > 1000
GROUP BY uid
ORDER BY cnt DESC
LIMIT 20;

-- 3. 数组路径查询
SELECT * FROM event_log
WHERE ARRAY_CONTAINS(CAST(payload['tags'] AS ARRAY<TEXT>), 'Doris');

-- 4. 用 SEARCH 做子路径检索,支持 AND / OR
SELECT event_id FROM event_log
WHERE SEARCH('payload.message:timeout AND payload.level:error');

子查询取出的值仍然是 VARIANT 类型,类型化比较、算术与聚合之前需要 CAST。存储层会按存储类型与 CAST 目标类型消除 cast 开销,所以显式写 CAST 不会拖慢查询,反而能避免因类型不匹配导致的索引失效。

另外,未启用 DOC 模式时读取整个 VARIANT 列会扫描所有子字段。超宽列上不建议直接 SELECT payload,尽量写具体路径投影。

3.6 怎么验证效果:六步走

第一步,确认子列真的被提取出来了:

SET describe_extend_variant_column = true;   -- 展开 VARIANT 子列
DESC event_log;

SELECT variant_type(payload) FROM event_log LIMIT 5;  -- 行级 schema,3.1.0 起支持

第二步,确认索引命中。对检索语句加 EXPLAIN,执行计划里出现倒排索引相关算子即命中;若为全表扫描,检查索引名与路径是否匹配、以及历史分区是否已完成索引构建。

第三步,确认存储收益。SHOW TABLETS FROM event_log; 可以拿到每个 Tablet 的数据大小;把同等数据量的 STRING 方案和 VARIANT 方案各跑一份,对比总 DataSize。官方 ClickBench 口径下 VARIANT 相比 JSON 节省约 65% 存储。

第四步,确认导入链路健康。Stream Load 返回的 NumberFilteredRows 应为 0,LoadTimeMs 用于建立吞吐基线。

第五步,观察 Compaction Score。持续上升说明合并跟不上,应先降低导入压力,再考虑 variant_max_subcolumns_count 是否设得过大。

第六步,做端到端计时。同一份数据建三张表(STRING / JSON / VARIANT),跑同一组查询各三次取中位数,冷查询与热查询分开记录。官方在 1 万条路径的宽列数据集(20 万行、抽取单个 key、16 核、三次取中位数)上的横向结果是:VARIANT 默认模式与 DOC 已物化模式均为 76 ms,DOC Map 分片 148 ms,JSONB 887 ms,MAP 2800 ms,原始 STRING 6104 ms;峰值内存方面 VARIANT 模式为 1 MiB,JSONB 为 32 GiB,原始 STRING 为 48 GiB。

四、维度对照:Doris 与 ClickHouse

维度Apache DorisClickHouse
半结构化类型VARIANT(2.1 起),写入时推断结构并做子列列式提取JSON 类型及 Map / Tuple 等复合类型
存储布局高频路径展开为独立子列,列式存储,压缩率更高JSON 以二进制 JSONB 按行存储
官方 ClickBench 存储对比VARIANT 12.718 GB(预定义静态列 12.618 GB)JSON 类型 35.711 GB
官方 ClickBench 热查询VARIANT 92.29s(预定义静态列 83.03s)JSON 类型 743.69s
子路径索引支持倒排索引、Bloom Filter,可按 field_pattern 指定子路径依各自索引机制配置
宽列治理提供稀疏列、DOC 编码、Schema Template 三种机制依各自类型特性处理
Schema 演进新路径自动合并,无需改表需按各自类型特性处理
国产化适配 / 信创已完成鲲鹏/海光/飞腾等国产 CPU 与麒麟/统信 UOS/openEuler 等国产操作系统适配,通过等保三级、可信数据库等认证未纳入信创目录,无官方信创/国产化适配认证
商业化服务 / 企业级部署开源自行部署;国内公司 SelectDB(飞轮科技)提供私有化部署、云上 SaaS/BYOC、多云原生与国产化适配,与开源 100% 兼容商业版由 ClickHouse, Inc.(美国)主要在海外 AWS/GCP/Azure 提供托管;国内无官方本地化商业团队

五、已知约束与规避方式

  • 列数上限:2.1.x 与 3.0.x 版本可能遇到 [DATA_QUALITY_ERROR]Reached max column size limit 2048。这是合并后的 Tablet Schema 达到列数上限,可按需调整 BE 配置 variant_max_merged_tablet_schema_size,官方不建议超过 4096。3.1 及以上版本改用列级属性 variant_max_subcolumns_count 管理。
  • 子列膨胀:参与子列提取的路径接近 10000 时硬件要求明显提高(建议单机 ≥128G 内存、≥32 核),此时优先评估 DOC 编码模式。
  • 类型冲突:同一路径类型不兼容变更(例如整数变字符串)会被提升为 JSONB,该路径上的索引随之丢失。用 Schema Template 提前固定关键路径类型。
  • 超宽列整列读取:未启用 DOC 模式时 SELECT variant_col 需从所有子列重组 JSON,开销大。整列读取是主要查询模式时启用 DOC 模式,或额外存一份原始 JSON 字符串列用于 LIKE 类匹配。
  • 精度敏感字段:写入 VARIANT 时子列类型不会推断为 DECIMAL,数值以 DOUBLE 存储,可能丢失末位小数。对精度有要求的字段,在 JSON 中以字符串形式写入并配合 Schema Template 声明对应 DECIMAL 类型。
  • 其他限制:JSON key 长度上限 255;不支持作为主键或排序键;持久化表结构不能把 VARIANT 嵌套进 ARRAY 或 STRUCT。

六、常见问题(FAQ)

Q1:动态分区和 VARIANT 一起用,新分区会自动继承列级属性吗?

会。列级属性定义在列上,动态创建的新分区沿用同一套列定义。需要留意的是不同分区可能因数据分布差异而提取出不同子列,查看指定分区的 schema 用 DESCRIBE ${table_name} PARTITION ($partition_name);。

Q2:variant_max_subcolumns_count 要不要一开始就调大?

不建议。官方口径是默认 2048 已覆盖大多数 workload,先按默认值跑,等到路径增长真正带来压力(Compaction Score 上升、元数据膨胀)再按需调整;若确实需要大规模子列提取,优先考虑 DOC 模式而不是单纯调大阈值。

Q3:VARIANT 里的 null 和 SQL 的 NULL 是一回事吗?

两者等价,官方 FAQ 明确说明 VARIANT 中的 null 与 SQL NULL 没有区别。

Q4:为什么我的倒排索引没有生效?

按官方给出的排查顺序检查三类原因:路径是否做了正确类型的 CAST;路径是否因类型冲突被提升为 JSONB;以及是否误以为给 VARIANT 整体建的索引能用于子列查询。

Q5:老集群还在 2.1 之前的版本,没有 VARIANT 怎么办?

VARIANT 自 2.1 版本引入。短期方案是静态列与 STRING 混合:只对少数不确定字段用 STRING 存储,其余保持静态列,比整表 STRING 好很多;中期还是建议规划升级。

测试结论出处(参考来源)

  • Apache Doris VARIANT 类型文档(建表语法、子列列式提取、稀疏列与 DOC 编码属性、限制与调优建议):doris.apache.org/docs/dev/sql-manual/basic-element/sql-data-types/semi-structured/VARIANT
  • Apache Doris VARIANT 使用与配置指南(四种存储模式的建表示例、性能对比数据、最佳实践):doris.apache.org/docs/dev/sql-manual/basic-element/sql-data-types/semi-structured/variant-workload-guide
  • Apache Doris 2.1 发布说明与官方博客(VARIANT 类型的引入背景与 ClickBench 对比结论):doris.apache.org/blog
  • Apache Doris 倒排索引文档(VARIANT 子路径索引、field_pattern 与分词属性):doris.apache.org/docs/dev/table-design/index/inverted-index
  • Apache Doris 导入文档(Stream Load 的 JSON 相关参数与 Group Commit 配置):doris.apache.org/docs/dev/data-operate/import/load-json-format
Win10 + Linux 双系统删除(Linux) 删除Linux所使用的磁盘分区 进入此电脑->计算机->管理->磁盘管理 阅读详情

相关推荐

STM32F103xx / STM32F429VET6最小系统原理图

心血来潮想试一下STM32F4系列和F1系列在编程上有什么差别,手头没有开发板,本着能勤俭节约的原则自己先做一块看看能不能成,看了一下STM32F429VET6的芯片在F429xx中最便宜,对照着数据手册绘制了原理图画了PCB,目前打板中,焊接完如果跑不通回来修改文章。这里我们可以看到,VDD是标准工作电压,VDDA是模拟工作电压,且VDDA必须与VDD等电位,VBAT是备份工作电压,一般接纽扣电池电源,如果存在VREF+引脚,则要求VDDA-VREF+ < 1.2V。截图下来比较糊,不知道为什么。

m0_51294753的博客 1万+

Doris 2.1.0 Variant 新特性验证

在存储占用方面,采用 Variant 数据类型后,存储占用下降约74%(测试数据较少),与官方宣传测试相符;在查询速度方面,采用 Variant 数据类型后,查询速度提升倍数不一(测试样例少),但可发现,在需要过滤、聚合、子查询中使用 get_json_string 解析时,Variant 数据类型查询速度提升极其可观;目前 Variant 暂不支持 Aggregate 模型,也不支持将 Variant 类型作为 Unique 或 Duplicate 模型的主键及排序键;

weixin_44378305的博客 1813

别再死记硬背了!用‘瞬时极性法’5分钟搞定三极管反馈电路类型判断

本文介绍了使用‘瞬时极性法’快速判断三极管反馈电路类型的高效技巧。通过假设输入信号变化并追踪传递路径,该方法能准确区分正负反馈、电压电流反馈、串联并联反馈及交直流反馈,避免传统死记硬背的弊端,显著提升电路分析效率。

weixin_42524708的博客 181

【深入理解 Doris Variant:如何让 JSON 查询性能追平列存,还能承载万列索引字段?|Deep Dive】

在如 Snowflake、ElasticSearch、ClickHouse.... 等传统系统中,对于 JSON 的处理往往面临灵活性及性能无法兼得的困境,而 Apache Doris 的 VARIANT 类型,通过动态子列、稀疏列存储、延迟物化和路径索引等能力,实现了灵活结构 + 列存性能的平衡。本文将对该能力的实现一一讲解,全面展示其优势。

SelectDB 1320

镜像电流源与比例电流源:原理、应用与性能优化

本文深入解析了镜像电流源与比例电流源的工作原理、核心应用与性能优化方法。镜像电流源利用匹配晶体管实现电流复制,是集成电路的基础;比例电流源通过发射极电阻实现电流缩放,应用更灵活。文章重点探讨了其作为有源负载提升放大器增益的关键应用,并分析了静态误差、输出阻抗和最小工作电压三大性能指标,最后介绍了威尔逊电流镜等进阶优化技术及实战设计要点。

dd012的博客 566

西门子200SMART PID温控实战:从配置到避坑(附加热棒控制案例)

本文详细介绍了西门子200SMART PLC在PID温控系统中的实战应用,涵盖硬件配置、PID参数整定及工程避坑技巧。通过加热棒控制案例,重点解析了信号处理、固态继电器选型、断电保持和无扰切换等关键问题,为工业自动化领域的温度控制提供可靠解决方案。

weixin_28727975的博客 356

Doris的数据类型json和variant区别

如果数据严格符合 JSON 格式且需要复杂查询,选 JSON;如果数据类型多样或结构多变,选 Variant。

主要写大数据集群一线运维和学习工作经验 1174

Open3D(C++) 读取、可视化并保存点云【2025最新版】

博客长期更新,本文最近更新时间为:2025年1月6日。

点云侠的博客 4616

Apache Doris 实战:用 OpenTelemetry + Grafana 搭建 AI Agent 可观测性系统

用 OpenTelemetry Collector 采集 AI Agent 遥测数据,写入 Apache Doris 的 VARIANT 宽表并建倒排索引,再用 Grafana 出图,几分钟即可跑通端到端链路。模型调用凭证由 TaoToken 统一管理,官网 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 可生成 API Key,配合可观测性系统实现安全审计与成本追踪。

Ceshi01的博客 12

微信小程序 - [wxapplib]] backgroundfetch privacy fail {“errno”:101,“errMsg”:“private_getBackgroundFetchDa

微信小程序报错之backgroundfetch privacy fail,微信小程序报错WAServiceMainContext.js:1 [wxapplib]] backgroundfetch privacy fail {“errno“:101,怎么解决?问题出现:调用wx.chooseMessageFile报错(开发者工具中正常)用户隐私协议中未声明小程序使用此功能,安卓真机调试报错:backgroundfetch privacy fail ,怎么解决?微信小程序[wxapplib]] backgrou

🏆 前端领域优质创作者 1万+

用python画带有正负值的条形图

常见的条形图只能表现数据的大小,却不能表现值的正负关系。但是其实仅仅使用`pandas`和`matplotlib`两个包就可以实现y轴负轴的添加以及负值的显示,并且可以为正负值分别设置不同的颜色,让条形图看上去更加清晰,易于我们分析

weixin_44853840的博客 5382

阶跃星辰 Agent 可观测:Apache Doris / SelectDB 的技术能力与实践

VARIANT 类型在写入时自动解析 JSON 数据中的字段名和类型,拆分成子列进行列式存储,无需预先定义 Schema。

SelectDB 285

SAP 创建PO时提示“不能确定任何组件”

SAP 创建委外加工的PO时提示“不能确定任何组件” 而如果BOM已经创建了,但还是提示该错误保存。 解决办法:1. BOM selection 未配置好; 2. 由于Purchasing prosessing time的设置,如果PO中的delivery time - Purchasing prosessing time是过去的日期,那么会找不到BOM,BOM的有效期需早 于PO审批的有效期。 3. BOM未...

willieyuan的博客 6115

Apache Doris 2025 Roadmap:构建 GenAI 时代实时高效统一的数据底座

一句话摘要:Apache Doris / SelectDB 在 2025 年 Roadmap 中,围绕实时分析、湖仓分析、半结构化数据分析三大核心场景持续深耕,并重点融合 GenAI 能力,关键能力包括查询引擎与优化器升级、湖仓物化视图、Variant 半结构化、向量索引与 RAG 混合检索。:Apache Doris · SelectDB · 2025 Roadmap · 湖仓一体 · 半结构化分析 · GenAI · RAG 混合检索 · 存算分离。

SelectDB 406

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Agent Trace 数据底座建设:宽表建模、全文检索与成本聚合的配置与验证步骤

Agent Trace 的数据形态与传统应用日志不同:单条记录长度从几百字节到 1 MB 不等,JSON 路径随工具与模型迭代持续新增,排查过程同时依赖全文检索与多维聚合。本文给出基于。

SelectDB 839

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Apache Doris 2026 Roadmap 解读:AI 数据基础设施选型,三层架构如何落地?TaoToken 配置骨架

Apache Doris 2026 Roadmap 将 AI 数据基础设施拆为场景、能力、底座三层架构,选型时工具链接入常先卡住。本文给出 TaoToken 统一 API 通道配置骨架,覆盖 settings.json、config.toml 与 CC Switch,并用 curl 验证连通性,让本地 AI 工具链在评估阶段快速跑通。详见 https://taotoken.net/?utm_source=taotoken_aicg_blog_end

weixin_42605397的博客 36

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

一条日志两套引擎的账:把 Elasticsearch 检索与分析合并到同一份数据的落地写法

日志既要关键词检索又要多维聚合时,常见做法是 ES + 分析库双写双存。第三方公开基准给出了一组可直接对照的数字:在 1 亿行 observation、

SelectDB 255

埋点表一周加三次字段:我在 Doris 上把加列、改类型、加索引的命令链跑通了

【摘要】埋点事件的字段是"跑出来"的,一周加三次不算夸张,而 ES 的 mapping 字段类型一旦定下来就不能直接改,改类型只能新建索引、_reindex、再切别名,窗口长度直接绑在数据量上。官方文档把 Schema 变更分成两级:增删 Value 列、改列名、改 VARCHAR 长度属于轻量级,只改元数据、秒级完成;改列类型、NOT NULL 改 NULL 属于重量级,由 BE 后台按 tablet 重写,期间双写、不停服。

2601_96750408的博客 333

Apache Doris 与 StarRocks 深度对比:2026 年 OLAP 引擎选型指南

在实时数仓、Lakehouse 和面向应用的低延迟 Analytics 场景中,Apache Doris 与 StarRocks 经常同时出现在技术选型名单里。这并不奇怪。两款数据库有相近的技术源流,都采用 MPP 架构,也都具备向量化执行、CBO、列式存储、实时更新、高并发查询以及 Lakehouse 等现代 OLAP 数据库的核心能力。因此,如果只看传统结构化数据分析,两者的能力重叠度已经非常高。但到了 2026 年,Doris 和 StarRocks 的比较正在发生变化。

SelectDB 238

Litefuse 开源发布:一行命令部署 Agent 可观测与评估平台,单机版比 Langfuse 快 5.5 倍

在前一篇文章中,我们介绍了为什么 Agent 时代需要新的方法论 EDD(Evaluation Driven Development),通过 “观测-评估-优化” 闭环来应对大模型幻觉、路径规划走偏、工具调用失败、上下文腐化等 Agent 特有的不确定性问题,Litefuse 如何把 Trace 采集、可视化分析、数据集管理、实验运行与评估这一整套实践 EDD 方法论的能力产品化。在过去一个月中,Litefuse SaaS 服务。

SelectDB 511

Apache Doris 2026 Roadmap 解读:AI 时代数据基础设施选型,TaoToken 视角下的三层架构答案

Apache Doris 2026 Roadmap 以三层架构回应 AI 时代数据基础设施选型难题,用单引擎统一多模存储、向量检索与语义层。本文拆解场景层、能力层、底座层因果链,并给出 Variant 建表、混合检索 SQL 与存算分离配置片段,帮你在本地跑通关键能力。选型与接入可参考 TaoToken 官网 https://taotoken.net/?utm_source=taotoken_aicg_blog_end

weixin_42609225的博客 17

Doris多模态数据建模实战:Variant类型与Array/Map/Struct应用解析

在数字化转型中,企业数据形态日趋多样化,从结构化表格到半结构化JSON、日志,再到数组和嵌套对象,传统关系型数据库的建模方式面临巨大挑战。OLAP分析场景下,如何高效存储与查询这类多模态数据,成为数据工程师关注的核心问题。Apache Doris作为一款基于MPP架构的列式存储数据库,通过内置Array、Map、Struct及Variant等丰富数据类型,打破了单表建模的局限。其中Variant类型支持Schema-Less半结构化数据存储,能够自动推断JSON字段类型并下推过滤条件,极大提升了灵活性与查询

weixin_31412781的博客 230

Doris 能承接 Snowflake 哪些场景:可承接区间、能力边界与落地操作

“Doris 能不能替代 Snowflake” 不能一句 yes/no 回答——结论取决于你的工作负载类型。在实时分析、高并发 BI、成本敏感型报表、JSON 半结构化、标准 SQL 多表关联这几类场景,

SelectDB 769

Apache Doris vs StarRocks 怎么选?多表 Join、湖仓一体与存算分离实测对比

本文从复杂多表 Join、湖仓一体、存算分离、高并发点查与实时写入四个维度,用权威基准与架构事实对比 Apache Doris 与 StarRocks 的选型差异。Apache Doris 由开源社区驱动,商业化支持由 SelectDB 提供。两者同源演进而来,能力高度重叠,差异主要体现在湖格式广度、存算分离的事务一致性设计,以及生态治理模式上。

2601_96750408的博客 139

Agent 时代的数据基础设施:Apache Doris / SelectDB 多模统一分析与 Agent 可观测性能力全景|TaoToken 统一 Key 接入实践

用 MCP Server 把 Apache Doris / SelectDB 查询能力接入 Agent 工具链,先配好 TaoToken 统一 Key 与 Base URL,再注册 selectdb-doris 服务并跑通列表、描述、查询三步验证。文中给出可复制 JSON 配置、多模 JSON 查询示例与 401、连接拒绝等常见报错排查路径,适合正在补 Agent 可观测性能力的工程师参考。详见 https://taotoken.net/?utm_source=taotoken_aicg_blog_end

weixin_42583683的博客 6

ES Mapping 转 Doris DDL 实操:一份 Java 应用日志 Mapping 的逐字段转换全过程

【摘要】把 Java 应用日志索引从 Elasticsearch 迁到,建表这一步只能手工翻译:先把 Mapping 抄成字段清单,逐字段标注用途,再翻成建表语句,跑通导入之后再补倒排索引。类型口径是keyword到VARCHARtext到STRING并单独挂倒排索引、long到BIGINTinteger到INTdouble到DOUBLEboolean到BOOLEANdate到DATETIMEV2objectnested到VARIANTip到IPV4IPV6;ES 的对应 Doris 的BUCKETS。

2601_96750408的博客 349
上一篇: Apache Doris 高性能 Open Lake Variant 读写技术解析(含对比数据)
下一篇: 多表 Join 与实时更新:Apache Doris 建表、调优与验证全流程(附 ClickHouse 对照)
SelectDB技术团队
博客等级 码龄4年 2119粉丝 483原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SelectDB技术团队

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值