Операция подстановки в Azure Data Factory и Azure Synapse Analytics

ПРИМЕНИМО К: Azure Data Factory Azure Synapse Analytics

Совет

Data Factory в Microsoft Fabric — это следующее поколение Azure Data Factory с более простой архитектурой, встроенным ИИ и новыми функциями. Если вы не знакомы с интеграцией данных, начните с Fabric Data Factory. Существующие рабочие нагрузки ADF могут обновляться до Fabric для доступа к новым возможностям в области обработки и анализа данных, аналитики в режиме реального времени и отчетов.

С помощью действия Lookup можно получить набор данных из любого поддерживаемого источника данных фабрикой данных и конвейерами Synapse. Вы можете использовать его, чтобы динамически определять объекты для обработки в последующем действии, вместо жесткого программирования имени объекта. Примерами объектов могут быть файлы и таблицы.

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

Создание действия Lookup в пользовательском интерфейсе

Чтобы использовать действие Lookup в конвейере, выполните следующие действия.

  1. Найдите элемент Lookup на панели действий конвейера и перетащите активность Lookup на холст конвейера.

  2. Выберите новое действие Lookup на панели холста, если оно еще не выбрано, и перейдите на вкладку Параметры, чтобы изменить сведения о нем.

    Отображает пользовательский интерфейс для операции поиска.

  3. Выберите существующий исходный набор данных или нажмите кнопку Создать, чтобы создать новый.

  4. Параметры идентификации строк, включаемых из исходного набора данных, зависят от типа набора данных. В приведенном выше примере показаны параметры конфигурации для текстового набора данных с разделителями. Ниже приведены примеры параметров конфигурации для набора данных таблицы Azure SQL и набора данных OData.

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

    Отображает параметры конфигурации в активности Lookup для набора данных OData.

Поддерживаемые возможности

Обратите внимание на следующее:

  • Действие Lookup может возвращать до 5000 строк. Если результирующий набор содержит больше записей, будут возвращены только первые 5000 строк.
  • Размер выходных данных действия Lookup может составлять до 4 МБ. Если этот размер превысит ограничение, действие завершится ошибкой.
  • Максимальная продолжительность операции поиска до тайм-аута составляет 24 часа.

Примечание.

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

Для действия поиска поддерживаются следующие источники данных.

Категория Хранилище данных
Azure Azure хранилище BLOB-объектов
  Azure Cosmos DB для NoSQL
  Azure Data Explorer (Kusto)
  Azure Data Lake Storage Gen1
  Azure Data Lake Storage Gen2
  База данных Azure для MariaDB
  База данных Azure для MySQL
  База данных Azure для PostgreSQL
  Azure Databricks Delta Lake
  Файлы Azure
  База данных SQL Azure
  Azure SQL Managed Instance
  Azure Synapse Analytics
  Azure хранилище таблиц
База данных Amazon RDS для Oracle
  Amazon RDS для SQL Server
  Amazon Redshift
  Apache Impala
  Azure SQL Managed Instance
  DB2
  Drill.
  Google AdWords
  Google BigQuery
  Greenplum
  HBase
  Hive
  Informix
  MariaDB
  Microsoft Access
  MySQL
  Netezza
  Oracle
  Phoenix
  PostgreSQL
  Presto
  Открытый центр SAP Business Warehouse
  SAP Business Warehouse через MDX
  SAP HANA
  Таблица SAP
  SQL Server
  Spark
  Sybase
  Teradata
  Vertica
NoSQL Cassandra
  Couchbase (предварительная версия)
Файл Amazon S3
  Совместимое хранилище Amazon S3
  Файловая система
  FTP
  Google Cloud Storage
  HDFS
  Базовый HTTP-запрос
  Microsoft Fabric Lakehouse
  Хранилище Oracle Cloud
  SFTP
Базовый протокол Базовый протокол OData
  Базовый протокол ODBC
  SharePoint Online список
Службы и приложения Веб-служба Amazon Marketplace (не рекомендуется)
  Concur (предварительная версия)
  Dataverse
  Динамика 365
  Dynamics AX
  Dynamics CRM
  HubSpot
  Jira
  Azure Data Explorer (Kusto)
  Magento (предварительная версия)
  Marketo (предварительная версия)
  Oracle Eloqua (предварительная версия)
  Oracle Responsys (предварительная версия)
  Oracle Service Cloud (предварительная версия)
  PayPal (предварительная версия)
  QuickBooks (предварительная версия)
  SAP Cloud for Customer (C4C)
  SAP ECC
  Salesforce
  Salesforce Marketing Cloud
  Облако службы Salesforce
  ServiceNow
  Shopify (предварительная версия)
  Snowflake
  Square (предварительная версия)
  Веб-таблица (таблица HTML)
  Xero
  Zoho (предварительная версия)

Примечание.

Пометка предварительная версия возле соединителя означает, что его можно опробовать и оставить отзыв. Если вы хотите использовать предварительные соединители в своем решении, обратитесь в поддержку Azure.

Синтаксис

