Бөлісу құралы:


SqlPackage с данными в файлах Parquet (предварительная версия)

В этой статье рассматривается поддержка SqlPackage для взаимодействия с данными, хранящимися в Azure Blob Storage, которые находятся в формате Parquet.

При извлечении схема базы данных (.dacpac файл) записывается в локальный клиент SqlPackage, а данные записываются в Azure Blob Storage в формате Parquet. Данные хранятся в отдельных папках с двумя именами таблиц. CREATE EXTERNAL TABLE AS SELECT (CETAS) используется для записи файлов в хранилище BLOB-объектов Azure.

При публикации схема базы данных (.dacpac-файл) считывается из локального клиента, на котором работает SqlPackage, и данные считываются из хранилища BLOB-объектов Azure или записываются в него в формате Parquet.

Для SQL Server 2022 и Управляемого экземпляра Azure SQL в SqlPackage 162.1.176 и более поздних версиях доступна предварительная поддержка функций извлечения и публикации с данными в файлах Parquet в хранилище BLOB-объектов Azure. Для базы данных SQL Azure поддержка функции публикации в предварительной версии доступна в SqlPackage 170.1.61 и более поздних версиях. SQL Server 2019 и более ранних версий не поддерживается. Действия импорта и экспорта по-прежнему доступны для SQL Server, Управляемого экземпляра SQL Azure и базы данных SQL Azure. Поддержка файлов Parquet в хранилище BLOB-объектов Azure по-прежнему общедоступна для Azure Synapse Analytics.

В базах данных SQL, размещенных в Azure, операции извлечения и публикации с файлами Parquet обеспечивают более высокую производительность по сравнению с операциями импорта и экспорта с помощью .bacpac-файлов во многих сценариях.

Извлечение (экспорт данных)

Чтобы экспортировать данные из базы данных в хранилище Blob-объектов Azure, используется действие извлечения SqlPackage со следующими свойствами:

  • /p:AzureStorageBlobEndpoint
  • /p:AzureStorageContainer
  • /p:AzureSharedAccessSignatureToken или /p:AzureStorageKey (не поддерживается для использования с SQL Server)

Снимок экрана: сводка извлечения данных из базы данных с DACPAC-файлом, записанным в среду SqlPackage, и табличными данными, записанными в хранилище BLOB-объектов Azure в файлах parquet.

Доступ базы данных к контейнеру BLOB-хранилища разрешен с помощью ключа учетной записи хранения. Схема базы данных (DACPAC-файл) записывается в локальный клиент, на котором выполняется SqlPackage, и данные записываются в хранилище BLOB-объектов Azure в формате Parquet.

Параметр /p:AzureStorageRootPath необязателен, который задает корневой путь хранилища в контейнере. Без этого свойства путь по умолчанию имеет значение servername/databasename/timestamp/. Данные хранятся в отдельных папках с двумя именами таблиц. Количество файлов, созданных для каждой таблицы, зависит от MAXDOP и доступных ядер SQL во время экспорта.

Наконец, свойство /p:TableData указывает, какие таблицы экспортируют данные. Укажите имя таблицы со скобками или без них, окружающими части имени, в формате schema_name.table_identifier. Это свойство можно указать несколько раз, чтобы указать несколько таблиц.

Example

В следующем примере извлекается база данных с именем databasename с сервера с именем yourserver в локальный файл с именем databaseschema.dacpac в текущем каталоге. Данные записываются в контейнер с именем containername в учетной записи хранения с именем storageaccount с помощью ключа учетной записи хранения с именем storageaccountkey. Данные записываются в путь по умолчанию servername/databasename/timestamp/ в контейнере.

SqlPackage /Action:Extract /SourceServerName:yourserver /SourceDatabaseName:databasename /TargetFile:databaseschema.dacpac /p:AzureStorageBlobEndpoint=https://storageaccount.blob.core.windows.net /p:AzureStorageContainer=containername /p:AzureStorageKey=storageaccountkey

См. извлечение SqlPackage для получения дополнительных примеров доступных типов проверки подлинности.

Публикация (импорт данных)

Чтобы импортировать данные из файлов Parquet в Azure Blob Storage в базу данных, используется действие SqlPackage "опубликовать" со следующими свойствами:

  • /p:AzureStorageBlobEndpoint
  • /p:AzureStorageContainer
  • /p:AzureStorageRootPath
  • /p:AzureSharedAccessSignatureToken или /p:AzureStorageKey (не поддерживается для использования с SQL Server)

