---
title: Databend 开源周报第 86 期
description: Databend 上线使自然语言转换为查询语句的内置函数。FlightSQL Handler 的开发正在积极推进中。本周有一位新贡献者加入！
slug: category-weekly/databend-weekly-86
date: 2023-03-27
tags: [weekly]
category: Weekly

image: databend-weekly.png
contributors:
  - name: andylokandy
  - name: ariesdevil
  - name: b41sh
  - name: BohuTANG
  - name: Chasen-Zhang
  - name: dantengsky
  - name: everpcpc
  - name: leiysky
  - name: lichuang
  - name: mergify[bot]
  - name: PsiACE
  - name: RinChanNOWWW
  - name: SkyFan2002
  - name: soyeric128
  - name: sundy-li
  - name: TCeason
  - name: wubx
  - name: xinlifoobar
  - name: Xuanwo
  - name: xudong963
  - name: youngsofun
  - name: yufan022
  - name: zhang2014
  - name: zhyass
authors:
  - DatabendLabs
---

# Databend 开源周报 第 86 期

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

## What's On In Databend

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

### FlightSQL 协议支持正在进行中

FlightSQL 是一种创新的开放式数据库协议，适用于现代架构。面向列设计，并提供对数据分区并行处理的无缝支持。

支持 FlightSQL 的好处包括减少不必要的序列化和反序列化，以及使用预定义的 `*.proto` 文件轻松支持不同语言的 SDK 实现。

Databend 正在积极开发对 FlightSQL 的支持。如果你对此感兴趣，请参考以下链接：

- [Issue #10745 | tracking: FlightSQL handler](https://github.com/databendlabs/databend/issues/10745)
- [PR #10732 | feat: basic impl for FlightSQL handler](https://github.com/databendlabs/databend/pull/10732)

### 将自然语言转换为 SQL

通过与流行的 AI 服务集成，`Databend` 现在提供一个高效的内置解决方案 - `AI_TO_SQL` 函数。

该函数可以将自然语言编写的指令转换为与表模式对齐的 SQL 查询语句。只需进行少量修改（或可能根本不需要），即可投入生产。

```sql
SELECT * FROM ai_to_sql(
    'List the total amount spent by users from the USA who are older than 30 years, grouped by their names, along with the number of orders they made in 2022',
    '<openai-api-key>');
*************************** 1. row ***************************
     database: openai
generated_sql: SELECT name, SUM(price) AS total_spent, COUNT(order_id) AS total_orders
               FROM users
                        JOIN orders ON users.id = orders.user_id
               WHERE country = 'USA' AND age > 30 AND order_date BETWEEN '2022-01-01' AND '2022-12-31'
               GROUP BY name;
```

该函数现在可在 Databend 和 Databend Cloud 上使用。要了解其工作原理，请参阅以下链接：

- [Doc | AI Functions - AI_TO_SQL](https://docs.databend.cn/sql/sql-functions/ai-functions/ai-to-sql)
- [Blog | Databend Understands You Better with OpenAI](https://www.databend.com/blog/ai2sql)

{/* truncate */}

## Code Corner

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

### 向量相似度查询

Databend 最近新增 `cosine_distance` 函数。输入是两个类型为 f32 的 slice。

```sql
select cosine_distance([3.0, 45.0, 7.0, 2.0, 5.0, 20.0, 13.0, 12.0], [2.0, 54.0, 13.0, 15.0, 22.0, 34.0, 50.0, 1.0]) as sim
----
0.8735807
```

底层的 Rust 实现利用 `ndarray` crate 中的 `ArrayView` 类型高效地执行计算。

```rust
pub fn cosine_distance(from: &[f32], to: &[f32]) -> Result<f32> {
    if from.len() != to.len() {
        return Err(ErrorCode::InvalidArgument(format!(
            "Vector length not equal: {:} != {:}",
            from.len(),
            to.len(),
        )));
    }

    let a = ArrayView::from(from);
    let b = ArrayView::from(to);
    let aa_sum = (&a * &a).sum();
    let bb_sum = (&b * &b).sum();

    Ok((&a * &b).sum() / ((aa_sum).sqrt() * (bb_sum).sqrt()))
}
```

你还记得怎么将 scalar functions 集成到 Databend 中吗？可以查看 [Doc | How to Write a Scalar Function](https://docs.databend.cn/sql/sql-commands/ddl/udf/ddl-create-function/) 和 [PR | #10737](https://github.com/databendlabs/databend/pull/10737) 验证你的答案。

## 亮点

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

- 了解如何使用 Prometheus 和 Grafana 监控 Databend：[Doc | Monitor - Prometheus & Grafana](https://docs.databend.cn/guides/deploy/monitor/tools/prometheus-and-grafana/)
- [Databend 现在提供 Metabase 驱动](https://github.com/databendcloud/metabase-databend-driver/releases/latest) 帮助你将 Databend 连接到 Metabase 并为轻松创建数据仪表板：[Doc | Integrations - Metabase](https://docs.databend.cn/guides/visualize/metabase/)
- Databend 现在支持 `PIVOT`，`UNPIVOT`，`GROUP BY CUBE` 和 `GROUP BY ROLLUP` 查询语法。有关更多信息，请参见 [PR＃10676](https://github.com/databendlabs/databend/pull/10676) 和 [＃10601](https://github.com/databendlabs/databend/pull/10601) 。

## What's Up Next

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

### 启用 `-Zgitoxide` 以加速 Git 依赖下载

启用 `-Zgitoxide` 可以显著加快我们 Git 依赖的下载速度，比仅使用 Git 要快得多。

此特性可以将 `cargo` 与 `gitoxide` 集成，后者是一个纯 Rust 实现的 Git 版本控制系统，具有易用、精简、高效和安全等特点。

[Issue #10466 | CI: Enable -Zgitoxide to speed our git deps download speed](https://github.com/databendlabs/databend/issues/10466)

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

## Changelog

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

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