Объединить более 2 таблиц с помощью SWQL(SolarWinds Query Language), когда нет общего поля?
Я наблюдаю за своим узлом с помощью SolarWinds Orion NPM (мониторинг производительности сети). И я использую Orion SDK для получения информации о предупреждениях от SWIS (информационная служба SolarWinds) в консольном приложении vb.net.
Я использую некоторый код vb.net:
Function GetOneAlert(ByVal swis As InformationServiceClient) As AlertInfo
Dim query As String, result As XElement
query = "SELECT TOP 1 A.AlertDefID, A.ActiveObject, A.ObjectType FROM Orion.AlertStatus A WHERE A.Acknowledged=0 ORDER BY A.TriggerTimeStamp DESC"
result = swis.QueryXml(query)
Проблема в том, что я хочу получить alertinforamtion
из трех названных таблиц Orion.AlertDefinitions
, Orion.AlertStatus
а такжеOrion.Nodes
в swis
(Информационная служба SolarWinds), и мне нужно объединить эти 3 таблицы, но я могу объединить 2 из них (Orion.AlertDefinitions
, Orion.AlertStatus
) с помощью swql
(SolarWinds Query Language) запрос показан ниже
query = "SELECT AlertStatus.AlertDefID, AlertDefinitions.AlertDefID, AlertDefinitions.Name, AlertStatus.State, AlertStatus.ObjectName,
AlertStatus.TriggerTimeStamp, AlertDefinitions.Description FROM Orion.AlertStatus INNER JOIN Orion.AlertDefinitions
ON AlertStatus.AlertDefID=AlertDefinitions.AlertDefID WHERE AlertStatus.Acknowledged=0"
Я знаю подробности оповещения, но не знаю, к какому узлу относится оповещение. Для этого мне нужно объединить таблицу "orion.node" с остальными таблицами. Но 3-ий стол (Orion.Nodes
) не имеет общих полей в двух других таблицах для присоединения. Мне нужно получить три значения поля с именем как DNS
, IPAddress
, NodeDescription
от Orion.Nodes
Таблица.
2 ответа
Если вас интересуют оповещения, связанные с узлами, и вы хотите объединить сведения об узлах, вам следует выбирать только оповещения с AlertStatus.ObjectType='Node'
и присоединиться, используя AlertStatus.ActiveObject
какой NodeID
узла, связанного. Таким образом, запрос (с указанными свойствами узла) будет выглядеть так:
SELECT AlertStatus.AlertDefID, AlertDefinitions.AlertDefID, AlertDefinitions.Name, AlertStatus.State, AlertStatus.ObjectName, AlertStatus.TriggerTimeStamp, AlertDefinitions.Description, Nodes.IPAddress, Nodes.Dns, Nodes.NodeDescription
FROM Orion.AlertStatus
INNER JOIN Orion.AlertDefinitions
ON AlertStatus.AlertDefID=AlertDefinitions.AlertDefID
INNER JOIN Orion.Nodes
ON AlertStatus.ActiveObject=Nodes.NodeID
WHERE AlertStatus.Acknowledged=0 AND AlertStatus.ObjectType='Node'
В любом случае, для более конкретных вопросов и ответов о Orion SDK и SWIS, возможно, вы захотите взглянуть на Thwack Foru m Orion SDK.
Есть также автоматические ассоциации между таблицами в SWQL, например, SWQL ниже не использует JOINs
но звонки из нескольких таблиц:
SELECT E0.[Node].Caption, E0.AssignmentName, E0.CustomPollerName,
E0.DetailsUrl, E0.DisplayName, E0.NodeID, E0.Status, E0.StatusDescription,
E0.StatusIconHint, E0.StatusLED, E0.UnManaged, E0.UnManageFrom, E0.UnManageUntil, E0.Uri,
E0.[Node].Description, E0.[CustomPoller].[OID] = '1.3.6.1.2.1.1.3',
E0.[CustomPollerStatusScalar].[Status]
FROM Orion.NPM.CustomPollerAssignmentOnNode AS E0
WHERE E0.[Node].[SysObjectID] IS NOT NULL
AND E0.StatusDescription NOT LIKE 'Unmanaged'
Этот сайт предоставляет более подробную информацию и примеры.