Note: This was originally posted by an inactive account. Content was preserved by moving under an admin account.
Originally posted by: mmarinelliThe LineMatcher node (located in the basic-usage library) is designed for this sort of ranged comparison. It will take a set of data sorted by a group of columns and output matches where these columns are identical and another ranged column falls within a specified interval. Unfortunately, this node was always used internally only, so there isn't a lot of documentation on how to use it's sort of nonstandard use of parameter fields. Here's some code for a simple example which should get you started:
-
node:LineMatcher
bretype:basic-usage::LineMatcher
editor:sortkey=48066ddd2761412f
input:@40fd3328763c6d78/=sort_on_comparison_columns.40fd2c746a2a3b47
output:@40fd3328132a75d7/=
output:@40fd332830ba7cc0/=
output:@40fd3328724c55ba/=
output:@40fd33282c6c7dd5/=
prop:ColumnsThatCannotMatch=(SOURCE)
prop:LineIdColumn=LINE_ID
prop:MaxPrimaryRange=100
prop:MaxRanges=()
prop:MustMatchColumns=(COL1 COL2)
prop:PrimaryRangedColumn=COL3
prop:RangedColumns=()
editor:XY=660,590
end:LineMatcher
node:Cat
bretype:core::Cat
editor:sortkey=48066ddd3ca10b30
input:@40fd2c7476b11c42/=add_SOURCE_ID_fields_2.40fd2c744c862db0
input:48066ddd600d32cd/out1=add_SOURCE_ID_fields.40fd2c744c862db0
output:@40fd2c74676e03c3/=
editor:XY=420,590
end:Cat
node:add_LINE_ID_field
bretype:core::Agg
editor:Label=add LINE_ID field
editor:sortkey=48066ddd4e1b1eb0
input:@40fd2c7427456e5b/=Cat.40fd2c74676e03c3
output:@40fd2c744c862db0/=
prop:GroupBy=<<EOX
0
EOX
prop:Script=<<EOX
LINE_ID = count()
emit *
emit LINE_ID
EOX
editor:XY=500,590
end:add_LINE_ID_field
node:sort_on_comparison_columns
bretype:core::Sort
editor:Label=sort on comparison columns
editor:sortkey=48066ddd62f72477
input:@40fd2c743ebf4304/=add_LINE_ID_field.40fd2c744c862db0
output:@40fd2c746a2a3b47/=
prop:CompareOrderExpr=<<EOX
list(COL1, COL2, COL3)
EOX
editor:XY=580,590
end:sort_on_comparison_columns
node:add_SOURCE_ID_fields
bretype:core::Agg
editor:Label=add SOURCE, ID fields
editor:sortkey=48066ddd4db66df3
input:@40fd2c7427456e5b/=
output:@40fd2c744c862db0/=
prop:GroupBy=<<EOX
0
EOX
prop:Script=<<EOX
SOURCE_ID = count()
emit *
emit SOURCE_ID
emit 2 as SOURCE
EOX
editor:XY=340,670
end:add_SOURCE_ID_fields
node:add_SOURCE_ID_fields_2
bretype:core::Agg
editor:Label=add SOURCE, ID fields
editor:sortkey=48066ddd7b03086f
input:@40fd2c7427456e5b/=
output:@40fd2c744c862db0/=
prop:GroupBy=<<EOX
0
EOX
prop:Script=<<EOX
SOURCE_ID = count()
emit *
emit SOURCE_ID
emit 1 as SOURCE
EOX
editor:XY=340,590
end:add_SOURCE_ID_fields_2
-
This should take two sources with fields COL1, COL2, COL3 and find matches where COL1 and COL2 are identical and COL3 is within a range of 100. Try this out and follow up with your results.