From 65d43fa0914c7c9bea2edfb60635d217b108135b Mon Sep 17 00:00:00 2001 From: "Mingyu Chen (Rayner)" Date: Mon, 13 Jul 2026 11:20:09 +0800 Subject: [PATCH 1/2] Improve community report dropdown --- .../CommunityReportNext.scss | 101 ++++++++++++++---- .../CommunityReportNext.tsx | 93 +++++++++++++--- 2 files changed, 158 insertions(+), 36 deletions(-) diff --git a/src/components/community-report-next/CommunityReportNext.scss b/src/components/community-report-next/CommunityReportNext.scss index 9c818deabf0ab..4e39eea51a4d2 100644 --- a/src/components/community-report-next/CommunityReportNext.scss +++ b/src/components/community-report-next/CommunityReportNext.scss @@ -192,44 +192,105 @@ margin-top: 12px; } -.community-report__select-wrap::after { - // Custom chevron (native arrow is hidden via appearance:none). +.community-report__select-button { + position: relative; + display: flex; + align-items: center; + justify-content: space-between; + width: 100%; + min-height: 44px; + padding: 10px 38px 10px 14px; + cursor: pointer; + font-family: var(--font-family-base); + font-size: 14px; + line-height: 1.35; + color: var(--cr-ink); + text-align: left; + background: #fff; + border: 1px solid #dfe5f0; + border-radius: 8px; + transition: border-color 0.18s ease, box-shadow 0.18s ease, background 0.18s ease; +} + +.community-report__select-button::after { content: ''; position: absolute; right: 14px; top: 50%; width: 10px; height: 10px; - transform: translateY(-60%) rotate(45deg); - border-right: 2px solid var(--cr-muted); - border-bottom: 2px solid var(--cr-muted); + transform: translateY(-62%) rotate(45deg); + border-right: 2px solid #4c576c; + border-bottom: 2px solid #4c576c; pointer-events: none; + transition: transform 0.18s ease, border-color 0.18s ease; +} + +.community-report__select-button:hover, +.community-report__select-button--open { + border-color: var(--cr-green); +} + +.community-report__select-button:focus-visible { + outline: none; + border-color: var(--cr-green); + box-shadow: 0 0 0 3px rgba(6, 128, 95, 0.14); +} + +.community-report__select-button--open { + box-shadow: 0 2px 8px 0 rgba(49, 77, 136, 0.16); +} + +.community-report__select-button--open::after { + transform: translateY(-38%) rotate(225deg); + border-color: var(--cr-green); +} + +.community-report__select-button--placeholder { + color: #8592a6; } -.community-report__select { - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; +.community-report__select-menu { + position: absolute; + z-index: 30; + top: calc(100% + 6px); + left: 0; width: 100%; + max-height: 260px; + overflow-y: auto; + padding: 6px 0; + background: #fff; + border: 1px solid #dfe5f0; + border-radius: 8px; + box-shadow: 0 2px 8px 0 rgba(49, 77, 136, 0.16); +} + +.community-report__select-option { + display: block; + width: 100%; + min-height: 36px; + padding: 8px 14px; cursor: pointer; - padding: 11px 36px 11px 14px; font-family: var(--font-family-base); font-size: 14px; + line-height: 1.4; color: var(--cr-ink); - background: #fff; - border: 1px solid var(--cr-line); - border-radius: 10px; - transition: border-color 0.2s ease, box-shadow 0.2s ease; + text-align: left; + background: transparent; + border: 0; + transition: background 0.16s ease, color 0.16s ease; } -.community-report__select:hover { - border-color: rgba(6, 128, 95, 0.4); +.community-report__select-option:hover, +.community-report__select-option:focus-visible { + outline: none; + background: #f7fafc; } -.community-report__select:focus-visible { - outline: none; - border-color: var(--cr-green); - box-shadow: 0 0 0 3px rgba(6, 128, 95, 0.15); +.community-report__select-option--selected { + color: var(--cr-green); + font-weight: 500; + background: transparent; } /* ---------------- Content ---------------- */ diff --git a/src/components/community-report-next/CommunityReportNext.tsx b/src/components/community-report-next/CommunityReportNext.tsx index b1baa5aa6c536..4667554ca6f5a 100644 --- a/src/components/community-report-next/CommunityReportNext.tsx +++ b/src/components/community-report-next/CommunityReportNext.tsx @@ -1,4 +1,4 @@ -import React, { JSX, useEffect, useState } from 'react'; +import React, { JSX, useEffect, useRef, useState } from 'react'; import { LayoutNext } from '../home-next/LayoutNext'; import './CommunityReportNext.scss'; import './WeeklyReport.scss'; @@ -111,6 +111,8 @@ export default function CommunityReportNext({ reports }: CommunityReportNextProp const latest = reports[0]; const historical = reports.slice(1); const [selectedId, setSelectedId] = useState(latest?.id ?? ''); + const [isPastMenuOpen, setIsPastMenuOpen] = useState(false); + const pastMenuRef = useRef(null); // Allow deep-linking to a specific report via URL hash, e.g. // /community-report#2026-06-22. Read on mount (client-only; window is @@ -122,8 +124,35 @@ export default function CommunityReportNext({ reports }: CommunityReportNextProp } }, [reports]); + useEffect(() => { + if (!isPastMenuOpen) { + return; + } + + const closeOnOutsideClick = (event: MouseEvent) => { + if (!pastMenuRef.current?.contains(event.target as Node)) { + setIsPastMenuOpen(false); + } + }; + + const closeOnEscape = (event: KeyboardEvent) => { + if (event.key === 'Escape') { + setIsPastMenuOpen(false); + } + }; + + document.addEventListener('mousedown', closeOnOutsideClick); + document.addEventListener('keydown', closeOnEscape); + + return () => { + document.removeEventListener('mousedown', closeOnOutsideClick); + document.removeEventListener('keydown', closeOnEscape); + }; + }, [isPastMenuOpen]); + const select = (id: string) => { setSelectedId(id); + setIsPastMenuOpen(false); if (typeof window !== 'undefined') { window.history.replaceState(null, '', `#${id}`); } @@ -131,6 +160,7 @@ export default function CommunityReportNext({ reports }: CommunityReportNextProp const selected = reports.find(r => r.id === selectedId) ?? latest; const isHistoricalSelected = historical.some(r => r.id === selectedId); + const selectedHistoricalLabel = isHistoricalSelected ? selected?.label : 'Past reports...'; const SelectedReport = selected?.Component; return ( @@ -159,22 +189,53 @@ export default function CommunityReportNext({ reports }: CommunityReportNextProp )} {historical.length > 0 && ( -
- + {selectedHistoricalLabel} + + {isPastMenuOpen && ( +
+ {historical.map(r => ( + + ))} +
+ )}
)} From 14b4080a61a45769429ad55b4652c965062747fa Mon Sep 17 00:00:00 2001 From: "Mingyu Chen (Rayner)" Date: Mon, 13 Jul 2026 11:27:46 +0800 Subject: [PATCH 2/2] 2 --- .../community-report/_reports/2026-07-06.mdx | 425 ++++++++++++++++++ 1 file changed, 425 insertions(+) create mode 100644 src/pages/community-report/_reports/2026-07-06.mdx diff --git a/src/pages/community-report/_reports/2026-07-06.mdx b/src/pages/community-report/_reports/2026-07-06.mdx new file mode 100644 index 0000000000000..556bd40c5b9cb --- /dev/null +++ b/src/pages/community-report/_reports/2026-07-06.mdx @@ -0,0 +1,425 @@ +{/* Auto-generated by community-radar `report export-mdx` — do not edit by hand. + `report` is English-only structured data laid out by doris-website. */} + +export const label = "Jul 6 – Jul 12, 2026"; +export const week = "Week 28, 2026"; +export const stats = [ + { + "num": "89", + "label": "Merged PRs" + }, + { + "num": "22", + "label": "New issues" + }, + { + "num": "45", + "label": "Contributors" + } +]; + +export const report = { + "summary": { + "lead": "Doris maintained a high-velocity week with 89 merged PRs across six capability lines and 45 contributors driving the kernel-engineering and real-time data warehouse tracks. The convergence across cloud-native decoupling, lakehouse format coverage, and query optimizer work signals Doris is accelerating from point capability building toward an end-to-end real-time analytics platform. With newer threads in agent observability and security & governance also picking up, the project's momentum and direction are both clearly defined.", + "highlights": [ + { + "title": "Incremental computation: row binlog, Table Stream, and MTMV unification", + "narrative": "This week fills in key pieces of the incremental pipeline: Table Stream gains snapshot reads, MTMV partition lineage is deduplicated to cut FE cost, and MySQL ADD/DROP columns now flow through streaming jobs. Together with the row-binlog tracking, signal Doris is converging stream and batch increments onto one engine layer.", + "prs": [ + { + "num": 65265, + "title": "[Tracking][Binlog] Binlog feature umbrella — all sub-issues tracked here", + "url": "https://github.com/apache/doris/issues/65265" + }, + { + "num": 65418, + "title": "[Feature] Track incremental computation with row binlog, Table Stream, and MTMV", + "url": "https://github.com/apache/doris/issues/65418" + }, + { + "num": 64776, + "title": " [feat](dynamic table) support table stream part 4: support snapshot read", + "url": "https://github.com/apache/doris/pull/64776" + }, + { + "num": 63899, + "title": "[improvement](mtmv) Optimize MTMV partition lineage check", + "url": "https://github.com/apache/doris/pull/63899" + }, + { + "num": 65325, + "title": "[improve](streaming-job) Support MySQL ADD DROP schema changes", + "url": "https://github.com/apache/doris/pull/65325" + } + ] + }, + { + "title": "Cloud / decoupled storage tier: file cache, metadata cache, time travel", + "narrative": "Cloud mode adds Time Travel for point-in-time audit queries, while external-table file caches now persist table/partition context and footer metadata lands on disk with runtime capacity adjustment. Adaptive random-bucket routing trims load writer pressure, rounding out the decoupled storage stack.", + "prs": [ + { + "num": 65422, + "title": "[Feature] Time Travel: SELECT ... FOR TIME AS OF '' in cloud/decoupled mode", + "url": "https://github.com/apache/doris/issues/65422" + }, + { + "num": 61518, + "title": "[feature](filecache) persist table/partition context for cache meta for external table", + "url": "https://github.com/apache/doris/pull/61518" + }, + { + "num": 63376, + "title": "[improvement](be) Add disk cache for external file metadata", + "url": "https://github.com/apache/doris/pull/63376" + }, + { + "num": 65477, + "title": "[improvement](be) Support dynamic file cache capacity", + "url": "https://github.com/apache/doris/pull/65477" + }, + { + "num": 62661, + "title": "[feature](load) introduce adaptive random bucket load routing", + "url": "https://github.com/apache/doris/pull/62661" + }, + { + "num": 65431, + "title": "[Feat](TimeTravel) Time Travel for Cloud / Decoupled Mode", + "url": "https://github.com/apache/doris/pull/65431" + } + ] + }, + { + "title": "Lakehouse format coverage: Iceberg + Paimon write/read integration", + "narrative": "Lakehouse integration deepens on both sides: Iceberg REST Catalog gains OIDC session credentials and nested-column DDL, while Paimon JNI reads wire up IOManager and JNI write support lands. The FE metadata cache refactor sets up future formats, and ANN pre-filtering sharpens vector search selectivity.", + "prs": [ + { + "num": 63068, + "title": "[feature](fe) Support OIDC session credentials for Iceberg REST catalog", + "url": "https://github.com/apache/doris/pull/63068" + }, + { + "num": 65332, + "title": "[improvement](paimon) Support IOManager for JNI reads", + "url": "https://github.com/apache/doris/pull/65332" + }, + { + "num": 65329, + "title": "[feature](iceberg) Support nested column schema change", + "url": "https://github.com/apache/doris/pull/65329" + }, + { + "num": 65381, + "title": "[feature](paimon) Paimon JNI write support", + "url": "https://github.com/apache/doris/pull/65381" + }, + { + "num": 65126, + "title": "[refactor](fe) Refactor external metadata cache with MetaCacheEntry", + "url": "https://github.com/apache/doris/pull/65126" + }, + { + "num": 64377, + "title": "[feature](ann-index) Pre-filter column predicates into ANN TopN searc…", + "url": "https://github.com/apache/doris/pull/64377" + } + ] + }, + { + "title": "Query optimizer: DPHyper stats, unique propagation, eager agg, hash join, lazy materialization", + "narrative": "The optimizer focuses on cost and propagation signals: DPhyper refreshes statistics after join enumeration, LogicalJoin now unions multi-column unique sets, and distinct aggregation folds into eager agg driven by stats. Hash-join probes avoid copying in the all-match path, and multi-stage predicate lazy materialization sets up future auto-tuning for lighter materialization.", + "prs": [ + { + "num": 64559, + "title": "[opt](dphyper)optimize dphyper's statistics calculation", + "url": "https://github.com/apache/doris/pull/64559" + }, + { + "num": 62980, + "title": "[improvement](nereids) Enhance LogicalJoin.computeUnique with unique-set union propagation", + "url": "https://github.com/apache/doris/pull/62980" + }, + { + "num": 65099, + "title": "[improvement](eager-agg) Push down distinct aggregation using statistics", + "url": "https://github.com/apache/doris/pull/65099" + }, + { + "num": 65300, + "title": "[improvement](be) Optimize hash join probe side output", + "url": "https://github.com/apache/doris/pull/65300" + }, + { + "num": 64891, + "title": "[enhancement](Multi-stage lm) Multi-Stage Predicate Lazy Materialization", + "url": "https://github.com/apache/doris/pull/64891" + } + ] + }, + { + "title": "Full-text & ANN indexing: Japanese analyzer, SNII format, ANN pre-filter", + "narrative": "Indexing expands for multilingual and hybrid search: the inverted index adds Kuromoji-based Japanese tokenization, SNII lands as a parallel storage path, and ANN TopN pushes pre-filterable column predicates before the vector scan. REGEXP_EXTRACT_ALL_ARRAY rounds out the text-processing toolkit.", + "prs": [ + { + "num": 61156, + "title": "[Feature](func) Support REGEXP_EXTRACT_ALL_ARRAY", + "url": "https://github.com/apache/doris/pull/61156" + }, + { + "num": 64667, + "title": "[feature](inverted-index) Add Japanese (Kuromoji) morphological analyzer", + "url": "https://github.com/apache/doris/pull/64667" + }, + { + "num": 64909, + "title": "[feature](be) Add SNII inverted index storage format", + "url": "https://github.com/apache/doris/pull/64909" + }, + { + "num": 65482, + "title": "[feature](query-cache) Support incremental merge for stale query cache entries", + "url": "https://github.com/apache/doris/pull/65482" + } + ] + } + ], + "numbers": { + "mergedPrs": 89, + "newIssues": 22, + "contributors": 45 + } + }, + "repos": [ + { + "repo": "apache/doris", + "scenarios": [ + { + "name": "Multi-modal Lakehouse", + "mergedNarrative": "Lakehouse work this week deepened Doris's read paths across Iceberg, Paimon, ORC and external catalogs. Deletion vectors were rewritten as Roaring bitmaps for leaner caching, Iceberg struct-evolution cast nullability and Paimon JNI predicate fallbacks were corrected, the format-v2 pipeline gained an ORC reader, and catalog quirks like MaxCompute partition-by-name and", + "merged": [ + { + "num": 64937, + "title": "[fix](fe) Parse MaxCompute partition specs by name", + "url": "https://github.com/apache/doris/pull/64937" + }, + { + "num": 65083, + "title": "[fix](maxcompute)Fix MaxCompute IN predicate pushdown polarity.", + "url": "https://github.com/apache/doris/pull/65083" + }, + { + "num": 65085, + "title": "[fix](orc)fix hive-orc reader read columns base in column index by default rather than column name.", + "url": "https://github.com/apache/doris/pull/65085" + }, + { + "num": 65094, + "title": "[fix](fe) Preserve external table column name case", + "url": "https://github.com/apache/doris/pull/65094" + }, + { + "num": 65165, + "title": "[fix](glue) cache credentials provider in ConfigurationAWSCredentialsProvider", + "url": "https://github.com/apache/doris/pull/65165" + } + ], + "inProgressNarrative": "Multi-modal lakehouse work sharpens correctness on external sources: Iceberg REST catalog re-auth on 401 instead of wedging, position-deletes system table support, static-partition overwrite with empty source, Iceberg written bounds aligned with Spark, and ignoring stale external partitions during pruning. Complementary changes add a lance-c third-party dependency, reuse the Paimon JNI", + "inProgress": [] + }, + { + "name": "Real-time Data Warehouse", + "mergedNarrative": "Real-time warehouse work converged on ingestion, optimizer and scanner this week. Stream load gained forward group commit and CDC stream-TVF delete-sign support, PostgreSQL change detection switched to Relation events, and TopN plus FileScannerV2 received opt-in cache-write controls. The optimizer side closed correctness holes in PushDownAggThroughJoinOnPkFk, eager aggregation over empty relations", + "merged": [ + { + "num": 65369, + "title": "[improvement](be) Optimize Parquet predicate filtering in format v2", + "url": "https://github.com/apache/doris/pull/65369" + }, + { + "num": 63594, + "title": "[fix](group commit) support forward group commit stream load", + "url": "https://github.com/apache/doris/pull/63594" + }, + { + "num": 64820, + "title": "(fix)(eager-agg) null-to-non-null safety check and remove redundant normalize calls in eager aggregation", + "url": "https://github.com/apache/doris/pull/64820" + }, + { + "num": 64850, + "title": "[improvement](streaming-job) Detect PostgreSQL schema changes from Relation events", + "url": "https://github.com/apache/doris/pull/64850" + }, + { + "num": 64898, + "title": "[fix](fe) Prevent pushing other join conditions to right child of null-aware anti join", + "url": "https://github.com/apache/doris/pull/64898" + } + ], + "inProgressNarrative": "Real-time data warehouse work keeps refining the planner, ingest path, and scanner efficiency. Planner fixes stabilize now() within one execution, remove FD-redundant GROUP BY keys via ANY_VALUE, tighten anti-join null-reject inference, scale broadcast cost by backend count, and disable top-N lazy materialization on non-light-schema-change tables. Ingest and execution add SHOW", + "inProgress": [] + }, + { + "name": "Compute-Storage Separation & Cloud-Native", + "mergedNarrative": "Toward a cleaner compute-storage split and cloud-native posture, this week's work advanced along four lines: rendezvous (HRW) hashing replaced modulo placement so colocate tables ride out compute-group scale events with far less cold-cache jitter; the fe-filesystem SPI gained an HTTP module and capability groundwork for future consumers; operations were tightened", + "merged": [ + { + "num": 64564, + "title": "[chore](tde) Add scoped KMS credentials to regression clusters", + "url": "https://github.com/apache/doris/pull/64564" + }, + { + "num": 64638, + "title": "[improvement](cloud) Use rendezvous hashing for colocate tablet placement", + "url": "https://github.com/apache/doris/pull/64638" + }, + { + "num": 64853, + "title": "[feature](fs-spi) add HTTP filesystem module, capability framework and URI validation", + "url": "https://github.com/apache/doris/pull/64853" + } + ], + "inProgressNarrative": "Compute-storage separation and cloud-native work targets multi-tenant efficiency, observability, and recycler reliability: tenant-level Colocation reduces replica redundancy and removes bucket-count limits, while a Resource Group affinity extension framework for FE query, load, and repair scheduling ships as no-op by default so vendors can plug in custom policies. Cloud-mode fixes land", + "inProgress": [ + { + "num": 64167, + "title": "[feat](colocate) support tenant-level colocation", + "url": "https://github.com/apache/doris/pull/64167" + }, + { + "num": 65173, + "title": "[feature](fe) Add resource group affinity extension framework", + "url": "https://github.com/apache/doris/pull/65173" + } + ] + }, + { + "name": "Agent Observability", + "mergedNarrative": "To keep Doris observable under heavy cloud load, the community closed two observability gaps this week. The Cloud P0 index-change wait was lengthened and hardened with a FINISHED-only check to eliminate flake, while BE metrics gained dedicated remote-byte counters for inverted-index and segment-footer file cache, letting operators distinguish cold cache", + "merged": [ + { + "num": 65197, + "title": "[fix](regression) stabilize index change wait", + "url": "https://github.com/apache/doris/pull/65197" + }, + { + "num": 65398, + "title": "[improve](metrics) Export file cache remote index byte metrics", + "url": "https://github.com/apache/doris/pull/65398" + } + ], + "inProgressNarrative": "Agent observability work focuses on hardening index and streaming load paths: blocking legacy V1 inverted index creation to keep small-file merging effective, aligning JSON Stream Load boolean scalar casts with INSERT INTO, and unifying json_extract_no_quotes as an alias of json_extract_string so FE binding and rewrite behavior stay consistent. New this", + "inProgress": [ + { + "num": 64522, + "title": "[fix](fe) block inverted index V1 creation in FE ", + "url": "https://github.com/apache/doris/pull/64522" + }, + { + "num": 64773, + "title": "[fix](load) Align JSON stream load scalar casts", + "url": "https://github.com/apache/doris/pull/64773" + }, + { + "num": 65380, + "title": "[fix](fe) Treat json_extract_no_quotes as json_extract_string alias", + "url": "https://github.com/apache/doris/pull/65380", + "isNew": true + } + ] + }, + { + "name": "Security & Governance", + "mergedNarrative": "On the security and governance front, this week delivered a key consistency hardening: when HTTPS is enabled cluster-wide, FE-to-FE traffic also switches to HTTPS automatically, eliminating the residual plaintext channel that previously undermined hardened or zero-trust deployments of Doris.", + "merged": [ + { + "num": 60921, + "title": "[Enhancement] (FE) Convert intra FE-to-FE calls to HTTPS when enabled", + "url": "https://github.com/apache/doris/pull/60921" + } + ], + "inProgressNarrative": "Security and governance work tightens authorization and dependency hygiene: a new SHOW GRANTS FOR ROLE command for role-level audits, output-buffer bounds checks in the Snappy decompressor, normalized internal FE HTTP URLs under enable_https, and a consolidated CVE patch covering Netty DNS resolver cache poisoning and Go-side vulnerabilities, reducing Doris's attack", + "inProgress": [ + { + "num": 62995, + "title": "[feature](nereids) support show grants for role xxx command to display grants by role", + "url": "https://github.com/apache/doris/pull/62995" + }, + { + "num": 63910, + "title": "check output buffer bounds in SnappyBlockDecompressor", + "url": "https://github.com/apache/doris/pull/63910" + }, + { + "num": 64697, + "title": "[Improve](Audit) Auditlog on FE with https enabled", + "url": "https://github.com/apache/doris/pull/64697" + }, + { + "num": 65212, + "title": "[fix](https) normalize internal FE HTTP URLs", + "url": "https://github.com/apache/doris/pull/65212" + } + ] + }, + { + "name": "Kernel & Engineering", + "mergedNarrative": "Kernel engineering concentrated on stability and developer efficiency: a long-standing ASAN-only BE crash on the throw path was finally rooted out via `__asan_handle_no_return`, print-stack and scan-executor lifetimes were hardened, and latent type and overflow hazards were closed across schema, transaction, ORC and analytic paths. Alongside that, fast-fe-ut.sh, stronger Codex review", + "merged": [ + { + "num": 63188, + "title": "[fix](build) Update pytest dependency pins for security advisories", + "url": "https://github.com/apache/doris/pull/63188" + }, + { + "num": 64093, + "title": "[Enhancement](BE) Make print stack API more stable", + "url": "https://github.com/apache/doris/pull/64093" + }, + { + "num": 64670, + "title": "[fix](show frontends) show effective HTTP/HTTPS port", + "url": "https://github.com/apache/doris/pull/64670" + }, + { + "num": 64732, + "title": "[chore](broker)(sdk) Remove apache_hdfs_broker daemon module and in-tree SDKs", + "url": "https://github.com/apache/doris/pull/64732" + }, + { + "num": 64789, + "title": "[fix](regression) Adjust large TTL cache regression case", + "url": "https://github.com/apache/doris/pull/64789" + } + ], + "inProgressNarrative": "Kernel and engineering work continues hardening storage, load, and execution layers: MoW delete bitmap races with segcompaction, Nereids constant folding aligned with BE behavior, Arrow and Parquet dictionary decoder bounds, empty-input split semantics, stale output capacity in Lz4BlockDecompressor, and tighter MOW/MV delete-bitmap queue observability. New this week extend coverage to", + "inProgress": [] + } + ], + "demand": [ + { + "name": "Real-time Data Warehouse", + "narrative": "For real-time data warehousing, the community is building an end-to-end incremental computation stack: row binlogs capture durable row-level changes with before images and LSN/TSO, Table Stream exposes those changes as a queryable stream, and MTMVs consume the stream for continuously refreshed materialized views. Together they turn Doris into a true streaming warehouse where analytics stay fresh without full refreshes.", + "refs": [ + { + "num": 65418, + "title": "[Feature] Track incremental computation with row binlog, Table Stream, and MTMV", + "url": "https://github.com/apache/doris/issues/65418" + } + ] + }, + { + "name": "Compute-Storage Separation & Cloud-Native", + "narrative": "For real-time data warehousing, the community is building an end-to-end incremental computation stack: row binlogs capture durable row-level changes with before images and LSN/TSO, Table Stream exposes those changes as a queryable stream, and MTMVs consume the stream for continuously refreshed materialized views. Together they turn Doris into a true streaming warehouse where analytics stay fresh without full refreshes.", + "refs": [ + { + "num": 65422, + "title": "[Feature] Time Travel: SELECT ... FOR TIME AS OF '' in cloud/decoupled mode", + "url": "https://github.com/apache/doris/issues/65422" + } + ] + } + ] + } + ] +};