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

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

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

{/* truncate */}

## 临时表

您现在可以创建一个临时表，该临时表在会话结束时会自动删除。临时表仅在创建它的会话中可见，并在会话结束时自动删除，所有数据都会被清除。要创建临时表，请使用 [CREATE TEMP TABLE](https://docs.databend.cn/sql/sql-commands/ddl/table/ddl-create-temp-table) 命令。

```SQL
CREATE [ OR REPLACE ] { TEMPORARY | TEMP } TABLE
       [ IF NOT EXISTS ]
       [ <database_name>. ]<table_name>
       ...
```

## 新数据类型：INTERVAL

[INTERVAL](https://docs.databend.cn/sql/sql-reference/data-types/interval) 数据类型表示时间长度，允许精确操作和存储跨不同单位的时间间隔。

```SQL
-- Create a table with one INTERVAL column
CREATE OR REPLACE TABLE intervals (duration INTERVAL);

-- Insert different types of INTERVAL data
INSERT INTO intervals VALUES
    ('1 year 2 months ago'),     -- Natural language format with 'ago' (negative interval)
    ('1 year 2 months'),         -- Natural language format without 'ago' (positive interval)
    ('1000000'),                 -- Positive numeric value interpreted as microseconds
    ('-1000000');                -- Negative numeric value interpreted as microseconds

-- Query the table to see the results
SELECT * FROM intervals;

┌──────────────────────────┐
│         duration         │
├──────────────────────────┤
│ -1 year -2 months        │
│ 1 year 2 months          │
│ 0:00:01                  │
│ -1 month -1 day -0:00:01 │
└──────────────────────────┘
```

## 自定义聚合函数

现在您可以使用 Python 和 JavaScript 定义自己的聚合函数。

```SQL
CREATE or REPLACE FUNCTION weighted_avg (INT, INT) STATE {sum INT, weight INT} RETURNS FLOAT
LANGUAGE javascript AS $$
export function create_state() {
    return {sum: 0, weight: 0};
}
export function accumulate(state, value, weight) {
    state.sum += value * weight;
    state.weight += weight;
    return state;
}
export function retract(state, value, weight) {
    state.sum -= value * weight;
    state.weight -= weight;
    return state;
}
export function merge(state1, state2) {
    state1.sum += state2.sum;
    state1.weight += state2.weight;
    return state1;
}
export function finish(state) {
    return state.sum / state.weight;
}
$$;
```

## 新教程：使用 Vector 自动加载 JSON **日志**

在本教程中，我们模拟在本地生成日志，使用 Vector 收集日志，将其存储在 S3 中，并使用计划任务自动将其提取到 Databend Cloud 中。请[单击此处](https://docs.databend.cn/tutorials/load/automating_json_log_loading_with_vector)访问完整教程。

![img](/img/blog/sync/b453c148-aac3-46b3-992b-a8653b5b435d.png)

## 增强对 **Parquet** 文件处理的支持

我们引入了一些新参数，以便在处理 Parquet 文件时提供更大的灵活性和精确性。

**CASE_SENSITIVE 参数**

CASE_SENSITIVE 参数用来决定所查询的 Parquet 文件中的列名是否区分大小写：

- **CASE_SENSITIVE => false**（默认）：列名不区分大小写。例如，b 和 B 被视为相同。

- **CASE_SENSITIVE => true**：列名区分大小写，即只有完全匹配（包括大小写）才有效。例如，如果文件中的列名为 B，则查询 B 会成功，但如果列名为 b，则查询不会成功。

例如，如果在 Parquet 文件中有名为 MinTemp 的列，当 CASE_SENSITIVE 设置为 false 时，可以使用以下语句之一进行查询：

```SQL
SELECT MinTemp FROM '@mystage/weather.parquet'(CASE_SENSITIVE=>false);

SELECT MINTEMP FROM '@mystage/weather.parquet'(CASE_SENSITIVE=>false);

SELECT mintemp FROM '@mystage/weather.parquet'(CASE_SENSITIVE=>false);
```

当 CASE_SENSITIVE 设置为 true 时，必须使用文件中出现的准确列名：

```SQL
SELECT `MinTemp` FROM '@mystage/weather.parquet'(CASE_SENSITIVE=>true);
```

## 新增 **COPY INTO** 选项：COLUMN_MATCH_MODE

COLUMN_MATCH_MODE 决定 COPY INTO 过程中列名匹配是区分大小写还是不区分大小写（默认）。有关 COPY INTO 选项的完整列表，请参阅 [copyOptions](https://docs.databend.cn/sql/sql-commands/dml/dml-copy-into-table#copyoptions)。

## 二进制转换函数：TO_BINARY 和 TRY_TO_BINARY

TO_BINARY 将支持的数据类型（包括字符串、变量、位图、几何图形和地理位置）转换为二进制表示（十六进制格式）。

```SQL
SELECT TO_BINARY('Databend');

┌───────────────────────┐
│ to_binary('Databend') │
├───────────────────────┤
│ 4461746162656E64      │
└───────────────────────┘

SELECT TO_BINARY(PARSE_JSON('{"key":"value", "number":123}')) AS binary_variant;

┌──────────────────────────────────────────────────────────────────────────┐
│                              binary_variant                              │
├──────────────────────────────────────────────────────────────────────────┤
│ 40000002100000031000000610000005200000026B65796E756D62657276616C7565507B │
└──────────────────────────────────────────────────────────────────────────┘

SELECT TO_BINARY(TO_BITMAP('10,20,30')) AS binary_bitmap;

┌──────────────────────────────────────────────────────────────────────┐
│                             binary_bitmap                            │
├──────────────────────────────────────────────────────────────────────┤
│ 0100000000000000000000003A3000000100000000000200100000000A0014001E00 │
└──────────────────────────────────────────────────────────────────────┘

SELECT TO_BINARY(ST_GEOMETRYFROMWKT('SRID=4326;POINT(1.0 2.0)')) AS binary_geometry;

┌────────────────────────────────────────────────────┐
│                   binary_geometry                  │
├────────────────────────────────────────────────────┤
│ 0101000020E6100000000000000000F03F0000000000000040 │
└────────────────────────────────────────────────────┘

SELECT TO_BINARY(ST_GEOGRAPHYFROMEWKT('SRID=4326;POINT(-122.35 37.55)')) AS binary_geography;

┌────────────────────────────────────────────────────┐
│                  binary_geography                  │
├────────────────────────────────────────────────────┤
│ 0101000020E61000006666666666965EC06666666666C64240 │
└────────────────────────────────────────────────────┘
```

TRY_TO_BINARY 是 TO_BINARY 的增强版本，它将输入表达式转换为二进制值，如果转换失败则返回 NULL，而不是报错。

```SQL
SELECT TRY_TO_BINARY(PARSE_JSON(NULL)) AS binary_variant_invalid_json;

┌─────────────────────────────┐
│ binary_variant_invalid_json │
├─────────────────────────────┤
│ NULL                        │
└─────────────────────────────┘
```

## 字符串函数：JARO_WINKLER

JARO_WINKLER 计算两个字符串之间的 [Jaro-Winkler 距离](https://en.wikipedia.org/wiki/Jaro–Winkler_distance)。它通常用于测量字符串之间的相似度，值范围从 0.0（完全不同）到 1.0（完全相同）。

```SQL
SELECT JARO_WINKLER('databend', 'Databend') AS similarity;

┌────────────────────┐
│     similarity     │
├────────────────────┤
│ 0.9166666666666666 │
└────────────────────┘

SELECT JARO_WINKLER('databend', 'database') AS similarity;

┌────────────┐
│ similarity │
├────────────┤
│        0.9 │
└────────────┘
```

## Databend **集成到** DBeaver 24.3.1

Databend 现已在 DBeaver 24.3.1 中获得官方支持，作为 **Analytical** 数据库的新连接类型：

![img](/img/blog/sync/5bc96485-a5c5-468a-91db-846231b08c76.png)

## 私有云管控平台

Databend 新增私有云管理平台，实现对私有云部署的 Databend 节点状态的监控和管理。

![img](/img/blog/sync/15385f57-a163-4374-9d19-27073c16273a.png)
