Databend 是一款现代云数仓。专为弹性和高效规划,为您的大规模剖析需求保驾护航。自在且开源。立刻体验云服务:app.databend.cn 。
What’s On In Databend
探究 Databend 本周新进展,遇到更贴近你心意的 Databend 。
为指定列创立 Bloom Index
创立 bloom index 将会耗费很多 CPU 资源。对于仅有少数列涉及点查或许对数据摄入功能比较垂青的宽表来说,为一切列都创立 bloom index 可能不是什么好选择。
Databend Fuse Engine 新增对 bloom_index_columns
选项的支撑,这意味着你能够按需为指定列创立 bloom index ,然后到达查询功能和数据摄入功能之间的平衡。
创立带有 bloom index 的表:
CREATE TABLE table_name (
column_name1 column_type1,
column_name2 column_type2,
...
) ... bloom_index_columns='columnName1[, ...]'.
为现存的表创立或修改 bloom index :
现有的 bloom index 选项将被新选项替换,别的,不会为现有数据创立 bloom filter 。
ALTER TABLE <db.table_name> SET OPTIONS(bloom_index_columns='columnName1[, ...]');
禁用 bloom index :
ALTER TABLE <db.table_name> SET OPTIONS(bloom_index_columns='');
假如您想了解更多信息,请检查下面列出的资源。
- PR #12048 | feat: support specify bloom index columns
理解 SQL 一致性
Databend 的规划目标之一是契合 SQL 规范,特别是支撑 ISO/IEC 9075:2011 ,也称为 SQL:2011 。虽然目前不是完全百分百契合,但 Databend 现已包含许多 SQL 规范所要求的特型,只是在语法或函数上存在一些轻微差异。
咱们最近在文档中添加了一篇摘要,介绍了 Databend 契合 SQL:2011 规范的程度,希望它能帮助你进一步了解 Databend 的 SQL 语法。
假如你想要了解更多信息,请检查下面列出的资源。
- Docs | SQL Conformance
Code Corner
一起来探究 Databend 和周边生态中的代码片段或项目。
了解 Databend 重聚类 Pipeline
通过良好聚类的表在某些存储块中依然可能会变得混乱,然后对查询功能产生负面影响。例如,该表会继续进行 DML 操作(INSERT / UPDATE / DELETE)。
重聚类操作并不是从头开始对表再次聚类,而是基于聚类算法的计算来选择并重新组织现存最混乱的存储块。
重聚类的 pipeline 如下图所示:
┌──────────┐ ┌───────────────┐ ┌─────────┐
│FuseSource├────►│CompoundBlockOp├────►│SortMerge├────┐
└──────────┘ └───────────────┘ └─────────┘ │
┌──────────┐ ┌───────────────┐ ┌─────────┐ │ ┌──────────────┐ ┌─────────┐
│FuseSource├────►│CompoundBlockOp├────►│SortMerge├────┤────►│MultiSortMerge├────►│Resize(N)├───┐
└──────────┘ └───────────────┘ └─────────┘ │ └──────────────┘ └─────────┘ │
┌──────────┐ ┌───────────────┐ ┌─────────┐ │ │
│FuseSource├────►│CompoundBlockOp├────►│SortMerge├────┘ │
└──────────┘ └───────────────┘ └─────────┘ │
┌──────────────────────────────────────────────────────────────────────────────────────────────┘
│ ┌──────────────┐
│ ┌───►│SerializeBlock├───┐
│ │ └──────────────┘ │
│ │ ┌──────────────┐ │ ┌─────────┐ ┌────────────────┐ ┌─────────────────┐ ┌──────────┐
└───►│───►│SerializeBlock├───┤───►│Resize(1)├───►│SerializeSegment├────►│TableMutationAggr├────►│CommitSink│
│ └──────────────┘ │ └─────────┘ └────────────────┘ └─────────────────┘ └──────────┘
│ ┌──────────────┐ │
└───►│SerializeBlock├───┘
假如你想要了解更多信息,请检查下面列出的资源。
- feat(storage): improve optimize and recluster
Highlights
以下是一些值得注意的事情,或许您能够找到感兴趣的内容。
- 支撑分布式
COPY INTO
。 - 阅览文档 Docs | ATTACH TABLE 了解怎么将现有的表附加到另一个表上。
- 阅览文档 Docs | Deepnote 和 Docs | MindsDB 了解 Databend 怎么与你的数据科学项目协同。
- 阅览文档 Docs | Window Functions 和 Docs | Bitmap Functions 以全面了解 Databend 支撑的 BITMAP 函数和窗口函数。
What’s Up Next
咱们始终对前沿技术和立异理念持开放态度,欢迎您加入社区,为 Databend 注入生机。
用物化加快 CTE
内联公共表表达式(Common Table Expression,CTE)能够满足大多数情况,可是假如 CTE 像 TPCH Q15 那样比较重,那么完成查询的价值可能会非常高。在这类情况下,最好引入物化来加快 CTE 。
--- TPCH Q15
WITH revenue AS
(SELECT l_suppkey AS supplier_no,
sum(l_extendedprice * (1 - l_discount)) AS total_revenue
FROM lineitem
WHERE l_shipdate >= TO_DATE ('1996-01-01')
AND l_shipdate < TO_DATE ('1996-04-01')
GROUP BY l_suppkey)
SELECT s_suppkey,
s_name,
s_address,
s_phone,
total_revenue
FROM supplier,
revenue
WHERE s_suppkey = supplier_no
AND total_revenue =
(SELECT max(total_revenue)
FROM revenue)
ORDER BY s_suppkey;
Issue #12067 | Feature: speed up CTE by materialization
假如你对这个主题感兴趣,能够尝试处理其中的部分问题或许参与讨论和 PR review 。或许,你能够点击 link.databend.rs/i-m-feeling… 来选择一个随机问题,祝好运!
Changelog
前往检查 Databend 每日构建的改变日志,以了解开发的最新动态。
地址:github.com/datafuselab…
Contributors
非常感谢贡献者们在本周的卓越作业。
Connect With Us
Databend 是一款开源、弹性、低成本,基于目标存储也能够做实时剖析的新式数仓。等待您的关注,一起探究云原生数仓处理方案,打造新一代开源 Data Cloud。
- Databend Website
- GitHub Discussions
- Slack Channel