Чтение из бакетов 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
.