Использование параметров, выражений и функций в фабрике данных Azure

Область применения:Фабрика данных Azure Azure Synapse Analytics

Совет

Попробуйте использовать фабрику данных в Microsoft Fabric, решение для аналитики с одним интерфейсом для предприятий. Microsoft Fabric охватывает все, от перемещения данных до обработки и анализа данных в режиме реального времени, бизнес-аналитики и отчетности. Узнайте, как бесплатно запустить новую пробную версию !

В этом документе основное внимание уделено изучению фундаментальных концепций с различными примерами по созданию параметризованных конвейеров данных в фабрике данных Azure. Параметризация и динамические выражения — это важные дополнения к фабрике данных Azure, т. к. могут сэкономить много времени и более гибко реализовать ETL-операции (извлечения, преобразования и загрузки) и ELT-операции (извлечения, загрузки, преобразования). Это значительно сокращает затраты на обслуживание решений и ускоряет реализацию новых функций в существующих конвейерах. Эти преимущества обусловлены тем, что параметризация уменьшает количество конкретных значений переменных и увеличивает объем повторно используемых объектов и процессов.

Пользовательский интерфейс и параметры фабрики данных Azure

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

Основные понятия параметров и выражений

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

Например:

"name": "value"

or

"name": "@pipeline().parameters.password"

Выражения могут встречаться в любом месте строкового значения JSON и всегда возвращают другое значение JSON. Здесь password — это параметр конвейера в выражении. Если значение JSON является выражением, текст выражения извлекается без знака \"\@\". Если требуется строковый литерал, начинающийся с @, его необходимо экранировать с помощью @@. В примерах ниже показано, как вычисляются выражения.

Значение JSON Результат
"parameters" Возвращаются символы в виде 'parameters'.
"parameters[1]" Возвращаются символы в виде 'parameters[1]'.
"@@" Возвращается строка из 1 символа, содержащая символ \@\.
" @" Возвращается строка из 2 символов, содержащая символ \@\.

Выражения также могут содержаться внутри строк, где они заключаются в структуру @{ ... }, при использовании интерполяции строк. Например: "name" : "First Name: @{pipeline().parameters.firstName} Last Name: @{pipeline().parameters.lastName}"

При использовании интерполяции строки результатом всегда будет строка. Предположим, myNumber определено как 42, а myString — как foo:

Значение JSON Результат
"@pipeline().parameters.myString" Возвращает foo как строку.
@{pipeline().parameters.myString} Возвращает foo как строку.
"@pipeline().parameters.myNumber" Возвращает 42 как номер.
@{pipeline().parameters.myString} Возвращает 42 как строку.
"Answer is: @{pipeline().parameters.myNumber}" Возвращает строку Answer is: 42.
"@concat('Answer is: ', string(pipeline().parameters.myNumber))" Возвращает строку Answer is: 42.
Answer is: @{pipeline().parameters.myNumber} Возвращает строку Answer is: @{pipeline().parameters.myNumber}.

Примеры использования параметров в выражениях

Пример сложных выражений

Приведенный ниже пример содержит сложное выражение, которое ссылается на глубоко вложенное поле в выходных данных действия. Чтобы создать ссылку на параметр конвейера, который вычисляет вложенное поле, используйте синтаксис [] вместо оператора точки (.) (как subfield1 и subfield2 в нашем примере).

@activity('*activityName*').output.*subfield1*.*subfield2*[pipeline().parameters.*subfield3*].*subfield4*

Редактор динамического содержимого

Редактор динамического содержимого автоматически экранирует символы в содержимом после завершения редактирования. Например, следующее содержимое в редакторе —это интерполяция строк с двумя функциями выражений.

{ 
  "type": "@{if(equals(1, 2), 'Blob', 'Table' )}",
  "name": "@{toUpper('myData')}"
}

Редактор динамического содержимого преобразует вышеприведенное содержимое в выражение "{ \n \"type\": \"@{if(equals(1, 2), 'Blob', 'Table' )}\",\n \"name\": \"@{toUpper('myData')}\"\n}". Результатом этого выражения является строка формата JSON, показанная ниже.

{
  "type": "Table",
  "name": "MYDATA"
}

Набор данных с параметрами

