Comparisons
Pairs that get conflated in real conversations. Neither column wins — what decides is the requirement, and each record leads with the confusion, because the confusion is the reason the record exists at all.
OLTP vs OLAPBatch vs StreamingETL vs ELTParquet vs AvroLake vs Warehouse vs LakehouseCDC vs PollingEvent modelling vs Snapshot modellingFull refresh vs IncrementalLambda vs KappaOrder grain vs Order-line grain
Order grain vs Order-line grain
What people get wrong about this pair
This is the single most common source of confidently wrong numbers in analytics. Joining the two without care multiplies every order-level measure by the number of lines, and nothing raises an error.
One row per order
Use it when
Order-level measures: order count, average order value, revenue per order.
One row per order line
Use it when
Product-level questions: units by product, basket composition, per-line discounting.
| Dimension | One row per order | One row per order line |
|---|---|---|
| Row count | Number of orders | Number of lines — always larger |
| Summing `order_total` | Correct | Multiplied by lines per order |
| Which products were bought together | Unanswerable — the detail is gone | Directly answerable |
| Average order value | Correct | Silently becomes average line value |
| The fix | Keep both, at declared grains, and never join them without aggregating one first | Same |