<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic How to avoid a join in a lookup search? in Splunk Search</title>
    <link>https://community.splunk.com/t5/Splunk-Search/How-to-avoid-a-join-in-a-lookup-search/m-p/588102#M204808</link>
    <description>&lt;P&gt;I have 3 searches executing against same lookup, and since each lookup needs to be grouped by different set of fields, my search joins each result to the previous one.&lt;/P&gt;
&lt;P&gt;I have a feeling this is not optimal, and want to rewrite it using stats , but don't know where to begin.&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;I want to create a report for Total number of Nodes per Node Type and Description, and this does what I want, but I am looking to optimize. Any ideas?&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/P&gt;
&lt;P&gt;Code:&lt;/P&gt;
&lt;LI-CODE lang="markup"&gt;| inputlookup my_lookup
| stats
dc(eval(if(NodeType="A",NodeID,null()))) as TtlSmallNodes
by LargeNodeDesc MidSizeNodeDesc SmallNodeDesc

| join type=left

[| inputlookup my_lookup
| stats
dc(eval(if(NodeType="A",NodeID,null()))) as TtlMidSizeNodes
by LargeNodeDesc MidSizeNodeDesc
]

| join type=left

[| inputlookup my_lookup
| stats
dc(eval(if(NodeType="A",NodeID,null()))) as TtlLargeNodes
by LargeNodeDesc
]&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Mon, 14 Mar 2022 13:30:20 GMT</pubDate>
    <dc:creator>kalibaba2021</dc:creator>
    <dc:date>2022-03-14T13:30:20Z</dc:date>
    <item>
      <title>How to avoid a join in a lookup search?</title>
      <link>https://community.splunk.com/t5/Splunk-Search/How-to-avoid-a-join-in-a-lookup-search/m-p/588102#M204808</link>
      <description>&lt;P&gt;I have 3 searches executing against same lookup, and since each lookup needs to be grouped by different set of fields, my search joins each result to the previous one.&lt;/P&gt;
&lt;P&gt;I have a feeling this is not optimal, and want to rewrite it using stats , but don't know where to begin.&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;I want to create a report for Total number of Nodes per Node Type and Description, and this does what I want, but I am looking to optimize. Any ideas?&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/P&gt;
&lt;P&gt;Code:&lt;/P&gt;
&lt;LI-CODE lang="markup"&gt;| inputlookup my_lookup
| stats
dc(eval(if(NodeType="A",NodeID,null()))) as TtlSmallNodes
by LargeNodeDesc MidSizeNodeDesc SmallNodeDesc

| join type=left

[| inputlookup my_lookup
| stats
dc(eval(if(NodeType="A",NodeID,null()))) as TtlMidSizeNodes
by LargeNodeDesc MidSizeNodeDesc
]

| join type=left

[| inputlookup my_lookup
| stats
dc(eval(if(NodeType="A",NodeID,null()))) as TtlLargeNodes
by LargeNodeDesc
]&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 14 Mar 2022 13:30:20 GMT</pubDate>
      <guid>https://community.splunk.com/t5/Splunk-Search/How-to-avoid-a-join-in-a-lookup-search/m-p/588102#M204808</guid>
      <dc:creator>kalibaba2021</dc:creator>
      <dc:date>2022-03-14T13:30:20Z</dc:date>
    </item>
    <item>
      <title>Re: How to avoid a join in a lookup search</title>
      <link>https://community.splunk.com/t5/Splunk-Search/How-to-avoid-a-join-in-a-lookup-search/m-p/588124#M204818</link>
      <description>&lt;P&gt;If you need 3 splits, then you can use eventstats 3 times with a single inputlookup&lt;/P&gt;&lt;LI-CODE lang="markup"&gt;| inputlookup my_lookup
