Чтение из бакетов S3 через внешние таблицы
Иногда одни и те же запросы к данным нужно выполнять регулярно. Чтобы не указывать все детали работы с этими данными при каждом вызове запроса, используйте режим с внешними таблицами. В этом случае запрос выглядит, как обычный запрос к таблицам YDB.
Пример запроса для чтения данных:
SELECT
*
FROM
s3_test_data
WHERE
version > 1
Создание внешней таблицы, ведущей на бакет S3-совместимого хранилища данных
Чтобы создать внешнюю таблицу, описывающую бакет S3, выполните следующий SQL-запрос. Запрос создает внешнюю таблицу с именем s3_test_data, в котором расположены файлы в формате CSV со строковыми полями key и value, находящиеся внутри бакета по пути test_folder, при этом для указания реквизитов подключения используется объект внешний источник данных bucket:
CREATE EXTERNAL TABLE s3_test_data (
key Utf8 NOT NULL,
value Utf8 NOT NULL
) WITH (
DATA_SOURCE="bucket",
LOCATION="folder",
FORMAT="csv_with_names",
COMPRESSION="gzip"
);
Где:
key, value- список колонок данных и их типов, список допустимых типов описан в разделе Поддерживаемые типы данных;bucket- имя внешнего источника данных к S3-совместимому хранилищу данных;folder- путь внутри бакета с данными. Поддерживаются подстановочные знаки*,?,{ ... }; подробнее в разделе;csv_with_names- один из допустимых типов хранения данных;gzip- один из допустимых алгоритмов сжатия.
Также при создании внешних таблиц поддерживаются параметры форматирования.
Модель данных
Чтение данных с помощью внешних таблиц из S3-совместимого хранилища данных выполняется с помощью обычных SQL-запросов, как к обычной таблице.
SELECT
<expression>
FROM
s3_test_data
WHERE
<filter>;
Ограничения
При работе с бакетами S3-совместимого хранилища данных существует ряд ограничений.
Ограничения:
- Поддерживаются только запросы чтения данных -
SELECTиINSERT, остальные виды запросов не поддерживаются. -
Если значение даты, хранящейся во внешнем источнике данных, находится вне допустимого для YDB диапазона (все используемые даты должны быть позднее 1970-01-01, но ранее 2105-12-31), в YDB такое значение будет преобразовано в
NULL.