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 не поддерживаются.