{
  "provenance": {
    "kind": "Illustrative examples, not measured performance",
    "origin": "Product values and frame-of-reference inputs adapted from Ivan Nikitovic's 2024 Columnar Data Processing presentation.",
    "extensions": "Three-row pruning groups, a separate six-row group with two three-value price pages, and whole-row clustering are original explanatory models for this article.",
    "comparison": "Exact color equality and bytewise ordering of the ASCII labels; all six source rows are non-null.",
    "units": "Integer prices in one consistent illustrative unit."
  },
  "query": "SELECT SUM(price) AS total FROM products WHERE color = 'Black';",
  "counterexampleQuery": "SELECT SUM(price) AS total FROM products WHERE color = 'Brown';",
  "predicateColor": "Black",
  "products": [
    { "id": 1, "name": "Laptop", "color": "Black", "price": 2000 },
    { "id": 2, "name": "Phone", "color": "Blue", "price": 800 },
    { "id": 3, "name": "TV", "color": "Black", "price": 1200 },
    { "id": 4, "name": "Keyboard", "color": "Black", "price": 120 },
    { "id": 5, "name": "Mouse", "color": "Blue", "price": 80 },
    { "id": 6, "name": "Earbuds", "color": "Red", "price": 150 }
  ],
  "dictionary": ["Black", "Blue", "Red"],
  "pruningExample": { "rowsPerGroup": 3 },
  "pageExample": { "rowsPerGroup": 6, "rowsPerPricePage": 3 },
  "executionExample": {
    "rowsPerBatch": 2,
    "scope": "Illustrative execution batches in original row order, independent of price-page boundaries",
    "callModel": "One filter call per row versus one filter call per batch. These are illustrative call counts, not measured execution times."
  },
  "storageRoles": {
    "kind": "Schematic comparison of roles, not a required conversion pipeline",
    "roles": [
      { "name": "Parquet", "role": "File format" },
      { "name": "Arrow", "role": "Memory format" },
      { "name": "VertiPaq", "role": "Storage engine" }
    ],
    "parquetSketch": {
      "scope": "One column chunk from one row group; other chunks and groups are omitted",
      "pagesPerChunk": 2
    },
    "arrowSketch": {
      "productIds": [1, 2, 3],
      "validityBitmapIsOptional": true
    },
    "vertipaqSketch": ["Load / encode", "Column storage", "Read / scan"],
    "sources": [
      "https://parquet.apache.org/docs/file-format/",
      "https://arrow.apache.org/docs/format/Columnar.html",
      "https://learn.microsoft.com/en-us/power-bi/guidance/import-modeling-data-reduction"
    ]
  },
  "frameOfReference": {
    "values": [28000, 28500, 28900, 29750, 30000, 28750],
    "base": 28000,
    "storageModel": "Unsigned fixed-width bit-packed payload only. Excludes the base, bit-width metadata, headers, and padding; not a Parquet byte stream."
  }
}