В следующем примере BlobDataset принимает параметр с именем path. Его значение используется для задания значения свойства folderPath с помощью выражения: dataset().path.

{
    "name": "BlobDataset",
    "properties": {
        "type": "AzureBlob",
        "typeProperties": {
            "folderPath": "@dataset().path"
        },
        "linkedServiceName": {
            "referenceName": "AzureStorageLinkedService",
            "type": "LinkedServiceReference"
        },
        "parameters": {
            "path": {
                "type": "String"
            }
        }
    }
}

Конвейер с параметрами

В следующем примере конвейер принимает параметры inputPath и outputPath. Путь к параметризованному набору данных большого двоичного объекта задается с помощью значений этих параметров. Синтаксис, используемый здесь: pipeline().parameters.parametername.

{
    "name": "Adfv2QuickStartPipeline",
    "properties": {
        "activities": [
            {
                "name": "CopyFromBlobToBlob",
                "type": "Copy",
                "inputs": [
                    {
                        "referenceName": "BlobDataset",
                        "parameters": {
                            "path": "@pipeline().parameters.inputPath"
                        },
                        "type": "DatasetReference"
                    }
                ],
                "outputs": [
                    {
                        "referenceName": "BlobDataset",
                        "parameters": {
                            "path": "@pipeline().parameters.outputPath"
                        },
                        "type": "DatasetReference"
                    }
                ],
                "typeProperties": {
                    "source": {
                        "type": "BlobSource"
                    },
                    "sink": {
                        "type": "BlobSink"
                    }
                }
            }
        ],
        "parameters": {
            "inputPath": {
                "type": "String"
            },
            "outputPath": {
                "type": "String"
            }
        }
    }
}

Вызов функций внутри выражений

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

Строковые функции

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

Строковая функция Задача
concat Объединяет две или более строк и возвращает объединенную строку.
endsWith Проверяет, заканчивается ли строка определенной подстрокой.
guid Создает глобально уникальный идентификатор (GUID) в виде строки.
indexOf Возвращает начальную позицию подстроки.
lastIndexOf Возвращает начальную позицию последнего вхождения подстроки.
replace Заменяет подстроку указанной строкой и возвращает обновленную строку.
split Возвращает массив, содержащий подстроки, разделенные запятыми, из большей строки, основываясь на указанном символе разделителя в исходной строке.
startsWith Проверяет, начинается ли строка с определенной подстроки.
substring Возвращает символы из строки, начиная с указанной позиции.
toLower Возвращает строку символов в нижнем регистре.
toUpper Возвращает строку символов в верхнем регистре.
trim Удаляет все начальные и конечные пробелы и возвращает обновленную строку.

Функции сбора

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

Функция для коллекций Задача
contains Проверяет наличие определенного элемента в коллекции.
empty Проверяет, является ли коллекция пустой.
first Возвращает первый элемент из коллекции.
intersection Возвращает коллекцию, которая содержит только общие элементы в указанных коллекциях.
join Возвращает строку, содержащую все элементы из массива, в которой каждый символ отделен разделителем.
last Возвращает последний элемент из коллекции.
length Возвращает число элементов в строке или массиве.
skip Удаляет элементы из начала коллекции и возвращает все другие элементы.
take Возвращает элементы, расположенные в начале коллекции.
union Возвращает коллекцию, которая содержит все элементы из указанных коллекций.

Логические функции

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

Функция логического сравнения Задача
and Проверяет, истинны ли все выражения.
equals Проверяет, эквивалентны ли оба значения.
greater Проверяет, является ли первое значение большим, чем второе.
greaterOrEquals Проверяет, является ли первое значение большим, чем второе, или равным ему.
if Проверьте, какое значение имеет выражение: true или false. Возвращает указанное значение на основе результата.
less Проверяет, является ли первое значение меньшим, чем второе.
lessOrEquals Проверяет, является ли первое значение меньшим, чем второе, или равным ему.
не Проверяет, имеет ли выражение значение false.
or Проверяет, является ли хотя бы одно выражение истинным.

Функции преобразования

Эти функции используются для преобразования между собственными типами языка:

  • строка
  • integer
  • с плавающей запятой
  • boolean
  • массивы
  • dictionaries;
