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


Оператор union

Принимает несколько таблиц и возвращает строки из них.

Синтаксис

[ T | ] union [ withsource= UnionParameters ] [kind=outerinner| columnName] [ ColumnName] [ таблицыisfuzzy= true|false

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

Примечание.

Операция union оператора может быть изменена, задав best_effort для свойства запроса значение true, используя инструкцию set или через свойства запроса клиента. Если для этого свойства задано trueзначение, union оператор игнорирует нечеткое разрешение и сбои подключения для выполнения любого из вложенных выражений, которые "объединяются" и выдает предупреждение в результатах состояния запроса.

Параметры

Имя (название) Type Обязательно Описание
T string Входное табличное выражение.
UnionParameters string ноль или более разделенных пробелами параметров в виде имя = значение, управляющих поведением операции сопоставления строк и планом выполнения. См . поддерживаемые параметры объединения.
kind string inner или outer. inner Приводит к тому, что результат содержит подмножество столбцов, которые являются общими для всех входных таблиц. outer Приводит к тому, что результат содержит все столбцы, происходящие в любом из входных данных. Ячейки, не определенные входной строкой, имеют значение null. Значение по умолчанию — outer.

В outerрезультате есть все столбцы, которые происходят в любом из входных данных, один столбец для каждого вхождения имени и типа. Это означает, что если столбец отображается в нескольких таблицах и имеет несколько типов, он имеет соответствующий столбец для каждого типа в результате объединения. Это имя столбца суффиксируется с именем _, за которым следует тип исходного столбца.
withsource=ColumnName string Если задано, выходные данные включают столбец с именем ColumnName , значение которого указывает, какая исходная таблица внесла каждую строку. Если запрос фактически ссылается на таблицы из нескольких баз данных, включая базу данных по умолчанию, значение этого столбца содержит имя таблицы, указанное в базе данных. Квалификация кластера и базы данных присутствует в значении, если на нее ссылается несколько кластеров.
isfuzzy bool Если задано значение true, допускает нечеткое разрешение ног объединения. Набор источников объединения сводится к набору ссылок на таблицы, которые существуют и доступны во время анализа запроса и подготовки к выполнению. Если обнаружена по крайней мере одна такая таблица, любой сбой разрешения выдает предупреждение в результатах состояния запроса, но не будет препятствовать выполнению запроса. Если разрешения не были успешными, запрос возвращает ошибку. Значение по умолчанию — false.

isfuzzy=true применяется только к этапу разрешения источников union. После определения набора исходных таблиц возможные дополнительные сбои запросов не будут подавляться.
Таблицы string Одна или несколько ссылок на таблицы, разделенные запятыми, выражение запроса, заключенное с скобками, или набор таблиц, указанных подстановочным знаком. Например, E* сформирует объединение всех таблиц в базе данных, имена которых начинаются с E.

Поддерживаемые параметры объединения

Имя. Type Обязательно Описание
hint.concurrency int Указывает системе, сколько параллельных вложенных запросов оператора union необходимо выполнять одновременно. По умолчанию используется число ядер ЦП на одном узле кластера (от 2 до 16).
hint.spread int Указывает системе, сколько узлов должно использоваться при параллельном выполнении вложенных запросов union. Значение по умолчанию — 1.
Имя. Type Обязательно Описание
T string Входное табличное выражение.
kind string inner или outer. inner Приводит к тому, что результат содержит подмножество столбцов, которые являются общими для всех входных таблиц. outer Приводит к тому, что результат содержит все столбцы, происходящие в любом из входных данных. Ячейки, не определенные входной строкой, имеют значение null. Значение по умолчанию — outer.

В outerрезультате есть все столбцы, которые происходят в любом из входных данных, один столбец для каждого вхождения имени и типа. Это означает, что если столбец отображается в нескольких таблицах и имеет несколько типов, он имеет соответствующий столбец для каждого типа в результате объединения. Это имя столбца суффиксируется с именем _, за которым следует тип исходного столбца.
withsource=ColumnName 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 

Выходные данные

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 

Выходные данные

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