---
title: 'Databend 产品月报（2025 年 3 月）'
date: 2025-03-31
slug: category-product/monthly-mar2025
cover_url: 'sync/monthly-mar2025/cover.png'
description: '很高兴为您带来 Databend 2025 年 3 月的最新更新、新功能和改进！我们希望这些增强功能对您有所帮助，并期待您的反馈'
tags: [databend, monthly]
category: Product
authors:
  - Eric
---

# Databend 产品月报（2025 年 3 月）

很高兴为您带来 Databend 2025 年 3 月的最新更新、新功能和改进！我们希望这些增强功能对您有所帮助，并期待您的反馈。

{/* truncate */}

## 仪表盘共享

您现在可以在 Databend Cloud 上与组织内的所有人或特定个人共享您的仪表盘，并选择以下权限级别之一来控制他人对其的访问方式：

- **只读（Read Only）**：查看仪表盘，但无法进行更改或运行查询以获取最新结果。
- **执行（Execute）**：运行查询以获取最新结果或与仪表盘交互，但无法修改它。
- **编辑（Edit）**：修改仪表盘，包括更改查询和仪表盘如何反映结果。

![img](/img/blog/sync/monthly-mar2025/monthly-mar2025-2.png)

## 使用来自另一个表的值更新表

`UPDATE` 命令已增强，允许使用来自另一个表的值更新表。

```SQL
UPDATE bookstore
SET book_name = book_updates.new_book_name
FROM book_updates
WHERE bookstore.book_id = book_updates.book_id;
```

## 最小日期和时间戳调整

我们已更新日期和时间戳数据类型的最小值：

- 最小日期：`0001-01-01`
- 最小时间戳：`0001-01-01 00:00:00.00000`

## 对用户名称和角色名称的限制

Databend 不允许 SQL 用户或角色名称包含以下特殊字符：

- 单引号（'）
- 双引号（"）
- 退格符（\b）
- 换页符（\f）

## 使用 `enable_expand_roles` 管理角色继承

`enable_expand_roles` 设置确定 `SHOW_GRANTS` 函数是否显示来自角色的继承权限。默认设置为 `1`，它递归地扩展所有权限；当设置为 `0` 时，它仅显示直接权限和角色授予。例如：

当 `enable_expand_roles`=1 时：

```sql
SELECT grants FROM show_grants('role', 'a') ORDER BY object_id;

┌──────────────────────────────────────────────────────┐
│                        grants                        │
├──────────────────────────────────────────────────────┤
│ GRANT SELECT ON 'default'.'default'.'t1' TO ROLE `a` │
│ GRANT SELECT ON 'default'.'default'.'t2' TO ROLE `a` │
└──────────────────────────────────────────────────────┘
```

当 `enable_expand_roles`=0 时：

```sql
SELECT grants FROM show_grants('role', 'a') ORDER BY object_id;

┌──────────────────────────────────────────────────────┐
│                        grants                        │
├──────────────────────────────────────────────────────┤
│ GRANT SELECT ON 'default'.'default'.'t1' TO ROLE `a` │
│ GRANT ROLE b to ROLE `a`                             │
│ GRANT ROLE public to ROLE `a`                        │
└──────────────────────────────────────────────────────┘
```

## 日志级别配置更新

`databend-query.toml` 配置文件中的 `[log.file]` 和 `[log.stderr]` 设置现在使用 `env_logger` 语法（error, warn, info, debug, trace, off），默认设置为 `warn,databend_=info,openraft=info`，以实现灵活的日志控制。

## Iceberg 表函数

Databend 引入了以下表函数用于查询 Iceberg 元数据，允许用户高效地检查快照和清单：

- **ICEBERG_MANIFEST**：返回 Iceberg 表的清单文件的元数据，包括文件路径、分区详细信息和快照关联。