{
    "name":"LookupActivity",
    "type":"Lookup",
    "typeProperties":{
        "source":{
            "type":"<source type>"
        },
        "dataset":{
            "referenceName":"<source dataset name>",
            "type":"DatasetReference"
        },
        "firstRowOnly":<true or false>
    }
}

Свойства типа

Имя Описание Тип Обязательное?
набор данных Предоставляет ссылку на набор данных для поиска. Дополнительные сведения можно найти в разделе Свойства набора данных в каждой соответствующей статье о соединителе. Пара "ключ — значение" Да
Источник Содержит свойства источника конкретного набора данных, аналогичные источнику действия копирования. Подробности можно найти в разделе Свойства действия копирования в статье о каждом соответствующем соединителе. Пара "ключ — значение" Да
firstRowOnly Указывает, следует ли возвращать только первую или все строки. Логический № Значение по умолчанию — true.

Примечание.

  • Исходные столбцы с типом ByteArray не поддерживаются.
  • Структура не поддерживается в определениях набора данных. Для текстовых файлов используйте строку заголовка, чтобы указать имя столбца.
  • Если ваш источник поиска — файл JSON, параметр jsonPathDefinition для изменения объекта JSON не поддерживается. Будут извлечены целые объекты.

Используйте результат активности Lookup

Результат поиска возвращается в раздел output результатов выполнения действия.

  • Когда для firstRowOnly задано значение true (по умолчанию), формат выходного значения выглядит, как показано в следующем коде. Результат поиска находится под фиксированным ключом firstRow. Чтобы использовать этот результат в последующем действии, примените шаблон @{activity('LookupActivity').output.firstRow.table}.

    {
        "firstRow":
        {
            "Id": "1",
            "schema":"dbo",
            "table":"Table1"
        }
    }
    
  • Когда для firstRowOnly задано значение false, формат выходного значения выглядит, как показано в следующем коде. В поле count указано количество возвращенных записей. Подробные значения отображаются под фиксированным массивом value. В этом случае за действием поиска следует действие Foreach. Укажите массив value в поле действия ForEach items с помощью шаблона @activity('MyLookupActivity').output.value. Для получения доступа к элементам массива value используйте следующий синтаксис: @{activity('lookupActivity').output.value[zero based index].propertyname}. Например, @{activity('lookupActivity').output.value[0].schema}.

    {
        "count": "2",
        "value": [
            {
                "Id": "1",
                "schema":"dbo",
                "table":"Table1"
            },
            {
                "Id": "2",
                "schema":"dbo",
                "table":"Table2"
            }
        ]
    } 
    

Пример

Конвейер в нашем примере содержит два действия: Lookup и Copy. Действие копирования копирует данные из таблицы SQL в экземпляре базы данных Azure SQL в Blob-хранилище Azure. Имя таблицы SQL хранится в файле JSON в хранилище BLOB-объектов. Операция поиска определяет имя таблицы во время выполнения. Такой подход позволяет динамически изменять файл JSON. При этом нет необходимости в повторном развертывании конвейеров или наборов данных.

В этом примере демонстрируется поиск только для первой строки. Примеры выполнения поиска всех строк и связывания результатов с действием ForEach см. в статье Копирование нескольких таблиц в пакетном режиме.

Конвейер

  • Действие Lookup настроено для использования LookupDataset, которое ссылается на расположение в хранилище объектов Azure Blob. Действие поиска считывает имя таблицы SQL из файла JSON в этом расположении.
  • Действие Copy использует выходные данные действия Lookup, то есть имя таблицы SQL. Свойство tableName в наборе данных SourceDataset настроено для использования выходных данных действия поиска. Операция копирования переносит данные из таблицы SQL в хранилище блоб-объектов Azure. Расположение задается свойством SinkDataset.
{
    "name": "LookupPipelineDemo",
    "properties": {
        "activities": [
            {
                "name": "LookupActivity",
                "type": "Lookup",
                "dependsOn": [],
                "policy": {
                    "timeout": "7.00:00:00",
                    "retry": 0,
                    "retryIntervalInSeconds": 30,
                    "secureOutput": false,
                    "secureInput": false
                },
                "userProperties": [],
                "typeProperties": {
                    "source": {
                        "type": "JsonSource",
                        "storeSettings": {
                            "type": "AzureBlobStorageReadSettings",
                            "recursive": true
                        },
                        "formatSettings": {
                            "type": "JsonReadSettings"
                        }
                    },
                    "dataset": {
                        "referenceName": "LookupDataset",
                        "type": "DatasetReference"
                    },
                    "firstRowOnly": true
                }
            },
            {
                "name": "CopyActivity",
                "type": "Copy",
                "dependsOn": [
                    {
                        "activity": "LookupActivity",
                        "dependencyConditions": [
                            "Succeeded"
                        ]
                    }
                ],
                "policy": {
                    "timeout": "7.00:00:00",
                    "retry": 0,
                    "retryIntervalInSeconds": 30,
                    "secureOutput": false,
                    "secureInput": false
                },
                "userProperties": [],
                "typeProperties": {
                    "source": {
                        "type": "AzureSqlSource",
                        "sqlReaderQuery": {
                            "value": "select * from [@{activity('LookupActivity').output.firstRow.schema}].[@{activity('LookupActivity').output.firstRow.table}]",
                            "type": "Expression"
                        },
                        "queryTimeout": "02:00:00",
                        "partitionOption": "None"
                    },
                    "sink": {
                        "type": "DelimitedTextSink",
                        "storeSettings": {
                            "type": "AzureBlobStorageWriteSettings"
                        },
                        "formatSettings": {
                            "type": "DelimitedTextWriteSettings",
                            "quoteAllText": true,
                            "fileExtension": ".txt"
                        }
                    },
                    "enableStaging": false,
                    "translator": {
                        "type": "TabularTranslator",
                        "typeConversion": true,
                        "typeConversionSettings": {
                            "allowDataTruncation": true,
                            "treatBooleanAsNumber": false
                        }
                    }
                },
                "inputs": [
                    {
                        "referenceName": "SourceDataset",
                        "type": "DatasetReference",
                        "parameters": {
                            "schemaName": {
                                "value": "@activity('LookupActivity').output.firstRow.schema",
                                "type": "Expression"
                            },
                            "tableName": {
                                "value": "@activity('LookupActivity').output.firstRow.table",
                                "type": "Expression"
                            }
                        }
                    }
                ],
                "outputs": [
                    {
                        "referenceName": "SinkDataset",
                        "type": "DatasetReference",
                        "parameters": {
                            "schema": {
                                "value": "@activity('LookupActivity').output.firstRow.schema",
                                "type": "Expression"
                            },
                            "table": {
                                "value": "@activity('LookupActivity').output.firstRow.table",
                                "type": "Expression"
                            }
                        }
                    }
                ]
            }
        ],
        "annotations": [],
        "lastPublishTime": "2020-08-17T10:48:25Z"
    }
}