| eventstats dc(eval(if(NodeType="A",NodeID,null()))) as TtlSmallNodes
by LargeNodeDesc MidSizeNodeDesc SmallNodeDesc
| eventstats dc(eval(if(NodeType="A",NodeID,null()))) as TtlMidSizeNodes
by LargeNodeDesc MidSizeNodeDesc
| eventstats dc(eval(if(NodeType="A",NodeID,null()))) as TtlLargeNodes
by LargeNodeDesc
| stats values(Ttl*) as Ttl* by LargeNodeDesc MidSizeNodeDesc SmallNodeDesc&lt;/LI-CODE&gt;&lt;P&gt;I'm not sure what your input and therefore expected output is intended to look like, can you give an example of what the lookup holds and what you would see with your existing query&lt;/P&gt;</description>
      <pubDate>Tue, 08 Mar 2022 22:15:24 GMT</pubDate>
      <guid>https://community.splunk.com/t5/Splunk-Search/How-to-avoid-a-join-in-a-lookup-search/m-p/588124#M204818</guid>
      <dc:creator>bowesmana</dc:creator>
      <dc:date>2022-03-08T22:15:24Z</dc:date>
    </item>
    <item>
      <title>Re: How to avoid a join in a lookup search</title>
      <link>https://community.splunk.com/t5/Splunk-Search/How-to-avoid-a-join-in-a-lookup-search/m-p/588132#M204822</link>
      <description>&lt;P&gt;Thanks for replying bowesmana,&lt;/P&gt;&lt;P&gt;There's actually another Compute unit I forgot named Host, but essentially with same logic.&amp;nbsp; SPL is:&lt;/P&gt;&lt;P&gt;&lt;EM&gt;| inputlookup my_lookup &lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;| stats&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;dc(eval(if(NodeType="A",NodeID,null()))) as TtlSmallNodes&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;dc(eval(if(HostType="B",HostD,null()))) as TtlSmallHost&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;by LargeComputeUnit MidComputeUnit SmallComputeUnit&lt;/EM&gt;&lt;/P&gt;&lt;P&gt;&lt;EM&gt;| join type=left&lt;/EM&gt;&lt;/P&gt;&lt;P&gt;&lt;EM&gt;[| inputlookup my_lookup &lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;| stats&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;dc(eval(if(NodeType="A",NodeID,null()))) as TtlMidSizeNodes&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;dc(eval(if(HostType="B",HostD,null()))) as TtlMidSizeHost&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;by LargeComputeUnit MidComputeUnit &lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;]&lt;/EM&gt;&lt;/P&gt;&lt;P&gt;&lt;EM&gt;| join type=left&lt;/EM&gt;&lt;/P&gt;&lt;P&gt;&lt;EM&gt;[| inputlookup my_lookup &lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;| stats&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;dc(eval(if(NodeType="A",NodeID,null()))) as TtlLargeNodes&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;dc(eval(if(HostType="B",HostD,null()))) as TtlSmallHost&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;by LargeComputeUnit &lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;]&lt;/EM&gt;&lt;/P&gt;&lt;P&gt;I expect to see 3 Description text columns: &lt;STRONG&gt;LargeNodeDesc&lt;/STRONG&gt; &lt;STRONG&gt;MidSizeNodeDesc&lt;/STRONG&gt; &lt;STRONG&gt;SmallNodeDesc&lt;/STRONG&gt; , then numeric columns &lt;STRONG&gt;TtlSmallNodes&lt;/STRONG&gt; , &lt;STRONG&gt;TtlMidSizeNodes&lt;/STRONG&gt;, &lt;STRONG&gt;TtlLargeNodes&lt;/STRONG&gt;, and similar 3 numeric columns for Hosts, grouped by their respective descriptions. Something like:&amp;nbsp;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;LargeComputeUnitDesc&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;MidComputeUnitDesc&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;SmallComputeUnitDesc&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;TotalLargeNode&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;TatalMidSizeNodes&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;TotalSmalNodes&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;TotalLargeHosts&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;TatalMidSizeHosts&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;TotalSmalHosts&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;g3.4xlarge&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;C5&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;t2.micro&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;9&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;1&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;12&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;8&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;8&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;10&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;H1&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;M4&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;t2.nano&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;7&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;2&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;14&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;2&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;7&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;1&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;D2&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;X1e&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;etc.&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;5&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;3&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;19&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;3&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;5&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;6&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;R5&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;C4&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;etc.&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;2&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;4&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;9&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;8&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;6&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;8&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;R5n&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;R4&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;etc.&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;3&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;7&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;7&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;9&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;7&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;4&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;</description>
      <pubDate>Wed, 09 Mar 2022 01:04:34 GMT</pubDate>
      <guid>https://community.splunk.com/t5/Splunk-Search/How-to-avoid-a-join-in-a-lookup-search/m-p/588132#M204822</guid>
      <dc:creator>kalibaba2021</dc:creator>
      <dc:date>2022-03-09T01:04:34Z</dc:date>
    </item>
    <item>
      <title>Re: How to avoid a join in a lookup search</title>
      <link>https://community.splunk.com/t5/Splunk-Search/How-to-avoid-a-join-in-a-lookup-search/m-p/588310#M204886</link>
      <description>&lt;P&gt;Can you post some of your lookup file - The NodeType='A' and 'B" stuff is confusing and the SPL doesn't seem to be correct, e.g. the last part of the SPL does&lt;/P&gt;&lt;LI-CODE lang="markup"&gt;[| inputlookup my_lookup
| stats
dc(eval(if(NodeType="A",NodeID,null()))) as TtlLargeNodes
dc(eval(if(HostType="B",HostD,null()))) as TtlSmallHost
by LargeComputeUnit
]&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;but I suspect that the TtlSmallHost should be TtlLargeHost, so this seems to be pseudo code, not the real SPL&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 09 Mar 2022 22:09:30 GMT</pubDate>
      <guid>https://community.splunk.com/t5/Splunk-Search/How-to-avoid-a-join-in-a-lookup-search/m-p/588310#M204886</guid>
      <dc:creator>bowesmana</dc:creator>
      <dc:date>2022-03-09T22:09:30Z</dc:date>
    </item>
    <item>
      <title>Re: How to avoid a join in a lookup search</title>
      <link>https://community.splunk.com/t5/Splunk-Search/How-to-avoid-a-join-in-a-lookup-search/m-p/588428#M204941</link>
      <description>&lt;P&gt;&lt;SPAN&gt;bowesmana,&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;Yes, this is sample code since I can't post the real one due to privacy concerns.&amp;nbsp; And yes, in the last clause the&amp;nbsp;&lt;EM&gt;TtlSmallHost &lt;/EM&gt;should be&amp;nbsp;&lt;EM&gt;TtlLargeHost,&amp;nbsp;&lt;/EM&gt;my mistake.&amp;nbsp; I believe I am getting the point though, which is:&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;&amp;nbsp;specify the fields I want to see in the report&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;use stats early to group my data and limit the result&amp;nbsp;set for splunk to process.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;Thank you for your help, I think I got the gist of it. Coming from a sql background I automatically used a join but then realized it is not optimal in this case in splunk.&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Thu, 10 Mar 2022 14:11:04 GMT</pubDate>
      <guid>https://community.splunk.com/t5/Splunk-Search/How-to-avoid-a-join-in-a-lookup-search/m-p/588428#M204941</guid>
      <dc:creator>kalibaba2021</dc:creator>
      <dc:date>2022-03-10T14:11:04Z</dc:date>
    </item>
    <item>
      <title>Re: How to avoid a join in a lookup search</title>
      <link>https://community.splunk.com/t5/Splunk-Search/How-to-avoid-a-join-in-a-lookup-search/m-p/588860#M205078</link>
      <description>&lt;P&gt;&lt;span class="lia-unicode-emoji" title=":grinning_face:"&gt;😀&lt;/span&gt;&amp;nbsp;&lt;a href="https://community.splunk.com/t5/user/viewprofilepage/user-id/240553"&gt;@kalibaba2021&lt;/a&gt;&amp;nbsp;yes - it's always easy to spot an 'SQLer' with the liberal use of join.&lt;/P&gt;&lt;P&gt;There are some really good examples in this forum about avoiding join in many cases. It's almost always possible to avoid a join by using some form of stats, but it can sometimes be difficult to imagine the data flowing through the pipeline in Splunk to work out how to manipulate the data to do that join_with_stats.&lt;/P&gt;&lt;P&gt;Another one to watch out for and avoid if possible is 'transaction'. That has similar difficult to spot issues if you exceed limits and can often be avoided with stats.&lt;/P&gt;&lt;P&gt;A simple way to look at join with stats is to compare&lt;/P&gt;&lt;LI-CODE lang="markup"&gt;search 1
| join id [
  search 2
]&lt;/LI-CODE&gt;&lt;P&gt;and&lt;/P&gt;&lt;LI-CODE lang="markup"&gt;search 1 OR search 2
| stats values(*) as * by id&lt;/LI-CODE&gt;&lt;P&gt;Happy Splunking!&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 14 Mar 2022 00:58:07 GMT</pubDate>
      <guid>https://community.splunk.com/t5/Splunk-Search/How-to-avoid-a-join-in-a-lookup-search/m-p/588860#M205078</guid>
      <dc:creator>bowesmana</dc:creator>
      <dc:date>2022-03-14T00:58:07Z</dc:date>
    </item>
  </channel>
</rss>

