---
title: Databend 开源周报第 105 期
description: Databend 新增 BITMAP 数据类型，并为优化 Hash Join 性能设计和实现了特化的哈希表。
slug: category-weekly/databend-weekly-105
date: 2023-05-04
tags: [weekly]
category: Weekly

image: databend-weekly.png
contributors:
  - name: andylokandy
  - name: ariesdevil
  - name: b41sh
  - name: BohuTANG
  - name: Chasen-Zhang
  - name: dantengsky
  - name: dependabot[bot]
  - name: Dousir9
  - name: everpcpc
  - name: flaneur2020
  - name: jun0315
  - name: lichuang
  - name: PsiACE
  - name: RinChanNOWWW
  - name: soyeric128
  - name: sundy-li
  - name: TCeason
  - name: tisonkun
  - name: wubx
  - name: Xuanwo
  - name: xudong963
  - name: youngsofun
  - name: zhang2014
  - name: ZhiHanZ
  - name: zhyass
authors:
  - DatabendLabs
---

# Databend 开源周报 第 91 期

> 英文版移步：https://www.databend.com/blog/2023-04-30-databend-weekly
>
> [Databend](https://github.com/databendlabs/databend) 是一款现代云数仓。专为弹性和高效设计，为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务：[https://app.databend.cn](https://app.databend.cn) 。

## What's On In Databend

探索 Databend 本周新进展，遇到更贴近你心意的 Databend。

### 新数据类型：`BITMAP`

Databend 新增对 `BITMAP` 数据类型的支持。

BITMAP 是一种压缩数据结构，可用于高效地存储和操作布尔值集合，常用于加速去重计数。

```SQL
> CREATE TABLE IF NOT EXISTS t1(id Int, v Bitmap) Engine = Fuse;
> INSERT INTO t1 (id, v) VALUES(1, to_bitmap('0, 1')),(2, to_bitmap('1, 2')),(3, to_bitmap('3, 4'));
> SELECT id, to_string(v) FROM t1;

┌──────────────────────┐
│   id  │ to_string(v) │
│ Int32 │    String    │
├───────┼──────────────┤
│     1 │ 0,1          │
│     2 │ 1,2          │
│     3 │ 3,4          │
└──────────────────────┘
```

Databend 中的 `BITMAP` 数据类型实现使用 `RoaringTreemap` 。与其他位图实现相比，使用这种数据结构可以提高性能并减少内存使用。

如果你想要了解更多信息，请查看下面列出的资源。

- [PR #11097 | feat: add bitmap data type](https://github.com/databendlabs/databend/pull/11097)
- [Website | Roaring Bitmaps](https://roaringbitmap.org/)
- [Paper | Consistently faster and smaller compressed bitmaps with Roaring](https://arxiv.org/pdf/1603.06549.pdf)

### 设计并实现新的哈希表以改善 Hash Join 性能

此前 Databend 为聚合函数优化了哈希表实现，但这一实现并不适用于 Hash Join。为了进一步提高 Hash Join 的性能，团队设计并实现了一个专门为此优化的哈希表。

哈希表的大小会根据构建阶段的行数进行分配，值类型也会替换为支持 CAS 操作的指针，从而确保内存控制而无需进行 Vec 增长。

新的实现显著提高了性能。查看下面的资源以获取更多信息：

- [PR #11140 | feat(query): new hash table and parallel finalize for hash join](https://github.com/databendlabs/databend/pull/11140)

{/* truncate */}

## Code Corner

一起来探索 Databend 和周边生态中的代码片段或项目。

### Rust 编译挑战和解决方案 - 编译时间篇

在复杂的项目依赖和样板代码堆积之下，对于 Databend 这样的中大型 Rust 程序而言，编译实在算不上是一件轻松的事情。

为了解决编译时间上面临的一些挑战，Databend 团队从可观测性、编译工具链与配置和代码重构等方面入手，进行了一系列针对性的优化。

如果你想要了解更多信息，请查看下面列出的资源。

- [Databend 中的 Rust 编译时间优化小技巧](https://www.databend.cn/blog/databend-tips-for-rust-compile)

## 亮点

以下是一些值得注意的事件，也许您可以找到感兴趣的内容。

- Databend 正在参与 OSPP 2023 项目，欢迎感兴趣的同学踊跃报名：[OSPP2023 - Databend](https://summer-ospp.ac.cn/org/orgdetail/646b9834-3923-4e74-b98b-90afec341705?lang=en).
- 查看文档 [Docs | Developing with Databend using Rust](https://docs.databend.cn/developer/drivers/rust) 了解如何使用 `databend-driver` 开发 Rust 应用程序。
- 想要了解如何使用 BendSQL 来管理 Databend 数据库和查询？现在就来阅读文档 [Docs | BendSQL](https://docs.databend.cn/guides/sql-clients/bendsql/) ！
- Databend 支持多种数据导入方式，阅读文档 [Docs | Loading from a Stage](https://docs.databend.cn/sql/sql-commands/ddl/stage/) 和 [Docs | Loading from a Bucket](https://docs.databend.cn/guides/load-data/load/s3)，掌握从 Stage 和对象存储的 Bucket 导入数据的实用技能。
- Databend 现在提供 `table-meta-inspector` 实用工具，用于解码 Databend 中表的元数据。

## What's Up Next

我们始终对前沿技术和创新理念持开放态度，欢迎您加入社区，为 Databend 注入活力。

### 寻找函数开发贡献者

Databend 现在正在积极推进函数的实现和改进工作，我们期待你的帮助！

目前计划补全的函数共有 4 类，非常适合对数据库设计和实现感兴趣的同学：

- [Bitmap Functions](https://github.com/databendlabs/databend/issues/11219)
- [Window Functions](https://github.com/databendlabs/databend/issues/11148)
- [Geo Functions](https://github.com/databendlabs/databend/issues/6390)
- [JSON Functions and Operators](https://github.com/databendlabs/databend/issues/11270)

如果你对编写函数感兴趣，但不知如何下手，可以参阅下面的两篇文档了解如何编写标量函数和聚合函数：

- [How to Write Scalar Functions](https://docs.databend.cn/sql/sql-commands/ddl/udf/ddl-create-function/)
- [How to Write Aggregate Functions](https://docs.databend.cn/sql/sql-functions/aggregate-functions/)

期待能够与你共同协作，推动函数的进一步完善。

[Issue #11220 | Tracking: functions](https://github.com/databendlabs/databend/issues/11220)

如果你对这个主题感兴趣，可以尝试解决其中的部分问题或者参与讨论和 PR review。或者，你可以点击 https://link.databend.com/i-m-feeling-lucky 来挑选一个随机问题，祝好运！

## Changelog

前往查看 Databend 每日构建的变更日志，以了解开发的最新动态。

地址：https://github.com/databendlabs/databend/releases
