Оператор union

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

Синтаксис

[ T| ] union [ UnionParameters ] [kind=|outerinner] [withsource=ColumnName] [isfuzzy=|truefalse] Tables

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

Примечание

Операцию union оператора можно изменить, присвоив свойству best_efforttrueзапроса значение , используя инструкцию 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