Работа с бакетами S3 (Yandex Object Storage)

При работе с Yandex Object Storage с помощью внешних источников данных удобно выполнять прототипирование, первоначальную настройку подключений к данным.

Пример запроса для чтения данных:

SELECT
    *
FROM
    object_storage.`*.tsv`
WITH
(
    FORMAT = "tsv_with_names",
    SCHEMA =
    (
        ts Uint32,
        action Utf8
    )
);

Список поддерживаемых форматов и алгоритмов сжатия данных для чтения данных в S3 (Yandex Object Storage), приведен в разделе Форматы данных и алгоритмы сжатия.

Модель данных

В Yandex Object Storage данные хранятся в файлах. Для чтения данных необходимо указать формат данных в файлах, сжатие, списки полей. Для этого используется следующее SQL-выражение:

SELECT
  <expression>
FROM
  <object_storage_connection_name>.`<file_path>`
WITH(
  FORMAT = "<file_format>",
  SCHEMA = (<schema_definition>),
  COMPRESSION = "<compression>")
WHERE
  <filter>;

Где:

Описание схемы данных

Описание схемы данных состоит из набора полей:

  • Названия поля.
  • Типа поля.
  • Признака обязательности данных.

Например, схема данных ниже описывает поле схемы с названием Year типа Int32 и требованием наличия этого поля в данных:

Year Int32 NOT NULL

Если поле данных помечено, как обязательное, NOT NULL, но это поле отсутствует в обрабатываемом файле, то работа с таким файлом будет завершена с ошибкой. Если поле помечено как необязательное, NULL, то при отсутствии поля в обрабатываемом файле не будет возникать ошибки, но поле при этом примет значение NULL.

Форматы путей к данным

В YDB поддерживаются следующие пути к данным:

Формат пути Описание Пример
Путь завершается символом / Путь к каталогу Путь /a адресует все содержимое каталога:
/a/b/c/d/1.txt
/a/b/2.csv
Путь содержит символ макроподстановки * Любые файлы, вложенные в путь Путь /a/*.csv адресует файлы в каталогах:
/a/b/c/1.csv
/a/2.csv
/a/b/c/d/e/f/g/2.csv
Путь не завершается символом / и не содержит символов макроподстановок Путь к отдельному файлу Путь /a/b.csv адресует конкретный файл /a/b.csv

Пример

Пример запроса для чтения данных из S3 (Yandex Object Storage):

SELECT
    *
FROM
    connection.`folder/filename.csv`
WITH(
    FORMAT = "csv_with_names",
    SCHEMA =
    (
        Year Int32,
        Manufacturer Utf8,
        Model Utf8,
        Price Double
    )
);

Где:

  • connection — название внешнего источника данных, ведущего на бакет S3 (Yandex Object Storage).
  • folder/filename.csv — путь к файлу в бакете S3 (Yandex Object Storage).
  • SCHEMA — описание схемы данных в файле.