Spec-Zone.ru › DuckDB

Функции query и query_table

Функции query и query_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, которая вычисляет min и max для каждого столбца в таблице:

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
year 2017 2017
quarter 1 3
month 1 9

© Copyright 2018–2024 Stichting DuckDB Foundation
Licensed under the MIT License.
https://duckdb.org/docs/guides/sql_features/query_and_query_table_functions.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API