Среда выполнения интеграции имеет два диска. Есть ли способ параметризовать поле Host в связанной файловой системе службы?

Я пытаюсь развернуть фабрику данных Azure с конвейером копирования данных, который извлекает файлы по одному или нескольким путям развернутой / локальной файловой системы и выгружает их в хранилище BLOB-объектов. Пути к исходным файлам в файловой системе могут охватывать несколько разных дисков (например, C:\fileshare1 vs D:\fileshare2) и могут включать сетевые местоположения, на которые ссылаются через пути UNC (например, - \localnetworkresource\fileshare3).

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

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

Я уже пытался создать JSON связанных служб, но это не сработало. Кто-нибудь может мне помочь?

https://docs.microsoft.com/en-us/azure/data-factory/parameterize-linked-services

2 ответа

Решение

Да, вы можете параметризовать службу, связанную с файловой системой, следующим образом. Сначала вам нужно создать связанный сервис файловой системы, затем вы можете изменить код JSON, чтобы добавить раздел параметров, как показано ниже:

{
    "name": "OnPremFileSystemLinkedService_Parameterized",
    "type": "Microsoft.DataFactory/factories/linkedservices",
    "properties": {
        "type": "FileServer",
        "parameters": {
            "HostParameter": {
                "type": "string",
                "defaultValue": "C:\\[Folder]"
            },
            "userIDParameter": {
                "type": "string",
                "defaultValue": "DOMAIN\\USERNAME"
            }
        },
        "annotations": [],
        "typeProperties": {
            "host": "@{linkedService().HostParameter}",
            "userId": "@{linkedService().userIDParameter}",
            "encryptedCredential": "XXXXXXXXXXXencryptedKeyXXXXXXXXX"
        },
        "connectVia": {
            "referenceName": "MySelfHostedIR",
            "type": "IntegrationRuntimeReference"
        }
    }
}

В моем примере я просто использовал один файловый ресурс в качестве ввода и действия копирования. Но в соответствии с вашим требованием вы можете передать свой список коллекций FileShare в действие ForEach и перебрать каждый FileShare и передать эти значения в действие Копировать -> Параметры набора данных источника / приемника -> Свойства параметров связанных служб.

Ниже приведен пример использования связанной службы параметризованной файловой системы.

Надеюсь это поможет.

Вот как я это решил:)

конфигурация была следующей: