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


Оператор lookup

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

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

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

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

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

Примечание.

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

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

rightSide
| summarize sum(estimate_data_size(*))

Синтаксис

LeftTable lookup) | on [kind = (leftouterinner|)] (Условия правой таблицы

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

Параметры

Имя (название) 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есть строка в выходных данных для каждого сочетания соответствующих строк слева и справа.

Примеры

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 Билл Клинтон выставление счетов
3 Билл Клинтон выставление счетов
4 Стив Балмер стивб
5 Tim Повар тимк