⌘+k ctrl+k
1.3 (稳定版)
搜索快捷键 cmd + k | ctrl + k
query 和 query_table 函数

queryquery_table 函数接受一个字符串字面量,并将其分别转换为一个 SELECT 子查询和一个表引用。请注意,这些函数只接受字面量字符串。因此,它们不像通用的 eval 函数那样强大(或危险)。

这些函数概念上很简单,但能实现强大且更动态的 SQL。例如,它们允许将表名作为预处理语句参数传入。

CREATE TABLE my_table (i INTEGER);
INSERT INTO my_table VALUES (42);

PREPARE select_from_table AS SELECT * FROM query_table($1);
EXECUTE select_from_table('my_table');
i
42

当与 COLUMNS 表达式结合使用时,我们可以编写非常通用的纯 SQL 宏。例如,下面是一个自定义的 SUMMARIZE 版本,它计算表中每个列的 minmax 值。

CREATE OR REPLACE MACRO my_summarize(table_name) AS TABLE
SELECT
    unnest([*COLUMNS('alias_.*')]) AS column_name,
    unnest([*COLUMNS('min_.*')]) AS min_value,
    unnest([*COLUMNS('max_.*')]) AS max_value
FROM (
    SELECT
        any_value(alias(COLUMNS(*))) AS "alias_\0",
        min(COLUMNS(*))::VARCHAR AS "min_\0",
        max(COLUMNS(*))::VARCHAR AS "max_\0"
    FROM query_table(table_name::VARCHAR)
);

SELECT *
FROM my_summarize('https://blobs.duckdb.org/data/ontime.parquet')
LIMIT 3;
列名 (column_name) min_value max_value
年份 2017 2017
quarter 1 3
month 1 9