[{"data":1,"prerenderedAt":1958},["ShallowReactive",2],{"page-\u002Fdatasets\u002Ffilters":3,"all-pages":1625},{"id":4,"title":5,"body":6,"description":1615,"extension":1616,"meta":1617,"navigation":1618,"path":1619,"robots":1620,"seo":1621,"sitemap":1622,"stem":1623,"__hash__":1624},"content\u002F04.datasets\u002F5.filters.md","Dataset Structured Filters",{"type":7,"value":8,"toc":1597},"minimark",[9,14,18,40,58,63,74,119,123,381,407,411,421,445,449,452,457,474,488,494,530,534,543,571,582,586,592,596,658,670,673,677,681,1074,1078,1391,1399,1403,1493,1496,1513,1517,1565,1569,1593],[10,11,13],"h1",{"id":12},"dataset-structured-filters","Dataset structured filters",[15,16,17],"p",{},"Datasets support two kinds of filtering:",[19,20,21,34],"ol",{},[22,23,24,28,29,33],"li",{},[25,26,27],"strong",{},"SQL"," — put a ",[30,31,32],"code",{},"WHERE"," clause in your query. This is the most flexible and\nruns inside DuckDB.",[22,35,36,39],{},[25,37,38],{},"Structured filters"," — a typed filter tree sent alongside the query. The\nservice compiles it into a parameterized SQL predicate, so values are bound,\nnever interpolated.",[15,41,42,43,46,47,50,51,54,55,57],{},"The Hub's ",[25,44,45],{},"Filters"," panel builds structured filters for you. The same AST is\navailable in ",[30,48,49],{},"QueryDatasetRequest.filter"," (and ",[30,52,53],{},"ExportDatasetRequest.filter","),\nwhere values are bound as SQL parameters. Project-wide queries filter with SQL\n",[30,56,32],{}," clauses instead.",[59,60,62],"h2",{"id":61},"ui-filter-builder","UI filter builder",[15,64,65,66,69,70,73],{},"The Query tab starts with no filters. Use ",[25,67,68],{},"Add filter",", choose a column and an\noperator, enter a value, then press ",[25,71,72],{},"Run",".",[75,76,77,83,86,96,99,116],"ul",{},[22,78,79,82],{},[25,80,81],{},"Match all \u002F any"," combines the conditions with AND or OR.",[22,84,85],{},"Operators are limited to the selected column kind (see below).",[22,87,88,91,92,95],{},[30,89,90],{},"in"," and ",[30,93,94],{},"not in"," accept comma-separated values.",[22,97,98],{},"Booleans use a true\u002Ffalse selector; timestamps use a date-time input.",[22,100,101,104,105,108,109,104,112,115],{},[25,102,103],{},"is empty"," \u002F ",[25,106,107],{},"is not empty"," are ",[30,110,111],{},"IS NULL",[30,113,114],{},"IS NOT NULL"," and need no\nvalue.",[22,117,118],{},"Filters are not applied live; they take effect when the query runs.",[59,120,122],{"id":121},"operators","Operators",[124,125,126,145],"table",{},[127,128,129],"thead",{},[130,131,132,136,139,142],"tr",{},[133,134,135],"th",{},"Operator",[133,137,138],{},"Enum",[133,140,141],{},"Values",[133,143,144],{},"Compiled predicate",[146,147,148,167,184,203,222,241,260,277,294,311,329,346,364],"tbody",{},[130,149,150,154,159,162],{},[151,152,153],"td",{},"Is",[151,155,156],{},[30,157,158],{},"FILTER_OP_EQ",[151,160,161],{},"1",[151,163,164],{},[30,165,166],{},"\"column\" = ?",[130,168,169,172,177,179],{},[151,170,171],{},"Is not",[151,173,174],{},[30,175,176],{},"FILTER_OP_NE",[151,178,161],{},[151,180,181],{},[30,182,183],{},"\"column\" \u003C> ?",[130,185,186,191,196,198],{},[151,187,188],{},[30,189,190],{},">",[151,192,193],{},[30,194,195],{},"FILTER_OP_GT",[151,197,161],{},[151,199,200],{},[30,201,202],{},"\"column\" > ?",[130,204,205,210,215,217],{},[151,206,207],{},[30,208,209],{},">=",[151,211,212],{},[30,213,214],{},"FILTER_OP_GTE",[151,216,161],{},[151,218,219],{},[30,220,221],{},"\"column\" >= ?",[130,223,224,229,234,236],{},[151,225,226],{},[30,227,228],{},"\u003C",[151,230,231],{},[30,232,233],{},"FILTER_OP_LT",[151,235,161],{},[151,237,238],{},[30,239,240],{},"\"column\" \u003C ?",[130,242,243,248,253,255],{},[151,244,245],{},[30,246,247],{},"\u003C=",[151,249,250],{},[30,251,252],{},"FILTER_OP_LTE",[151,254,161],{},[151,256,257],{},[30,258,259],{},"\"column\" \u003C= ?",[130,261,262,265,270,272],{},[151,263,264],{},"Contains",[151,266,267],{},[30,268,269],{},"FILTER_OP_CONTAINS",[151,271,161],{},[151,273,274],{},[30,275,276],{},"strpos(\"column\", ?) > 0",[130,278,279,282,287,289],{},[151,280,281],{},"Starts with",[151,283,284],{},[30,285,286],{},"FILTER_OP_STARTS_WITH",[151,288,161],{},[151,290,291],{},[30,292,293],{},"starts_with(\"column\", ?)",[130,295,296,299,304,306],{},[151,297,298],{},"Ends with",[151,300,301],{},[30,302,303],{},"FILTER_OP_ENDS_WITH",[151,305,161],{},[151,307,308],{},[30,309,310],{},"ends_with(\"column\", ?)",[130,312,313,316,321,324],{},[151,314,315],{},"In",[151,317,318],{},[30,319,320],{},"FILTER_OP_IN",[151,322,323],{},"1+",[151,325,326],{},[30,327,328],{},"\"column\" IN (?, …)",[130,330,331,334,339,341],{},[151,332,333],{},"Not in",[151,335,336],{},[30,337,338],{},"FILTER_OP_NOT_IN",[151,340,323],{},[151,342,343],{},[30,344,345],{},"\"column\" NOT IN (?, …)",[130,347,348,351,356,359],{},[151,349,350],{},"Is empty",[151,352,353],{},[30,354,355],{},"FILTER_OP_IS_NULL",[151,357,358],{},"0",[151,360,361],{},[30,362,363],{},"\"column\" IS NULL",[130,365,366,369,374,376],{},[151,367,368],{},"Is not empty",[151,370,371],{},[30,372,373],{},"FILTER_OP_IS_NOT_NULL",[151,375,358],{},[151,377,378],{},[30,379,380],{},"\"column\" IS NOT NULL",[15,382,383,384,387,388,391,392,395,396,91,399,402,403,406],{},"Text operators are ",[25,385,386],{},"case-sensitive"," and literal: ",[30,389,390],{},"contains"," uses ",[30,393,394],{},"strpos",", so\n",[30,397,398],{},"%",[30,400,401],{},"_"," have no wildcard meaning. Use SQL ",[30,404,405],{},"ILIKE"," if you need\ncase-insensitive matching.",[59,408,410],{"id":409},"groups-and-negation","Groups and negation",[412,413,419],"pre",{"className":414,"code":416,"language":417,"meta":418},[415],"language-text","FilterNode\n├── group      { any: bool, nodes: FilterNode[] }   AND when any = false\n├── condition  { column, op, values: DatasetValue[] }\n└── not        { node: FilterNode }\n","text","",[30,420,416],{"__ignoreMap":418},[75,422,423,433,442],{},[22,424,425,426,429,430,73],{},"An empty AND group compiles to ",[30,427,428],{},"TRUE","; an empty OR group compiles to ",[30,431,432],{},"FALSE",[22,434,435,438,439,73],{},[30,436,437],{},"not"," wraps any node: ",[30,440,441],{},"NOT (\u003Cpredicate>)",[22,443,444],{},"Column names must be valid identifiers. They are quoted, and all values are\nparameterized.",[59,446,448],{"id":447},"where-filters-run","Where filters run",[15,450,451],{},"This distinction matters when your SQL aggregates or renames columns.",[453,454,456],"h3",{"id":455},"single-dataset-queries-and-exports","Single-dataset queries and exports",[15,458,459,91,462,465,466,469,470,473],{},[30,460,461],{},"QueryDataset",[30,463,464],{},"ExportDataset"," apply the structured filter ",[25,467,468],{},"outside"," your\n",[30,471,472],{},"SELECT",":",[412,475,479],{"className":476,"code":477,"language":478,"meta":418,"style":418},"language-sql shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","SELECT * FROM (\u003Cyour SQL>) AS __bh_dataset_query WHERE \u003Cfilter>\n","sql",[30,480,481],{"__ignoreMap":418},[482,483,486],"span",{"class":484,"line":485},"line",1,[482,487,477],{},[15,489,490,491,473],{},"So the filter sees your query's ",[25,492,493],{},"output columns",[75,495,496,510],{},[22,497,498,499,502,503,91,506,509],{},"With the default ",[30,500,501],{},"SELECT * FROM dataset",", every schema column plus\n",[30,504,505],{},"__ingested_at",[30,507,508],{},"__deleted"," is available.",[22,511,512,513,516,517,91,520,523,524,527,528,73],{},"If you project ",[30,514,515],{},"SELECT host, count(*) AS n ...",", only ",[30,518,519],{},"host",[30,521,522],{},"n"," exist.\nReferencing ",[30,525,526],{},"severity"," fails; filter on the output name or move the predicate\ninto the SQL ",[30,529,32],{},[453,531,533],{"id":532},"project-wide-queries","Project-wide queries",[15,535,536,539,540,542],{},[30,537,538],{},"QueryDatasets"," does not use the structured filter builder. Filter inside the\nSQL with a ",[30,541,32],{}," clause:",[412,544,546],{"className":476,"code":545,"language":478,"meta":418,"style":418},"SELECT s.host, w.status_code\nFROM subdomains AS s\nJOIN \"web-services\" AS w ON s.host = w.host\nWHERE s.resolved AND w.status_code BETWEEN 200 AND 299\n",[30,547,548,553,559,565],{"__ignoreMap":418},[482,549,550],{"class":484,"line":485},[482,551,552],{},"SELECT s.host, w.status_code\n",[482,554,556],{"class":484,"line":555},2,[482,557,558],{},"FROM subdomains AS s\n",[482,560,562],{"class":484,"line":561},3,[482,563,564],{},"JOIN \"web-services\" AS w ON s.host = w.host\n",[482,566,568],{"class":484,"line":567},4,[482,569,570],{},"WHERE s.resolved AND w.status_code BETWEEN 200 AND 299\n",[15,572,573,574,577,578,581],{},"The per-relation ",[30,575,576],{},"filters"," field on ",[30,579,580],{},"QueryDatasetsRequest"," is reserved and is\nnot supported by the current execution path.",[453,583,585],{"id":584},"views","Views",[15,587,588,591],{},[30,589,590],{},"ExecuteDatasetView"," has no filter or time-range fields. Put predicates in the\nview SQL.",[59,593,595],{"id":594},"time-ranges-and-history","Time ranges and history",[124,597,598,611],{},[127,599,600],{},[130,601,602,605,608],{},[133,603,604],{},"Field",[133,606,607],{},"Applies to",[133,609,610],{},"Notes",[146,612,613,628,645],{},[130,614,615,620,625],{},[151,616,617],{},[30,618,619],{},"ingestedAtFrom",[151,621,622],{},[30,623,624],{},"__ingested_at >= value",[151,626,627],{},"Same “outside your SELECT” rule as filters.",[130,629,630,635,640],{},[151,631,632],{},[30,633,634],{},"ingestedAtTo",[151,636,637],{},[30,638,639],{},"__ingested_at \u003C= value",[151,641,642,643,73],{},"Must not be before ",[30,644,619],{},[130,646,647,652,655],{},[151,648,649],{},[30,650,651],{},"includeHistory",[151,653,654],{},"Switches the relation to raw observations",[151,656,657],{},"Filters and time bounds apply to history too.",[15,659,660,661,663,664,666,667,669],{},"The default ",[30,662,501],{}," includes ",[30,665,505],{},". If you project a\nsubset and set a time range, include ",[30,668,505],{}," in the projection, or\nfilter inside SQL.",[15,671,672],{},"The Hub's date-time inputs use the browser's local time zone. API clients send\nRFC 3339 timestamps.",[59,674,676],{"id":675},"api-examples","API examples",[453,678,680],{"id":679},"and-group","AND group",[412,682,686],{"className":683,"code":684,"language":685,"meta":418,"style":418},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"filter\": {\n    \"group\": {\n      \"any\": false,\n      \"nodes\": [\n        {\n          \"condition\": {\n            \"column\": \"status_code\",\n            \"op\": \"FILTER_OP_GTE\",\n            \"values\": [{ \"integerValue\": \"200\" }]\n          }\n        },\n        {\n          \"condition\": {\n            \"column\": \"status_code\",\n            \"op\": \"FILTER_OP_LT\",\n            \"values\": [{ \"integerValue\": \"300\" }]\n          }\n        },\n        {\n          \"condition\": {\n            \"column\": \"ip\",\n            \"op\": \"FILTER_OP_IS_NOT_NULL\",\n            \"values\": []\n          }\n        }\n      ]\n    }\n  }\n}\n","json",[30,687,688,694,711,726,742,757,763,779,805,825,860,866,872,877,890,909,928,958,963,968,973,986,1006,1025,1039,1044,1050,1056,1062,1068],{"__ignoreMap":418},[482,689,690],{"class":484,"line":485},[482,691,693],{"class":692},"sMK4o","{\n",[482,695,696,699,703,706,708],{"class":484,"line":555},[482,697,698],{"class":692},"  \"",[482,700,702],{"class":701},"spNyl","filter",[482,704,705],{"class":692},"\"",[482,707,473],{"class":692},[482,709,710],{"class":692}," {\n",[482,712,713,716,720,722,724],{"class":484,"line":561},[482,714,715],{"class":692},"    \"",[482,717,719],{"class":718},"sBMFI","group",[482,721,705],{"class":692},[482,723,473],{"class":692},[482,725,710],{"class":692},[482,727,728,731,735,737,739],{"class":484,"line":567},[482,729,730],{"class":692},"      \"",[482,732,734],{"class":733},"sbssI","any",[482,736,705],{"class":692},[482,738,473],{"class":692},[482,740,741],{"class":692}," false,\n",[482,743,745,747,750,752,754],{"class":484,"line":744},5,[482,746,730],{"class":692},[482,748,749],{"class":733},"nodes",[482,751,705],{"class":692},[482,753,473],{"class":692},[482,755,756],{"class":692}," [\n",[482,758,760],{"class":484,"line":759},6,[482,761,762],{"class":692},"        {\n",[482,764,766,769,773,775,777],{"class":484,"line":765},7,[482,767,768],{"class":692},"          \"",[482,770,772],{"class":771},"swJcz","condition",[482,774,705],{"class":692},[482,776,473],{"class":692},[482,778,710],{"class":692},[482,780,782,785,789,791,793,796,800,802],{"class":484,"line":781},8,[482,783,784],{"class":692},"            \"",[482,786,788],{"class":787},"su27w","column",[482,790,705],{"class":692},[482,792,473],{"class":692},[482,794,795],{"class":692}," \"",[482,797,799],{"class":798},"sfazB","status_code",[482,801,705],{"class":692},[482,803,804],{"class":692},",\n",[482,806,808,810,813,815,817,819,821,823],{"class":484,"line":807},9,[482,809,784],{"class":692},[482,811,812],{"class":787},"op",[482,814,705],{"class":692},[482,816,473],{"class":692},[482,818,795],{"class":692},[482,820,214],{"class":798},[482,822,705],{"class":692},[482,824,804],{"class":692},[482,826,828,830,833,835,837,840,842,846,848,850,852,855,857],{"class":484,"line":827},10,[482,829,784],{"class":692},[482,831,832],{"class":787},"values",[482,834,705],{"class":692},[482,836,473],{"class":692},[482,838,839],{"class":692}," [{",[482,841,795],{"class":692},[482,843,845],{"class":844},"s2Zo4","integerValue",[482,847,705],{"class":692},[482,849,473],{"class":692},[482,851,795],{"class":692},[482,853,854],{"class":798},"200",[482,856,705],{"class":692},[482,858,859],{"class":692}," }]\n",[482,861,863],{"class":484,"line":862},11,[482,864,865],{"class":692},"          }\n",[482,867,869],{"class":484,"line":868},12,[482,870,871],{"class":692},"        },\n",[482,873,875],{"class":484,"line":874},13,[482,876,762],{"class":692},[482,878,880,882,884,886,888],{"class":484,"line":879},14,[482,881,768],{"class":692},[482,883,772],{"class":771},[482,885,705],{"class":692},[482,887,473],{"class":692},[482,889,710],{"class":692},[482,891,893,895,897,899,901,903,905,907],{"class":484,"line":892},15,[482,894,784],{"class":692},[482,896,788],{"class":787},[482,898,705],{"class":692},[482,900,473],{"class":692},[482,902,795],{"class":692},[482,904,799],{"class":798},[482,906,705],{"class":692},[482,908,804],{"class":692},[482,910,912,914,916,918,920,922,924,926],{"class":484,"line":911},16,[482,913,784],{"class":692},[482,915,812],{"class":787},[482,917,705],{"class":692},[482,919,473],{"class":692},[482,921,795],{"class":692},[482,923,233],{"class":798},[482,925,705],{"class":692},[482,927,804],{"class":692},[482,929,931,933,935,937,939,941,943,945,947,949,951,954,956],{"class":484,"line":930},17,[482,932,784],{"class":692},[482,934,832],{"class":787},[482,936,705],{"class":692},[482,938,473],{"class":692},[482,940,839],{"class":692},[482,942,795],{"class":692},[482,944,845],{"class":844},[482,946,705],{"class":692},[482,948,473],{"class":692},[482,950,795],{"class":692},[482,952,953],{"class":798},"300",[482,955,705],{"class":692},[482,957,859],{"class":692},[482,959,961],{"class":484,"line":960},18,[482,962,865],{"class":692},[482,964,966],{"class":484,"line":965},19,[482,967,871],{"class":692},[482,969,971],{"class":484,"line":970},20,[482,972,762],{"class":692},[482,974,976,978,980,982,984],{"class":484,"line":975},21,[482,977,768],{"class":692},[482,979,772],{"class":771},[482,981,705],{"class":692},[482,983,473],{"class":692},[482,985,710],{"class":692},[482,987,989,991,993,995,997,999,1002,1004],{"class":484,"line":988},22,[482,990,784],{"class":692},[482,992,788],{"class":787},[482,994,705],{"class":692},[482,996,473],{"class":692},[482,998,795],{"class":692},[482,1000,1001],{"class":798},"ip",[482,1003,705],{"class":692},[482,1005,804],{"class":692},[482,1007,1009,1011,1013,1015,1017,1019,1021,1023],{"class":484,"line":1008},23,[482,1010,784],{"class":692},[482,1012,812],{"class":787},[482,1014,705],{"class":692},[482,1016,473],{"class":692},[482,1018,795],{"class":692},[482,1020,373],{"class":798},[482,1022,705],{"class":692},[482,1024,804],{"class":692},[482,1026,1028,1030,1032,1034,1036],{"class":484,"line":1027},24,[482,1029,784],{"class":692},[482,1031,832],{"class":787},[482,1033,705],{"class":692},[482,1035,473],{"class":692},[482,1037,1038],{"class":692}," []\n",[482,1040,1042],{"class":484,"line":1041},25,[482,1043,865],{"class":692},[482,1045,1047],{"class":484,"line":1046},26,[482,1048,1049],{"class":692},"        }\n",[482,1051,1053],{"class":484,"line":1052},27,[482,1054,1055],{"class":692},"      ]\n",[482,1057,1059],{"class":484,"line":1058},28,[482,1060,1061],{"class":692},"    }\n",[482,1063,1065],{"class":484,"line":1064},29,[482,1066,1067],{"class":692},"  }\n",[482,1069,1071],{"class":484,"line":1070},30,[482,1072,1073],{"class":692},"}\n",[453,1075,1077],{"id":1076},"or-group-with-a-negation","OR group with a negation",[412,1079,1081],{"className":683,"code":1080,"language":685,"meta":418,"style":418},"{\n  \"filter\": {\n    \"group\": {\n      \"any\": true,\n      \"nodes\": [\n        {\n          \"condition\": {\n            \"column\": \"severity\",\n            \"op\": \"FILTER_OP_IN\",\n            \"values\": [{ \"textValue\": \"high\" }, { \"textValue\": \"critical\" }]\n          }\n        },\n        {\n          \"not\": {\n            \"node\": {\n              \"condition\": {\n                \"column\": \"program\",\n                \"op\": \"FILTER_OP_EQ\",\n                \"values\": [{ \"textValue\": \"internal\" }]\n              }\n            }\n          }\n        }\n      ]\n    }\n  }\n}\n",[30,1082,1083,1087,1099,1111,1124,1136,1140,1152,1170,1188,1239,1243,1247,1251,1263,1276,1289,1310,1328,1357,1362,1367,1371,1375,1379,1383,1387],{"__ignoreMap":418},[482,1084,1085],{"class":484,"line":485},[482,1086,693],{"class":692},[482,1088,1089,1091,1093,1095,1097],{"class":484,"line":555},[482,1090,698],{"class":692},[482,1092,702],{"class":701},[482,1094,705],{"class":692},[482,1096,473],{"class":692},[482,1098,710],{"class":692},[482,1100,1101,1103,1105,1107,1109],{"class":484,"line":561},[482,1102,715],{"class":692},[482,1104,719],{"class":718},[482,1106,705],{"class":692},[482,1108,473],{"class":692},[482,1110,710],{"class":692},[482,1112,1113,1115,1117,1119,1121],{"class":484,"line":567},[482,1114,730],{"class":692},[482,1116,734],{"class":733},[482,1118,705],{"class":692},[482,1120,473],{"class":692},[482,1122,1123],{"class":692}," true,\n",[482,1125,1126,1128,1130,1132,1134],{"class":484,"line":744},[482,1127,730],{"class":692},[482,1129,749],{"class":733},[482,1131,705],{"class":692},[482,1133,473],{"class":692},[482,1135,756],{"class":692},[482,1137,1138],{"class":484,"line":759},[482,1139,762],{"class":692},[482,1141,1142,1144,1146,1148,1150],{"class":484,"line":765},[482,1143,768],{"class":692},[482,1145,772],{"class":771},[482,1147,705],{"class":692},[482,1149,473],{"class":692},[482,1151,710],{"class":692},[482,1153,1154,1156,1158,1160,1162,1164,1166,1168],{"class":484,"line":781},[482,1155,784],{"class":692},[482,1157,788],{"class":787},[482,1159,705],{"class":692},[482,1161,473],{"class":692},[482,1163,795],{"class":692},[482,1165,526],{"class":798},[482,1167,705],{"class":692},[482,1169,804],{"class":692},[482,1171,1172,1174,1176,1178,1180,1182,1184,1186],{"class":484,"line":807},[482,1173,784],{"class":692},[482,1175,812],{"class":787},[482,1177,705],{"class":692},[482,1179,473],{"class":692},[482,1181,795],{"class":692},[482,1183,320],{"class":798},[482,1185,705],{"class":692},[482,1187,804],{"class":692},[482,1189,1190,1192,1194,1196,1198,1200,1202,1205,1207,1209,1211,1214,1216,1219,1222,1224,1226,1228,1230,1232,1235,1237],{"class":484,"line":827},[482,1191,784],{"class":692},[482,1193,832],{"class":787},[482,1195,705],{"class":692},[482,1197,473],{"class":692},[482,1199,839],{"class":692},[482,1201,795],{"class":692},[482,1203,1204],{"class":844},"textValue",[482,1206,705],{"class":692},[482,1208,473],{"class":692},[482,1210,795],{"class":692},[482,1212,1213],{"class":798},"high",[482,1215,705],{"class":692},[482,1217,1218],{"class":692}," },",[482,1220,1221],{"class":692}," {",[482,1223,795],{"class":692},[482,1225,1204],{"class":844},[482,1227,705],{"class":692},[482,1229,473],{"class":692},[482,1231,795],{"class":692},[482,1233,1234],{"class":798},"critical",[482,1236,705],{"class":692},[482,1238,859],{"class":692},[482,1240,1241],{"class":484,"line":862},[482,1242,865],{"class":692},[482,1244,1245],{"class":484,"line":868},[482,1246,871],{"class":692},[482,1248,1249],{"class":484,"line":874},[482,1250,762],{"class":692},[482,1252,1253,1255,1257,1259,1261],{"class":484,"line":879},[482,1254,768],{"class":692},[482,1256,437],{"class":771},[482,1258,705],{"class":692},[482,1260,473],{"class":692},[482,1262,710],{"class":692},[482,1264,1265,1267,1270,1272,1274],{"class":484,"line":892},[482,1266,784],{"class":692},[482,1268,1269],{"class":787},"node",[482,1271,705],{"class":692},[482,1273,473],{"class":692},[482,1275,710],{"class":692},[482,1277,1278,1281,1283,1285,1287],{"class":484,"line":911},[482,1279,1280],{"class":692},"              \"",[482,1282,772],{"class":844},[482,1284,705],{"class":692},[482,1286,473],{"class":692},[482,1288,710],{"class":692},[482,1290,1291,1294,1297,1299,1301,1303,1306,1308],{"class":484,"line":930},[482,1292,1293],{"class":692},"                \"",[482,1295,788],{"class":1296},"sfNiH",[482,1298,705],{"class":692},[482,1300,473],{"class":692},[482,1302,795],{"class":692},[482,1304,1305],{"class":798},"program",[482,1307,705],{"class":692},[482,1309,804],{"class":692},[482,1311,1312,1314,1316,1318,1320,1322,1324,1326],{"class":484,"line":960},[482,1313,1293],{"class":692},[482,1315,812],{"class":1296},[482,1317,705],{"class":692},[482,1319,473],{"class":692},[482,1321,795],{"class":692},[482,1323,158],{"class":798},[482,1325,705],{"class":692},[482,1327,804],{"class":692},[482,1329,1330,1332,1334,1336,1338,1340,1342,1344,1346,1348,1350,1353,1355],{"class":484,"line":965},[482,1331,1293],{"class":692},[482,1333,832],{"class":1296},[482,1335,705],{"class":692},[482,1337,473],{"class":692},[482,1339,839],{"class":692},[482,1341,795],{"class":692},[482,1343,1204],{"class":701},[482,1345,705],{"class":692},[482,1347,473],{"class":692},[482,1349,795],{"class":692},[482,1351,1352],{"class":798},"internal",[482,1354,705],{"class":692},[482,1356,859],{"class":692},[482,1358,1359],{"class":484,"line":970},[482,1360,1361],{"class":692},"              }\n",[482,1363,1364],{"class":484,"line":975},[482,1365,1366],{"class":692},"            }\n",[482,1368,1369],{"class":484,"line":988},[482,1370,865],{"class":692},[482,1372,1373],{"class":484,"line":1008},[482,1374,1049],{"class":692},[482,1376,1377],{"class":484,"line":1027},[482,1378,1055],{"class":692},[482,1380,1381],{"class":484,"line":1041},[482,1382,1061],{"class":692},[482,1384,1385],{"class":484,"line":1046},[482,1386,1067],{"class":692},[482,1388,1389],{"class":484,"line":1052},[482,1390,1073],{"class":692},[15,1392,1393,1395,1396,73],{},[30,1394,845],{}," is an int64 and therefore a JSON string. Timestamps are RFC 3339\nstrings inside ",[30,1397,1398],{},"timestampValue",[59,1400,1402],{"id":1401},"value-types","Value types",[124,1404,1405,1418],{},[127,1406,1407],{},[130,1408,1409,1412,1415],{},[133,1410,1411],{},"Column kind",[133,1413,1414],{},"Value field",[133,1416,1417],{},"Example",[146,1419,1420,1434,1449,1464,1479],{},[130,1421,1422,1425,1429],{},[151,1423,1424],{},"Text",[151,1426,1427],{},[30,1428,1204],{},[151,1430,1431],{},[30,1432,1433],{},"{\"textValue\":\"api.example.com\"}",[130,1435,1436,1439,1444],{},[151,1437,1438],{},"Integer",[151,1440,1441,1443],{},[30,1442,845],{}," (string)",[151,1445,1446],{},[30,1447,1448],{},"{\"integerValue\":\"200\"}",[130,1450,1451,1454,1459],{},[151,1452,1453],{},"Number",[151,1455,1456],{},[30,1457,1458],{},"numberValue",[151,1460,1461],{},[30,1462,1463],{},"{\"numberValue\":9.8}",[130,1465,1466,1469,1474],{},[151,1467,1468],{},"Boolean",[151,1470,1471],{},[30,1472,1473],{},"booleanValue",[151,1475,1476],{},[30,1477,1478],{},"{\"booleanValue\":true}",[130,1480,1481,1484,1488],{},[151,1482,1483],{},"Timestamp",[151,1485,1486],{},[30,1487,1398],{},[151,1489,1490],{},[30,1491,1492],{},"{\"timestampValue\":\"2026-01-01T00:00:00Z\"}",[15,1494,1495],{},"Values must match the column kind. The UI builds the correct value type from\nthe schema; API clients should do the same. A mismatch surfaces as a DuckDB\nbinder or conversion error.",[15,1497,1498,1499,1502,1503,1506,1507,1509,1510,1512],{},"SQL ",[30,1500,1501],{},"NULL"," comparisons never match, so ",[30,1504,1505],{},"is = null"," is not a useful filter — use\n",[25,1508,103],{}," (",[30,1511,111],{},").",[59,1514,1516],{"id":1515},"errors","Errors",[124,1518,1519,1529],{},[127,1520,1521],{},[130,1522,1523,1526],{},[133,1524,1525],{},"Error",[133,1527,1528],{},"Cause",[146,1530,1531,1541,1551],{},[130,1532,1533,1538],{},[151,1534,1535],{},[30,1536,1537],{},"Invalid dataset filter",[151,1539,1540],{},"Unsupported operator, wrong number of values, or an empty value (except null checks).",[130,1542,1543,1548],{},[151,1544,1545],{},[30,1546,1547],{},"DuckDB could not prepare the query",[151,1549,1550],{},"The column does not exist in the filtered scope, or a value type does not match.",[130,1552,1553,1558],{},[151,1554,1555],{},[30,1556,1557],{},"Invalid filter for dataset '\u003Cname>'",[151,1559,1560,1561,1564],{},"A project-wide ",[30,1562,1563],{},"RelationFilter"," failed to compile against that relation.",[59,1566,1568],{"id":1567},"related","Related",[75,1570,1571,1579,1586],{},[22,1572,1573,1578],{},[1574,1575,1577],"a",{"href":1576},"\u002Fdatasets\u002Fsql","SQL reference"," — write the query the filter wraps.",[22,1580,1581,1585],{},[1574,1582,1584],{"href":1583},"\u002Fdatasets\u002Foverview#current-state-and-history","Overview"," — current state vs\nhistory.",[22,1587,1588,1592],{},[1574,1589,1591],{"href":1590},"\u002Fdatasets\u002Fapi-cli","API and CLI"," — request shapes.",[1594,1595,1596],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .su27w, html code.shiki .su27w{--shiki-light:#916B53;--shiki-default:#916B53;--shiki-dark:#916B53}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}",{"title":418,"searchDepth":744,"depth":567,"links":1598},[1599,1600,1601,1602,1607,1608,1612,1613,1614],{"id":61,"depth":555,"text":62},{"id":121,"depth":555,"text":122},{"id":409,"depth":555,"text":410},{"id":447,"depth":555,"text":448,"children":1603},[1604,1605,1606],{"id":455,"depth":561,"text":456},{"id":532,"depth":561,"text":533},{"id":584,"depth":561,"text":585},{"id":594,"depth":555,"text":595},{"id":675,"depth":555,"text":676,"children":1609},[1610,1611],{"id":679,"depth":561,"text":680},{"id":1076,"depth":561,"text":1077},{"id":1401,"depth":555,"text":1402},{"id":1515,"depth":555,"text":1516},{"id":1567,"depth":555,"text":1568},"Filter project dataset queries with the typed FilterNode AST: operators, AND\u002FOR\u002FNOT groups, value types, time ranges, history, and the UI filter builder.","md",{},true,"\u002Fdatasets\u002Ffilters",null,{"title":5,"description":1615},{"loc":1619},"04.datasets\u002F5.filters","MBOCpKcGYp91HjQcNYxPdGgf2Pxg_615hnawjelmPTc",[1626,1689,1705,1724,1754,1770,1782,1793,1804,1815,1839,1858,1878,1889,1900],{"title":1627,"path":1628,"stem":1629,"children":1630},"Workflows","\u002Fworkflows","01.workflows",[1631,1633,1637,1641,1645,1649,1653,1657,1661,1665,1669,1673,1677,1681,1685],{"title":1627,"path":1628,"stem":1632},"01.workflows\u002Findex",{"title":1634,"path":1635,"stem":1636},"Workflow Quick Reference","\u002Fworkflows\u002Fquick-reference","01.workflows\u002F00.quick-reference",{"title":1638,"path":1639,"stem":1640},"Workflows Overview","\u002Fworkflows\u002Foverview","01.workflows\u002F01.overview",{"title":1642,"path":1643,"stem":1644},"Workflow Syntax Reference","\u002Fworkflows\u002Fsyntax-reference","01.workflows\u002F02.syntax-reference",{"title":1646,"path":1647,"stem":1648},"Steps","\u002Fworkflows\u002Fsteps","01.workflows\u002F03.steps",{"title":1650,"path":1651,"stem":1652},"Step Outputs","\u002Fworkflows\u002Fstep-outputs","01.workflows\u002F04.step-outputs",{"title":1654,"path":1655,"stem":1656},"Concurrency","\u002Fworkflows\u002Fconcurrency","01.workflows\u002F05.concurrency",{"title":1658,"path":1659,"stem":1660},"Transforms","\u002Fworkflows\u002Ftransforms","01.workflows\u002F06.transforms",{"title":1662,"path":1663,"stem":1664},"For Each","\u002Fworkflows\u002Ffor-each","01.workflows\u002F07.for-each",{"title":1666,"path":1667,"stem":1668},"Modules","\u002Fworkflows\u002Fmodules","01.workflows\u002F08.modules",{"title":1670,"path":1671,"stem":1672},"Agents","\u002Fworkflows\u002Fagents","01.workflows\u002F09.agents",{"title":1674,"path":1675,"stem":1676},"Decisions","\u002Fworkflows\u002Fdecisions","01.workflows\u002F10.decisions",{"title":1678,"path":1679,"stem":1680},"Configuration References","\u002Fworkflows\u002Fconfig","01.workflows\u002F11.config",{"title":1682,"path":1683,"stem":1684},"Comparison With Other Automation Systems","\u002Fworkflows\u002Fcomparison","01.workflows\u002F12.comparison",{"title":1686,"path":1687,"stem":1688},"Generate with AI","\u002Fworkflows\u002Fai-generation","01.workflows\u002F13.ai-generation",{"title":1690,"path":1691,"stem":1692,"children":1693},"Projects","\u002Fprojects","02.projects",[1694,1697,1701],{"title":1695,"path":1691,"stem":1696},"Projects & Runs","02.projects\u002Findex",{"title":1698,"path":1699,"stem":1700},"Projects Overview","\u002Fprojects\u002Foverview","02.projects\u002F1.overview",{"title":1702,"path":1703,"stem":1704},"Runs & Artifacts","\u002Fprojects\u002Fruns-artifacts","02.projects\u002F2.runs-artifacts",{"title":1706,"path":1707,"stem":1708,"children":1709},"Runners","\u002Frunners","03.runners",[1710,1712,1716,1720],{"title":1706,"path":1707,"stem":1711},"03.runners\u002Findex",{"title":1713,"path":1714,"stem":1715},"Runner Overview","\u002Frunners\u002Foverview","03.runners\u002F1.overview",{"title":1717,"path":1718,"stem":1719},"Getting Started with Runners","\u002Frunners\u002Fgetting-started","03.runners\u002F2.getting-started",{"title":1721,"path":1722,"stem":1723},"Custom Runner Images","\u002Frunners\u002Fcustom-image","03.runners\u002F3.custom-image",{"title":1725,"path":1726,"stem":1727,"children":1728},"Datasets","\u002Fdatasets","04.datasets",[1729,1731,1735,1739,1743,1746,1747,1751],{"title":1725,"path":1726,"stem":1730},"04.datasets\u002Findex",{"title":1732,"path":1733,"stem":1734},"Datasets Overview","\u002Fdatasets\u002Foverview","04.datasets\u002F1.overview",{"title":1736,"path":1737,"stem":1738},"Dataset Schemas and Identity","\u002Fdatasets\u002Fschema","04.datasets\u002F2.schema",{"title":1740,"path":1741,"stem":1742},"Pushing and Reading Dataset Rows","\u002Fdatasets\u002Fworkflows","04.datasets\u002F3.workflows",{"title":1744,"path":1576,"stem":1745},"Dataset SQL Reference","04.datasets\u002F4.sql",{"title":5,"path":1619,"stem":1623},{"title":1748,"path":1749,"stem":1750},"Dataset Saved Views","\u002Fdatasets\u002Fviews","04.datasets\u002F6.views",{"title":1752,"path":1590,"stem":1753},"Datasets API and CLI","04.datasets\u002F7.api-cli",{"title":1755,"path":1756,"stem":1757,"children":1758},"Agent","\u002Fagent","05.agent",[1759,1762,1766],{"title":1760,"path":1756,"stem":1761},"BH Agent","05.agent\u002Findex",{"title":1763,"path":1764,"stem":1765},"BH Agent Overview","\u002Fagent\u002Foverview","05.agent\u002F1.overview",{"title":1767,"path":1768,"stem":1769},"MCP servers","\u002Fagent\u002Fmcp-servers","05.agent\u002F2.mcp-servers",{"title":1771,"path":1772,"stem":1773,"children":1774},"Bhlast","\u002Fbhlast","06.bhlast",[1775,1778],{"title":1776,"path":1772,"stem":1777},"Bhlast Servers","06.bhlast\u002Findex",{"title":1779,"path":1780,"stem":1781},"Bhlast servers overview","\u002Fbhlast\u002Foverview","06.bhlast\u002F1.overview",{"title":1783,"path":1784,"stem":1785,"children":1786},"Notifications","\u002Fnotifications","07.notifications",[1787,1789],{"title":1783,"path":1784,"stem":1788},"07.notifications\u002Findex",{"title":1790,"path":1791,"stem":1792},"Notifications Overview","\u002Fnotifications\u002Foverview","07.notifications\u002F1.overview",{"title":1794,"path":1795,"stem":1796,"children":1797},"Blob Storage","\u002Fblob-storage","08.blob-storage",[1798,1800],{"title":1794,"path":1795,"stem":1799},"08.blob-storage\u002Findex",{"title":1801,"path":1802,"stem":1803},"Blob Storage Overview","\u002Fblob-storage\u002Foverview","08.blob-storage\u002F1.overview",{"title":1805,"path":1806,"stem":1807,"children":1808},"Payloads","\u002Fpayloads","09.payloads",[1809,1811],{"title":1805,"path":1806,"stem":1810},"09.payloads\u002Findex",{"title":1812,"path":1813,"stem":1814},"Payloads overview","\u002Fpayloads\u002Foverview","09.payloads\u002F1.overview",{"title":1816,"path":1817,"stem":1818,"children":1819},"Cve Watcher","\u002Fcve-watcher","10.cve-watcher",[1820,1823,1827,1831,1835],{"title":1821,"path":1817,"stem":1822},"CVE Watcher","10.cve-watcher\u002Findex",{"title":1824,"path":1825,"stem":1826},"CVE Watcher Overview","\u002Fcve-watcher\u002Foverview","10.cve-watcher\u002F1.overview",{"title":1828,"path":1829,"stem":1830},"CVE Watcher Search and Filters","\u002Fcve-watcher\u002Fsearch","10.cve-watcher\u002F2.search",{"title":1832,"path":1833,"stem":1834},"CVE Watcher Push Notifications","\u002Fcve-watcher\u002Fnotifications","10.cve-watcher\u002F3.notifications",{"title":1836,"path":1837,"stem":1838},"CVE Watcher API and Scopes","\u002Fcve-watcher\u002Fapi","10.cve-watcher\u002F4.api",{"title":1840,"path":1841,"stem":1842,"children":1843},"Developer","\u002Fdeveloper","11.developer",[1844,1846,1850,1854],{"title":1840,"path":1841,"stem":1845},"11.developer\u002Findex",{"title":1847,"path":1848,"stem":1849},"Developer Overview","\u002Fdeveloper\u002Foverview","11.developer\u002F1.overview",{"title":1851,"path":1852,"stem":1853},"Personal Access Token Scopes","\u002Fdeveloper\u002Fscopes","11.developer\u002F2.scopes",{"title":1855,"path":1856,"stem":1857},"Personal Access Tokens","\u002Fdeveloper\u002Fpersonal-access-tokens","11.developer\u002F3.personal-access-tokens",{"title":1859,"path":1860,"stem":1861,"children":1862},"Bh","\u002Fbh","12.bh",[1863,1866,1870,1874],{"title":1864,"path":1860,"stem":1865},"BH CLI","12.bh\u002Findex",{"title":1867,"path":1868,"stem":1869},"BH CLI Overview","\u002Fbh\u002Foverview","12.bh\u002F1.overview",{"title":1871,"path":1872,"stem":1873},"BH CLI Commands","\u002Fbh\u002Fcommands","12.bh\u002F2.commands",{"title":1875,"path":1876,"stem":1877},"BH CLI Examples","\u002Fbh\u002Fexamples","12.bh\u002F3.examples",{"title":1879,"path":1880,"stem":1881,"children":1882},"Billing","\u002Fbilling","13.billing",[1883,1885],{"title":1879,"path":1880,"stem":1884},"13.billing\u002Findex",{"title":1886,"path":1887,"stem":1888},"Billing Overview","\u002Fbilling\u002Foverview","13.billing\u002F1.overview",{"title":1890,"path":1891,"stem":1892,"children":1893},"Tools","\u002Ftools","14.tools",[1894,1896],{"title":1890,"path":1891,"stem":1895},"14.tools\u002Findex",{"title":1897,"path":1898,"stem":1899},"Cookie Lab","\u002Ftools\u002Fcookie-lab","14.tools\u002F1.cookie-lab",{"title":1901,"path":1902,"stem":1903,"children":1904},"Site Policies","\u002Fsite-policies","99.site-policies",[1905,1907,1920,1924,1928,1932,1936,1940,1944],{"title":1901,"path":1902,"stem":1906},"99.site-policies\u002Findex",{"title":1908,"path":1909,"stem":1910,"children":1911},"Privacy Policy","\u002Fsite-policies\u002Fprivacy-policy","99.site-policies\u002F1.privacy-policy",[1912,1916],{"title":1913,"path":1914,"stem":1915},"Company Processors","\u002Fsite-policies\u002Fprivacy-policy\u002Fcompany-processors","99.site-policies\u002Fprivacy-policy\u002F1.company-processors",{"title":1917,"path":1918,"stem":1919},"Data Export Instructions","\u002Fsite-policies\u002Fprivacy-policy\u002Fdata-export-instructions","99.site-policies\u002Fprivacy-policy\u002F2.data-export-instructions",{"title":1921,"path":1922,"stem":1923},"Terms of Service","\u002Fsite-policies\u002Fterms-of-service","99.site-policies\u002F2.terms-of-service",{"title":1925,"path":1926,"stem":1927},"California Resident Notice at Collection","\u002Fsite-policies\u002Fccpa","99.site-policies\u002F3.ccpa",{"title":1929,"path":1930,"stem":1931},"Cancellation Policy","\u002Fsite-policies\u002Fcancellation-policy","99.site-policies\u002F4.cancellation-policy",{"title":1933,"path":1934,"stem":1935},"Refund Policy","\u002Fsite-policies\u002Frefund-policy","99.site-policies\u002F5.refund-policy",{"title":1937,"path":1938,"stem":1939},"Taxes on Services","\u002Fsite-policies\u002Ftaxes-on-services","99.site-policies\u002F6.taxes-on-services",{"title":1941,"path":1942,"stem":1943},"Disclaimer","\u002Fsite-policies\u002Fdisclaimer","99.site-policies\u002F7.disclaimer",{"title":1945,"path":1946,"stem":1947,"children":1948},"Security","\u002Fsite-policies\u002Fsecurity","99.site-policies\u002Fsecurity\u002Findex",[1949,1950,1954],{"title":1945,"path":1946,"stem":1947},{"title":1951,"path":1952,"stem":1953},"Security Overview","\u002Fsite-policies\u002Fsecurity\u002Fsecurity-overview","99.site-policies\u002Fsecurity\u002F1.security-overview",{"title":1955,"path":1956,"stem":1957},"Security Response","\u002Fsite-policies\u002Fsecurity\u002Fsecurity-response","99.site-policies\u002Fsecurity\u002F2.security-response",1794410312376]