Функция преобразования Задача
array. Возвращает массив из одного экземпляра указанных входных данных. Для использования нескольких входных данных см. раздел createArray.
base64 Возвращает версию строки с кодировкой base64 для заданной строки.
base64ToBinary Возвращает двоичную версию строки с кодировкой base64.
base64ToString Возвращает строковую версию строки с кодировкой base64.
binary Возвращает двоичную версию входного значения.
bool Возвращает логическую версию входного значения.
coalesce Возвращает первое ненулевое значение из одного или нескольких параметров.
createArray Возвращает массив из нескольких экземпляров входных данных.
dataUri Возвращает URI данных входного значения.
dataUriToBinary Возвращает двоичную версию строки URI данных.
dataUriToString Возвращает строковую версию URI данных.
decodeBase64 Возвращает строковую версию строки с кодировкой base64.
decodeDataUri Возвращает двоичную версию строки URI данных.
decodeUriComponent Возвращает строку, которая заменяет escape-символы декодированными версиями.
encodeUriComponent Возвращает строку, которая заменяет символы, опасные для URL-адреса, escape-символами.
float Возвращает значение с плавающей запятой в качестве входного значения.
int Возвращает целочисленную версию строки.
json Возвращает значение типа JSON либо объект для строки или XML.
string Возвращает строковую версию входного значения.
uriComponent Возвращает кодированную версию URI для входного значения, заменив символы, опасные для URL-адреса, на escape-символы.
uriComponentToBinary Возвращает двоичную версию строки с закодированным URI.
uriComponentToString Возвращает строковую версию строки с закодированным URI.
xml Возвращает XML-версию строки.
xpath Проверяет XML на наличие узлов или значений, которые соответствуют выражению XPath, и возвращает соответствующие узлы или значения.

Математические функции

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

Математическая функция Задача
добавление Возвращает результат сложения двух чисел.
div Возвращает результат деления двух чисел.
max Возвращает наибольшее значение из набора чисел или массива.
min Возвращает наименьшее значение из набора чисел или массива.
mod (модуль) Возвращает остаток результата деления двух чисел.
mul Возвращает результат умножения двух чисел.
rand Возвращает случайное целое число из указанного диапазона.
range Возвращает массив целых чисел, который начинается с заданного целого числа.
sub Вычитает второе число из первого числа и возвращает результат.

Функции данных

Функция даты и времени Задача
addDays Добавляет количество дней к метке времени.
addHours Добавляет количество часов к метке времени.
addMinutes Добавляет количество минут к метке времени.
addSeconds Добавляет количество секунд к метке времени.
addToTime Добавляет количество единиц времени к метке времени. См. раздел getFutureTime.
convertFromUtc Преобразовывает метку времени формата UTC в целевой часовой пояс.
convertTimeZone Преобразовывает метку времени из исходного часового пояса в целевой.
convertToUtc Преобразует метку времени с исходным часовым поясом в формат UTC.
dayOfMonth Возвращает компонент дня месяца из метки времени.
dayOfWeek Возвращает компонент дня недели из метки времени.
dayOfYear Возвращает компонент дня года из метки времени.
formatDateTime Возвращает метку времени в виде строки в произвольном формате.
getFutureTime Возвращает текущую метку времени, а также указанные единицы времени. См. раздел addToTime.
getPastTime Возвращает текущую метку времени, вычитая указанные единицы времени. См. раздел subtractFromTime.
startOfDay Возвращает начало дня для метки времени.
startOfHour Возвращает начало часа для метки времени.
startOfMonth Возвращает начало месяца для метки времени.
subtractFromTime Вычитает количество единиц времени из метки времени. См. раздел getPastTime.
ticks Возвращает значение свойства ticks для указанной метки времени.
utcNow Возвращает текущую метку времени в виде строки.

Подробные примеры для практики

Подробный конвейер копирования фабрики данных Azure с параметрами

В руководстве по передаче параметра в конвейере копирования фабрики данных Azure описано, как передавать параметры между конвейером и действием, а также между действиями.

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

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

Подробные сведения о конвейере с параметрами, управляемом метаданными

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

Список системных переменных, которые можно использовать в выражениях, см. в статье System variables supported by Azure Data Factory (Системные переменные, поддерживаемые фабрикой данных Azure).