Виртуализация файла Parquet в совместимом с S3 хранилище объектов с помощью PolyBase
Область применения: SQL Server 2022 (16.x)
SQL Server 2022 (16.x) может виртуализировать данные из файлов parquet. Этот процесс позволяет сохранять данные в исходном расположении, но при этом запрашивать их из экземпляра SQL Server, как любую таблицу. Эта функция использует соединители PolyBase и сокращает потребность в извлечении, преобразовании и загрузке (ETL).
В следующем примере мы виртуализируем файл parquet, хранящийся в хранилище объектов, совместимом с S3.
Дополнительные сведения о виртуализации данных см. в разделе Общие сведения о виртуализации данных с помощью PolyBase.
Необходимые компоненты
Чтобы использовать функции интеграции хранилища объектов, совместимых с S3, вам потребуются следующие средства и ресурсы:
- установленный компонент PolyBase для SQL Server;
- установленный SQL Server Management Studio (SSMS) или Azure Data Studio;
- совместимое с S3 хранилище;
- созданный контейнер S3. В SQL Server нельзя создавать и настраивать контейнеры.
- Пользователь () и секрет (
Access Key ID
Secret Key ID
) и этот пользователь известен вам. Они потребуются для проверки подлинности в конечной точке совместимого с S3 хранилища объектов. - Разрешение ListBucket для пользователя S3.
- Разрешение ReadOnly для пользователя S3.
- Необходимо настроить TLS. Предполагается, что все подключения будут безопасно передаваться по протоколу HTTPS, а не HTTP. Конечная точка будет проверяться с помощью сертификата, установленного на узле ОС SQL Server.
Разрешение
Чтобы прокси-пользователь считывал содержимое контейнера S3, пользователю необходимо разрешить выполнить следующие действия для конечной точки S3:
- ListBucket;
- ReadOnly.
Предварительная настройка
- Включите PolyBase в
sp_configure
:
exec sp_configure @configname = 'polybase enabled', @configvalue = 1
;
RECONFIGURE
;
exec sp_configure @configname = 'polybase enabled'
;
- Перед созданием учетных данных на уровне базы данных в базе данных должен быть главный ключ для защиты учетных данных. Дополнительные сведения см. в статье CREATE MASTER KEY.
Создание учетных данных на уровне базы данных
Следующий пример скрипта создает учетные данные на уровне базы данных s3-dc
в исходной пользовательской базе данных в SQL Server. Дополнительные сведения см. в разделе Инструкция CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL).
IF NOT EXISTS(SELECT * FROM sys.credentials WHERE name = 's3_dc')
BEGIN
CREATE DATABASE SCOPED CREDENTIAL s3_dc
WITH IDENTITY = 'S3 Access Key',
SECRET = '<AccessKeyID>:<SecretKeyID>' ;
END
Проверьте новые учетные данные на уровне базы данных с помощью sys.database_scoped_credentials (Transact-SQL):
SELECT * FROM sys.database_scoped_credentials;
создайте внешний источник данных;
Следующий пример скрипта создает внешний источник данных s3_ds
в исходной пользовательской базе данных в SQL Server. Внешний источник данных ссылается на учетные данные на уровне базы данных s3_dc
. Дополнительные сведения см. в разделе CREATE EXTERNAL DATA SOURCE.
CREATE EXTERNAL DATA SOURCE s3_ds
WITH
( LOCATION = 's3://<ip_address>:<port>/'
, CREDENTIAL = s3_dc
);
GO
Проверьте новый внешний источник данных с помощью sys.external_data_sources.
SELECT * FROM sys.external_data_sources;
Виртуальные РАЗМЕЩЕННЫе URL-адреса
Некоторые системы хранения, совместимые с S3 (например, Amazon Web Services), используют virtual_hosted
URL-адреса стилей для реализации структуры папок в контейнере S3. Добавьте следующее CONNECTION_OPTIONS
, чтобы разрешить создание внешних таблиц, указывающих на расположения папок в контейнере S3, например CONNECTION_OPTIONS = '{"s3":{"url_style":"virtual_hosted"}}'
.
Без этого CONNECTION_OPTIONS
параметра при запросе внешних таблиц, указывающих на папку, может возникнуть следующая ошибка:
Msg 13807, Level 16, State 1, Line 23
Content of directory on path '/<folder_name>/' cannot be listed.
SELECT из файла Parquet с помощью OPENROWSET
В следующем примере показано использование T-SQL для запроса файла parquet, хранящегося в хранилище объектов, совместимом с S3, с помощью запроса OPENROWSET. Дополнительные сведения см. в разделе OPENROWSET (Transact-SQL).
Так как это файл Parquet, автоматически выполняются две важные вещи.
- SQL Server считывает схему из самого файла, поэтому не нужно определять таблицу, столбцы или типы данных.
- Нет необходимости объявлять тип сжатия для считываемого файла.
SELECT *
FROM OPENROWSET
( BULK '/<bucket>/<parquet_folder>'
, FORMAT = 'PARQUET'
, DATA_SOURCE = 's3_ds'
) AS [cc];
Запрос хранилища объектов, совместимых с S3, через внешнюю таблицу
В следующем примере показано использование T-SQL для запроса файла parquet, хранящегося в хранилище объектов, совместимом с S3, с помощью запроса внешней таблицы. В примере используется относительный путь в внешнем источнике данных.
CREATE EXTERNAL FILE FORMAT ParquetFileFormat WITH(FORMAT_TYPE = PARQUET);
GO
CREATE EXTERNAL TABLE Region (
r_regionkey BIGINT,
r_name CHAR(25),
r_comment VARCHAR(152) )
WITH (LOCATION = '/region/', DATA_SOURCE = 's3_ds',
FILE_FORMAT = ParquetFileFormat);
GO
SELECT * FROM [Region];
Дополнительные сведения см. в разделе:
Ограничения
- Запросы SQL Server во внешней таблице, поддерживаемой хранилищем, совместимом с S3, ограничены 1000 объектами на префикс. Это связано с тем, что список объектов, совместимый с S3, ограничен 1000 ключами объектов на префикс.
- Для хранилища объектов, совместимого с S3, клиенты не могут создавать идентификатор ключа доступа с символом
:
в нем. - Длина URL-адреса ограничена 259 символами. Это означает, что количество символов для
s3://<hostname>/<objectkey>
не должно превышать 259. Количествоs3://
входит в это ограничение, поэтому длина пути не может превышать 259 – 5 = 254 символа. - Имя учетных данных SQL ограничено 128 символами в формате UTF-16.
- Созданное имя учетных данных должно содержать имя контейнера, если только эти учетные данные не предназначены для нового внешнего источника данных.
- Идентификатор ключа доступа и идентификатор секретного ключа должны содержать только буквы и цифры.
Следующие шаги
- Дополнительные сведения о PolyBase см. в разделе Обзор PolyBase SQL Server
- Настройка PolyBase для доступа к внешним данным в хранилище объектов, совместимом с S3