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

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

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

То, что я пробовал,

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

Вопрос

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

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

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

Ответы [ 3 ]

2 голосов
/ 31 мая 2019

Когда вы создаете внешние таблицы в хранилище данных 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
....

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

0 голосов
/ 05 июня 2019

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

0 голосов
/ 29 мая 2019

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...