DuckDB 拥有一个强大的宏机制,允许为常见任务创建简写。例如,我们可以定义一个宏,将非负整数漂亮地打印为一个包含十亿、百万和千(不四舍五入)的短字符串,如下所示:
duckdb pretty_print_integer_macro.duckdb
CREATE MACRO pretty_print_integer(n) AS
CASE
WHEN n >= 1_000_000_000 THEN printf('%dB', n // 1_000_000_000)
WHEN n >= 1_000_000 THEN printf('%dM', n // 1_000_000)
WHEN n >= 1_000 THEN printf('%dk', n // 1_000)
ELSE printf('%d', n)
END;
SELECT pretty_print_integer(25_500_000) AS x;
┌─────────┐
│ x │
│ varchar │
├─────────┤
│ 25M │
└─────────┘
正如人们所期望的那样,宏被持久化在数据库中。
但这也意味着我们可以将其托管在HTTPS端点上并与任何人分享!
我们已经在blobs.duckdb.org
上发布了这个宏。
让我们开始一个新的DuckDB会话并尝试一下:
duckdb
我们现在可以连接到远程端点并使用宏:
ATTACH 'https://blobs.duckdb.org/data/pretty_print_integer_macro.duckdb' AS db;
USE db;
SELECT pretty_print_integer(42_123) AS x;
┌─────────┐
│ x │
│ varchar │
├─────────┤
│ 42k │
└─────────┘
警告 目前不支持通过附件共享表格宏。