Yandex.Cloud
  • Сервисы
  • Почему Yandex.Cloud
  • Сообщество
  • Решения
  • Тарифы
  • Документация
  • Связаться с нами
Подключиться
Yandex Database
  • Начало работы
    • Обзор
    • Создание базы данных
    • YQL
      • Работа с данными
      • Работа с YDB CLI
      • Работа с YDB SDK
    • Document API
      • Работа с данными
      • Работа с инструментами AWS
        • Настройка окружения
  • Пошаговые инструкции
    • Работа с YDB CLI
      • Структура и описание команд YDB CLI
      • Получение информации об объекте схемы
      • Потоковое чтение таблицы
      • Работа со вторичными индексами
    • Использование плана запроса и AST
    • Управление базами данных
    • Подключение к базе данных
    • Управление таблицами
    • Чтение и запись данных
    • Работа со вторичными индексами
  • Работа с SDK
  • Концепции
    • Обзор
    • Модель данных и схема
    • Режимы работы Serverless и Dedicated
    • Типы данных
    • Транзакции
    • Вторичные индексы
    • Time to Live (TTL)
    • Термины и определения
    • Квоты и лимиты
  • Управление доступом
  • Правила тарификации
    • Обзор
    • Бессерверный режим
    • Режим с выделенными инстансами
  • Рекомендации
    • Проектирование схемы
    • Партицирование таблиц
    • Вторичные индексы
    • Постраничный вывод
    • Загрузка больших объемов данных
    • Использование таймаутов
  • YDB API и справочник
    • Ограничения базы данных
    • Обработка ошибок в API
  • HTTP API, совместимый с Amazon DynamoDB
    • Справочник API
      • Все методы
      • Actions
        • BatchGetItem
        • BatchWriteItem
        • CreateTable
        • DeleteItem
        • DeleteTable
        • DescribeTable
        • GetItem
        • ListTables
        • PutItem
        • Query
        • Scan
        • TransactGetItems
        • TransactWriteItems
        • UpdateItem
      • Общие ошибки
  • Справочник YQL
    • Обзор
    • Типы данных
      • Простые
      • Опциональные
      • Контейнеры
      • Специальные
    • Синтаксис
      • Неподдерживаемые конструкции
      • Работа с текстовым представлением типов данных
      • Выражения
      • CREATE TABLE
      • DROP TABLE
      • INSERT INTO
      • UPSERT INTO
      • REPLACE INTO
      • UPDATE
      • DELETE
      • SELECT
      • GROUP BY
      • JOIN
      • FLATTEN
      • ACTION
      • DISCARD
      • PRAGMA
      • DECLARE
      • OVER, PARTITION BY и WINDOW
    • Встроенные функции
      • Базовые
      • Агрегатные
      • Оконные
      • Для работы со списками
      • Для работы со словарями
      • Для работы с JSON
      • Для работы со структурами
      • Для работы с типами
    • Предустановленные пользовательские функции
      • HyperScan
      • Pcre
      • Pire
      • Re2
      • String
      • Unicode
      • Datetime
      • Url
      • Ip
      • Digest
      • Math
      • Histogram
    • Работа с текстовым представлением типов данных
  • Туториал YQL
    • Обзор
    • Создание таблицы
    • Добавление данных в таблицу
    • Выборка данных из всех колонок
    • Выборка данных из определенных колонок
    • Сортировка и фильтрация
    • Агрегирование данных
    • Дополнительные условия выборки
    • Объединение таблиц с помощью JOIN
    • Вставка и модификация данных с помощью REPLACE
    • Вставка и модификация данных с помощью UPSERT
    • Вставка данных с помощью INSERT
    • Обновление данных с помощью UPDATE
    • Удаление данных
    • Добавление и удаление колонок
    • Удаление таблицы
  • Обслуживание
    • Резервное копирование
  • Диагностика
    • Системные таблицы
  • Вопросы и ответы
    • Общие вопросы
    • Ошибки
    • YQL
    • Все вопросы на одной странице
  • Публичные материалы
  1. Справочник YQL
  2. Встроенные функции
  3. Для работы со списками

Функции для работы со списками

  • ListCreate
  • AsList
  • ListLength
  • ListCollect
  • ListSort, ListSortAsc и ListSortDesc
  • ListCount
  • ListExtend
  • ListZip и ListZipAll
  • ListEnumerate
  • ListReverse
  • ListSkip
  • ListTake
  • ListIndexOf
  • ListMap, ListFlatMap и ListFilter
  • ListUniq
  • ListAny и ListAll
  • ListHas
  • ListMin, ListMax, ListSum и ListAvg
  • ListFromRange
  • ListReplicate
  • ListConcat
  • ListExtract
  • ListTakeWhile и ListSkipWhile
  • ListAggregate
  • ToDict и ToMultiDict
  • ToSet

ListCreate

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

