Используя ADF, как загрузить имена файлов в таблицу SQL Server? - PullRequest
1 голос
/ 28 сентября 2019

Я пытаюсь использовать действие GetMetadata и действие CopyData вместе.Моя установка выглядит следующим образом.

enter image description here

Я пытаюсь получить имена файлов (используя GetMetadata) и загрузить их в поле в таблице SQL Server (в сочетании с CopyData).CopyData прекрасно работает, но я не вижу способа, чтобы GetMetadata получал имена файлов и передавал их в поле таблицы.В моем примере у меня есть 4 поля в исходных данных, которые соответствуют 4 полям в таблице назначения.Предполагается, что 5-е поле будет именем файла.По-видимому, это не так работает.Я прочитал документацию ниже и до сих пор не могу понять.

https://docs.microsoft.com/en-us/azure/data-factory/control-flow-get-metadata-activity

Любая помощь с этим будет принята с благодарностью.

1 Ответ

1 голос
/ 29 сентября 2019

Добавление дополнительного столбца в набор данных может рассматриваться как преобразование, и задача копирования фабрики данных Azure v2 (ADF v2) не легко поддается преобразованию.Он может выполнять несколько вещей, например конвертировать из одного формата (например, CSV) в другие форматы (например, JSON), но он ограничен.Возможно, в какой-то момент в будущем они добавят в сопоставление что-то, что позволит добавлять строковые литералы или что-то похожее на функцию производных столбцов служб SSIS, но эти типы функций добавляются в сопоставление потоков данных в тот момент, когда это кажется.

Однако одним из способов достижения этого является использование цели хранимой процедуры с параметром для имени файла и параметром типа таблицы для основного набора данных.Это выглядит примерно так: ADF Copy Task with Stored Proc target

Недостатком является то, что теперь вам необходимо создать вспомогательный тип таблицы в вашей базе данных (CREATE TYPE) и хранимый процесс для его обработки, что-то вроде этого:

CREATE TYPE dbo.typ_multiFile AS TABLE (
    col1    CHAR(1) NOT NULL,
    col2    CHAR(1) NOT NULL,
    col3    CHAR(1) NOT NULL
)
GO


CREATE OR ALTER PROC dbo.usp_ins_myTable (
    @fileName       AS VARCHAR (100),
    @typ            AS dbo.typ_multiFile READONLY
    )
AS
SET NOCOUNT ON

INSERT INTO dbo.myTable ( [fileName], col1, col2, col3 )
SELECT @fileName, col1, col2, col3
FROM @typ 

RETURN
GO

Обратите внимание, что задача копирования находится внутри задачи ForEach, согласно этой диаграмме:

ADF Logical Diagram

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