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

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

Совет

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

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

Expression Builder

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

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

Open Expression Builder derive

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

Blue expression box

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

Computed column option

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

Add dynamic content option

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

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

Expression elements

Функции

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

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

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

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

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

Expression Builder array

Важно!

В потоках данных для сопоставления массивы отсчитываются с единицы, т. е. на первый элемент ссылается индекс 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.

Cached lookup

Локальные

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

Create local

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

Create local 2

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

Using locals

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

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

In-progress preview

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

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

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

  • "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 */

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

Comment in the transformation text box

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

Многие функции языка выражений используют синтаксис регулярных выражений. При использовании функций регулярных выражений построитель выражений пытается интерпретировать обратную косую черту (\) как последовательность 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', 'yyyy-MM-dd HH:mm:ss.SSS') ) * 1000l

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

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

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