Работа с бакетами 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>;
Где:
object_storage_connection_name
— название внешнего источника данных, ведущего на бакет с S3 (Yandex Object Storage).file_path
— путь к файлу или файлам внутри бакета. Поддерживаются wildcards*
, подробнее в разделе.file_format
— формат данных в файлах.schema_definition
— описание схемы хранимых данных в файлах.compression
— формат сжатия файлов.
Описание схемы данных
Описание схемы данных состоит из набора полей:
- Названия поля.
- Типа поля.
- Признака обязательности данных.
Например, схема данных ниже описывает поле схемы с названием 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
— описание схемы данных в файле.