Поделиться через


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

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

Note

Чтобы отправить отзыв или сообщить о проблемах с инструкцией COPY, отправьте сообщение электронной почты в следующий список рассылки: [email protected]

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

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

Перед тем как начать

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

Чтобы запустить это руководство, вам потребуется:

  • Выделенный пул SQL. См. статью "Создание выделенного пула SQL" и данных запроса.
  • Учетная запись Data Lake Storage. См. статью "Начало работы с Azure Data Lake Storage". Для этой учетной записи хранения необходимо настроить или указать одну из следующих учетных данных для загрузки: ключ учетной записи хранения, ключ подписанной ссылки (SAS), пользователя приложения Azure Directory или пользователя 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. Ознакомьтесь с нашими ресурсами разработки.

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