Файлы с разными заголовками для копирования данных в таблицу Azure DWH

Я новичок в хранилище данных Azure и фабрике данных Azure V2.

У меня есть папка с 10 файлами в BLOB-объекте Azure. Каждый файл имеет разные заголовки, но во всех файлах будут общие 5 заголовков.

Вещи, которые я пробовал,

Создано 10 связанных серверов с файлами и с помощью задачи копирования данных перенесены данные в конкретные таблицы. Но мне потребовалось только 5 столбцов из этих таблиц

Вопрос

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

Пример: Файл1: 10 заголовков Файл2: 11 заголовков Файл3: 7 заголовков.,,, File10: 15 заголовков

В этих файлах будет общее 5 столбцов, и данные должны загружаться общей таблицей с 5 столбцами.

2 ответа

При создании внешних таблиц в хранилище данных SQL Azure с помощью Polybase они могут указывать либо на отдельный файл, либо на набор файлов, если они находятся в той же папке и в том же формате.

Индивидуальный файл

WTIH (
    DATA_SOURCE = yourDataSource,
    LOCATION = N'/input/file1.txt',
    FILE_FORMAT = yourFileFormat,
    ...
    etc

скоросшиватель

WTIH (
    DATA_SOURCE = yourDataSource,
    LOCATION = N'/input/',
    FILE_FORMAT = yourFileFormat,
    ...
    etc

Итак, что вы можете сделать, это создать внешнюю таблицу для каждого файла. Внешние таблицы представляют собой только структуры метаданных, в действительности данные не существуют в базе данных. Эти таблицы должны включать все столбцы для каждой таблицы. Затем создайте UNION утверждение по пяти таблицам, выбрав только пять столбцов и использовать CTAS чтобы импортировать данные в базу данных:

CREATE TABLE dbo.yourTable
WITH
(
    DISTRIBUTION = ROUND_ROBIN,
    CLUSTERED COLUMNSTORE INDEX
)
AS
SELECT col1, col2, col3, col4, col5
FROM externalTable1

UNION ALL

SELECT col1, col2, col3, col4, col5
FROM externalTable2

UNION ALL

SELECT col1, col2, col3, col4, col5
FROM externalTable3

etc
....

Я, вероятно, не стал бы использовать Data Factory, поскольку Polybase может сделать большую часть работы за вас.

Вы можете принять ниже идею:

1. Используйте LookUp Activity, чтобы получить список fileName, хранящийся в вашем конкретном контейнере хранилища BLOB-объектов Azure или других путях. Пожалуйста, обратитесь к этой ссылке.

2. Используйте ForEach Activity для зацикливания выходных данных LookUp Activity.[@activity('MyLookupActivity').output],

3. Внутри действия ForEach используйте действие копирования и настройте путь набора данных хранилища больших двоичных объектов как specific containerName/dynamic fileName. (Подобно решению в этом случае: при попытке добавить динамическое имя файла (связанный сервер) в Azure Data Factory V2 обнаружена ошибка).

Я согласен с @wBob, что Polybase может справиться с этим за вас. Однако в качестве альтернативы вы можете использовать поток данных фабрики данных Azure для обработки всех файлов и выбрать только 5 нужных столбцов, а затем вывести эти результаты в приемник больших двоичных объектов. Затем используйте большой двоичный объект для Polybase, который упростит ваши требования Polybase, или используйте операцию ADF Copy, чтобы записать их в SQLDW. Есть много вариантов в этом пространстве.