Spark SQL

С таблицами YTsaurus возможно работать из Spark SQL. Этот диалект SQL используется для запросов в Query tracker с использованием SPYT.

При работе с YTsaurus в качестве идентификатора базы данных используется yt, а в качестве файловой системы — ytTable:/. Второе можно опускать, поэтому приведенная пара запросов эквивалентна:

SELECT `key` FROM yt.`ytTable:///home/service/data`
SELECT `key` FROM yt.`//home/service/data`

Запросы в другие системы осуществляются так же, как в оригинальном Spark:

SELECT * FROM json.`s3a://bucket/file.json`

Примечание

Spark не поддерживает запуск множества последовательных команд в одном запросе. Все команды (CREATE, INSERT и т. д.) необходимо выполнять отдельными запросами.

Работа с таблицами

Создание таблицы:

CREATE TABLE yt.`//tmp/users` (
    id INT,
    name STRING
) USING yt
CREATE TABLE yt.`//tmp/users_copy`
    USING yt AS
    SELECT * FROM yt.`//tmp/users`

Удаление таблицы:

DROP TABLE yt.`//tmp/users`

При исполнении запроса метаинформация о таблицах кешируется в память Spark-сессии для переиспользования при последующих обращениях. Если после запроса в таблице происходили изменения сторонними процессами, тогда информация в кеше становится неактуальной, а новые запросы будут выполняться с ошибками. В таком случае необходимо вручную сбрасывать кеш:

CREATE TABLE yt.`//tmp/users` (id INT, name STRING) USING yt
-- Любые изменения таблицы сторонними процессами
REFRESH TABLE yt.`//tmp/users` -- Сброс кеша
SELECT * FROM yt.`//tmp/users`

Работа с данными

Чтение статических таблиц:

SELECT t1.value
    FROM yt.`//home/service/table1` t1
    JOIN yt.`//home/service/table2` t2
    ON t1.id == t2.id

Для чтения динамических таблиц необходимо указать временную метку среза данных:

SELECT * FROM yt.`//home/service/dynamic_data/@latest_version`
SELECT * FROM yt.`//home/service/dynamic_data/@timestamp_XXX`

Вставки в существующую таблицу:

INSERT INTO TABLE yt.`//home/service/copy`
    SELECT * FROM yt.`//home/service/origin`
INSERT OVERWRITE TABLE yt.`//home/service/copy`
    VALUES (-1, "Existed data is overwritten")

Запросы обновления в Apache Spark не поддерживаются.

Предыдущая
Следующая