Документация по формату описания типа.

Примеры

SELECT ListCreate(Tuple<String,Double?>);
SELECT ListCreate(OptionalType(DataType("String")));

AsList

Сконструировать список из одного или более аргументов.

Примеры

SELECT AsList(1, 2, 3, 4, 5);

ListLength

Количество элементов в списке.

Примеры

SELECT ListLength(list_column) FROM my_table;

ListCollect

Преобразовать ленивый список (строится, например, функциями ListFilter, ListMap, ListFlatMap) в энергичный. В отличие от ленивого списка, в котором каждый повторный проход заново вычисляет его содержимое, в энергичном списке содержимое списка строится сразу ценой большего потребления памяти.

Примеры

SELECT ListCollect(list_column) FROM my_table;

ListSort, ListSortAsc и ListSortDesc

Отсортировать список. По умолчанию выполняется сортировка по возрастанию (ListSort — алиас к ListSortAsc).

Аргументы:

  1. Список;
  2. Опциональное выражение для получения ключа сортировки из элемента списка (по умолчанию сам элемент).

Примеры

SELECT ListSortDesc(list_column) FROM my_table;
$list = AsList(
    AsTuple("x", 3),
    AsTuple("xx", 1),
    AsTuple("a", 2)
);

SELECT ListSort($list, ($x) -> {
    RETURN $x.1;
});

Примечание

Во втором примере использовалась лямбда функция.

ListCount

Количество элементов в списке за вычетом пустых (NULL).

Примеры

SELECT ListCount(list_column) FROM my_table;

ListExtend

Последовательно соединить списки с одинаковым типом элементов (конкатенация списков).

Примеры

SELECT ListExtend(
    list_column_1,
    list_column_2,
    list_column_3
) FROM my_table;

ListZip и ListZipAll

По входящим спискам построить список пар, содержащих соответствующие по индексу элементы списков (List<Tuple<first_list_element_type,second_list_element_type>>).

Длина возвращаемого списка определяется самым коротким списком для ListZip и самым длинным — для ListZipAll.
Когда более короткий список исчерпан, в качестве пары к элементам более длинного списка подставляется пустое значение (NULL) соответствующего optional типа.

Примеры

SELECT
    ListZip(list_column_1, list_column_2, list_column_3),
    ListZipAll(list_column_1, list_column_2)
FROM my_table;

ListEnumerate

Построить список пар (Tuple), содержащих номер элемента и сам элемент (List<Tuple<Uint64,list_element_type>>).

Примеры

SELECT ListEnumerate(list_column) FROM my_table;

ListReverse

Развернуть список.

Примеры

SELECT ListReverse(list_column) FROM my_table;

ListSkip

Возвращает копию списка с пропущенным указанным числом первых элементов.

Первый аргумент — исходный список, второй — сколько элементов пропустить.

Примеры

SELECT
    ListSkip(list_column, 3)
FROM my_table;

ListTake

Возвращает копию списка, состоящую из ограниченного числа элементов второго списка.

Первый аргумент — исходный список, второй — не больше скольки элементов с начала оставить.

Примеры

SELECT ListTake(list_column, 3) FROM my_table;

ListIndexOf

Ищет элемент с указанным значением в списке и при первом обнаружении возвращает его индекс. Отсчет индексов начинается с 0, а в случае отсутствия элемента возвращается NULL.

Примеры

SELECT
    ListIndexOf(list_column, 123)
FROM my_table;

ListMap, ListFlatMap и ListFilter

Применяют к каждому элементу списка указанную в качестве второго аргумента функцию. Различаются возвращаемым результатом:

  • ListMap — возвращает список с результатами;
  • ListFlatMap — возвращает список с результатами, но дополнительно пропускает «пустые» значения (NULL). В дополнение к этому, если результат для каждого элемента является списком, объединяет их (но только один уровень);
  • ListFilter — оставляет только те элементы, для которых функция вернула true.

Аргументы:

  1. Исходный список;
  2. Функции для обработки элементов, например:
    • Лямбда функция;
    • Module::Function - С++ UDF;
  3. Опциональные дополнительные аргументы, которые будут переданы указанной во втором аргументе функции.

ListUniq

Возвращает копию списка, в котором оставлен только уникальный набор элементов.

Примеры

SELECT
    ListUniq(list_column)
FROM my_table;

ListAny и ListAll

Для списка булевых значений возвращает true, если:

  • ListAny — хотя бы один элемент равен true;
  • ListAll — все элементы равны true.

В противном случае возвращает false.

Примеры

SELECT
    ListAll(bool_column),
    ListAny(bool_column)
FROM my_table;

ListHas

Возвращает true, если список содержит указанный элемент, в противном случае возвращает false.

Примеры

SELECT
    ListHas(list_column, "my_needle")
FROM my_table;

ListMin, ListMax, ListSum и ListAvg

