---
title: Databend 开源周报第 88 期
description: 本周新增对后台服务的支持，本期的编程角介绍了 IceLake 项目及其愿景。
slug: category-weekly/databend-weekly-88
date: 2023-06-19
tags: [weekly]
category: Weekly

image: databend-weekly.png
contributors:
  - name: akoshchiy
  - name: andylokandy
  - name: b41sh
  - name: dantengsky
  - name: Dousir9
  - name: drmingdrmer
  - name: everpcpc
  - name: JackTan25
  - name: jonahgao
  - name: leiysky
  - name: PsiACE
  - name: RinChanNOWWW
  - name: soyeric128
  - name: sundy-li
  - name: TCeason
  - name: Xuanwo
  - name: youngsofun
  - name: zhang2014
  - name: ZhiHanZ
  - name: zhyass
authors:
  - DatabendLabs
---

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

## What's On In Databend

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

### 后台服务

Databend 的内置存储引擎 `FuseTable` 是一种与 Apache Iceberg 类似的日志结构表，需要定期执行表压缩、重聚类和清理以合并小数据块。小数据块合并的过程会涉及按聚类键排序数据或清理不需要的分支等阶段。

先前的实现需要使用不同的驱动，增加了基础设施的复杂性。而且必须部署和维护其他服务来触发驱动事件。为简化这一过程，我们实现了一个后台服务，允许 Databend 执行后台单次作业或以守护进程模式运行 cron 作业。这些作业可以根据条件触发自动压缩/清理/重聚类等表维护任务，而无需其他服务介入。

此实现包括：

1. 完整的 metasrv 模式定义，以及后台作业与后台任务的设计实现。
2. 用于在元服务上更新和维护后台作业与后台任务状态的 API。
3. 支持 `one_shot`、`interval`、`cron` 等不同作业类型的作业调度器实现。

