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

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

Совет

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

В потоке данных для сопоставления свойства преобразования вводятся в виде выражений. Эти выражения состоят из значений столбцов, параметров, функций, операторов и литералов, результатом вычисления которых во время выполнения является тип данных Spark. В потоках данных для сопоставления предусмотрен специализированный интерфейс под названием построитель выражений, предназначенный для построения этих выражений. Благодаря использованию функции завершения кода IntelliSense для выделения, проверки синтаксиса и автозаполнения построитель выражений упрощает создание потоков данных. В этой статье объясняется, как использовать построитель выражений для эффективного создания бизнес-логики.

Построитель выражений

Открытие редактора выражений

Для открытия построителя выражений существует множество точек входа. Все они зависят от конкретного контекста преобразования потока данных. Наиболее распространенным вариантом использования являются преобразования, такие как производный столбец и статистическое вычисление, где пользователи создают или обновляют столбцы с помощью языка выражений потока данных. Построитель выражений можно открыть, выбрав Open expression builder (Открыть построитель выражений) над списком столбцов. Вы также можете выбрать контекст столбца и открыть построитель выражений непосредственно в этом выражении.

Открыть построитель выражений Derive

В некоторых преобразованиях, таких как фильтр, щелчок текстового поля синего выражения открывает построитель выражений.

Синее поле выражения

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

Опция

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

Параметр

Элементы выражения

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

Элементы выражения

Функции

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

Определяемые пользователем функции (предварительная версия)

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

Индексы массива адресов

При работе со столбцами или функциями, возвращающими типы массивов, используйте квадратные скобки ([]) для доступа к конкретному элементу. Если индекс не существует, то выражение принимает значение NULL.

Массив построителя выражений

Внимание

В потоках данных для сопоставления массивы отсчитываются с единицы, т. е. на первый элемент ссылается индекс 1. Например, myArray [1] будет обращаться к первому элементу массива с именем "myArray".

Схема ввода

Если в потоке данных используется определенная схема в любом из ее источников, можно ссылаться на столбец по имени во многих выражениях. Если используется дрейф схемы, можно явно ссылаться на столбцы с помощью byName() функций или сопоставлять с шаблонами столбцов с помощью byNames().

Имена столбцов со специальными знаками

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

{[dbo].this_is my complex name$$$}

Параметры

Параметры — это значения, которые передаются из канала обработки в поток данных во время выполнения. Чтобы ссылаться на параметр, выберите параметр в представлении элементов выражения или сослаться на него с помощью знака доллара перед его именем. Например, параметр с именем parameter1 указан в $parameter1. Дополнительные сведения см. в статье Параметризация потоков данных для сопоставления.

Кэшированный поиск

Кэшированный поиск позволяет выполнять встроенный поиск выходных данных кэшированного приемника. В каждом приемнике доступно для использования две функции: lookup() и outputs(). Для ссылки на эти функции используется синтаксис cacheSinkName#functionName(). Дополнительные сведения см. в разделе Поглотители кэша.

lookup() принимает совпадающие столбцы в текущем преобразовании в виде параметров и возвращает сложный столбец, равный строке, которая соответствует ключевым столбцам в приемнике кэша. Возвращаемый сложный столбец включает подстолбцы для каждого сопоставленного столбца в хранилище кэша. Например, если у вас есть приемник кэша кода ошибки errorCodeCache, у которого ключевой столбец совпадает с кодом и есть столбец под названием Message. При вызове errorCodeCache#lookup(errorCode).Message будет возвращено сообщение, которое соответствует переданному коду.

Функция outputs() не принимает параметры и возвращает весь приемник кэша в виде массива сложных столбцов. Это не может быть вызвано, если ключевые столбцы указаны в хранилище, и следует использовать только в том случае, если в кэше хранилища есть несколько строк. Распространенным вариантом использования является добавление максимального значения инкрементирующегося ключа. Если одна кэшированная сводная строка CacheMaxKey содержит столбец MaxKey, то можно сослаться на первое значение, вызвав метод CacheMaxKey#outputs()[1].MaxKey.

Кэшированный поиск

Локальные

