Загрузка данных из Azure Data Lake Storage в выделенные пулы SQL в Azure Synapse Analytics

В этом руководстве объясняется, как использовать инструкцию COPY для загрузки данных из Azure Data Lake Storage. Краткие примеры использования инструкции COPY во всех способах проверки подлинности см. в статье о безопасной загрузка данных с помощью выделенных пулов SQL.

Примечание.

Вы можете поделиться отзывом или отчетом об инструкции COPY, отправив электронное сообщение в следующую группу рассылки: sqldwcopypreview@service.microsoft.com.

  • Создайте целевую таблицу для загрузки данных из Azure Data Lake Storage.
  • Создайте инструкцию COPY для загрузки данных в хранилище данных.

Если у вас еще нет подписки Azure, создайте бесплатную учетную запись Azure, прежде чем начинать работу.

Подготовка к работе

Перед началом работы с этим руководством скачайте и установите последнюю версию SQL Server Management Studio (SSMS).

Для работы с этим руководством необходимы указанные ниже компоненты.

  • Выделенный пул SQL. См. Создание выделенного пула SQL и запрос данных.
  • Учетная запись Data Lake Storage. Узнайте, как приступить к работе с Azure Data Lake Storage. Для этой учетной записи хранения необходимо настроить или указать одну из следующих учетных данных для загрузки: ключ учетной записи хранения, ключ подписанного URL-адреса (SAS), пользователя приложения Каталога Azure или пользователя Microsoft Entra, имеющего соответствующую роль Azure для учетной записи хранения.
  • В настоящее время прием данных с помощью команды COPY в учетную запись хранения Azure, использующую новую функцию секционирования DNS службы хранилища Azure, приводит к ошибке. Для этого руководства подготовьте учетную запись хранения в подписке, которая не использует секционирование DNS.

Создание целевой таблицы

Подключитесь к выделенному пулу SQL и создайте целевую таблицу, в которую будут загружены данные. В этом примере мы создаем таблицу размеров продуктов.

-- A: Create the target table
-- DimProduct
CREATE TABLE [dbo].[DimProduct]
(
    [ProductKey] [int] NOT NULL,
    [ProductLabel] [nvarchar](255) NULL,
    [ProductName] [nvarchar](500) NULL
)
WITH
(
    DISTRIBUTION = HASH([ProductKey]),
    CLUSTERED COLUMNSTORE INDEX
    --HEAP
);

Создание инструкции COPY

Подключитесь к выделенному пулу SQL и выполните инструкцию COPY. Полный список примеров см. в следующей документации: Безопасная загрузка данных с использованием выделенных пулов SQL.

-- B: Create and execute the COPY statement

COPY INTO [dbo].[DimProduct]  
--The column list allows you map, omit, or reorder input file columns to target table columns.  
--You can also specify the default value when there is a NULL value in the file.
--When the column list is not specified, columns will be mapped based on source and target ordinality
(
    ProductKey default -1 1,
    ProductLabel default 'myStringDefaultWhenNull' 2,
    ProductName default 'myStringDefaultWhenNull' 3
)
--The storage account location where you data is staged
FROM 'https://storageaccount.blob.core.windows.net/container/directory/'
WITH  
(
   --CREDENTIAL: Specifies the authentication method and credential access your storage account
   CREDENTIAL = (IDENTITY = '', SECRET = ''),
   --FILE_TYPE: Specifies the file type in your storage account location
   FILE_TYPE = 'CSV',
   --FIELD_TERMINATOR: Marks the end of each field (column) in a delimited text (CSV) file
   FIELDTERMINATOR = '|',
   --ROWTERMINATOR: Marks the end of a record in the file
   ROWTERMINATOR = '0x0A',
   --FIELDQUOTE: Specifies the delimiter for data of type string in a delimited text (CSV) file
   FIELDQUOTE = '',
   ENCODING = 'UTF8',
   DATEFORMAT = 'ymd',
   --MAXERRORS: Maximum number of reject rows allowed in the load before the COPY operation is canceled
   MAXERRORS = 10,
   --ERRORFILE: Specifies the directory where the rejected rows and the corresponding error reason should be written
   ERRORFILE = '/errorsfolder',
) OPTION (LABEL = 'COPY: ADLS tutorial');

Оптимизация сжатия columnstore

По умолчанию таблицы определяются как кластеризованный индекс columnstore. После завершения загрузки для некоторых строк данных может не выполняться сжатие в индекс columnstore. Это может происходить по ряду причин. Чтобы узнать больше, ознакомьтесь с управлением индексами columnstore.

Чтобы оптимизировать производительность запросов и сжатие columnstore после загрузки, перестройте таблицу, чтобы настроить принудительное сжатие всех строк таблиц индексом columnstore.


ALTER INDEX ALL ON [dbo].[DimProduct] REBUILD;

Оптимизация статистики

Одностолбцовую статистику рекомендуется создавать сразу после загрузки. Существует несколько вариантов статистики. Например, при создании одностолбцовой статистики для каждого столбца перестройка всех статистических данных может занять длительное время. Если вам известно, что некоторые столбцы не будут входить в предикаты запросов, можно пропустить создание статистики для этих столбцов.

Если вам потребуется создать одностолбцовую статистику для каждого столбца в каждой таблице, можно использовать пример кода хранимой процедуры prc_sqldw_create_stats из статьи, посвященной статистике.

Следующий пример кода — хорошая отправная точка для создания статистики. Он создает одностолбцовую статистику для каждого столбца в таблице измерения и для каждого соответствующего столбца в таблицах фактов. Одно- или многостолбцовую статистику в другие столбцы таблицы фактов можно добавить позже.

Победа!

Вы успешно загрузили данные в хранилище данных. Отличная работа!

Следующие шаги

Загрузка данных является первым шагом к разработке решения для хранения данных на основе Azure Synapse Analytics. Ознакомьтесь с нашими ресурсами разработки.

Дополнительные примеры загрузки и ссылки см. в следующей документации: