1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
# EXPORT и IMPORT
Механизм для выноса части запроса в отдельный приложенный файл. Чтобы воспользоваться механизмом, необходимо выставить прагму:
* [PRAGMA Library](pragma.md#library) — помечает приложенный файл как доступный для импорта.
## EXPORT
В `EXPORT $my_symbol1, $my_symbol2, ...;` перечисляется список именованных выражений в библиотеке, доступных для импорта.
## IMPORT
`IMPORT my_library SYMBOLS $my_symbol1, $my_symbol2, ...;` делает перечисленные именованные выражения доступными для использования ниже.
{% note info %}
В библиотеку могут быть вынесены [лямбды](expressions.md#lambda), [действия](action.md), [именованные подзапросы](subquery.md), константы и выражения, но __не подзапросы и не агрегатные функции__.
{% endnote %}
{% note warning %}
Файл, на который ссылается [PRAGMA Library](pragma.md#library), должен быть приложен к запросу. __Использовать для этой цели [PRAGMA File](pragma.md#file) нельзя__.
{% endnote %}
## Пример
my_lib.sql:
```yql
$Square = ($x) -> { RETURN $x * $x; };
$Sqrt = ($x) -> { RETURN Math::Sqrt($x); };
-- Агрегационные функции, создаваемые с помощью
-- AggregationFactory, удобно выносить в библиотеку
$Agg_sum = AggregationFactory("SUM");
$Agg_max = AggregationFactory("MAX");
EXPORT $Square, $Sqrt, $Agg_sum, $Agg_max;
```
Запрос:
```yql
PRAGMA Library("my_lib.sql");
IMPORT my_lib SYMBOLS $Square, $Sqrt, $Agg_sum, $Agg_max;
SELECT
$Square(2), -- 4
$Sqrt(4); -- 2
SELECT
AGGREGATE_BY(x, $Agg_sum), -- 5
AGGREGATE_BY(x, $Agg_max) -- 3
FROM (
SELECT 2 AS x
UNION ALL
SELECT 3 AS x
)
```
|