Действие Lookup в Фабрике данных Azure и Azure Synapse Analytics

применимо к: Azure синапсе Analytics фабрика данных Azure

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

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

Создание действия уточняющего запроса с помощью пользовательского интерфейса

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

  1. Выполните поиск уточняющих запросов на панели действия конвейера и перетащите действие Поиск на холст конвейера.

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

    Показывает пользовательский интерфейс для действия поиска.

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

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

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

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

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

Следует отметить следующее.

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

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

Категория Хранилище данных
Azure Хранилище BLOB-объектов Azure
  Azure Cosmos DB (SQL API)
  Azure Data Explorer (Kusto)
  Azure Data Lake Storage 1-го поколения
  Azure Data Lake Storage 2-го поколения
  База данных Azure для MariaDB
  База данных Azure для MySQL
  База данных Azure для PostgreSQL
  Azure Databricks Delta Lake
  Файлы Azure
  База данных SQL Azure
  Управляемый экземпляр Базы данных SQL Azure
  Azure Synapse Analytics
  Хранилище таблиц Azure
База данных Amazon RDS для Oracle
  Amazon RDS для SQL Server
  Amazon Redshift
  Apache Impala
  Управляемый экземпляр Базы данных SQL Azure
  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
  Облачное хранилище Oracle
  SFTP
Базовый протокол Базовый протокол OData
  Базовый протокол ODBC
  REST
  Список SharePoint Online
Службы и приложения Веб-служба Amazon Marketplace
  Concur (предварительная версия)
  Dataverse
  Dynamics 365
  Dynamics AX
  Dynamics CRM
  HubSpot
  Jira
  Azure Data Explorer (Kusto)
  Magento (предварительная версия)
  Marketo (предварительная версия)
  Office 365.
  Oracle Eloqua (предварительная версия)
  Oracle Responsys (предварительная версия)
  Oracle Service Cloud (предварительная версия)
  PayPal (предварительная версия)
  QuickBooks (предварительная версия)
  REST
  SAP Cloud for Customer (C4C)
  SAP ECC
  Salesforce
  Salesforce Marketing Cloud
  Salesforce Service Cloud
  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>
    }
}

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

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

Примечание

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

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

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

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

    {
        "firstRow":
        {
            "Id": "1",
            "schema":"dbo",
            "table":"Table1"
        }
    }
    
  • Когда для задано значение 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. Действие Copy копирует данные из таблицы SQL, размещенной в экземпляре Базы данных SQL Azure, в хранилище BLOB-объектов Azure. Имя таблицы SQL хранится в файле JSON в хранилище BLOB-объектов. Действие поиска ищет имя таблицы во время выполнения. Такой подход позволяет динамически изменять файл JSON. При этом нет необходимости в повторном развертывании конвейеров или наборов данных.

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

Pipeline

  • Действие поиска настроено для использования LookupDataset, который ссылается на расположение в хранилище BLOB-объектов Azure. Действие поиска считывает имя таблицы SQL из файла JSON в этом расположении.
  • Действие Copy использует выходные данные действия Lookup, то есть имя таблицы SQL. Свойство tableName в наборе данных SourceDataset настроено для использования выходных данных действия поиска. Действие копирования копирует данные из таблицы SQL в расположение в хранилище BLOB-объектов 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"
    }
}

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

Набор данных для поиска размещен в файле sourcetable.json в папке поиска службы хранилища Azure, определяемой типом 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. Файл определяется свойством AzureStorageLinkedService.

{
    "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 и Synapse: