Поделиться через


Оператор lookup

Область применения: ✅Microsoft Fabric

Расширяет столбцы таблицы фактов со значениями, отображаемыми в таблице измерений.

Например, следующий запрос приводит к таблице, которая расширяет FactTable ($left) с данными из DimensionTable ($right) путем выполнения подстановки. Подстановка соответствует каждой паре (CommonColumn, Col1) из FactTable с каждой парой (CommonColumn, Col2) в DimensionTable. Различия между таблицами фактов и измерений см. в таблицах фактов и измерений.

FactTable | lookup kind=leftouter (DimensionTable) on CommonColumn, $left.Col1 == $right.Col2

Оператор lookup выполняет операцию, аналогичную оператору соединения со следующими различиями:

  • Результат не повторяет столбцы из $right таблицы, которая является основой для операции соединения.
  • Поддерживаются только два типа подстановки, leftouter и innerпри leftouter этом используется значение по умолчанию.
  • С точки зрения производительности система по умолчанию предполагает, что $left таблица является большей (фактами), а $right таблица — меньшей (измерениями). Это совершенно противоположно предположению, используемому join оператором.
  • Оператор lookup автоматически передает $right таблицу в $left таблицу (по сути, ведет себя так, как если hint.broadcast бы он был указан). Это ограничивает размер $right таблицы.

Примечание.

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

Чтобы оценить размер правой стороны в байтах, выполните следующий запрос:

rightSide
| summarize sum(estimate_data_size(*))

Синтаксис

leftTable|lookup [kind= (leftouter|inner)] (Атрибуты)onrightTable

Дополнительные сведения о соглашениях синтаксиса.

Параметры

Имя (название) Type Обязательно Описание
ЛеваяTable string ✔️ Табличное или табличное выражение, которое является основой подстановки. Обозначается как $left.
RightTable string ✔️ Табличное или табличное выражение, которое используется для заполнения новых столбцов в таблице фактов. Обозначается как $right.
Атрибуты string ✔️ Список с разделителями-запятыми одного или нескольких правил, описывающих сопоставление строк из LeftTable со строками из RightTable. Несколько правил оцениваются с помощью логического оператора and. См . правила.
kind string Определяет, как обрабатывать строки в ЛевойTable, которые не соответствуют в RightTable. По умолчанию используется leftouter, что означает, что все эти строки отображаются в выходных данных со значениями NULL, используемыми для отсутствующих значений RightTable столбцов, добавленных оператором. Если inner используется, такие строки опущены из выходных данных. Другие виды соединения не поддерживаются оператором lookup .

Правила

Тип правила Синтаксис Предикат
Равенство по имени ColumnName where LeftTable.ColumnName==RightTable.ColumnName
Равенство по значению $left. LeftColumn==$right.RightColumn where $left. LeftColumn *RightColumn==$right.

Примечание.

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

Возвраты

Таблица со следующими элементами.

  • Столбец для каждого столбца в каждой из двух таблиц, в том числе соответствующие ключи. Столбцы правой стороны автоматически переименовываются при возникновении конфликтов имен.
  • Строка для каждого соответствия во входных таблицах. Соответствие — это строки из обеих таблиц, у которых совпадают значения всех полей on .
  • атрибуты (ключи подстановки) отображаются только один раз в выходной таблице.
  • Если kind не указано или kind=leftouter, в дополнение к внутренним совпадениям, есть строка для каждой строки слева (или или справа), даже если она не соответствует. В этом случае ячейки выходных данных без соответствий содержат значения NULL.
  • Если kind=innerесть строка в выходных данных для каждого сочетания соответствующих строк слева и справа.

Примеры

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

let FactTable=datatable(Row:string,Personal:string,Family:string) [
  "1", "Rowan",   "Murphy",
  "2", "Ellis",   "Turner",
  "3", "Ellis",   "Turner",
  "4", "Maya",  "Robinson",
  "5", "Quinn",    "Campbell"
];
let DimTable=datatable(Personal:string,Family:string,Alias:string) [
  "Rowan",  "Murphy",   "rowanm",
  "Ellis",  "Turner", "ellist",
  "Maya", "Robinson", "mayar",
  "Quinn",   "Campbell",    "quinnc"
];
FactTable
| lookup kind=leftouter DimTable on Personal, Family

выходных

Строка Персональный Семья Псевдоним
1 Рябина Мерфи rowanm
2 Эллис Токарь ellist
3 Эллис Токарь ellist
4 Майя Робинсон майяр
5 Квинн Кэмпбелл quinnc