Применяет соответствующую агрегатную функцию ко всем элементам списка числовых значений.

Примеры

SELECT
    ListMax(numeric_list_column) AS max,
    ListMin(numeric_list_column) AS min,
    ListSum(numeric_list_column) AS sum,
    ListAvg(numeric_list_column) AS avg
FROM my_table;

ListFromRange

Генерация последовательности чисел с указанным шагом. Аналог xrange в Python 2, но дополнительно с поддержкой чисел с плавающей точкой.

Аргументы:

  1. Начало
  2. Конец
  3. Шаг (опционально, по умолчанию 1)

Особенности:

  • Конец не включительный, т.е. ListFromRange(1,3) == AsList(1,2).
  • Тип элементов результатов выбирается как наиболее широкий из типов аргументов, например результатом ListFromRange(1, 2, 0.5) получится список Double.
  • Список является «ленивым», но при неправильном использовании всё равно может привести к потреблению большого объема оперативной памяти.
  • Если шаг положительный и конец меньше или равен началу, то список будет пустой.
  • Если шаг отрицательный и конец больше или равен началу, то список будет пустой.
  • Если шаг не положительный и не отрицательный (0 или NaN), то список будет пустой.

Примеры

SELECT
    ListFromRange(-2, 2), -- [-2, -1, 0, 1]
    ListFromRange(2, 1, -0.5); -- [2.0, 1.5]

ListReplicate

Создает список из нескольких копий указанного значения.

Обязательные аргументы:

  1. Значение;
  2. Число копий.

Примеры

SELECT ListReplicate(true, 3); -- [true, true, true]

ListConcat

Объединяет список строк в одну строку без разделителей.

См. String::JoinFromList, если нужны разделители.

Примеры

SELECT
    ListConcat(string_list_column)
FROM my_table;

ListExtract

По списку структур возвращает список содержащихся в них полей с указанным именем.

Примеры

SELECT
    ListExtract(struct_list_column, "MyMember")
FROM my_table;

ListTakeWhile и ListSkipWhile

ListTakeWhile выдает список от начала, пока предикат истинный, далее список заканчивается.

ListSkipWhile пропускает отрезок списка от начала, пока предикат истинный, далее выдает остаток список не обращая внимания на предикат.

Обязательные аргументы:

  1. Список;
  2. Предикат.

Примеры

$data = AsList(1, 2, 5, 1, 2, 5);

SELECT
    ListTakeWhile($data, ($x) -> {return $x <= 3}), -- [1, 2]
    ListSkipWhile($data, ($x) -> {return $x <= 3}); -- [5, 1, 2, 5]

ListAggregate

Применить фабрику агрегационных функций для переданного списка.
Если переданный список является пустым, то результат агрегации будет такой же, как для пустой таблицы: 0 для функции COUNT и NULL для других функций.
Если переданный список является опциональным и содержит значение NULL, то в результате также будет NULL.

Аргументы:

  1. Список;
  2. Фабрика агрегационных функций.

Примеры

SELECT ListAggregate(AsList(1, 2, 3), AGGREGATION_FACTORY("Sum")); -- 6

ToDict и ToMultiDict

Преобразуют список из кортежей с парами ключ-значение в словарь. В случае конфликтов по ключам во входном списке ToDict оставляет первое значение, а ToMultiDict — собирает из всех значений список.

Таким образом:

  • ToDict из List<Tuple<K, V>> делает Dict<K, V>
  • ToMultiDict из List<Tuple<K, V>> делает Dict<K, List<V>>

Также поддерживаются опциональные списки, что приводит к опциональному словарю в результате.

Примеры

SELECT
    ToDict(tuple_list_column)
FROM my_table;

ToSet

Преобразует список в словарь, в котором ключи являются уникальными элементами этого списка, а значения отсутствуют и имеют тип Void. Для списка List<T> тип результата будет Dict<T, Void>.
Также поддерживается опциональный список, что приводит к опциональному словарю в результате.

Примеры

SELECT
    ToSet(list_column)
FROM my_table;
В этой статье:
  • ListCreate
  • AsList
  • ListLength
  • ListCollect
  • ListSort, ListSortAsc и ListSortDesc
  • ListCount
  • ListExtend
  • ListZip и ListZipAll
  • ListEnumerate
  • ListReverse
  • ListSkip
  • ListTake
  • ListIndexOf
  • ListMap, ListFlatMap и ListFilter
  • ListUniq
  • ListAny и ListAll
  • ListHas
  • ListMin, ListMax, ListSum и ListAvg
  • ListFromRange
  • ListReplicate
  • ListConcat
  • ListExtract
  • ListTakeWhile и ListSkipWhile
  • ListAggregate
  • ToDict и ToMultiDict
  • ToSet
Language
Вакансии
Политика конфиденциальности
Условия использования
© 2021 ООО «Яндекс.Облако»