---
title: Databend 开源周报第 87 期
description: Databend 上线聚合窗口函数，增加函数名提示。本周有一位新贡献者加入！
slug: category-weekly/databend-weekly-87
date: 2023-04-03
tags: [weekly]
category: Weekly

image: databend-weekly.png
contributors:
  - name: andylokandy
  - name: ariesdevil
  - name: b41sh
  - name: BohuTANG
  - name: dantengsky
  - name: Dousir9
  - name: drmingdrmer
  - name: everpcpc
  - name: jun0315
  - name: leiysky
  - name: lichuang
  - name: PsiACE
  - name: RinChanNOWWW
  - name: rkmdCodes
  - name: SkyFan2002
  - name: soyeric128
  - name: sundy-li
  - name: TCeason
  - name: Xuanwo
  - name: xudong963
  - name: youngsofun
  - name: zhang2014
  - name: zhyass
authors:
  - DatabendLabs
---

# Databend 开源周报 第 87 期

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

## What's On In Databend

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

### 聚合窗口函数

聚合窗口函数是指将聚合函数应用于窗口中的每一行数据的函数。`OVER` 子句指定如何将结果集中的行分区。当与`GROUP BY`一起使用时，聚合窗口函数不会折叠行，而是返回结果集中的所有行。

```sql
-- use aggrerate window function
SELECT date, AVG(amount) over (partition by date)
FROM BookSold

June 21|544.0
June 21|544.0
June 22|454.5
June 22|454.5
June 23|643.0
June 23|643.0
```

Databend 所支持的所有聚合函数都可以作为聚合窗口函数。

- [Doc | (draft) Aggregate Window Functions](https://docs.databend.cn/sql/sql-functions/window-functions/)
- [PR #10700 | feat(window): initial impl window function](https://github.com/databendlabs/databend/pull/10700)

### 在拼写错误时建议函数名称

Databend 近期新增一项用于提高使用体验的智能提示功能，当输入不正确的函数名称时，可以自动提示最接近匹配项。

```sql
#> select base64(1);
ERROR 1105 (HY000) at line 1: Code: 1008, displayText = error:
  --> SQL:1:8
  |
1 | select base64(1)
  |        ^^^^^^^^^ no function matches the given name: 'base64', do you mean 'to_base64'?
```

- [PR | feat(planner): suggest function name on typo](https://github.com/databendlabs/databend/pull/10759)

{/* truncate */}

## Code Corner

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

### 转储运行中的异步任务栈

Databend 现在支持转储正在运行的异步任务栈。只需访问 `http://<admin_api_address>/debug/async_tasks/dump` 即可在浏览器中捕获它。

![Dump Running Async Task Stack](https://user-images.githubusercontent.com/8087042/228602725-a0440e39-3a65-4939-8826-3b92d381cb39.png)

调用 `async_backtrace::taskdump_tree` 函数可以获取异步任务树（由 `#[async_backtrace::framed]` 收集）的相关信息。

```rust
    let tree =
        async_backtrace::taskdump_tree(req.map(|x| x.wait_for_running_tasks).unwrap_or(false));
```

任务分为常规任务和轮询任务（标记为 `[POLLING]`）。记录每个任务的栈信息，并按栈深度排序输出到字符串。

```rust
    for mut tasks in [tasks, polling_tasks] {
        tasks.sort_by(|l, r| Ord::cmp(&l.stack_frames.len(), &r.stack_frames.len()));

        for item in tasks.into_iter().rev() {
            for frame in item.stack_frames {
                writeln!(output, "{}", frame).unwrap();
            }

            writeln!(output).unwrap();
        }
    }
```

如果你想要了解其工作原理，可以访问下面的链接：

- [PR | feat(query): try support dump running async task stack](https://github.com/databendlabs/databend/pull/10830)

### 与 Jupyter Notebook 集成的新方法

正如 [Doc | Visualization Databend Data in Jupyter Notebook](https://docs.databend.cn/guides/visualize/jupyter/) 所述，我们可以使用 Jupyter Notebook 探索 Databend 中的数据。

![](https://datafuse-1253727613.cos.ap-hongkong.myqcloud.com/integration/integration-jupyter-databend.png)

然而，通过 magic 技巧和 [ipython-sql](https://github.com/catherinedevlin/ipython-sql) ，我们可以提供另一种交互方式。这种方式使得 SQL 查询看起来像是在 SQL cells 中运行，而不需要维护用于集成的 Python 样板代码。

**安装依赖**

```bash
pip install ipython-sql databend-sqlalchemy
```

**与 Jupyter Notebook 协同**

```sql
In [1]: %load_ext sql

In [2]: %%sql databend://{username}:{password}@{host_port_name}/{database_name}?secure=false
   ...: SHOW DATABASES;

In [3]: result = %%sql SELECT * FROM numbers(100);

In [4]: %matplotlib inline
   ...: df = result.DataFrame()
   ...: df.plot()
```

## 亮点

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

- 通过选择预配置的 MySQL 驱动程序或添加 Databend JDBC 驱动程序，现在可以 _[使用 DBeaver 连接到 Databend](https://www.databend.com/blog/dbeaver)_。
- Databend 现已提供与 Redash 的集成，帮助你洞见数据。_[文档 | Integrations - Redash](https://docs.databend.cn/guides/visualize/redash/)_
- 掌握如何显示给定表中的列信息。_[文档 | SHOW COLUMNS](https://docs.databend.cn/sql/sql-commands/ddl/table/show-full-columns)_
- Databend 现在支持 `generate_series` 和 `range` 表函数。
- Databend 现在支持 `ai_embedding_vector` 函数，该函数返回由 OpenAI Embeddings API 生成的 1536 维 f32 向量。
- Databend 增加了对 DDL `[CREATE | DROP | SHOW] SHARE ENDPOINT` 的支持。

## What's Up Next

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

### 收集来自 Sled 的度量信息

[sled](https://github.com/spacejam/sled) 是一种嵌入式数据库，启用 `metrics` 特性后可以导出度量信息。

Databend Meta Service 使用 [sled](https://github.com/datafuse-extras/sled) 作为底层存储引擎。我们希望获取更多的度量信息来提高可观测性，并进一步优化。

[Issue #7233 | make use of sled metrics feature for collect sled metrics](https://github.com/databendlabs/databend/issues/7233)

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

## New Contributors

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

- [@rkmdCodes](https://github.com/rkmdCodes) 改进错误字符串，使提示更加友好，[#10269](https://github.com/databendlabs/databend/pull/10269)

## Changelog

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

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