【问题标题】:join more than 2 tables using SWQL(SolarWinds Query Language) when there is no common field?当没有公共字段时,使用 SWQL(SolarWinds 查询语言)连接超过 2 个表?
【发布时间】:2017-10-31 22:36:40
【问题描述】:

我正在使用 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)

问题是,我想从swis(SolarWinds 信息服务)中名为Orion.AlertDefinitionsOrion.AlertStatusOrion.Nodes 的三个表中获取alertinforamtion,我需要加入这三个表,但我可以使用如下所示的swql(SolarWinds 查询语言)查询加入其中 2 个(Orion.AlertDefinitionsOrion.AlertStatus

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”表与其余表连接起来。但是第三个表 (Orion.Nodes) 在其他两个表中的任何一个中都没有要加入的公共字段。 我需要从Orion.Nodes 表中获取三个名为DNSIPAddressNodeDescription 的字段值。

【问题讨论】:

    标签: .net vb.net solarwinds-orion


    【解决方案1】:

    如果您对节点相关的警报感兴趣并且想要加入节点详细信息,那么您应该只选择带有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 的更具体问题和答案,您可能需要查看Orion SDK Thwack Forum

    【讨论】:

      【解决方案2】:

      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'
      

      This site provides some more details and examples.

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-09-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-02
        • 2015-10-06
        • 1970-01-01
        相关资源
        最近更新 更多