Если вы предоставляете общий доступ к логике между несколькими столбцами или хотите секционировать логику, можно создать локальную переменную. Локальная логика — это набор логики, который не передается к следующему этапу преобразования. Локальную логику можно создать в построителе выражений, выбрав в разделе Элементы выражения пункт Локальная логика. Создание нового, выбрав Создать новую.

Создать локальную

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

Создать локальный 2

Чтобы сослаться на локальную переменную в преобразовании, выберите её из представления элементов выражения или укажите двоеточие перед её именем. Например, ссылка на локальный элемент с именем local1 выглядит вот так — :local1. Чтобы изменить локальное определение, наведите указатель мыши на него в представлении элементов выражения и выберите значок карандаша.

Использование локальной логики

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

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

Предварительный просмотр в процессе выполнения

Интерполяция строк

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

Некоторые примеры интерполяции строк:

  • "My favorite movie is {iif(instr(title,', The')>0,"The {split(title,', The')[1]}",title)}"

  • "select * from {$tablename} where orderyear > {$year}"

  • "Total cost with sales tax is {round(totalcost * 1.08,2)}"

  • "{:playerName} is a {:playerRating} player"

Примечание.

При использовании синтаксиса интерполяции строк в исходных запросах SQL строка запроса должна находиться в одной строке без "/n".

Комментарии к выражениям

К выражениям можно добавлять комментарии с использованием однострочного и многострочного синтаксиса комментариев.

Примеры допустимых комментариев:

  • /* This is my comment */

  • /* This is a

  • multi-line comment */

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

Комментарий в текстовом поле преобразования

Регулярные выражения

Многие функции языка выражений используют синтаксис регулярных выражений. При использовании функций регулярных выражений построитель выражений пытается интерпретировать обратную косую черту (\) как последовательность escape-символов. Если вы используете в регулярном выражении обратную косую черту, заключите всё регулярное выражение в обратные кавычки (`) или используйте двойную обратную косую черту.

Пример, в котором используются обратные кавычки:

regex_replace('100 and 200', `(\d+)`, 'digits')

Пример, в котором используются двойные косые черты:

regex_replace('100 and 200', '(\\d+)', 'digits')

Сочетания клавиш

Ниже приведен список сочетаний клавиш, доступных в построителе выражений. При создании выражений доступны большинство сочетаний клавиш IntelliSense.

  • CTRL + K CTRL + C: комментирование всей строки.
  • CTRL + K CTRL + U: раскомментирование.
  • F1: предоставление команд справки по редактору.
  • ALT + СТРЕЛКА ВНИЗ: перемещение вниз по текущей строке.
  • ALT + СТРЕЛКА ВВЕРХ: перемещение вверх по текущей строке.
  • Ctrl + Пробел: Отображение контекстной помощи.

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

Преобразование в даты или метки времени

Чтобы включить строковые литералы в выходные данные меток времени, заключите преобразование в toString().

toString(toTimestamp('12/31/2016T00:12:00', 'MM/dd/yyyy\'T\'HH:mm:ss'), 'MM/dd /yyyy\'T\'HH:mm:ss')

Чтобы преобразовать миллисекунды из эпохи в дату или метку времени, используйте toTimestamp(<number of milliseconds>). Если время указано в секундах, умножьте его на 1000.

toTimestamp(1574127407*1000l)

Замыкающий символ "l" в конце предыдущего выражения означает преобразование в тип long в качестве встроенного синтаксиса.

Поиск времени из эпохи или времени Unix

toLong(currentTimestamp() - toTimestamp('1970-01-01 00:00:00.000", 'гггг-ММ-дд HH:mm:ss. SSS') ) * 1000l

Оценка времени потока данных

Обработка потоков данных с точностью до миллисекунд. Для 2018-07-31T20:00:00.21700000 вы увидите 2018-07-31T20:00:00.217 в выходных данных. На портале службы метка времени отображается в текущих настройках браузера, что может скрыть 217, но когда вы будете запускать поток данных от начала до конца, 217 (часть с миллисекундами также обрабатывается). Вы можете использовать toString(myDateTimeColumn) в качестве выражения и просматривать данные с полной точностью в режиме предварительного просмотра. Обрабатывайте datetime как datetime, а не как строку в любых практических случаях.

Начало создания выражений преобразования данных.