---
title: Databend 开源周报第 111 期
description: '了解 Databend 数据共享中的 SHARE ENDPOINT。此外，Databend 现在支持 UDF Server 以提供更灵活和实用的函数自定义能力。'
slug: category-weekly/databend-weekly-111
date: 2023-09-18
tags: [weekly]
category: Weekly
cover_url: 'weekly/weekly-111.jpg'
image: 'weekly/weekly-111.jpg'
contributors:
  - name: andylokandy
  - name: ariesdevil
  - name: b41sh
  - name: Chasen-Zhang
  - name: ct20000901
  - name: dantengsky
  - name: Dousir9
  - name: drmingdrmer
  - name: everpcpc
  - name: gitccl
  - name: JackTan25
  - name: nagarajatantry
  - name: nange
  - name: PsiACE
  - name: RinChanNOWWW
  - name: soyeric128
  - name: sundy-li
  - name: TCeason
  - name: xudong963
  - name: youngsofun
  - name: zhang2014
  - name: ZhiHanZ
  - name: zhyass
authors:
  - DatabendLabs
---

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

## What's On In Databend

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

### 理解 SHARE ENDPOINT

SHARE ENDPOINT 是 Databend 数据共享中的一个重要概念，用于指定数据共享实例的端点和租户名称。数据的访问方和使用方需要定义 SHARE POINT 来帮助 Databend 实例定位和访问与其共享的数据。

例如，如果租户 A 对租户 B 共享数据，那么租户 B 需要创建对应的 SHARE ENDPOINT，使租户 B 所处的实例能够定位和访问共享的数据。

```SQL
CREATE SHARE ENDPOINT IF NOT EXISTS from_TenantA
    URL = '<share_endpoint_url>'
    TENANT = A
    COMMENT = 'Share endpoint to access data from Tenant A';
```

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

{/* truncate */}

## Code Corner

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

### 使用 Python 创建 UDF

Databend 现在支持 UDF Server 以提供更灵活和实用的函数自定义能力。用户可以使用自己喜爱的编程语言，结合 Apache Arrow Flight API 实现 UDF Server 来与 Databend 交互，从而拓展数据库的边界，实现更丰富和高效的数据工作流。

要启用这一特性，需要使用 `v1.2.116-nightly` 及之后版本，并在 `databend-query` 的配置文件中启用 UDF Server 支持和外部访问许可：

```toml
[query]
...
enable_udf_server = true
# use your udf server address here
udf_server_allow_list = ['http://0.0.0.0:8815']
...
```

下面的程序展示了如何利用 Python 创建用于计算最大公约数的 UDF Server。

```python
from udf import *

# Define a function that accpets nullable values, and set skip_null to True to enable it returns NULL if any argument is NULL.
@udf(
    input_types=["INT", "INT"],
    result_type="INT",
    skip_null=True,
)
def gcd(x: int, y: int) -> int:
    while y != 0:
        (x, y) = (y, x % y)
    return x

if __name__ == '__main__':
    # create a UDF server listening at '0.0.0.0:8815'
    server = UdfServer("0.0.0.0:8815")
    # add defined functions
    server.add_function(gcd)
    # start the UDF server
    server.serve()
```

对应到 Databend 中，则可以使用下面的 SQL 语句注册 UDF。

```SQL
CREATE FUNCTION gcd (INT, INT) RETURNS INT LANGUAGE python HANDLER = 'gcd' ADDRESS = 'http://0.0.0.0:8815';
```

这一功能尚在预览阶段，目前我们提供用于示例和测试的 Python SDK 文件，后续将会推出更多 SDK，欢迎感兴趣的朋友参与到 UDF 生态共建之中。

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

- [PR #12802 | feat: implement udf server in databend](https://github.com/databendlabs/databend/issues/12802)
- [Docs | UDF Server](https://github.com/databendlabs/databend/blob/main/tests/udf-server/README.md)

## Highlights

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

- 支持 infer filter。
- 支持幂等删除。
- SQLSmith 测试支持生成聚合函数、标量函数和表达式。
- 阅读文档 [Docs | INSERT INTO](https://docs.databend.cn/sql/sql-commands/dml/dml-insert) 和 [Docs | REPLACE INTO](https://docs.databend.cn/sql/sql-commands/dml/dml-replace) ，了解如何使用 SQL 语句将 Stage 中数据插入到表中。

## What's Up Next

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

### 为 Stage 中的 Parquet 文件提供缓存支持

Databend 为查询和内部数据支持了多种不同类型和功能缓存，以改善查询性能，比如查询缓存（Query Cache）、文件元数据缓存（File Metadata Cache）、数据缓存（Data Cache）等。

但是对于位于 Stage 的文件，还缺乏有效的缓存支持。如果能够为 Stage 中的 Parquet 提供元数据缓存或者对象缓存，将有助于改善对外置数据查询的性能。

```SQL
select * from 's3://aa/bb/cc/' (pattern => '.*.parquet')
```

[Issue #12762 | feat: add object cache for stage parquet file](https://github.com/databendlabs/databend/issues/12762)

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

## New Contributors

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

- [@nagarajatantry](https://github.com/nagarajatantry) 修复了文档中失效的超链接，[#12836](https://github.com/databendlabs/databend/pull/12836) 。
- [@ct20000901](https://github.com/ct20000901) 修复了 `array_sort` 无法正确处理空数组和 NULL 的问题，[#12827](https://github.com/databendlabs/databend/pull/12827) 。

## Changelog

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

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