Доступ к публикации можно авторизовать с помощью ключа учетной записи для хранения или маркера разделенного доступа (SAS). Схема базы данных (DACPAC-файл) считывается из локального клиента, работающего под управлением SqlPackage, и данные считываются из хранилища BLOB-объектов Azure в формате Parquet.

Example

В следующем примере база данных с именем databasename публикуется на сервере с именем yourserver из локального файла с именем databaseschema.dacpac в текущем каталоге. Данные считываются из контейнера с именем containername в учетной записи хранения с именем storageaccount с помощью ключа учетной записи хранения с именем storageaccountkey. Данные считываются из отдельных папок для каждой таблицы по пути yourserver/databasename/10-19-2023_11-09-56/ в контейнере.

SqlPackage /Action:Publish /SourceFile:databaseschema.dacpac /TargetServerName:yourserver /TargetDatabaseName:databasename /p:AzureStorageBlobEndpoint=https://storageaccount.blob.core.windows.net /p:AzureStorageContainer=containername  /p:AzureStorageKey=storageaccountkey /p:AzureStorageRootPath="yourserver/databasename/10-19-2023_11-09-56/"

Дополнительные примеры доступных типов проверки подлинности см. в публикации SqlPackage .

Limitations

PolyBase

Для SQL Server и Управляемого экземпляра SQL Azure PolyBase необходим для выполнения операций SqlPackage с файлами Parquet. Следующий запрос можно использовать для проверки включения PolyBase:

// configuration_id = 16397 is 'allow polybase export'
// configuration_id = 16399 is 'polybase enabled'
SELECT configuration_id, value_in_use FROM sys.configurations
WHERE configuration_id IN (16397, 16399)

Возможно, потребуется включить PolyBase или экспорт PolyBase. Для включения PolyBase в Управляемом экземпляре SQL Azure требуется PowerShell или Azure CLI. Перед внесением изменений конфигурации следует оценить, подходит ли включение PolyBase для вашей среды.

Типы таблиц и данных

Большинство типов данных поддерживаются для операций извлечения и публикации с файлами Parquet. Таблицы с неподдерживаемыми типами данных приводят к тому, что данные этой таблицы экспортируются в файл .dacpac, а не в формате Parquet. Поддерживаются следующие типы данных и записываются в файлы Parquet в хранилище BLOB-объектов Azure:

  • char
  • varchar
  • nchar
  • nvarchar
  • text
  • ntext
  • decimal
  • numeric
  • float
  • real
  • bit
  • tinyint
  • smallint
  • int
  • bigint
  • smallmoney
  • money
  • smalldate
  • smalldatetime
  • date
  • datetime
  • datetime2
  • datetimeoffset
  • time
  • uniqueidentifier
  • timestamp
  • rowversion
  • binary
  • varbinary
  • image
  • xml
  • json
  • vector

Таблицы Ledger доступны для операций извлечения и публикации с файлами Parquet.

Данные, хранящиеся в Always Encrypted, не поддерживаются для операций извлечения и публикации с файлами Parquet.

Вы можете проверить базу данных с помощью T-SQL, чтобы определить типы данных, которые будут записаны в .dacpac файл, а не в файлах Parquet, записанных непосредственно в хранилище BLOB-объектов Azure. В следующем примере запроса возвращается результирующий набор типов и таблиц с типами, которые не поддерживаются для записи в файлы Parquet.

SELECT DISTINCT C.DATA_TYPE, C.TABLE_SCHEMA, C.TABLE_NAME 
FROM INFORMATION_SCHEMA.TABLES T
INNER JOIN INFORMATION_SCHEMA.COLUMNS C
    ON T.TABLE_SCHEMA = C.TABLE_SCHEMA 
    AND T.TABLE_NAME = C.TABLE_NAME
    AND T.TABLE_TYPE = 'BASE TABLE'
WHERE C.DATA_TYPE NOT IN (
    'binary',
    'varbinary',
    'char',
    'varchar',
    'nchar',
    'nvarchar',
    'smalldate',
    'smalldatetime',
    'date',
    'datetime',
    'datetime2',
    'datetimeoffset',
    'time',
    'decimal',
    'numeric',
    'float',
    'real',
    'tinyint',
    'smallint',
    'int',
    'bigint',
    'bit',
    'money',
    'smallmoney',
    'uniqueidentifier',
    'timestamp',
    'rowversion',
    'text',
    'ntext',
    'image',
    'xml',
    'json',
    'vector'
);