**后台服务** 需要升级至 **企业版** 。如需了解升级信息，请联系 [Databend 团队](https://www.databend.cn/contact-us) 。

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

- [PR | feat: implement Background service for databend](https://github.com/databendlabs/databend/pull/11751)

{/* truncate */}

## Code Corner

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

### IceLake - Iceberg 的纯 Rust 实现

[Iceberg](https://iceberg.apache.org/) 是为分析数据集设计的开放表格式标准。然而，目前 Rust 生态中缺乏成熟的 Iceberg 绑定，使其难以与像 Databend 这样的数据库系统集成。

IceLake 旨在填补这一空白，其致力于建立一个开放生态系统：

- 用户可以从 **任何** 存储服务（如 s3、gcs、azblob、hdfs 等）读写 Iceberg 表。
- **任何** 数据库都可以集成 `icelake`，以支持读写 Iceberg 表。
- 提供原生的 `arrow` 格式互转换的能力。
- 提供多种语言绑定，使其他语言可以享有 Rust 核心带来的 Iceberg 生态支持。

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

- [GitHub - icelake-io/icelake](https://github.com/icelake-io/icelake/)
- [PR | feat: Integrate with icelake for iceberg support](https://github.com/databendlabs/databend/pull/11785)

## Highlights

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

- 新增对 MERGE JOIN 的支持。
- 为 CSV 格式实现列位置支持。
- 阅读 _[Docs | Computed Columns](https://docs.databend.cn/sql/sql-commands/ddl/table/ddl-create-table#computed-columns)_ 以了解如何使用计算列，以及在选择使用何种类型计算列时的一些考量。
- 阅读 _[Docs | Subquery-Based Deletions](https://docs.databend.cn/sql/sql-commands/dml/dml-delete-from)_ 以理解如何使用子查询和比较运算实现删除。

## What's Up Next

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

### 为`COPY INTO` 支持 `VALIDATION_MODE`

我们希望为 Databend 的 `COPY INTO` 语句支持 `VALIDATION_MODE` ，以验证需要载入的数据，并根据验证选项返回结果。

- `RETURN_ERRORS`: 此模式验证数据并返回所有错误。
- `RETURN_<number>_ROWS`: 此模式验证 `<number>` 行数据。如果没有错误，就返回数据载入后应当产生的信息。否则，报告对应的错误信息。

[Issue #11582 | Feature: copy support VALIDATION_MODE](https://github.com/databendlabs/databend/issues/11582)

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

## New Contributors

一起认识社区中的新伙伴，Databend 因你们而变得更加美好。

- [@jonahgao](https://github.com/jonahgao) 修复逻辑测试中 MySQLClient 的列类型，[#11718](https://github.com/databendlabs/databend/pull/11718) 。
- [@akoshchiy](https://github.com/akoshchiy) 更新 `MACOSX_DEPLOYMENT_TARGET` 值以满足 `z3-sys` 的需要，[#11783](https://github.com/databendlabs/databend/pull/11783) 。

## Changelog

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

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

# Convert the query result to a Pandas DataFrame

df = result.to_pandas()

# Create a bar chart to visualize the data

df.plot.bar(x='date', y='count')
plt.show()

````


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

- [Docs | Tutorial-3: Integrate with Jupyter Notebook with Python Binding Library](https://docs.databend.cn/guides/visualize/jupyter/)

## Highlights

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

- 实现对所有权模型的初步支持
- Hash Join 支持溢出（spill）
- Databend 中的列现在默认支持空值，阅读文档 [Docs | NULL Values and NOT NULL Constraint](https://docs.databend.cn/sql/sql-reference/data-types/#null-values-and-not-null-constraint) 了解详细情况。
- 阅读文档 [Docs | databend-local](https://docs.databend.cn/guides/deploy/deploy/) 掌握 Databend Local 模式。

## What's Up Next

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

### 支持使用 JavaScript 创建 UDF

[PR #12729 | feat: implement udf server in databend](https://github.com/databendlabs/databend/pull/12729) 预计会在本周进行合并。这意味着 Databend 即将支持使用 Python 创建用户自定义函数。

```SQL
CREATE FUNCTION [IF NOT EXISTS] <udf_name> (<arg_type>, ...) RETURNS <return_type> LANGUAGE <language> HANDLER=<handler> ADDRESS=<udf_server_address>
````

我们期望在这个 PR 的基础上提供对多种语言 UDF 的支持，JavaScript 可能是值得尝试的选项之一。

[Issue #12746 | Feature: support javascript udf ](https://github.com/databendlabs/databend/issues/12746)

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

## Changelog

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

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

## Databend 企业级特性

全新企业级特性上线啦！了解 Databend 如何推动更具价值的数据分析服务。

### 计算列

计算列（Computed Columns）是一种通过表达式从其他列计算生成数据的列，使用计算列可以将表达式的数据存储下来加快查询速度，同时可以简化一些复杂的查询的表达式。计算列包括存储（STORED）和虚拟（VIRTUAL）两种类型。

- 存储计算列在每次插入或更新时生成数据并存储在磁盘，在查询时不需要重复计算，可以更快的读取数据。
- 虚拟计算列不存储数据，不占用额外的空间，在每次查询时实时进行计算。

计算列对读取 JSON 内部字段的数据特别有用，通过将常用的内部字段定义为计算列可以大大减少每次查询过程中提取 JSON 数据的耗时操作。例如：

```sql
CREATE TABLE student (
    profile variant,
    id int64 null as (profile['id']::int64) stored,
    name string null as (profile['name']::string) stored
);

INSERT INTO student VALUES ('{"id":1, "name":"Jim", "age":20}'),('{"id":2, "name":"David", "age": 21}');

SELECT id, name FROM student;
+------+-------+
| id   | name  |
+------+-------+
|    1 | Jim   |
|    2 | David |
+------+-------+
```

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

- [Docs | CREATE TABLE - COMPUTED COLUMNS](https://docs.databend.cn/sql/sql-commands/ddl/table/ddl-create-table#computed-columns)

### VACUUM TABLE

`VACUUM TABLE` 命令通过从表中永久删除历史数据文件来释放存储空间，有助于优化系统性能。删除的文件包括：

- 与表相关的快照及其关联的 segments 和 blocks。
- 孤立文件。在 Databend 中，孤立文件指不再与该表关联的快照、segments 和 blocks。孤立文件可能由各种操作和错误生成，例如在数据备份和还原期间，并且随着时间的推移会占用宝贵的磁盘空间并降低系统性能。

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

- [Docs | VACUUM TABLE](https://docs.databend.cn/sql/sql-commands/ddl/table/vacuum-table)

### Serverless Background Service

Databend 的内置存储引擎 `FuseTable` 是一种与 Apache Iceberg 类似的日志结构表，在数据持续写入的过程中，需要定期执行表压缩、重聚类和清理以合并小数据块。小数据块合并的过程会涉及按聚类键排序数据或清理不需要的分支等阶段。

为了自动化执行这一过程需要使用不同的驱动，增加了基础设施的复杂性。而且必须部署和维护其他服务来触发驱动事件。为简化这一过程，Databend 设计并实现了 **Serverless Background Service** ，能自动发现数据写入之后需要压缩、重排序、清理的表，无需其他服务，也无需用户手动操作，自动触发对应表的维护工作，降低了用户维护的负担，提升了表查询的性能，也降低了数据在对象存储中的成本。

## Databend x 生态

Databend 的生态版图得到了进一步的完善。是时候将 Databend 引入你的数据洞见工作流啦！

### databend 的 Python 绑定

Databend 现在提供 Python 绑定，为在 Python 中执行 SQL 查询提供了新选择。该绑定内置 Databend，无需部署实例即可使用。

```shell
pip install databend
```

从 databend 导入 `SessionContext` 并创建会话上下文即可开始使用：

```python
from databend import SessionContext
ctx = SessionContext()
df = ctx.sql("select number, number + 1, number::String as number_p_1 from numbers(8)")
```

结果 DataFrame 可以使用 `to_py_arrow()` 或 `to_pandas()` 转换为 PyArrow 或者 Pandas 格式：

```python
df.to_pandas() # Or, df.to_py_arrow()
```

现在行动起来，将 Databend 集成到你的数据科学工作流中。

- [databend · PyPI](https://pypi.org/project/databend/)

### BendSQL - Databend 原生命令行工具

BendSQL 是一款专为 Databend 设计的原生命令行工具，现在已经用 Rust 语言重写，并且同时支持 **REST API** 和 **Flight SQL** 协议。

使用 BendSQL，你可以轻松高效地管理 Databend 中的数据库、表和数据，并轻松执行各种查询和运算。

```sql
bendsql> select avg(number) from numbers(10);

SELECT
  avg(number)
FROM
  numbers(10);

┌───────────────────┐
│    avg(number)    │
│ Nullable(Float64) │
├───────────────────┤
│ 4.5               │
└───────────────────┘

1 row in 0.259 sec. Processed 10 rows, 10B (38.59 rows/s, 308B/s)
```

我们期待与你分享更多关于 BendSQL 的更新！欢迎试用并给我们反馈。

- [Docs | SQL Clients - BendSQL](https://docs.databend.cn/guides/sql-clients/bendsql/)
- [Crates.io - bendsql](https://crates.io/crates/bendsql)
- [Github - DatabendLabs/databend-client | Rust](https://github.com/databendlabs/databend-client)

### 数据集成和 BI 服务

#### Apache DolphinScheduler

Apache DolphinScheduler 是一个分布式和可扩展的开源工作流协调平台，具有强大的 DAG 可视化界面。支持 30+ 的任务类型，包括像 Flink SQL、DataX、HiveCli 等。能够高并发、高吞吐量、低延迟和稳定地执行百万个量级任务，可以根据计划时间（特殊日期范围或特殊的日期列表）批量执行任务，而且在不影响工作流模板的情况下，工作流实例支持修改、回滚和重新运行。

![](../static/img/blog/databend-1-2-release/changelog-1-2-06.png)

DolphinScheduler 现已支持 Databend 数据源，可以使用 DolphinScheduler 管理 DataX 任务实现从 MySQL 到 Databend 异构数据库数据同步。

#### Apache Flink CDC

Apache Flink CDC（Change Data Capture）是指 Apache Flink 使用基于 SQL 的查询从各种来源捕获和处理实时数据更改的能力。CDC 允许监视和捕获数据库或流系统中发生的数据修改（插入、更新和删除），并对这些更改进行实时响应。

[Databend 现在提供 Flink SQL Connector](https://github.com/databendcloud/flink-connector-databend)，可以将 Flink 的流处理能力与 Databend 集成。通过对连接器进行配置，可以以流的形式从各种数据库中捕获数据更改，并将其载入到 Databend 中以进行实时处理和分析。

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

- [Docs | Loading Data with Tools - Flink CDC](https://docs.databend.cn/guides/load-data/load-db/flink-cdc)

#### Tableau

Tableau 是一款流行的数据可视化和业务智能工具。它提供了直观、交互式的方式来探索、分析和呈现数据，帮助用户更好地理解数据的意义和洞察。

参考 [Other Databases (JDBC)](https://help.tableau.com/current/pro/desktop/en-us/examples_otherdatabases_jdbc.htm)，将 `databend-jdbc` 放置在 Tableau 驱动路径下，就可以使用 Tableau 分析 Databend 中的数据。

![](../static/img/blog/databend-1-2-release/changelog-1-2-07.png)

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

- [Blog | Databend x Tableau](https://www.databend.com/blog/2023-06-01-tableau)

## 下载使用

如果你对我们新版本功能感兴趣，欢迎访问 https://github.com/databendlabs/databend/releases/tag/v1.2.0-nightly 页面查看全部的 changelog 或者下载 release 体验。

如果你还在使用旧版本的 Databend，我们推荐升级到最新版本，升级过程请参考：

https://docs.databend.cn/guides/deploy/upgrade/upgrade/

## 意见反馈

如果您遇到任何使用上的问题，欢迎随时通过 GitHub issue 或社区用户群中提建议

GitHub: https://github.com/databendlabs/databend/
