Оператор lookup

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

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

Здесь результатом является таблица, которая расширяет FactTable ($left) данными из DimensionTable (на которые ссылается $right) путем выполнения поиска каждой пары (CommonColumn,Col) из предыдущей таблицы с каждой парой (CommonColumn1,Col2) в последней таблице. Различия между таблицами фактов и измерений см. в разделе Таблицы фактов и измерений.

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

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

Примечание

Если правая часть поиска превышает несколько десятков МБ, запрос завершится ошибкой.

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

rightSide
| summarize sum(estimate_data_size(*))

Синтаксис

Леваяtable|lookup [kind= (leftouter|inner)] (Условиятаблицы rightTable)on

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

Параметры

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

Правила

Тип правила Синтаксис Predicate
Равенство по имени ColumnName whereLeftTable. Имя столбца==RightTable. Имя столбца
Равенство по значению $left.LeftColumn==$right.RightColumn where$left.LeftColumn==$right.*RightColumn

Примечание

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

Возвращаемое значение

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

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

Примеры

let FactTable=datatable(Row:string,Personal:string,Family:string) [
  "1", "Bill",   "Gates",
  "2", "Bill",   "Clinton",
  "3", "Bill",   "Clinton",
  "4", "Steve",  "Ballmer",
  "5", "Tim",    "Cook"
];
let DimTable=datatable(Personal:string,Family:string,Alias:string) [
  "Bill",  "Gates",   "billg",
  "Bill",  "Clinton", "billc",
  "Steve", "Ballmer", "steveb",
  "Tim",   "Cook",    "timc"
];
FactTable
| lookup kind=leftouter DimTable on Personal, Family
Строка Персональный Семейство Псевдоним
1 Билл Шлюзы выставление счетов
2 Билл Клинтон billc
3 Билл Клинтон billc
4 Вася Баллмер steveb
5 Тим Готовить timc