Оператор 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
)] (
Атрибуты)
on
rightTable
Дополнительные сведения о соглашениях синтаксиса.
Параметры
Имя (название) | 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 |
Связанный контент
- присоединение к широковещательной трансляции
- слева соединения
- внутреннее соединение
- оператор соединения