Прагмы для работы с файлами

File

Тип значения По умолчанию Статическая /
динамическая
Два или три строковых аргумента — алиас, URL и опциональное имя токена Статическая

Приложить файл к запросу по URL. Использовать приложенные файлы можно с помощью встроенных функций FilePath и FileContent. Данная PRAGMA является универсальной альтернативой прикладыванию файлов с использованием встроенных механизмов веб- или консольного клиентов.

Пример:

-- Прикрепляем файл из Кипариса.
PRAGMA File('file.txt', 'yt://<cluster-name>/tmp/my-file.txt');

SELECT "Content of "
  || FilePath("file.txt")
  || ":\n"
  || FileContent("file.txt");

Сервис YQL оставляет за собой право кешировать находящиеся за URL файлы на неопределённый срок, поэтому при значимом изменении находящегося за ней содержимого настоятельно рекомендуется модифицировать URL за счёт добавления/изменения незначащих параметров.

При указании имени токена его значение будет использоваться для обращения к целевой системе.

FileOption

Тип значения По умолчанию Статическая /
динамическая
Три строковых аргумента — алиас, ключ, значение Статическая

Установить для указанного файла опцию по заданному ключу в заданное значение. Файл с этим алиасом уже должен быть объявлен через PRAGMA File или приложен к запросу.

Поддерживаемые на данный момент опции:

Ключ Диапазон значений Описание
bypass_artifact_cache true/false Управляет кешированием

Пример:

PRAGMA FileOption("<file-name>", "bypass_artifact_cache", "true");

Library

Тип значения По умолчанию Статическая /
динамическая
Один или два аргумента — имя файла и опциональный URL Статическая

Интерпретировать указанный приложенный файл как библиотеку, из которой можно делать IMPORT. Тип синтаксиса библиотеки определяется по расширению файла:

  • .sql для YQL диалекта SQL (рекомендуется);
  • .yqls для s-expressions.

Пример с приложенным файлом к запросу:

PRAGMA library("a.sql");
IMPORT a SYMBOLS $x;
SELECT $x;

В случае указания URL библиотека скачивается с него, а не с предварительного приложенного файла, как в следующем примере:

PRAGMA library("a.sql","https://raw.githubusercontent.com/ytsaurus/ytsaurus/refs/heads/main/yt/docs/code-examples/yql/pragma-library-example");
IMPORT a SYMBOLS $x;
SELECT $x;

При этом можно использовать подстановку текстовых параметров в URL:

DECLARE $_ver AS STRING; -- "pragma-library-example"
PRAGMA library("a.sql","https://raw.githubusercontent.com/ytsaurus/ytsaurus/refs/heads/main/yt/docs/code-examples/yql/{$_ver}");
IMPORT a SYMBOLS $x;
SELECT $x;

Package

Тип значения По умолчанию Статическая /
динамическая
Два или три аргумента — имя пакета, URL и опциональный токен Статическая

Приложить иерархический набор файлов к запросу по URL, интерпретируя их в качестве пакета с указанным именем — взаимосвязанного набора библиотек.

Имя пакета ожидается в формате project_name.package_name; из библиотек пакета в дальнейшем можно делать IMPORT с именем модуля вида pkg.project_name.package_name.maybe.nested.module.name.

Пример для пакета с плоской иерархией, состоящего из двух библиотек — foo.sql и bar.sql:

PRAGMA package("project.package", "/path/to/package");
IMPORT pkg.project.package.foo SYMBOLS $foo;
IMPORT pkg.project.package.bar SYMBOLS $bar;
SELECT $foo, $bar;

При этом можно использовать подстановку текстовых параметров в URL:

DECLARE $_path AS STRING; -- "path"
PRAGMA package("project.package", "{$_path}/to/package");
IMPORT pkg.project.package.foo SYMBOLS $foo;
IMPORT pkg.project.package.bar SYMBOLS $bar;
SELECT $foo, $bar;

OverrideLibrary

Тип значения По умолчанию Статическая /
динамическая
Один аргумент — имя файла Статическая

Интерпретировать указанный приложенный файл как библиотеку и перекрыть ей одну из библиотек пакета.

Имя файла ожидается в формате project_name/package_name/maybe/nested/module/name.EXTENSION, поддерживаются аналогичные PRAGMA Library расширения.

Пример:

PRAGMA package("project.package", "/path/to/package");
PRAGMA override_library("project/package/maybe/nested/module/name.sql");

IMPORT pkg.project.package.foo SYMBOLS $foo;
SELECT $foo;

Важно

Для PRAGMA Package поддерживаются только ссылки на директории на YTsaurus кластерах.

Предыдущая