INTEGRITY Документация

Операторы SELECT

Операторы SELECT используются для преобразования данных в Cloudflare Pipelines. Общий вид:

[WITH with_query [, ...]]
SELECT select_expr [, ...]
FROM from_item
[WHERE condition]

Конвейер выполняет один или несколько INSERT INTO sink SELECT ... FROM stream операторов. Чтобы записывать данные в несколько sink из одного pipeline, разделяйте операторы точкой с запятой. См. Несколько SQL-инструкций.

Предложение WITH

Секция WITH позволяет определять именованные подзапросы, на которые можно ссылаться в основном запросе. Это повышает читаемость запроса, разбивая сложные преобразования на отдельные шаги.

Синтаксис:

WITH query_name AS (subquery) [, ...]

Простой пример:

WITH filtered_events AS
    (SELECT user_id, event_type, amount
        FROM user_events WHERE amount > 50)
SELECT user_id, amount * 1.1 as amount_with_tax
FROM filtered_events
WHERE event_type = 'purchase';

Секция SELECT

Секция SELECT представляет собой список выражений, разделённых запятыми, с необязательными псевдонимами. Имена столбцов должны быть уникальными.

SELECT select_expr [, ...]

Примеры:

-- Select specific columns
SELECT user_id, event_type, amount FROM events

-- Use expressions and aliases
SELECT
    user_id,
    amount * 1.1 as amount_with_tax,
    UPPER(event_type) as event_type_upper
FROM events

-- Select all columns
SELECT * FROM events

Секция FROM

Секция FROM определяет источник данных для запроса. Это может быть имя таблицы или подзапрос. В качестве имени таблицы можно указать имя потока или таблицу, созданную в секции WITH.

FROM from_item

Таблицам можно присваивать псевдонимы:

SELECT e.user_id, e.amount
FROM user_events e
WHERE e.event_type = 'purchase'

Секция WHERE

Секция WHERE фильтрует данные с помощью булевых условий. Предикаты применяются к входным строкам.

WHERE condition

Примеры:

-- Filter by field value
SELECT * FROM events WHERE event_type = 'purchase'

-- Multiple conditions
SELECT * FROM events
WHERE event_type = 'purchase' AND amount > 50

-- String operations
SELECT * FROM events
WHERE user_id LIKE 'user_%'

-- Null checks
SELECT * FROM events
WHERE description IS NOT NULL

Оператор UNNEST

Оператор UNNEST преобразует массивы в несколько строк. Это полезно при обработке данных типа список.

Ограничения UNNEST:

Пример:

SELECT
    UNNEST([1, 2, 3]) as numbers
FROM events;

В результате получится:

+---------+
| numbers |
+---------+
|       1 |
|       2 |
|       3 |
+---------+

Несколько SQL-инструкций

Конвейер может содержать несколько INSERT операторов, разделённых точкой с запятой. Каждый оператор считывает данные из stream и записывает их в sink. Используйте несколько операторов, чтобы направлять события из одного stream в несколько sink в зависимости от их содержимого.

INSERT INTO purchases_sink
SELECT user_id, product_id, amount FROM events
WHERE event_type = 'purchase';

INSERT INTO signups_sink
SELECT user_id, created_at FROM events
WHERE event_type = 'signup';

Чтобы указать несколько операторов через Wrangler CLI, передайте файл с флагом --sql-file флаг:

npx wrangler pipelines create my-pipeline --sql-file pipeline.sql

Практический пример см. в Распределение stream по нескольким таблицам Iceberg.