Оператор 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 | where LeftTable. Имя столбца== 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 |
См. также
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по