[{"data":1,"prerenderedAt":1513},["ShallowReactive",2],{"page-\u002Fdatasets\u002Fschema":3,"all-pages":1183},{"id":4,"title":5,"body":6,"description":1173,"extension":1174,"meta":1175,"navigation":1176,"path":1177,"robots":1178,"seo":1179,"sitemap":1180,"stem":1181,"__hash__":1182},"content\u002F04.datasets\u002F2.schema.md","Dataset Schemas and Identity",{"type":7,"value":8,"toc":1163},"minimark",[9,14,18,23,129,151,155,256,262,266,272,275,332,335,615,619,631,634,699,705,945,960,964,967,999,1021,1024,1041,1045,1048,1064,1067,1071,1117,1121,1159],[10,11,13],"h1",{"id":12},"datasets-schemas-and-identity","Datasets: schemas and identity",[15,16,17],"p",{},"A dataset schema defines the columns, types, nullability, and identity of a\nproject table. The schema is fixed when the dataset is created; rows are\nvalidated against it on every push.",[19,20,22],"h2",{"id":21},"column-kinds","Column kinds",[24,25,26,42],"table",{},[27,28,29],"thead",{},[30,31,32,36,39],"tr",{},[33,34,35],"th",{},"Kind",[33,37,38],{},"Stored as",[33,40,41],{},"Accepted values",[43,44,45,62,77,92,114],"tbody",{},[30,46,47,54,59],{},[48,49,50],"td",{},[51,52,53],"code",{},"COLUMN_KIND_TEXT",[48,55,56],{},[51,57,58],{},"TEXT",[48,60,61],{},"Any UTF-8 string.",[30,63,64,69,74],{},[48,65,66],{},[51,67,68],{},"COLUMN_KIND_INTEGER",[48,70,71],{},[51,72,73],{},"BIGINT",[48,75,76],{},"64-bit signed integer.",[30,78,79,84,89],{},[48,80,81],{},[51,82,83],{},"COLUMN_KIND_NUMBER",[48,85,86],{},[51,87,88],{},"DOUBLE",[48,90,91],{},"Double-precision number.",[30,93,94,99,104],{},[48,95,96],{},[51,97,98],{},"COLUMN_KIND_BOOLEAN",[48,100,101],{},[51,102,103],{},"BOOLEAN",[48,105,106,109,110,113],{},[51,107,108],{},"true"," or ",[51,111,112],{},"false",".",[30,115,116,121,126],{},[48,117,118],{},[51,119,120],{},"COLUMN_KIND_TIMESTAMP",[48,122,123],{},[51,124,125],{},"TIMESTAMP",[48,127,128],{},"Timestamp with microsecond precision.",[15,130,131,132,134,135,134,137,134,139,141,142,144,145,150],{},"In SQL, these appear as ",[51,133,58],{},", ",[51,136,73],{},[51,138,88],{},[51,140,103],{},", and ",[51,143,125],{},".\nSee ",[146,147,149],"a",{"href":148},"\u002Fdatasets\u002Fsql#result-types","SQL reference"," for how query result types are\nmapped.",[19,152,154],{"id":153},"schema-rules","Schema rules",[24,156,157,167],{},[27,158,159],{},[30,160,161,164],{},[33,162,163],{},"Rule",[33,165,166],{},"Detail",[43,168,169,177,185,200,208,220,228,240,248],{},[30,170,171,174],{},[48,172,173],{},"Column names",[48,175,176],{},"ASCII letters, digits, and underscores, starting with a letter or underscore. Quote names that are not lowercase in SQL.",[30,178,179,182],{},[48,180,181],{},"Uniqueness",[48,183,184],{},"Column names are unique case-insensitively.",[30,186,187,190],{},[48,188,189],{},"Reserved names",[48,191,192,195,196,199],{},[51,193,194],{},"__ingested_at"," and ",[51,197,198],{},"__deleted"," are reserved.",[30,201,202,205],{},[48,203,204],{},"Column order",[48,206,207],{},"Significant: ingest and result mapping use schema order.",[30,209,210,213],{},[48,211,212],{},"Nullable",[48,214,215,216,219],{},"A ",[51,217,218],{},"NULL"," written to a non-nullable column fails the push.",[30,221,222,225],{},[48,223,224],{},"Column types",[48,226,227],{},"Fixed after creation; the Hub dialog states this explicitly.",[30,229,230,233],{},[48,231,232],{},"Dataset names",[48,234,235,236,239],{},"Start with a letter; use letters, digits, and dashes (for example ",[51,237,238],{},"live-hosts","). Dataset tables and saved views share one namespace per project, so names must be unique case-insensitively across both.",[30,241,242,245],{},[48,243,244],{},"Name length",[48,246,247],{},"Up to 255 characters.",[30,249,250,253],{},[48,251,252],{},"Description",[48,254,255],{},"Up to 1024 characters.",[15,257,258,259,113],{},"Dataset names with dashes must be double-quoted in SQL:\n",[51,260,261],{},"SELECT * FROM \"live-hosts\"",[19,263,265],{"id":264},"identity-and-reconciliation","Identity and reconciliation",[15,267,268,269,271],{},"Identity columns tell the dataset which observations describe the same logical\nrecord. With identity configured, the current state keeps only the latest\nobservation per identity (by ",[51,270,194],{},"). Without identity columns, every\npushed row is a separate record.",[15,273,274],{},"Use the smallest stable key:",[24,276,277,287],{},[27,278,279],{},[30,280,281,284],{},[33,282,283],{},"Dataset",[33,285,286],{},"Identity",[43,288,289,304,314,324],{},[30,290,291,294],{},[48,292,293],{},"Subdomains",[48,295,296,299,300,303],{},[51,297,298],{},"host"," (optionally ",[51,301,302],{},"program"," if the same host appears in several programs)",[30,305,306,309],{},[48,307,308],{},"Live hosts",[48,310,311],{},[51,312,313],{},"url",[30,315,316,319],{},[48,317,318],{},"Findings",[48,320,321],{},[51,322,323],{},"fingerprint",[30,325,326,329],{},[48,327,328],{},"DNS history",[48,330,331],{},"usually no identity — every observation is meaningful",[15,333,334],{},"Identity is part of the schema, not the push:",[336,337,342],"pre",{"className":338,"code":339,"language":340,"meta":341,"style":341},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"columns\": [\n    { \"name\": \"host\", \"kind\": \"COLUMN_KIND_TEXT\", \"nullable\": false, \"identity\": true },\n    { \"name\": \"program\", \"kind\": \"COLUMN_KIND_TEXT\", \"nullable\": false, \"identity\": true },\n    { \"name\": \"ip\", \"kind\": \"COLUMN_KIND_TEXT\", \"nullable\": true },\n    { \"name\": \"resolved\", \"kind\": \"COLUMN_KIND_BOOLEAN\", \"nullable\": true }\n  ]\n}\n","json","",[51,343,344,353,372,443,502,552,603,609],{"__ignoreMap":341},[345,346,349],"span",{"class":347,"line":348},"line",1,[345,350,352],{"class":351},"sMK4o","{\n",[345,354,356,359,363,366,369],{"class":347,"line":355},2,[345,357,358],{"class":351},"  \"",[345,360,362],{"class":361},"spNyl","columns",[345,364,365],{"class":351},"\"",[345,367,368],{"class":351},":",[345,370,371],{"class":351}," [\n",[345,373,375,378,381,385,387,389,391,394,396,399,401,404,406,408,410,412,414,416,418,421,423,425,428,430,433,435,437,440],{"class":347,"line":374},3,[345,376,377],{"class":351},"    {",[345,379,380],{"class":351}," \"",[345,382,384],{"class":383},"sBMFI","name",[345,386,365],{"class":351},[345,388,368],{"class":351},[345,390,380],{"class":351},[345,392,298],{"class":393},"sfazB",[345,395,365],{"class":351},[345,397,398],{"class":351},",",[345,400,380],{"class":351},[345,402,403],{"class":383},"kind",[345,405,365],{"class":351},[345,407,368],{"class":351},[345,409,380],{"class":351},[345,411,53],{"class":393},[345,413,365],{"class":351},[345,415,398],{"class":351},[345,417,380],{"class":351},[345,419,420],{"class":383},"nullable",[345,422,365],{"class":351},[345,424,368],{"class":351},[345,426,427],{"class":351}," false,",[345,429,380],{"class":351},[345,431,432],{"class":383},"identity",[345,434,365],{"class":351},[345,436,368],{"class":351},[345,438,439],{"class":351}," true",[345,441,442],{"class":351}," },\n",[345,444,446,448,450,452,454,456,458,460,462,464,466,468,470,472,474,476,478,480,482,484,486,488,490,492,494,496,498,500],{"class":347,"line":445},4,[345,447,377],{"class":351},[345,449,380],{"class":351},[345,451,384],{"class":383},[345,453,365],{"class":351},[345,455,368],{"class":351},[345,457,380],{"class":351},[345,459,302],{"class":393},[345,461,365],{"class":351},[345,463,398],{"class":351},[345,465,380],{"class":351},[345,467,403],{"class":383},[345,469,365],{"class":351},[345,471,368],{"class":351},[345,473,380],{"class":351},[345,475,53],{"class":393},[345,477,365],{"class":351},[345,479,398],{"class":351},[345,481,380],{"class":351},[345,483,420],{"class":383},[345,485,365],{"class":351},[345,487,368],{"class":351},[345,489,427],{"class":351},[345,491,380],{"class":351},[345,493,432],{"class":383},[345,495,365],{"class":351},[345,497,368],{"class":351},[345,499,439],{"class":351},[345,501,442],{"class":351},[345,503,505,507,509,511,513,515,517,520,522,524,526,528,530,532,534,536,538,540,542,544,546,548,550],{"class":347,"line":504},5,[345,506,377],{"class":351},[345,508,380],{"class":351},[345,510,384],{"class":383},[345,512,365],{"class":351},[345,514,368],{"class":351},[345,516,380],{"class":351},[345,518,519],{"class":393},"ip",[345,521,365],{"class":351},[345,523,398],{"class":351},[345,525,380],{"class":351},[345,527,403],{"class":383},[345,529,365],{"class":351},[345,531,368],{"class":351},[345,533,380],{"class":351},[345,535,53],{"class":393},[345,537,365],{"class":351},[345,539,398],{"class":351},[345,541,380],{"class":351},[345,543,420],{"class":383},[345,545,365],{"class":351},[345,547,368],{"class":351},[345,549,439],{"class":351},[345,551,442],{"class":351},[345,553,555,557,559,561,563,565,567,570,572,574,576,578,580,582,584,586,588,590,592,594,596,598,600],{"class":347,"line":554},6,[345,556,377],{"class":351},[345,558,380],{"class":351},[345,560,384],{"class":383},[345,562,365],{"class":351},[345,564,368],{"class":351},[345,566,380],{"class":351},[345,568,569],{"class":393},"resolved",[345,571,365],{"class":351},[345,573,398],{"class":351},[345,575,380],{"class":351},[345,577,403],{"class":383},[345,579,365],{"class":351},[345,581,368],{"class":351},[345,583,380],{"class":351},[345,585,98],{"class":393},[345,587,365],{"class":351},[345,589,398],{"class":351},[345,591,380],{"class":351},[345,593,420],{"class":383},[345,595,365],{"class":351},[345,597,368],{"class":351},[345,599,439],{"class":351},[345,601,602],{"class":351}," }\n",[345,604,606],{"class":347,"line":605},7,[345,607,608],{"class":351},"  ]\n",[345,610,612],{"class":347,"line":611},8,[345,613,614],{"class":351},"}\n",[19,616,618],{"id":617},"creating-a-dataset","Creating a dataset",[15,620,621,622,626,627,630],{},"The Hub's ",[623,624,625],"strong",{},"New dataset"," dialog covers the common case and creates datasets\n",[623,628,629],{},"without identity columns",", which is correct for append-only history and for\ntables where every row is distinct.",[15,632,633],{},"When you need reconciliation, create the dataset with the API or CLI and mark\nthe identity columns:",[336,635,639],{"className":636,"code":637,"language":638,"meta":341,"style":341},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","bh dataset create \\\n  --project-id \"$PROJECT_ID\" \\\n  subdomains \\\n  --description \"Resolved subdomains per program\" \\\n  --schema-json schema.json\n","bash",[51,640,641,656,670,677,691],{"__ignoreMap":341},[345,642,643,646,649,652],{"class":347,"line":348},[345,644,645],{"class":383},"bh",[345,647,648],{"class":393}," dataset",[345,650,651],{"class":393}," create",[345,653,655],{"class":654},"sTEyZ"," \\\n",[345,657,658,661,663,666,668],{"class":347,"line":355},[345,659,660],{"class":393},"  --project-id",[345,662,380],{"class":351},[345,664,665],{"class":654},"$PROJECT_ID",[345,667,365],{"class":351},[345,669,655],{"class":654},[345,671,672,675],{"class":347,"line":374},[345,673,674],{"class":393},"  subdomains",[345,676,655],{"class":654},[345,678,679,682,684,687,689],{"class":347,"line":445},[345,680,681],{"class":393},"  --description",[345,683,380],{"class":351},[345,685,686],{"class":393},"Resolved subdomains per program",[345,688,365],{"class":351},[345,690,655],{"class":654},[345,692,693,696],{"class":347,"line":504},[345,694,695],{"class":393},"  --schema-json",[345,697,698],{"class":393}," schema.json\n",[15,700,701,704],{},[51,702,703],{},"schema.json"," uses the proto JSON shape:",[336,706,707],{"className":338,"code":339,"language":340,"meta":341,"style":341},[51,708,709,713,725,783,841,889,937,941],{"__ignoreMap":341},[345,710,711],{"class":347,"line":348},[345,712,352],{"class":351},[345,714,715,717,719,721,723],{"class":347,"line":355},[345,716,358],{"class":351},[345,718,362],{"class":361},[345,720,365],{"class":351},[345,722,368],{"class":351},[345,724,371],{"class":351},[345,726,727,729,731,733,735,737,739,741,743,745,747,749,751,753,755,757,759,761,763,765,767,769,771,773,775,777,779,781],{"class":347,"line":374},[345,728,377],{"class":351},[345,730,380],{"class":351},[345,732,384],{"class":383},[345,734,365],{"class":351},[345,736,368],{"class":351},[345,738,380],{"class":351},[345,740,298],{"class":393},[345,742,365],{"class":351},[345,744,398],{"class":351},[345,746,380],{"class":351},[345,748,403],{"class":383},[345,750,365],{"class":351},[345,752,368],{"class":351},[345,754,380],{"class":351},[345,756,53],{"class":393},[345,758,365],{"class":351},[345,760,398],{"class":351},[345,762,380],{"class":351},[345,764,420],{"class":383},[345,766,365],{"class":351},[345,768,368],{"class":351},[345,770,427],{"class":351},[345,772,380],{"class":351},[345,774,432],{"class":383},[345,776,365],{"class":351},[345,778,368],{"class":351},[345,780,439],{"class":351},[345,782,442],{"class":351},[345,784,785,787,789,791,793,795,797,799,801,803,805,807,809,811,813,815,817,819,821,823,825,827,829,831,833,835,837,839],{"class":347,"line":445},[345,786,377],{"class":351},[345,788,380],{"class":351},[345,790,384],{"class":383},[345,792,365],{"class":351},[345,794,368],{"class":351},[345,796,380],{"class":351},[345,798,302],{"class":393},[345,800,365],{"class":351},[345,802,398],{"class":351},[345,804,380],{"class":351},[345,806,403],{"class":383},[345,808,365],{"class":351},[345,810,368],{"class":351},[345,812,380],{"class":351},[345,814,53],{"class":393},[345,816,365],{"class":351},[345,818,398],{"class":351},[345,820,380],{"class":351},[345,822,420],{"class":383},[345,824,365],{"class":351},[345,826,368],{"class":351},[345,828,427],{"class":351},[345,830,380],{"class":351},[345,832,432],{"class":383},[345,834,365],{"class":351},[345,836,368],{"class":351},[345,838,439],{"class":351},[345,840,442],{"class":351},[345,842,843,845,847,849,851,853,855,857,859,861,863,865,867,869,871,873,875,877,879,881,883,885,887],{"class":347,"line":504},[345,844,377],{"class":351},[345,846,380],{"class":351},[345,848,384],{"class":383},[345,850,365],{"class":351},[345,852,368],{"class":351},[345,854,380],{"class":351},[345,856,519],{"class":393},[345,858,365],{"class":351},[345,860,398],{"class":351},[345,862,380],{"class":351},[345,864,403],{"class":383},[345,866,365],{"class":351},[345,868,368],{"class":351},[345,870,380],{"class":351},[345,872,53],{"class":393},[345,874,365],{"class":351},[345,876,398],{"class":351},[345,878,380],{"class":351},[345,880,420],{"class":383},[345,882,365],{"class":351},[345,884,368],{"class":351},[345,886,439],{"class":351},[345,888,442],{"class":351},[345,890,891,893,895,897,899,901,903,905,907,909,911,913,915,917,919,921,923,925,927,929,931,933,935],{"class":347,"line":554},[345,892,377],{"class":351},[345,894,380],{"class":351},[345,896,384],{"class":383},[345,898,365],{"class":351},[345,900,368],{"class":351},[345,902,380],{"class":351},[345,904,569],{"class":393},[345,906,365],{"class":351},[345,908,398],{"class":351},[345,910,380],{"class":351},[345,912,403],{"class":383},[345,914,365],{"class":351},[345,916,368],{"class":351},[345,918,380],{"class":351},[345,920,98],{"class":393},[345,922,365],{"class":351},[345,924,398],{"class":351},[345,926,380],{"class":351},[345,928,420],{"class":383},[345,930,365],{"class":351},[345,932,368],{"class":351},[345,934,439],{"class":351},[345,936,602],{"class":351},[345,938,939],{"class":347,"line":605},[345,940,608],{"class":351},[345,942,943],{"class":347,"line":611},[345,944,614],{"class":351},[15,946,947,948,951,952,955,956,113],{},"The same shape is the ",[51,949,950],{},"schema"," field of ",[51,953,954],{},"CreateDatasetRequest"," — see\n",[146,957,959],{"href":958},"\u002Fdatasets\u002Fapi-cli","API and CLI",[19,961,963],{"id":962},"current-state-and-stale-rows","Current state and stale rows",[15,965,966],{},"The service keeps every push as append-only observations and derives the\ncurrent state per identity. The relation also exposes two reserved columns:",[24,968,969,979],{},[27,970,971],{},[30,972,973,976],{},[33,974,975],{},"Column",[33,977,978],{},"Meaning",[43,980,981,990],{},[30,982,983,987],{},[48,984,985],{},[51,986,194],{},[48,988,989],{},"When the observation was recorded.",[30,991,992,996],{},[48,993,994],{},[51,995,198],{},[48,997,998],{},"Whether the record is stale. Current-state queries exclude stale rows.",[15,1000,1001,1004,1005,1008,1009,1012,1013,1016,1017,113],{},[51,1002,1003],{},"upsert"," leaves identities that are absent from a push untouched. ",[51,1006,1007],{},"sync","\ndeclares the push authoritative, so identities missing from a full snapshot are\nmarked stale. ",[51,1010,1011],{},"DeleteDatasetRows"," accepts the same current-state semantics:\nsoft deletion writes ",[51,1014,1015],{},"__deleted = true"," tombstones and hard deletion rewrites\nthe stored files. See ",[146,1018,1020],{"href":1019},"\u002Fdatasets\u002Foverview#current-state-and-history","Overview",[15,1022,1023],{},"In SQL, you can inspect the history directly:",[336,1025,1029],{"className":1026,"code":1027,"language":1028,"meta":341,"style":341},"language-sql shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","SELECT \"host\", \"__ingested_at\", \"__deleted\"\nFROM dataset\n","sql",[51,1030,1031,1036],{"__ignoreMap":341},[345,1032,1033],{"class":347,"line":348},[345,1034,1035],{},"SELECT \"host\", \"__ingested_at\", \"__deleted\"\n",[345,1037,1038],{"class":347,"line":355},[345,1039,1040],{},"FROM dataset\n",[19,1042,1044],{"id":1043},"changing-a-schema","Changing a schema",[15,1046,1047],{},"Column names and types cannot be changed after creation, and the update API only\nchanges the dataset name and description. To change the shape:",[1049,1050,1051,1055,1058,1061],"ol",{},[1052,1053,1054],"li",{},"Create a new dataset with the desired schema.",[1052,1056,1057],{},"Backfill or re-push the rows.",[1052,1059,1060],{},"Point workflows and views at the new dataset name.",[1052,1062,1063],{},"Delete the old dataset when you no longer need its history.",[15,1065,1066],{},"Deleting a dataset removes its stored files. Views that referenced it fail on\ntheir next execution and are marked invalid.",[19,1068,1070],{"id":1069},"limits","Limits",[24,1072,1073,1083],{},[27,1074,1075],{},[30,1076,1077,1080],{},[33,1078,1079],{},"Limit",[33,1081,1082],{},"Value",[43,1084,1085,1093,1101,1109],{},[30,1086,1087,1090],{},[48,1088,1089],{},"Datasets per project",[48,1091,1092],{},"100",[30,1094,1095,1098],{},[48,1096,1097],{},"Columns per dataset",[48,1099,1100],{},"No fixed server limit; keep schemas narrow for query speed",[30,1102,1103,1106],{},[48,1104,1105],{},"Column name length",[48,1107,1108],{},"255 characters in the Hub UI",[30,1110,1111,1114],{},[48,1112,1113],{},"Description length",[48,1115,1116],{},"1024 characters",[19,1118,1120],{"id":1119},"next-steps","Next steps",[1122,1123,1124,1134,1140,1147,1154],"ul",{},[1052,1125,1126,1130,1131,113],{},[146,1127,1129],{"href":1128},"\u002Fdatasets\u002Fworkflows","Pushing dataset rows",": push rows with ",[51,1132,1133],{},"step.update_dataset",[1052,1135,1136,1139],{},[146,1137,149],{"href":1138},"\u002Fdatasets\u002Fsql",": query the schema you just designed.",[1052,1141,1142,1146],{},[146,1143,1145],{"href":1144},"\u002Fdatasets\u002Ffilters","Structured filters",": type-aware filtering without SQL.",[1052,1148,1149,1153],{},[146,1150,1152],{"href":1151},"\u002Fdatasets\u002Fviews","Saved views",": reusable queries across datasets.",[1052,1155,1156,1158],{},[146,1157,959],{"href":958},": create and inspect datasets programmatically.",[1160,1161,1162],"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 .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}",{"title":341,"searchDepth":504,"depth":445,"links":1164},[1165,1166,1167,1168,1169,1170,1171,1172],{"id":21,"depth":355,"text":22},{"id":153,"depth":355,"text":154},{"id":264,"depth":355,"text":265},{"id":617,"depth":355,"text":618},{"id":962,"depth":355,"text":963},{"id":1043,"depth":355,"text":1044},{"id":1069,"depth":355,"text":1070},{"id":1119,"depth":355,"text":1120},"Dataset column kinds, naming rules, nullable columns, identity columns and reconciliation, reserved fields, and how to create a dataset schema.","md",{},true,"\u002Fdatasets\u002Fschema",null,{"title":5,"description":1173},{"loc":1177},"04.datasets\u002F2.schema","_Xjeh_Vc5kkkn8I2UzdniOCeR9WPXRddy3gYWm9AhCU",[1184,1247,1263,1282,1309,1325,1337,1348,1359,1370,1394,1413,1433,1444,1455],{"title":1185,"path":1186,"stem":1187,"children":1188},"Workflows","\u002Fworkflows","01.workflows",[1189,1191,1195,1199,1203,1207,1211,1215,1219,1223,1227,1231,1235,1239,1243],{"title":1185,"path":1186,"stem":1190},"01.workflows\u002Findex",{"title":1192,"path":1193,"stem":1194},"Workflow Quick Reference","\u002Fworkflows\u002Fquick-reference","01.workflows\u002F00.quick-reference",{"title":1196,"path":1197,"stem":1198},"Workflows Overview","\u002Fworkflows\u002Foverview","01.workflows\u002F01.overview",{"title":1200,"path":1201,"stem":1202},"Workflow Syntax Reference","\u002Fworkflows\u002Fsyntax-reference","01.workflows\u002F02.syntax-reference",{"title":1204,"path":1205,"stem":1206},"Steps","\u002Fworkflows\u002Fsteps","01.workflows\u002F03.steps",{"title":1208,"path":1209,"stem":1210},"Step Outputs","\u002Fworkflows\u002Fstep-outputs","01.workflows\u002F04.step-outputs",{"title":1212,"path":1213,"stem":1214},"Concurrency","\u002Fworkflows\u002Fconcurrency","01.workflows\u002F05.concurrency",{"title":1216,"path":1217,"stem":1218},"Transforms","\u002Fworkflows\u002Ftransforms","01.workflows\u002F06.transforms",{"title":1220,"path":1221,"stem":1222},"For Each","\u002Fworkflows\u002Ffor-each","01.workflows\u002F07.for-each",{"title":1224,"path":1225,"stem":1226},"Modules","\u002Fworkflows\u002Fmodules","01.workflows\u002F08.modules",{"title":1228,"path":1229,"stem":1230},"Agents","\u002Fworkflows\u002Fagents","01.workflows\u002F09.agents",{"title":1232,"path":1233,"stem":1234},"Decisions","\u002Fworkflows\u002Fdecisions","01.workflows\u002F10.decisions",{"title":1236,"path":1237,"stem":1238},"Configuration References","\u002Fworkflows\u002Fconfig","01.workflows\u002F11.config",{"title":1240,"path":1241,"stem":1242},"Comparison With Other Automation Systems","\u002Fworkflows\u002Fcomparison","01.workflows\u002F12.comparison",{"title":1244,"path":1245,"stem":1246},"Generate with AI","\u002Fworkflows\u002Fai-generation","01.workflows\u002F13.ai-generation",{"title":1248,"path":1249,"stem":1250,"children":1251},"Projects","\u002Fprojects","02.projects",[1252,1255,1259],{"title":1253,"path":1249,"stem":1254},"Projects & Runs","02.projects\u002Findex",{"title":1256,"path":1257,"stem":1258},"Projects Overview","\u002Fprojects\u002Foverview","02.projects\u002F1.overview",{"title":1260,"path":1261,"stem":1262},"Runs & Artifacts","\u002Fprojects\u002Fruns-artifacts","02.projects\u002F2.runs-artifacts",{"title":1264,"path":1265,"stem":1266,"children":1267},"Runners","\u002Frunners","03.runners",[1268,1270,1274,1278],{"title":1264,"path":1265,"stem":1269},"03.runners\u002Findex",{"title":1271,"path":1272,"stem":1273},"Runner Overview","\u002Frunners\u002Foverview","03.runners\u002F1.overview",{"title":1275,"path":1276,"stem":1277},"Getting Started with Runners","\u002Frunners\u002Fgetting-started","03.runners\u002F2.getting-started",{"title":1279,"path":1280,"stem":1281},"Custom Runner Images","\u002Frunners\u002Fcustom-image","03.runners\u002F3.custom-image",{"title":1283,"path":1284,"stem":1285,"children":1286},"Datasets","\u002Fdatasets","04.datasets",[1287,1289,1293,1294,1297,1300,1303,1306],{"title":1283,"path":1284,"stem":1288},"04.datasets\u002Findex",{"title":1290,"path":1291,"stem":1292},"Datasets Overview","\u002Fdatasets\u002Foverview","04.datasets\u002F1.overview",{"title":5,"path":1177,"stem":1181},{"title":1295,"path":1128,"stem":1296},"Pushing and Reading Dataset Rows","04.datasets\u002F3.workflows",{"title":1298,"path":1138,"stem":1299},"Dataset SQL Reference","04.datasets\u002F4.sql",{"title":1301,"path":1144,"stem":1302},"Dataset Structured Filters","04.datasets\u002F5.filters",{"title":1304,"path":1151,"stem":1305},"Dataset Saved Views","04.datasets\u002F6.views",{"title":1307,"path":958,"stem":1308},"Datasets API and CLI","04.datasets\u002F7.api-cli",{"title":1310,"path":1311,"stem":1312,"children":1313},"Agent","\u002Fagent","05.agent",[1314,1317,1321],{"title":1315,"path":1311,"stem":1316},"BH Agent","05.agent\u002Findex",{"title":1318,"path":1319,"stem":1320},"BH Agent Overview","\u002Fagent\u002Foverview","05.agent\u002F1.overview",{"title":1322,"path":1323,"stem":1324},"MCP servers","\u002Fagent\u002Fmcp-servers","05.agent\u002F2.mcp-servers",{"title":1326,"path":1327,"stem":1328,"children":1329},"Bhlast","\u002Fbhlast","06.bhlast",[1330,1333],{"title":1331,"path":1327,"stem":1332},"Bhlast Servers","06.bhlast\u002Findex",{"title":1334,"path":1335,"stem":1336},"Bhlast servers overview","\u002Fbhlast\u002Foverview","06.bhlast\u002F1.overview",{"title":1338,"path":1339,"stem":1340,"children":1341},"Notifications","\u002Fnotifications","07.notifications",[1342,1344],{"title":1338,"path":1339,"stem":1343},"07.notifications\u002Findex",{"title":1345,"path":1346,"stem":1347},"Notifications Overview","\u002Fnotifications\u002Foverview","07.notifications\u002F1.overview",{"title":1349,"path":1350,"stem":1351,"children":1352},"Blob Storage","\u002Fblob-storage","08.blob-storage",[1353,1355],{"title":1349,"path":1350,"stem":1354},"08.blob-storage\u002Findex",{"title":1356,"path":1357,"stem":1358},"Blob Storage Overview","\u002Fblob-storage\u002Foverview","08.blob-storage\u002F1.overview",{"title":1360,"path":1361,"stem":1362,"children":1363},"Payloads","\u002Fpayloads","09.payloads",[1364,1366],{"title":1360,"path":1361,"stem":1365},"09.payloads\u002Findex",{"title":1367,"path":1368,"stem":1369},"Payloads overview","\u002Fpayloads\u002Foverview","09.payloads\u002F1.overview",{"title":1371,"path":1372,"stem":1373,"children":1374},"Cve Watcher","\u002Fcve-watcher","10.cve-watcher",[1375,1378,1382,1386,1390],{"title":1376,"path":1372,"stem":1377},"CVE Watcher","10.cve-watcher\u002Findex",{"title":1379,"path":1380,"stem":1381},"CVE Watcher Overview","\u002Fcve-watcher\u002Foverview","10.cve-watcher\u002F1.overview",{"title":1383,"path":1384,"stem":1385},"CVE Watcher Search and Filters","\u002Fcve-watcher\u002Fsearch","10.cve-watcher\u002F2.search",{"title":1387,"path":1388,"stem":1389},"CVE Watcher Push Notifications","\u002Fcve-watcher\u002Fnotifications","10.cve-watcher\u002F3.notifications",{"title":1391,"path":1392,"stem":1393},"CVE Watcher API and Scopes","\u002Fcve-watcher\u002Fapi","10.cve-watcher\u002F4.api",{"title":1395,"path":1396,"stem":1397,"children":1398},"Developer","\u002Fdeveloper","11.developer",[1399,1401,1405,1409],{"title":1395,"path":1396,"stem":1400},"11.developer\u002Findex",{"title":1402,"path":1403,"stem":1404},"Developer Overview","\u002Fdeveloper\u002Foverview","11.developer\u002F1.overview",{"title":1406,"path":1407,"stem":1408},"Personal Access Token Scopes","\u002Fdeveloper\u002Fscopes","11.developer\u002F2.scopes",{"title":1410,"path":1411,"stem":1412},"Personal Access Tokens","\u002Fdeveloper\u002Fpersonal-access-tokens","11.developer\u002F3.personal-access-tokens",{"title":1414,"path":1415,"stem":1416,"children":1417},"Bh","\u002Fbh","12.bh",[1418,1421,1425,1429],{"title":1419,"path":1415,"stem":1420},"BH CLI","12.bh\u002Findex",{"title":1422,"path":1423,"stem":1424},"BH CLI Overview","\u002Fbh\u002Foverview","12.bh\u002F1.overview",{"title":1426,"path":1427,"stem":1428},"BH CLI Commands","\u002Fbh\u002Fcommands","12.bh\u002F2.commands",{"title":1430,"path":1431,"stem":1432},"BH CLI Examples","\u002Fbh\u002Fexamples","12.bh\u002F3.examples",{"title":1434,"path":1435,"stem":1436,"children":1437},"Billing","\u002Fbilling","13.billing",[1438,1440],{"title":1434,"path":1435,"stem":1439},"13.billing\u002Findex",{"title":1441,"path":1442,"stem":1443},"Billing Overview","\u002Fbilling\u002Foverview","13.billing\u002F1.overview",{"title":1445,"path":1446,"stem":1447,"children":1448},"Tools","\u002Ftools","14.tools",[1449,1451],{"title":1445,"path":1446,"stem":1450},"14.tools\u002Findex",{"title":1452,"path":1453,"stem":1454},"Cookie Lab","\u002Ftools\u002Fcookie-lab","14.tools\u002F1.cookie-lab",{"title":1456,"path":1457,"stem":1458,"children":1459},"Site Policies","\u002Fsite-policies","99.site-policies",[1460,1462,1475,1479,1483,1487,1491,1495,1499],{"title":1456,"path":1457,"stem":1461},"99.site-policies\u002Findex",{"title":1463,"path":1464,"stem":1465,"children":1466},"Privacy Policy","\u002Fsite-policies\u002Fprivacy-policy","99.site-policies\u002F1.privacy-policy",[1467,1471],{"title":1468,"path":1469,"stem":1470},"Company Processors","\u002Fsite-policies\u002Fprivacy-policy\u002Fcompany-processors","99.site-policies\u002Fprivacy-policy\u002F1.company-processors",{"title":1472,"path":1473,"stem":1474},"Data Export Instructions","\u002Fsite-policies\u002Fprivacy-policy\u002Fdata-export-instructions","99.site-policies\u002Fprivacy-policy\u002F2.data-export-instructions",{"title":1476,"path":1477,"stem":1478},"Terms of Service","\u002Fsite-policies\u002Fterms-of-service","99.site-policies\u002F2.terms-of-service",{"title":1480,"path":1481,"stem":1482},"California Resident Notice at Collection","\u002Fsite-policies\u002Fccpa","99.site-policies\u002F3.ccpa",{"title":1484,"path":1485,"stem":1486},"Cancellation Policy","\u002Fsite-policies\u002Fcancellation-policy","99.site-policies\u002F4.cancellation-policy",{"title":1488,"path":1489,"stem":1490},"Refund Policy","\u002Fsite-policies\u002Frefund-policy","99.site-policies\u002F5.refund-policy",{"title":1492,"path":1493,"stem":1494},"Taxes on Services","\u002Fsite-policies\u002Ftaxes-on-services","99.site-policies\u002F6.taxes-on-services",{"title":1496,"path":1497,"stem":1498},"Disclaimer","\u002Fsite-policies\u002Fdisclaimer","99.site-policies\u002F7.disclaimer",{"title":1500,"path":1501,"stem":1502,"children":1503},"Security","\u002Fsite-policies\u002Fsecurity","99.site-policies\u002Fsecurity\u002Findex",[1504,1505,1509],{"title":1500,"path":1501,"stem":1502},{"title":1506,"path":1507,"stem":1508},"Security Overview","\u002Fsite-policies\u002Fsecurity\u002Fsecurity-overview","99.site-policies\u002Fsecurity\u002F1.security-overview",{"title":1510,"path":1511,"stem":1512},"Security Response","\u002Fsite-policies\u002Fsecurity\u002Fsecurity-response","99.site-policies\u002Fsecurity\u002F2.security-response",1794410312376]