Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Доступны в регионе
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • AI Studio
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Партнёрская программа
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Истории успеха
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Документация
  • Блог
Проект Яндекса
© 2025 ТОО «Облачные Сервисы Казахстан»
Yandex Object Storage
    • Обзор
    • Бакет
    • Объект
    • Версионирование бакета
    • Блокировка версии объекта (object lock)
    • Частичное изменение объекта
    • Шифрование
    • Жизненные циклы объектов
    • CORS
    • Хостинг статических сайтов
    • Подписанные (pre-signed) URL
    • Составная (multipart) загрузка
    • Список управления доступом (ACL)
    • Политика доступа (Bucket Policy)
    • Загрузка файла через HTML-форму
    • Класс хранилища
    • Механизм логирования действий с бакетом
    • Резервное копирование
    • Протокол TLS
    • Метки
    • Язык запросов S3 Select
    • Квоты и лимиты
  • Правила тарификации
  • Справочник Terraform
  • Метрики Monitoring
  • Аудитные логи Audit Trails
  • Логи бакета
  • История изменений
  • Вопросы и ответы
  • Обучающие курсы

В этой статье:

  • SELECT
  • FROM
  • WHERE
  • LIMIT
  • Доступ к атрибутам
  • Чувствительность к регистру имен заголовков и атрибутов
  • Зарезервированные ключевые слова
  • Скалярные выражения
  • Агрегатные функции
  • Примеры использования
  1. Концепции
  2. Язык запросов S3 Select

Синтаксис языка запросов S3 Select

Статья создана
Yandex Cloud
Обновлена 31 марта 2025 г.
  • SELECT
  • FROM
  • WHERE
  • LIMIT
  • Доступ к атрибутам
  • Чувствительность к регистру имен заголовков и атрибутов
  • Зарезервированные ключевые слова
  • Скалярные выражения
  • Агрегатные функции
  • Примеры использования

Примечание

Чтобы получить возможность отправлять запросы на языке S3 Select, обратитесь в техническую поддержку.

Язык S3 Select использует только оператор SELECT из стандартного языка SQL. Поддерживаются следующие стандартные ANSI-предложения:

  • SELECT
  • FROM
  • WHERE
  • LIMIT

Вложенные запросы и соединения не поддерживаются.

SELECTSELECT

Данные объекта, которые возвращает запрос: имена столбцов, функций и выражений.

Синтаксис:

SELECT *
SELECT projection [ AS column_alias | column_alias ] [, ...]

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

FROMFROM

Источник данных для SELECT. В качестве аргумента принимает имя объекта Object Storage.

Синтаксис:

FROM S3Object
FROM S3Object alias
FROM S3Object AS alias

Как и в стандартном языке SQL, предложение FROM создает строки, которые фильтруются в предложении WHERE и возвращаются в виде списка данных, указанных в SELECT.

WHEREWHERE

Фильтрует строки на основе заданного условия. Условие задается в виде логического выражения. В результате возвращаются только те строки, для которых значение выражения равно TRUE.

Синтаксис:

WHERE condition

LIMITLIMIT

Ограничивает количество записей, которые возвращает запрос.

Синтаксис:

LIMIT number

Доступ к атрибутамДоступ к атрибутам

Предложения SELECT и WHERE могут ссылаться на запись данных с помощью атрибутов файлов.

Атрибуты CSV-файлов:

  • Номера столбцов.

    Вы можете ссылаться в запросе на определенный столбец с помощью имени _N, где N — порядковый номер столбца в файле.

    Нумерация столбцов начинается с 1. Например, первый столбец будет иметь имя _1, второй — _2.

    Имя столбца может быть задано как в формате _N, так и alias._N. Например, имена _2 и myAlias._2 являются допустимыми для ссылки на столбец в предложениях SELECT и WHERE.

  • Заголовки столбцов.

    Как и в традиционном SQL, в выражениях внутри предложений SELECT и WHERE можно ссылаться на столбцы с помощью имени заголовка — alias.column_name или column_name.

Атрибуты JSON-файлов:

  • Документ.

    Получить доступ к полям JSON-файла можно по их имени — alias.name.

Примеры

Образец данных в формате JSON:

{"timestamp":"2021-02-26T01:27:19Z","object_key":"name1","status":404,"request_time":16}
{"timestamp":"2021-02-26T01:27:19Z","object_key":"name2","status":200,"request_time":12}
{"timestamp":"2021-02-26T01:27:20Z","object_key":"name3","status":200,"request_time":6}

Запрос:

SELECT "timestamp", object_key, request_time FROM S3Object WHERE status >= 400

Результат:

{"timestamp":"2021-02-26T01:27:19Z","object_key":"name1","request_time":16}

Запрос:

SELECT * FROM S3Object WHERE request_time >= 10

Результат:

{"timestamp":"2021-02-26T01:27:19Z","object_key":"name1","status":404,"request_time":16}
{"timestamp":"2021-02-26T01:27:19Z","object_key":"name2","status":200,"request_time":12}

Чувствительность к регистру имен заголовков и атрибутовЧувствительность к регистру имен заголовков и атрибутов

Чтобы указать, что заголовки столбцов CSV-файлов или атрибуты JSON-файлов чувствительны к регистру, используются двойные кавычки. Заголовки и атрибуты объектов без двойных кавычек не будут чувствительны к регистру. Ошибка запроса в таком случае может возникнуть при неоднозначности имени поля.

