Руководство. Объединение данных из нескольких таблиц

Объединение данных из нескольких таблиц обеспечивает более полный анализ за счет объединения информации из разных источников и создания новых связей между точками данных. В язык запросов Kusto (KQL) операторы соединения и поиска используются для объединения данных между таблицами.

Из этого руководства вы узнаете, как выполнять следующие задачи:

В примерах в этом руководстве используется общедоступный кластер справки. Чтобы изучить собственные данные, создайте собственный бесплатный кластер.

Предварительные требования

  • Учетная запись Майкрософт или удостоверение пользователя Microsoft Entra для входа в кластер справки

Использование оператора Join

В базе данных Samples есть две таблицы, связанные с событиями storm. Один называется StormEvents , а другой — PopulationData. В этом разделе вы соедините таблицы для выполнения анализа данных, который невозможно выполнить только с одной таблицей.

Используемые данные

Используйте оператор take для просмотра данных, содержащихся в каждой таблице.

StormEvents 
| take 5

В следующей таблице показаны только 6 из 22 возвращенных столбцов.

StartTime EndTime EpisodeId EventId Состояние EventType ...
2007-09-20T21:57:00Z 2007-09-20T22:05:00Z 11078 60913 Флорида Ураган ...
2007-12-20T07:50:00Z 2007-12-20T07:53:00Z 12554 68796 Миссисипи Шквалистый ветер ...
2007-12-30T16:00:00Z 2007-12-30T16:05:00Z 11749 64588 Грузия Шквалистый ветер ...
2007-09-29T08:11:00Z 2007-09-29T08:11:00Z 11091 61032 ЮЖНО-АТЛАНТИЧЕСКИЕ ШТАТЫ Торнадо ...
2007-09-18T20:00:00Z 2007-09-19T18:00:00Z 11074 60904 Флорида Сильный ливень ...
PopulationData 
| take 5

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

Состояние Заполнение
АЛАБАМА 4918690
АЛЯСКА 727951
АРИЗОНА 7399410
АРКАНЗАС 3025880
Калифорния 39562900

Обе таблицы содержат столбец State . Таблица StormEvents содержит гораздо больше столбцов, а PopulationData содержит только один другой столбец, содержащий заполнение заданного состояния.

Объединение таблиц

Соедините таблицу PopulationData с StormEvents по общему State столбцу, чтобы найти общий материальный ущерб, причиненный штормами на душу населения по штатам.

StormEvents
| summarize PropertyDamage = sum(DamageProperty) by State
| join kind=innerunique PopulationData on State
| project State, PropertyDamagePerCapita = PropertyDamage / Population
| sort by PropertyDamagePerCapita

Добавьте | render columnchart в запрос, чтобы визуализировать результат.

Снимок экрана: гистограмма, показывающая материальный ущерб на душу населения по штатам.

Совет

Существует множество типов соединений, которые можно выполнять с join помощью оператора . См. список вариантов соединения.

Использование оператора поиска

Оператор подстановки оптимизирует производительность запросов, в которых таблица фактов обогащена данными из таблицы измерения. Он расширяет таблицу фактов значениями, которые находятся в таблице измерения. Для достижения оптимальной производительности система по умолчанию предполагает, что левая таблица является большей таблицей фактов, а правая таблица — таблицей меньшего измерения. Это прямо противоположно предположению, используемому оператором join .

В кластере справки есть другая база данных с именем ContosoSales , которая содержит данные о продажах. Следующий запрос использует lookup для объединения SalesFact таблиц и Products из этой базы данных, чтобы получить общий объем продаж по категориям продуктов.

SalesFact
| lookup Products on ProductKey
| summarize TotalSales = count() by ProductCategoryName
| order by TotalSales desc

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

ProductCategoryName TotalSales
Игры и игрушки 966782
Телевизоры и видеотехника 715024
Фото- и видеокамеры 323003
Компьютеры 313487
Бытовая техника 237508
звук; 192671
Мобильные телефоны 50342
Музыка, фильмы и аудиокниги 33376

Примечание

Оператор lookup поддерживает только два варианта соединения: leftouter и inner.

Объединение таблиц, созданных запросом

Соединения также можно выполнять на основе результатов запроса из той же таблицы.

Предположим, вы хотите создать список состояний, в которых произошли события молнии и лавины. Используйте оператор join для объединения строк двух таблиц( одна из них содержит данные о событиях молнии, а другая — данные о событиях лавины) на основе столбца State .

StormEvents
| where EventType == "Lightning"
| distinct State
| join kind=inner (
    StormEvents 
    | where EventType == "Avalanche"
    | distinct State
    )
    on State
| project State

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

Состояние
ОРЕГОН
ЮТА
ВАЙОМИНГ
ВАШИНГТОН
КОЛОРАДО
АЙДАХО
НЕВАДА