⌘+k ctrl+k
1.4 (LTS)
搜索快捷键 cmd + k | ctrl + k
共享宏

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

确保已安装 httpfs 扩展

INSTALL httpfs;

现在,您可以附加到远程端点并使用该宏

ATTACH 'https://blobs.duckdb.org/data/pretty_print_integer_macro.duckdb'
    AS pretty_print_macro_db;

SELECT pretty_print_macro_db.pretty_print_integer(42_123) AS x;
┌─────────┐
│    x    │
│ varchar │
├─────────┤
│ 42k     │
└─────────┘

共享表宏

也可以共享表宏。例如,我们创建了 checksum,如下所示

duckdb compute_table_checksum.duckdb
CREATE MACRO checksum(table_name) AS TABLE
    SELECT bit_xor(md5_number(COLUMNS(*)::VARCHAR))
    FROM query_table(table_name);

要使用它,请确保已安装 httpfs 扩展

INSTALL httpfs;

您可以附加到远程端点并使用该宏

ATTACH 'https://blobs.duckdb.org/data/compute_table_checksum.duckdb'
    AS compute_table_checksum_db;

CREATE TABLE stations AS
    FROM 'https://blobs.duckdb.org/stations.parquet';

.mode line
FROM compute_table_checksum_db.checksum('stations');
         id = -132780776949939723506211681506129908318
       code = 126327004005066229305810236187733612209
        uic = -145623335062491121476006068124745817380
 name_short = -114540917565721687000878144381189869683
name_medium = -568264780518431562127359918655305384
  name_long = 126079956280724674884063510870679874110
       slug = -53458800462031706622213217090663245511
    country = 143068442936912051858689770843609587944
       type = 5665662315470785456147400604088879751
    geo_lat = 160608116135251821259126521573759502306
    geo_lng = -138297281072655463682926723171691547732
© 2025 DuckDB 基金会,阿姆斯特丹,荷兰
行为准则 商标使用指南