Примеры

  1. Запрашиваемый объект имеет заголовок/атрибут NAME.

    Если чувствительность к регистру не обозначена, запрос успешно возвращает данные объекта:

    SELECT s.name FROM S3Object s
    

    Если заключить заголовок/атрибут в двойные кавычки, запрос приводит к ошибке с кодом 400 MissingHeaderName:

    SELECT s."name" FROM S3Object s
    
  2. Запрашиваемый объект имеет один заголовок/атрибут с именем NAME и другой заголовок/атрибут с именем name.

    Если чувствительность к регистру не обозначена, возникает неоднозначность в выборе заголовка/атрибута. Запрос при этом приводит к ошибке с кодом 400 AmbiguousFieldName:

    SELECT s.name FROM S3Object s
    

    Если заключить заголовок/атрибут в двойные кавычки, запрос успешно возвращает данные объекта:

    SELECT s."NAME" FROM S3Object s
    

Зарезервированные ключевые словаЗарезервированные ключевые слова

S3 Select имеет набор зарезервированных ключевых слов. Они необходимы для запуска SQL-выражений, используемых при запросе содержимого объекта. К зарезервированным ключевым словам относятся, например, имена функций, названия типов данных и операторы.

В некоторых случаях пользовательские термины могут совпадать с зарезервированным ключевым словом. Для избежания конфликта укажите с помощью двойных кавычек, что вы намеренно используете определенный термин. В противном случае возникнет синтаксическая ошибка с кодом 400.

Примеры

Запрашиваемый объект имеет заголовок/атрибут с именем CAST, который входит в список зарезервированных ключевых слов.

Если определенный пользователем заголовок/атрибут заключен в двойные кавычки, запрос успешно возвращает данные объекта:

SELECT s."CAST" FROM S3Object s

Если определенный пользователем заголовок/атрибут не заключен в двойные кавычки, возникает конфликт с зарезервированным ключевым словом. Запрос при этом приводит к синтаксической ошибке с кодом 400:

SELECT s.CAST FROM S3Object s

Скалярные выраженияСкалярные выражения

В предложениях WHERE и SELECT у вас могут быть скалярные выражения SQL, которые возвращают скалярные значения. Они могут иметь следующий вид:

  • literal. Литерал SQL. Литерал — это явное числовое, символьное, строковое или логическое значение (константа), не представленное идентификатором.

  • column_reference. Ссылка на столбец вида column_name или alias.column_name. Используется для обращения к столбцу с помощью имени заголовка.

    Пример:

    SELECT city.name FROM S3Object city
    
  • unary_op expression. В этом выражении unary_op — унарный SQL-оператор. Унарные операторы выполняют операцию над одним операндом. К ним относится, например, унарный минус, который меняет знак числа.

    Пример:

    SELECT -5 FROM S3Object
    
  • expression binary_op expression. В этом выражении binary_op — бинарный SQL-оператор. Бинарные операторы выполняют операцию над двумя операндами. Например, к бинарным относятся арифметические и логические операторы, операторы сравнения.

    Примеры:

    SELECT x FROM S3Object WHERE x=3
    
    SELECT result FROM S3Object WHERE result>=1 AND result<=5
    
  • func_name. В этом выражении func_name — имя скалярной функции для вызова.

    Пример:

    SELECT CAST(status AS INT) FROM S3Object
    
  • expression [ NOT ] BETWEEN expression AND expression. Проверка значения на вхождение в диапазон.

    Пример:

    SELECT x FROM S3Object WHERE x BETWEEN -1 AND 1
    

Агрегатные функцииАгрегатные функции

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

Поддерживаются следующие функции:

Функция Описание Тип на входе Тип на выходе
COUNT Количество строк Любой INT
MIN Минимум среди значений INT или DECIMAL Как на входе
MAX Максимум среди значений INT или DECIMAL Как на входе
SUM Сумма значений INT, FLOAT или DECIMAL Как на входе
AVG Среднее значение INT, FLOAT или DECIMAL Если на входе INT — DECIMAL,
в остальных случаях — как на входе

Примеры:

JSON
CSV

Образец данных:

{"timestamp":"2021-02-26T01:27:19Z","object_key":"name1","status":404,"request_time":16}
{"timestamp":"2021-02-26T01:27:19Z","object_key":"name2","status":200,"request_time":12}
{"timestamp":"2021-02-26T01:27:20Z","object_key":"name3","status":200,"request_time":6}

Запрос с использованием всех агрегатных функций:

SELECT
  COUNT(*) AS "count",
  MIN(request_time) AS "min",
  MAX(request_time) AS "max",
  SUM(request_time) AS "sum",
  AVG(request_time) AS "avg"
FROM S3Object
WHERE status = 200

Результат:

{"count": 2, "min": 6, "max": 12, "sum": 18, "avg": 9.0}

Образец данных:

timestamp,object_key,status,request_time
2021-02-26T01:27:19Z,name1,404,16
2021-02-26T01:27:19Z,name2,200,12
2021-02-26T01:27:20Z,name3,200,6

Запрос с использованием всех агрегатных функций:

SELECT
  COUNT(*) AS "count",
  MIN(CAST(request_time AS FLOAT)) AS "min",
  MAX(CAST(request_time AS FLOAT)) AS "max",
  SUM(CAST(request_time AS FLOAT)) AS "sum",
  AVG(CAST(request_time AS FLOAT)) AS "avg"
FROM S3Object
WHERE status = '200'

Так как все значения во входных CSV-файлах считаются строками, их нужно приводить к нужным типам с помощью функции CAST.

Результат:

count,min,max,sum,avg
2,6,12,18,9.0

Примеры использованияПримеры использования

  • Получение статистики запросов к объекту с использованием S3 Select
  • Получение статистики посещения сайта с использованием S3 Select
  • Анализ поресурсной детализации расходов

Была ли статья полезна?

Предыдущая
Метки
Следующая
Квоты и лимиты
Проект Яндекса
© 2025 ТОО «Облачные Сервисы Казахстан»