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

# Databend 产品月报（2024 年 11 月）

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

{/* truncate */}

## 计算集群访问控制

Databend Cloud 现在允许您通过为计算集群分配特定角色来管理计算集群访问，以便只有具有该角色的用户才能访问计算集群。需要注意的是，计算集群访问控制默认*未*启用。要启用访问控制，请在 **工单** \> **创建新工单** 提交请求。

![](/img/blog/sync/c3329d2a0abf775f315ecdad506bcc28.png)

## 使用 Prometheus 跟踪指标

Databend Cloud（仅限 Business 和 Dedicated 用户）现已支持与 Prometheus 集成：您现在可以使用 Prometheus 实时监控查询性能、资源使用情况和系统指标。有关如何与 Prometheus 集成以及可用指标，请参阅 [使用 Prometheus 跟踪指标](https://docs.databend.cn/guides/cloud/manage/metrics)。

![](/img/blog/sync/ffcf480f97b3cba7c9d7c7103cfcefaf.png)

## 全新方式安装 BendSQL

你现在可以使用 Shell 脚本安装 BendSQL。以下两种方式可供选择：

- 安装到用户的主目录（\~/.bendsql）：

  ```shell
  curl -fsSL https://repo.databend.com/install/bendsql.sh | bash

                                    B E N D S Q L
                                      Installer

  --------------------------------------------------------------------------------
  Website: https://databend.com
  Docs: https://docs.databend.cn
  Github: https://github.com/databendlabs/bendsql
  --------------------------------------------------------------------------------

  >>> We'll be installing BendSQL via a pre-built archive at https://repo.databend.com/bendsql/v0.22.2/
  >>> Ready to proceed? (y/n)
  >>> Please enter y or n.
  >>> y
  --------------------------------------------------------------------------------
  >>> Downloading BendSQL via https://repo.databend.com/bendsql/v0.22.2/bendsql-aarch64-apple-darwin.tar.gz ✓
  >>> Unpacking archive to /Users/eric/.bendsql ... ✓
  >>> Adding BendSQL path to /Users/eric/.zprofile ✓
  >>> Adding BendSQL path to /Users/eric/.profile ✓
  >>> Install succeeded! 🚀
  >>> To start BendSQL:
      bendsql --help
  >>> More information at https://github.com/databendlabs/bendsql
  ```

- 安装到指定目录（例如，/usr/local）：

  ```shell
  curl -fsSL https://repo.databend.com/install/bendsql.sh | bash -s -- -y --prefix /usr/local
                                    B E N D S Q L
                                      Installer
  --------------------------------------------------------------------------------
  Website: https://databend.com
  Docs: https://docs.databend.cn
  Github: https://github.com/databendlabs/bendsql
  --------------------------------------------------------------------------------
  >>> Downloading BendSQL via https://repo.databend.com/bendsql/v0.22.2/bendsql-aarch64-apple-darwin.tar.gz ✓
  >>> Unpacking archive to /usr/local ... ✓
  >>> Install succeeded! 🚀
  >>> To start BendSQL:
      bendsql --help
  >>> More information at https://github.com/databendlabs/bendsql
  ```

## 新增数据类型：GEOMETRY 和 GEOGRAPHY

Databend 新增对地理空间数据类型的基础支持，用于处理空间数据：

- **GEOMETRY**: 使用平面坐标系（笛卡尔坐标），适用于二维几何对象。坐标以 (X, Y) 对表示，单位由关联的空间参考系统 (SRS) 决定。默认 SRID 为 0，但可以指定自定义 SRID。适合城市或省级分析等小范围测量，计算速度快且资源占用低，但在较大区域可能产生显著误差。

- **GEOGRAPHY**: 使用基于纬度（-90° 至 90°）和经度（-180° 至 180°）的地理坐标系（球面坐标），遵循 WGS 84 标准（SRID 4326）。专为全球或大范围空间数据设计，在处理大距离时提供高精度，但计算复杂度和资源需求较高。必要时可以转换为 GEOMETRY 类型。

目前已支持的地理空间函数：

- [Geometry 函数](https://docs.databend.cn/sql/sql-functions/geometry-functions/)

- [H3 函数](https://docs.databend.cn/sql/sql-functions/geo-functions/)

## 新支持子句：SETTINGS

新增 [SETTINGS 子句](https://docs.databend.cn/sql/sql-commands/query-syntax/settings)：用于配置特定设置，以影响其前置 SQL 语句的执行行为。

```sql
-- 允许 COPY INTO 使用最多 100 个线程进行并行处理：
SETTINGS (max_threads = 100) COPY INTO ...
```

### 新增 Map Lambda 函数

- **MAP_FILTER**: 使用 lambda 表达式定义条件，从 map 中筛选出符合条件的键值对。

  ```sql
  SELECT MAP_FILTER({101:15, 102:8, 103:12, 104:5}, (product_id, stock) -> (stock < 10)) AS low_stock_products;

  ┌────────────────────┐
  │ low_stock_products │
  ├────────────────────┤
  │ {102:8,104:5}      │
  └────────────────────┘
  ```

- **MAP_TRANSFORM_KEYS**: 使用 lambda 表达式对 map 中的每个键进行转换。

  ```sql
  SELECT MAP_TRANSFORM_KEYS({101: 29.99, 102: 45.50, 103: 15.00}, (product_id, price) -> product_id + 1000) AS updated_product_ids;

  ┌────────────────────────────────────┐
  │         updated_product_ids        │
  ├────────────────────────────────────┤
  │ {1101:29.99,1102:45.50,1103:15.00} │
  └────────────────────────────────────┘
  ```

- **MAP_TRANSFORM_VALUES**: 使用 lambda 表达式对 map 中的每个值进行转换。

  ```sql
  SELECT MAP_TRANSFORM_VALUES({101: 100.0, 102: 150.0, 103: 200.0}, (product_id, price) -> price * 0.9) AS discounted_prices;

  ┌───────────────────────────────────┐
  │         discounted_prices         │
  ├───────────────────────────────────┤
  │ {101:90.00,102:135.00,103:180.00} │
  └───────────────────────────────────┘
  ```

- **JSON_MAP_FILTER**: 根据使用 lambda 表达式定义的条件，筛选 JSON 对象中的键值对。

  ```sql
  SELECT JSON_MAP_FILTER('{"status":"active", "user":"admin", "time":"2024-11-01"}'::VARIANT, (k, v) -> k = 'status') AS filtered_metadata;

  ┌─────────────────────┐
  │  filtered_metadata  │
  ├─────────────────────┤
  │ {"status":"active"} │
  └─────────────────────┘
  ```

- **JSON_MAP_TRANSFORM_KEYS**: 使用 lambda 表达式对 JSON 对象中的每个键进行转换。

  ```sql
  SELECT JSON_MAP_TRANSFORM_KEYS('{"name":"John", "role":"admin"}'::VARIANT, (k, v) -> CONCAT(k, '_v1')) AS versioned_metadata;

  ┌──────────────────────────────────────┐
  │          versioned_metadata          │
  ├──────────────────────────────────────┤
  │ {"name_v1":"John","role_v1":"admin"} │
  └──────────────────────────────────────┘
  ```

- **JSON_MAP_TRANSFORM_VALUES**: 使用 lambda 表达式对 JSON 对象中的每个值进行转换。

  ```sql
  SELECT JSON_MAP_TRANSFORM_VALUES('{"product1":"laptop", "product2":"phone"}'::VARIANT, (k, v) -> CONCAT(v, ' - Special Offer')) AS promo_descriptions;

  ┌──────────────────────────────────────────────────────────────────────────┐
  │                            promo_descriptions                            │
  ├──────────────────────────────────────────────────────────────────────────┤
  │ {"product1":"laptop - Special Offer","product2":"phone - Special Offer"} │
  └──────────────────────────────────────────────────────────────────────────┘
  ```

### 新增日期函数

- **LAST_DAY**: 根据提供的日期或时间戳，返回指定区间（周、月、季度或年）的最后一天。

  ```sql
  SELECT LAST_DAY(to_date('2024-11-13'), month) AS billing_date;

  ┌──────────────┐
  │ billing_date │
  ├──────────────┤
  │ 2024-11-30   │
  └──────────────┘
  ```

- **NEXT_DAY**: 返回给定日期或时间戳之后，下一次出现的指定星期几的日期。

  ```sql
  SELECT NEXT_DAY(to_date('2024-11-13'), monday) AS next_monday;

  ┌─────────────┐
  │ next_monday │
  ├─────────────┤
  │ 2024-11-18  │
  └─────────────┘
  ```

- **PREVIOUS_DAY**: 返回给定日期或时间戳之前，最近一次出现的指定星期几的日期。

  ```sql
  SELECT PREVIOUS_DAY(to_date('2024-11-13'), friday) AS last_friday;

  ┌─────────────┐
  │ last_friday │
  ├─────────────┤
  │ 2024-11-08  │
  └─────────────┘
  ```

### 新增 Trim 函数

- **LTRIM**: 移除字符串开头（左侧）的特定字符。

  ```sql
  SELECT LTRIM('xxdatabend', 'xx');

  ┌───────────────────────────┐
  │ ltrim('xxdatabend', 'xx') │
  ├───────────────────────────┤
  │ databend                  │
  └───────────────────────────┘
  ```

- **RTRIM**: 移除字符串末尾（右侧）的特定字符。

  ```sql
  SELECT RTRIM('databendxx', 'xx');

  ┌───────────────────────────┐
  │ rtrim('databendxx', 'xx') │
  ├───────────────────────────┤
  │ databend                  │
  └───────────────────────────┘
  ```

- **TRIM_BOTH**: 移除字符串两端的特定字符。

  ```sql
  SELECT TRIM_BOTH('xxdatabendxx', 'xx');

  ┌─────────────────────────────────┐
  │ trim_both('xxdatabendxx', 'xx') │
  ├─────────────────────────────────┤
  │ databend                        │
  └─────────────────────────────────┘
  ```

- **TRIM_LEADING**: 移除字符串开头（左侧）的特定字符。

  ```sql
  SELECT TRIM_LEADING('xxdatabend', 'xx');

  ┌──────────────────────────────────┐
  │ trim_leading('xxdatabend', 'xx') │
  ├──────────────────────────────────┤
  │ databend                         │
  └──────────────────────────────────┘
  ```

- **TRIM_TRAILING**: 移除字符串末尾（右侧）的特定字符。

  ```sql
  SELECT TRIM_TRAILING('databendxx', 'xx');

  ┌───────────────────────────────────┐
  │ trim_trailing('databendxx', 'xx') │
  ├───────────────────────────────────┤
  │ databend                          │
  └───────────────────────────────────┘
  ```
