--- title: Databend 开源周报第 102 期 description: slug: databend-weekly-102 date: 2023-07-17 tags: [weekly] cover_url: databend-weekly.svg image: databend-weekly.png contributors: - name: ariesdevil - name: b41sh - name: BohuTANG - name: Chasen-Zhang - name: dantengsky - name: Dousir9 - name: everpcpc - name: flaneur2020 - name: JackTan25 - name: lichuang - name: PsiACE - name: RinChanNOWWW - name: SkyFan2002 - name: soyeric128 - name: sundy-li - name: TCeason - name: xudong963 - name: youngsofun - name: zhang2014 - name: zhyass authors: - datafuselabs --- # Databend 开源周报 第 102 期 ![](https://hackmd.io/_uploads/BkMI8Fz9n.png) > 英文版移步:https://databend.rs/blog/2023-07-16-databend-weekly > > [Databend](https://github.com/datafuselabs/databend) 是一款现代云数仓。专为弹性和高效设计,为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务:[https://app.databend.cn](https://app.databend.cn) 。 ## What's On In Databend 探索 Databend 本周新进展,遇到更贴近你心意的 Databend 。 ### 为指定列创建 Bloom Index 创建 bloom index 将会消耗大量 CPU 资源。对于仅有少数列涉及点查或者对数据摄入性能比较看重的宽表来说,为所有列都创建 bloom index 可能不是什么好选择。 Databend [Fuse Engine](https://databend.rs/doc/sql-reference/table-engines/fuse) 新增对 `bloom_index_columns` 选项的支持,这意味着你可以按需为指定列创建 bloom index ,从而达到查询性能和数据摄入性能之间的平衡。 创建带有 bloom index 的表: ```SQL CREATE TABLE table_name ( column_name1 column_type1, column_name2 column_type2, ... ) ... bloom_index_columns='columnName1[, ...]'. ``` 为现存的表创建或修改 bloom index : <small><i>现有的 bloom index 选项将被新选项替换,另外,不会为现有数据创建 bloom filter 。</i></small> ```SQL ALTER TABLE <db.table_name> SET OPTIONS(bloom_index_columns='columnName1[, ...]'); ``` 禁用 bloom index : ```SQL ALTER TABLE <db.table_name> SET OPTIONS(bloom_index_columns=''); ``` 如果您想了解更多信息,请查看下面列出的资源。 - [PR #12048 | feat: support specify bloom index columns](https://github.com/datafuselabs/databend/pull/12048) ### 理解 SQL 一致性 Databend 的设计目标之一是符合 SQL 标准,特别是支持 ISO/IEC 9075:2011 ,也称为 SQL:2011 。虽然目前不是完全百分百符合,但 Databend 已经包含许多 SQL 标准所要求的特型,只是在语法或函数上存在一些轻微差异。 我们最近在文档中添加了一篇摘要,介绍了 Databend 符合 SQL:2011 标准的程度,希望它能帮助你进一步了解 Databend 的 SQL 语法。 如果你想要了解更多信息,请查看下面列出的资源。 - [Docs | SQL Conformance](https://databend.rs/doc/sql-reference/ansi-sql) ## Code Corner 一起来探索 Databend 和周边生态中的代码片段或项目。 ### 了解 Databend 重聚类 Pipeline 经过良好聚类的表在某些存储块中仍然可能会变得混乱,从而对查询性能产生负面影响。例如,该表会继续进行 DML 操作(INSERT / UPDATE / DELETE)。 重聚类操作并不是从头开始对表再次聚类,而是基于聚类算法的计算来选择并重新组织现存最混乱的存储块。 重聚类的 pipeline 如下图所示: ```text ┌──────────┐ ┌───────────────┐ ┌─────────┐ │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](https://github.com/datafuselabs/databend/pull/11850) ## Highlights 以下是一些值得注意的事件,也许您可以找到感兴趣的内容。 - 支持分布式 `COPY INTO` 。 - 阅读文档 [Docs | ATTACH TABLE](https://databend.rs/doc/sql-commands/ddl/table/attach-table) 了解如何将现有的表附加到另一个表上。 - 阅读文档 [Docs | Deepnote](https://databend.rs/doc/integrations/deepnote) 和 [Docs | MindsDB](https://databend.rs/doc/integrations/mindsdb) 了解 Databend 如何与你的数据科学项目协同。 - 阅读文档 [Docs | Window Functions](https://databend.rs/doc/sql-functions/window-functions/) 和 [Docs | Bitmap Functions](https://databend.rs/doc/sql-functions/bitmap-functions/) 以全面了解 Databend 支持的 BITMAP 函数和窗口函数。 ## What's Up Next 我们始终对前沿技术和创新理念持开放态度,欢迎您加入社区,为 Databend 注入活力。 ### 用物化加速 CTE 内联公共表表达式(Common Table Expression,CTE)能够满足大多数情况,但是如果 CTE 像 TPCH Q15 那样比较重,那么完成查询的代价可能会非常高。在这类情况下,最好引入物化来加速 CTE 。 ```sql --- 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](https://github.com/datafuselabs/databend/issues/12067) 如果你对这个主题感兴趣,可以尝试解决其中的部分问题或者参与讨论和 PR review 。或者,你可以点击 https://link.databend.rs/i-m-feeling-lucky 来挑选一个随机问题,祝好运! ## Changelog 前往查看 Databend 每日构建的变更日志,以了解开发的最新动态。 地址:https://github.com/datafuselabs/databend/releases ## Contributors 非常感谢贡献者们在本周的卓越工作。 ![](https://hackmd.io/_uploads/By06hKG52.png) ## Connect With Us Databend 是一款开源、弹性、低成本,基于对象存储也可以做实时分析的新式数仓。期待您的关注,一起探索云原生数仓解决方案,打造新一代开源 Data Cloud。 - [Databend Website](https://databend.rs) - [GitHub Discussions](https://github.com/datafuselabs/databend/discussions) - [Twitter](https://twitter.com/Datafuse_Labs) - [Slack Channel](https://link.databend.rs/join-slack)