```SQL
SELECT * FROM ICEBERG_MANIFEST('tpcds', 'catalog_returns');

╭───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ content │      path      │ length │ partition_spec │ added_snapshot │ added_data_fil │ existing_data_ │ deleted_data_ │ added_delete_ │ existing_dele │ deleted_delet │ partition_sum │
│  Int32  │     String     │  Int64 │       _id      │       _id      │    es_count    │   files_count  │  files_count  │  files_count  │ te_files_coun │ e_files_count │     maries    │
│         │                │        │      Int32     │ Nullable(Int64 │ Nullable(Int32 │ Nullable(Int32 │ Nullable(Int3 │ Nullable(Int3 │       t       │ Nullable(Int3 │ Array(Nullabl │
│         │                │        │                │        )       │        )       │        )       │       2)      │       2)      │ Nullable(Int3 │       2)      │ e(Tuple(Nulla │
│         │                │        │                │                │                │                │               │               │       2)      │               │ ble(Boolean), │
│         │                │        │                │                │                │                │               │               │               │               │ Nullable(Bool │
│         │                │        │                │                │                │                │               │               │               │               │ ean), String, │
│         │                │        │                │                │                │                │               │               │               │               │   String)))   │
├─────────┼────────────────┼────────┼────────────────┼────────────────┼────────────────┼────────────────┼───────────────┼───────────────┼───────────────┼───────────────┼───────────────┤
│       0 │ s3://warehouse │   9241 │              0 │ 75657674165904 │              2 │              0 │             0 │             2 │             0 │             0 │ []            │
│         │ /catalog_retur │        │                │          11866 │                │                │               │               │               │               │               │
│         │ ns/metadata/fa │        │                │                │                │                │               │               │               │               │               │
│         │ 1ea4d5-a382-49 │        │                │                │                │                │               │               │               │               │               │
│         │ 7a-9f22-1acb9a │        │                │                │                │                │               │               │               │               │               │
│         │ 74a346-m0.avro │        │                │                │                │                │               │               │               │               │               │
╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
```

- **ICEBERG_SNAPSHOT**：返回 Iceberg 表的快照元数据，包括数据更改、操作信息和摘要统计信息。

```sql
SELECT * FROM ICEBERG_SNAPSHOT('tpcds', 'catalog_returns');

╭───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│        committed_at        │     snapshot_id     │ parent_id │ operation │                     manifest_list                    │                       summary                       │
├────────────────────────────┼─────────────────────┼───────────┼───────────┼──────────────────────────────────────────────────────┼─────────────────────────────────────────────────────┤
│ 2025-03-12 23:18:26.626000 │ 7565767416590411866 │         0 │ append    │ s3://warehouse/catalog_returns/metadata/snap-7565767 │ {'spark.app.id':'local-1741821433430','added-data-f │
│                            │                     │           │           │ 416590411866-1-fa1ea4d5-a382-497a-9f22-1acb9a74a346. │ iles':'2','added-records':'144067','total-equality- │
│                            │                     │           │           │ avro                                                 │ deletes':'0','changed-partition-count':'1','total-r │
│                            │                     │           │           │                                                      │ ecords':'144067','total-files-size':'7679811','tota │
│                            │                     │           │           │                                                      │ l-data-files':'2','added-files-size':'7679811','tot │
│                            │                     │           │           │                                                      │ al-delete-files':'0','total-position-deletes':'0'}  │
╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
```

## [新功能预览] 表函数 fuse_vacuum2()

`fuse_vacuum2()` 表函数根据 `data_retention_time_in_days` 的设置，帮助用户清理 Fuse 表中过时的数据，回收存储空间并提升查询性能。

```sql
SET data_retention_time_in_days = 0;

SELECT * FROM fuse_vacuum2('<database>', '<table>');
```

## [新功能预览] Hilbert Clustering 优化

Databend 引入 **基于范围的分区** 来增强 Hilbert Clustering，使数据组织更加高效。它通过 **对 Clustering Key 进行采样**、**分配范围分区 ID** 以及 **计算 Hilbert 索引**，从而实现更好的数据裁剪（pruning）和聚类，提高查询性能。

![img](/img/blog/sync/monthly-mar2025/monthly-mar2025.png)
