---
title: Databend 开源周报第 96 期
description: 本周新增对虚拟列的支持，另外，Databend 现在提供交互式文档体验
slug: category-weekly/databend-weekly-91
date: 2023-06-05
tags: [weekly]
category: Weekly

image: databend-weekly.png
contributors:
  - name: andylokandy
  - name: b41sh
  - name: Chasen-Zhang
  - name: dantengsky
  - name: Dousir9
  - name: everpcpc
  - name: gitccl
  - name: JackTan25
  - name: jun0315
  - name: leiysky
  - name: lichuang
  - name: PsiACE
  - name: RinChanNOWWW
  - name: soyeric128
  - name: sundy-li
  - name: tisonkun
  - name: Xuanwo
  - name: xudong963
  - name: zhang2014
authors:
  - DatabendLabs
---

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

## What's On In Databend

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

### 虚拟列

查询 JSON 内部字段的优化方法之一是使用虚拟列。

首先，使用 `CREATE VIRTUAL COLUMN` 为这些字段创建虚拟列。创建虚拟列后，可以使用 `GENERATE VIRTUAL COLUMN` 函数生成虚拟列。完成这些步骤后，就可以通过相应的虚拟列直接访问 JSON 内部字段中的数据。

Databend 现在支持用于创建、删除、生成和修改虚拟列的一系列 SQL 语法。下面是一个简单的例子：

```SQL
create table test (id int, val json);
insert into test values(1, '{"a":33,"b":44}'),(2, '{"a":55,"b":66}');
create virtual columns (val['a'], val['b']) for test;
generate virtual columns for test;
select val['a'], val['b'] from test;
+----------+----------+
| val['a'] | val['b'] |
+----------+----------+
| 33       | 44       |
| 55       | 66       |
+----------+----------+
```

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

- [RFC | JSON Optimization - Virtual Column](https://docs.databend.cn/sql/sql-commands/ddl/virtual-column/)
- [PR | feat(query): Support generate virtual columns](https://github.com/databendlabs/databend/pull/11590)

{/* truncate */}

## Code Corner

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

### 由 AskBend 驱动的交互式文档

你还记得 [AskBend](https://github.com/databendlabs/askbend/) 吗？AskBend 是使用 Rust 编写的知识库问答系统，由 Databend 和 OpenAI 强力驱动，可以根据 Markdown 文件创建基于 SQL 的知识库。

现在，我们已经将其集成到 Databend 官方网站中，为文档查询提供了交互式体验。

![Alt text](../static/img/blog/ai-search.png)
![Alt text](../static/img/blog/ai-search-result.png)

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

- [https://docs.databend.cn](https://docs.databend.cn)
- [PR | feat(front search): Add AI searching](https://github.com/databendlabs/databend/pull/11633)

## 亮点

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

- 为窗口函数实现表达式支持。
- 为 SELECT list 支持 `range` 函数和别名。
- 新增基于标签的插入/突变/更新去重支持。
- 为 `COPY INTO` 添加优化提示支持。
- 阅读 _[Docs | Deploying a Databend Cluster](https://docs.databend.cn/guides/deploy/deploy/production/metasrv-deploy)_，以了解手动部署 Databend 集群时的技巧。
- 阅读 _[Docs | Data Types - BITMAP](https://docs.databend.cn/sql/sql-reference/data-types/map)_ 和 _[Docs | Bitmap Functions](https://docs.databend.cn/sql/sql-functions/bitmap-functions/)_，以理解 Databend 中 BITMAP 数据类型的用法。

## What's Up Next

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

### 使用败者树优化排序算法

目前，Databend 的排序算法使用基于堆的归并排序。

多路合并有三种主要算法：堆排序、胜者树和败者树。在这三个算法中，每次对堆进行调整都需要与左右子节点进行比较。比较次数为 2logN，而胜者树和败者树调整的比较次数为 logN。

它们之间的区别在于，胜者树需要与兄弟节点进行比较并更新父节点，而败者树只需要与父节点进行比较，从而减少了内存访问次数。

[Issue #11604 | Feature: Update sort algorithm using Loser Tree](https://github.com/databendlabs/databend/issues/11604)

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

## Changelog

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

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

- [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
