Оператор union
Принимает несколько таблиц и возвращает строки из них.
Синтаксис
[ T|
] union
[ UnionParameters ] [kind=
|outer
inner
] [withsource=
ColumnName] [isfuzzy=
|true
false
] Tables
Дополнительные сведения о соглашениях о синтаксисе.
Примечание
Операцию union
оператора можно изменить, присвоив свойству best_effort
true
запроса значение , используя инструкцию set или свойства запроса клиента. Если для этого свойства задано значение true
, union
оператор игнорирует нечеткое разрешение и сбои подключения для выполнения любого из вложенных выражений, которые "объединяются", и выдает предупреждение в результатах состояния запроса.
Параметры
Имя | Тип | Обязательно | Описание |
---|---|---|---|
T | string |
Входное табличное выражение. | |
UnionParameters | string |
Ноль или более параметров, разделенных пробелами, в виде значения имени= , которые управляют поведением операции сопоставления строк и плана выполнения. См. раздел Поддерживаемые параметры объединения. |
|
kind |
string |
inner или outer . inner приводит к тому, что результат содержит подмножество столбцов, которые являются общими для всех входных таблиц. outer приводит к тому, что результат будет содержать все столбцы, которые имеются в любом из входных данных. Ячейки, не определенные входной строкой, имеют значение null . Значение по умолчанию — outer .При outer использовании результат содержит все столбцы, которые встречаются в любом из входных данных, по одному столбцу для каждого вхождения имени и типа. Это означает, что если столбец отображается в нескольких таблицах и имеет несколько типов, он имеет соответствующий столбец для каждого типа в результате объединения. Имя этого столбца имеет суффикс "_", за которым следует тип исходного столбца. |
|
withsource= Имя столбца |
string |
Если этот параметр указан, выходные данные содержат столбец ColumnName , значение которого указывает, какая исходная таблица предоставила каждую строку. Если запрос фактически ссылается на таблицы из нескольких баз данных, включая базы данных по умолчанию, то значение этого столбца имеет имя таблицы, квалифицированные как база данных. Квалификации кластера и базы данных присутствуют в значении, если указано несколько ссылок на кластер. | |
isfuzzy |
bool |
Если задано значение true , допускается нечеткое разрешение ног объединения. Набор источников объединения сводится к набору ссылок на таблицы, которые существуют и доступны во время анализа запроса и подготовки к выполнению. Если обнаружена хотя бы одна такая таблица, любой сбой разрешения выдает предупреждение в результатах состояния запроса, но не препятствует выполнению запроса. Если разрешения не были успешными, запрос возвращает ошибку. Значение по умолчанию — false .isfuzzy=true применяется только к этапу разрешения источников union . После определения набора исходных таблиц возможные дополнительные сбои запросов не будут подавляться. |
|
Таблицы | string |
Одна или несколько ссылок на таблицы с разделиниями-запятыми, выражение запроса, заключенное в круглые скобки, или набор таблиц, указанных с подстановочным знаком. Например, E* сформирует объединение всех таблиц в базе данных, имена которых начинаются с E . |
Поддерживаемые параметры объединения
Имя | Тип | Обязательно | Описание |
---|---|---|---|
hint.concurrency |
int |
Указывает системе, сколько параллельных вложенных запросов оператора union необходимо выполнять одновременно. По умолчанию используется количество ядер ЦП на одном узле кластера (от 2 до 16). |
|
hint.spread |
int |
Указывает системе, сколько узлов должно использоваться при параллельном выполнении вложенных запросов union . Значение по умолчанию — 1. |
Имя | Тип | Обязательно | Описание |
---|---|---|---|
T | string |
Входное табличное выражение. | |
kind |
string |
inner или outer . inner приводит к тому, что результат содержит подмножество столбцов, которые являются общими для всех входных таблиц. outer приводит к тому, что результат будет содержать все столбцы, которые имеются в любом из входных данных. Ячейки, не определенные входной строкой, имеют значение null . Значение по умолчанию — outer .При outer использовании результат содержит все столбцы, которые встречаются в любом из входных данных, по одному столбцу для каждого вхождения имени и типа. Это означает, что если столбец отображается в нескольких таблицах и имеет несколько типов, он имеет соответствующий столбец для каждого типа в результате объединения. Имя этого столбца имеет суффикс "_", за которым следует тип исходного столбца. |
|
withsource= Имя столбца |
string |
Если этот параметр указан, выходные данные содержат столбец ColumnName , значение которого указывает, какая исходная таблица предоставила каждую строку. Если запрос фактически ссылается на таблицы из нескольких баз данных, включая базы данных по умолчанию, то значение этого столбца имеет имя таблицы, квалифицированные как база данных. Квалификации кластера и базы данных присутствуют в значении, если указано несколько ссылок на кластер. | |
isfuzzy |
bool |
Если задано значение true , допускается нечеткое разрешение ног объединения. Набор источников объединения сводится к набору ссылок на таблицы, которые существуют и доступны во время анализа запроса и подготовки к выполнению. Если обнаружена хотя бы одна такая таблица, любой сбой разрешения выдает предупреждение в результатах состояния запроса, но не препятствует выполнению запроса. Если разрешения не были успешными, запрос возвращает ошибку. Однако в запросах между рабочими областями и приложениями, если какая-либо из рабочих областей или приложений не найдена, запрос завершится ошибкой. Значение по умолчанию — false .isfuzzy=true применяется только к этапу разрешения источников union . После определения набора исходных таблиц возможные дополнительные сбои запросов не будут подавляться. |
|
Таблицы | string |
Одна или несколько ссылок на таблицы с разделиниями-запятыми, выражение запроса, заключенное в круглые скобки, или набор таблиц, указанных с подстановочным знаком. Например, E* сформирует объединение всех таблиц в базе данных, имена которых начинаются с E .Когда список таблиц будет известен, откажитесь от использования подстановочных знаков. Некоторые рабочие области содержат очень большое количество таблиц, что может привести к неэффективному выполнению. Кроме того, со временем могут быть добавлены новые таблицы, что приведет к непредсказуемым результатам. |
Примечание
- В
union
область могут содержаться операторы let, если они связаны сview
ключевое слово. - Область
union
не будет включать функции. Чтобы включить функцию, определите оператор let сview
ключевое слово. - Нет никакой гарантии порядка, в котором будут появляться ноги объединения, но если каждая нога имеет
order by
оператора, то каждая нога будет сортироваться.
Возвращаемое значение
Таблица с количеством строк, соответствующим количеству строк во всех входных таблицах.
Примеры
Таблицы со строкой в имени или столбце
union K* | where * has "Kusto"
Строки из всех таблиц в базе данных, имена которых начинаются с K
, а в каком-либо столбце содержится слово Kusto
.
Количество уникальных значений
union withsource=SourceTable kind=outer Query, Command
| where Timestamp > ago(1d)
| summarize dcount(UserId)
Количество различных пользователей, которые за последний день создали событие Query
или Command
. В результате в столбце SourceTable будет указано одно из значений: Query или Command.
Query
| where Timestamp > ago(1d)
| union withsource=SourceTable kind=outer
(Command | where Timestamp > ago(1d))
| summarize dcount(UserId)
Это более эффективный способ получить тот же результат, так как перед объединением каждая таблица отфильтровывается.
Использование isfuzzy=true
// Using union isfuzzy=true to access non-existing view:
let View_1 = view () { print x=1 };
let View_2 = view () { print x=1 };
let OtherView_1 = view () { print x=1 };
union isfuzzy=true
(View_1 | where x > 0),
(View_2 | where x > 0),
(View_3 | where x > 0)
| count
Выходные данные
Счетчик |
---|
2 |
Наблюдение за состоянием запроса — возвращается следующее предупреждение: Failed to resolve entity 'View_3'
// Using union isfuzzy=true and wildcard access:
let View_1 = view () { print x=1 };
let View_2 = view () { print x=1 };
let OtherView_1 = view () { print x=1 };
union isfuzzy=true View*, SomeView*, OtherView*
| count
Выходные данные
Счетчик |
---|
3 |
Наблюдение за состоянием запроса — возвращается следующее предупреждение: Failed to resolve entity 'SomeView*'
Несоответствие типов исходных столбцов
let View_1 = view () { print x=1 };
let View_2 = view () { print x=toint(2) };
union withsource=TableName View_1, View_2
Выходные данные
TableName | x_long | x_int |
---|---|---|
View_1 | 1 | |
View_2 | 2 |
let View_1 = view () { print x=1 };
let View_2 = view () { print x=toint(2) };
let View_3 = view () { print x_long=3 };
union withsource=TableName View_1, View_2, View_3
Выходные данные
TableName | x_long1 | x_int | x_long |
---|---|---|---|
View_1 | 1 | ||
View_2 | 2 | ||
View_3 | 3 |
Столбец x
из View_1
получил суффикс _long
, и так как столбец с именем x_long
уже существует в схеме результата, для имен столбцов выполнено удаление дубликатов, что привело к созданию нового столбца — x_long1
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по