⌘+k ctrl+k
1.1.3 (stable)
Search Shortcut cmd + k | ctrl + k
query and query_table Functions

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

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

CREATE TABLE my_table(i INT);
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;
列名 最小值 最大值
年份 2017 2017
季度 1 3
月份 1 9