Копия действия фабрики данных Azure. Оцените столбец в таблице приемников с помощью @pipeline().TriggerTime

В Data Factory V2 я пытаюсь реализовать поток копирования данных из одной базы данных SQL Azure в другую.

Я сопоставил все столбцы исходной таблицы с таблицей приемников, но в таблице приемников у меня есть пустой столбец, в который я хотел бы ввести время выполнения конвейера.

Кто-нибудь знает, как заполнить этот столбец в таблице приемников без его присутствия в исходной таблице?

Ниже приведен код моего копирования конвейера

{
"name": "FLD_Item_base",
"properties": {
    "activities": [
        {
            "name": "Copy_Team",
            "description": "copytable",
            "type": "Copy",
            "policy": {
                "timeout": "7.00:00:00",
                "retry": 0,
                "retryIntervalInSeconds": 30,
                "secureOutput": false,
                "secureInput": false
            },
            "typeProperties": {
                "source": {
                    "type": "SqlSource"
                },
                "sink": {
                    "type": "SqlSink",
                    "writeBatchSize": 10000,
                    "preCopyScript": "TRUNCATE TABLE Team_new"
                },
                "enableStaging": false,
                "dataIntegrationUnits": 0,
                "translator": {
                    "type": "TabularTranslator",
                    "columnMappings": {
                        "Code": "Code",
                        "Name": "Name"
                    }
                }
            },
            "inputs": [
                {
                    "referenceName": "Team",
                    "type": "DatasetReference"
                }
            ],
            "outputs": [
                {
                    "referenceName": "Team_new",
                    "type": "DatasetReference"
                  }
              ]
          }
      ]
  }
}

В моей таблице раковины у меня уже есть колонка data_loadгде я хотел бы вставить дату выполнения конвейера, но я в настоящее время не отображал ее.

2 ответа

В зависимости от вашей ситуации, пожалуйста, настройте сервер SQL stored procedure в вашем приемнике sql server в качестве обходного пути.

Пожалуйста, следуйте инструкциям из этого документа:

Шаг 1: Настройте ваш набор данных Sink:

введите описание изображения здесь

Шаг 2. Настройте раздел "Мойка" в операции копирования следующим образом:

введите описание изображения здесь

Шаг 3: В вашей базе данных определите тип таблицы с тем же именем, что и sqlWriterTableType. Обратите внимание, что схема типа таблицы должна совпадать со схемой, возвращаемой вашими входными данными.

    CREATE TYPE [dbo].[testType] AS TABLE(
    [ID] [varchar](256) NOT NULL,
    [EXECUTE_TIME] [datetime] NOT NULL
)
GO

Шаг 4. В вашей базе данных определите хранимую процедуру с тем же именем, что и SqlWriterStoredProcedureName, Он обрабатывает входные данные из указанного вами источника и объединяет их в выходную таблицу. Обратите внимание, что имя параметра хранимой процедуры должно совпадать с именем "tableName", определенным в наборе данных.

Create PROCEDURE convertCsv @ctest [dbo].[testType] READONLY
AS
BEGIN
  MERGE [dbo].[adf] AS target
  USING @ctest AS source
  ON (1=1)
  WHEN NOT MATCHED THEN
      INSERT (id,executeTime)
      VALUES (source.ID,GETDATE());
END

Надеюсь, что это поможет вам. Любая проблема, пожалуйста, не стесняйтесь, дайте мне знать.

Вы можете рассмотреть возможность использования хранимой процедуры на стороне приемника для применения исходных данных в таблице приемников, указав " sqlWriterStoredProcedureName " в SqlSink. Передайте время выполнения конвейера хранимой процедуре в качестве параметра и вставьте в таблицу приемников.

Другие вопросы по тегам