很高兴为您带来 Databend 2025 年 2 月的最新更新、新功能和改进!我们希望这些增强功能对您有所帮助,并期待您的反馈。
从 MySQL 迁移到 Databend
Databend 推荐使用 db-archiver 进行 MySQL 批量迁移,使用 Flink CDC 进行实时变更数据捕获(CDC)迁移。教程已更新:
设置会话标签
现在,您可以为会话分配一个可选标签,从而更方便地在日志表中过滤具有指定标签的日志。例如,以下命令将当前会话的标签设置为 eric:
SET SESSION query_tag = 'eric';
复制代码
随后,我们执行一个查询,并使用该标签从日志表中检索相应的日志记录:
SHOW USERS;
SELECT query_tag, query_text FROM system.query_log WHERE query_tag = 'eric' LIMIT 1;
复制代码
返回结果中,您可以找到带有 eric 标签的查询记录:
-[ RECORD 1 ]----------------------------------- query_tag: eric query_text: SHOW USERS
复制代码
溢出数据存储
自托管 Databend 支持在内存使用超出可用限制时,将中间查询结果溢出到磁盘。现在,您可以配置溢出数据的存储位置,可选择本地磁盘存储或远程 S3 兼容存储桶。
以下示例将 Databend 配置为最多使用 1 TB 本地磁盘空间进行溢出操作,同时保留 40% 磁盘空间供系统使用:
[spill]spill_local_disk_path = "/data1/databend/databend_spill"spill_local_disk_reserved_space_percentage = 40spill_local_disk_max_bytes = 1099511627776
复制代码
以下示例将 Databend 配置为使用 MinIO 作为 S3 兼容存储服务来进行溢出操作:
[spill][spill.storage]type = "s3"[spill.storage.s3]bucket = "databend"root = "admin"endpoint_url = "http://127.0.0.1:9900"access_key_id = "minioadmin"secret_access_key = "minioadmin"allow_insecure = true
复制代码
使用 “FROM table” 获取所有列
Databend 扩展了 SQL 语法,允许查询直接以 FROM <table> 开头,而无需显式使用 SELECT *:
等同于:
新增与优化的 SQL 命令
ATTACH TABLE population_only (city, population) 's3://databend-doc/1/16/' CONNECTION = ( REGION='us-east-2', AWS_KEY_ID = '<your_aws_key_id>', AWS_SECRET_KEY = '<your_aws_secret_key>');
复制代码
新教程:使用 ATTACH TABLE 链接表
DESC PROCEDURE sum_even_numbers(Uint8, Uint8);
┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐│ Property │ Value │├───────────┼────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤│ signature │ (start_val,end_val) ││ returns │ (UInt8) ││ language │ SQL ││ body │ BEGIN\n LET sum := 0;\n FOR i IN start_val TO end_val DO\n IF i % 2 = 0 THEN\n sum := sum + i;\n END IF;\n END FOR;\n \n RETURN sum;\nEND; │└────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
复制代码
新增与优化的 SQL 函数
SELECT TIMESTAMP_DIFF('2025-02-01'::TIMESTAMP, '2025-01-01'::TIMESTAMP);
┌──────────────────────────────────────────────────────────────────┐│ timestamp_diff('2025-02-01'::TIMESTAMP, '2025-01-01'::TIMESTAMP) │├──────────────────────────────────────────────────────────────────┤│ 744:00:00 │└──────────────────────────────────────────────────────────────────┘
复制代码
-- Calculate historical data size for all tables in all databasesSELECT ...FROM fuse_time_travel_size();
-- Calculate historical data size for all tables in a specified databaseSELECT ...FROM fuse_time_travel_size('<database_name>');
-- Calculate historical data size for a specified table in a specified databaseSELECT ...FROM fuse_time_travel_size('<database_name>', '<table_name>'));
复制代码
SELECT ARRAYS_ZIP([1, 2, 3], ['a', 'b', 'c']);
┌────────────────────────────────────────┐│ arrays_zip([1, 2, 3], ['a', 'b', 'c']) │├────────────────────────────────────────┤│ [(1,'a'),(2,'b'),(3,'c')] │└────────────────────────────────────────┘
复制代码
SELECT MAP_INSERT({'a':1,'b':2,'c':3}, 'd', 4);
┌─────────────────────────────────────────┐│ map_insert({'a':1,'b':2,'c':3}, 'd', 4) │├─────────────────────────────────────────┤│ {'a':1,'b':2,'c':3,'d':4} │└─────────────────────────────────────────┘
SELECT MAP_INSERT({'a':1,'b':2,'c':3}, 'a', 5, true);
┌───────────────────────────────────────────────┐│ map_insert({'a':1,'b':2,'c':3}, 'a', 5, TRUE) │├───────────────────────────────────────────────┤│ {'a':5,'b':2,'c':3} │└───────────────────────────────────────────────┘
复制代码
SELECT MAP_PICK({'a':1,'b':2,'c':3}, 'a', 'c');
┌─────────────────────────────────────────┐│ map_pick({'a':1,'b':2,'c':3}, 'a', 'c') │├─────────────────────────────────────────┤│ {'a':1,'c':3} │└─────────────────────────────────────────┘
SELECT MAP_PICK({'a':1,'b':2,'c':3}, ['a', 'b']);
┌───────────────────────────────────────────┐│ map_pick({'a':1,'b':2,'c':3}, ['a', 'b']) │├───────────────────────────────────────────┤│ {'a':1,'b':2} │└───────────────────────────────────────────┘
复制代码
SELECT NOW(), EXTRACT(DAY FROM NOW()), EXTRACT(DOY FROM NOW()), EXTRACT(EPOCH FROM NOW());
┌────────────────────────────────────────────────────────────────────────────────────────────────────────────┐│ now() │ EXTRACT(DAY FROM now()) │ EXTRACT(DOY FROM now()) │ EXTRACT(EPOCH FROM now()) │├────────────────────────────┼─────────────────────────┼─────────────────────────┼───────────────────────────┤│ 2025-02-08 03:51:51.991167 │ 8 │ 39 │ 1738986711.991167 │└────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
复制代码
SELECT EXTRACT(DAY FROM '1 day 2 hours 3 minutes 4 seconds'::INTERVAL);
┌─────────────────────────────────────────────────────────────────┐│ EXTRACT(DAY FROM '1 day 2 hours 3 minutes 4 seconds'::INTERVAL) │├─────────────────────────────────────────────────────────────────┤│ 1 │└─────────────────────────────────────────────────────────────────┘
复制代码
-- Create a table with integer, double, and interval columnsCREATE TABLE sum_example ( id INT, int_col INTEGER, double_col DOUBLE, interval_col INTERVAL);
-- Insert dataINSERT INTO sum_example VALUES (1, 10, 15.5, INTERVAL '2 days'),(2, 20, 25.7, INTERVAL '3 days'),(3, NULL, 5.2, INTERVAL '1 day'), (4, 30, 40.1, INTERVAL '4 days');
-- Calculate the sum for each columnSELECT SUM(int_col) AS total_integer, SUM(double_col) AS total_double, SUM(interval_col) AS total_intervalFROM sum_example;
-- NULL values are ignored.-- SUM(interval_col) returns 240:00:00 (10 days).
┌──────────────────────────────────────────────────────────┐│ total_integer │ total_double │ total_interval │├─────────────────┼───────────────────┼────────────────────┤│ 60 │ 86.5 │ 240:00:00 │└──────────────────────────────────────────────────────────┘
复制代码
SELECT DATE_TRUNC(MONTH, to_date('2022-07-07')), DATE_TRUNC(WEEK, to_date('2022-07-07'));
┌────────────────────────────────────────────────────────────────────────────────────┐│ DATE_TRUNC(MONTH, to_date('2022-07-07')) │ DATE_TRUNC(WEEK, to_date('2022-07-07')) │├──────────────────────────────────────────┼─────────────────────────────────────────┤│ 2022-07-01 │ 2022-07-04 │└────────────────────────────────────────────────────────────────────────────────────┘
复制代码
关于 Databend
Databend 是一款开源、弹性、低成本,基于对象存储也可以做实时分析的新式湖仓。期待您的关注,一起探索云原生数仓解决方案,打造新一代开源 Data Cloud。
👨💻 Databend Cloud:databend.cn
📖 Databend 文档:docs.databend.com
💻 Wechat:Databend
✨ GitHub:github.com/databendlab…
评论