Набор данных поиска

Набор данных lookup — это файл sourcetable.json в папке лукап на Azure Storage, указанной типом AzureBlobStorageLinkedService.

{
    "name": "LookupDataset",
    "properties": {
        "linkedServiceName": {
            "referenceName": "AzureBlobStorageLinkedService",
            "type": "LinkedServiceReference"
        },
        "annotations": [],
        "type": "Json",
        "typeProperties": {
            "location": {
                "type": "AzureBlobStorageLocation",
                "fileName": "sourcetable.json",
                "container": "lookup"
            }
        }
    }
}

Исходный набор данных для действия копирования

Исходный набор данных использует выходные данные операции поиска, которые являются именем таблицы в SQL. Действие копирования копирует данные из этой таблицы SQL в место в хранилище объектов Blob Azure. Расположение задается набором данных синк.

{
    "name": "SourceDataset",
    "properties": {
        "linkedServiceName": {
            "referenceName": "AzureSqlDatabase",
            "type": "LinkedServiceReference"
        },
        "parameters": {
            "schemaName": {
                "type": "string"
            },
            "tableName": {
                "type": "string"
            }
        },
        "annotations": [],
        "type": "AzureSqlTable",
        "schema": [],
        "typeProperties": {
            "schema": {
                "value": "@dataset().schemaName",
                "type": "Expression"
            },
            "table": {
                "value": "@dataset().tableName",
                "type": "Expression"
            }
        }
    }
}

Набор данных приемника для действия копирования

Действие копирования копирует данные из таблицы SQL в файл filebylookup.csv, находящийся в папке csv в Azure Storage. Файл задается свойством AzureBlobStorageLinkedService.

{
    "name": "SinkDataset",
    "properties": {
        "linkedServiceName": {
            "referenceName": "AzureBlobStorageLinkedService",
            "type": "LinkedServiceReference"
        },
        "parameters": {
            "schema": {
                "type": "string"
            },
            "table": {
                "type": "string"
            }
        },
        "annotations": [],
        "type": "DelimitedText",
        "typeProperties": {
            "location": {
                "type": "AzureBlobStorageLocation",
                "fileName": {
                    "value": "@{dataset().schema}_@{dataset().table}.csv",
                    "type": "Expression"
                },
                "container": "csv"
            },
            "columnDelimiter": ",",
            "escapeChar": "\\",
            "quoteChar": "\""
        },
        "schema": []
    }
}

sourcetable.JSON

Вы можете использовать в файле sourcetable.json следующие два типа форматов.

Набор объектов

{
   "Id":"1",
   "schema":"dbo",
   "table":"Table1"
}
{
   "Id":"2",
   "schema":"dbo",
   "table":"Table2"
}

Массив объектов

[ 
    {
        "Id": "1",
        "schema":"dbo",
        "table":"Table1"
    },
    {
        "Id": "2",
        "schema":"dbo",
        "table":"Table2"
    }
]

Ограничения и методы обхода

Ниже описаны некоторые ограничения для действия Lookup и рекомендуемые обходные решения.

Ограничение Обходное решение
Количество строк для действия Lookup не может превышать 5000, а размер — 4 МБ. Разработайте двухуровневый конвейер, где внешний конвейер выполняет итерацию по внутреннему конвейеру, получаемые данные которого не превышают максимальное количество строк и размер.

См. другие действия потока управления, поддерживаемые конвейерами Azure Data Factory и Synapse: