Everrest warehouse - data dictionary

Structure measured from the live warehouse on every build. Guarantees read from the data contract, never inferred from today's rows. Meaning, ownership and sensitivity from a hand-written semantic layer.

stage-2 star schema5 tables39 columnsseed 42regenerated by build_dictionary.py
5
Tables
39
Columns
131,832
Rows described
35
No findings
4
Need a human
ColumnStateClassWhat it meansType NullValues seenOwner
dim_customer   18,226 rows  ·  6 columns
customer_skno findingsinternalSurrogate key generated by the warehouse build.BIGINT0.0%1 to 18226growth
customer_idno findingspiiCanonical customer identifier after identity resolution.VARCHAR0.0%18,226 distinct (withheld)growth
signup_tsno findingspiiWhen the customer registered.TIMESTAMP0.0%18,224 distinct (withheld)growth
channelno findingsinternalAcquisition channel the customer arrived through.VARCHAR0.0%affiliate, email, organic, paid_search, referral, socialgrowth
regionno findingsinternalMarket the customer belongs to; the SEA markets the platform trades in. The live set is measured on every build and shown beside this row.VARCHAR0.0%ID, MY, PH, SG, TH, VNgrowth
merged_source_idsincompleteinternalHow many raw source identities collapsed into this one customer. A count, despite the plural name.Watch out: The name reads like a list of ids; it is an integer count. Rename to merged_source_count at the next warehouse build. Also: a row count of dim_customer answers "how many accounts exist", not "how many people bought" - see active_buyers in the metric registry.BIGINT0.0%1, 2growth
dim_date   365 rows  ·  7 columns
date_keyno findingspublicThe calendar date. Primary key of the dimension.DATE0.0%2025-07-01 to 2026-06-30data-platform
yearincompletepublicCalendar year.BIGINT0.0%2025, 2026data-platform
monthincompletepublicCalendar month number.BIGINT0.0%1, 2, 3, 4, 5, 6, 7, 8 (+4)data-platform
month_nameno findingspublicFull English month name.VARCHAR0.0%April, August, December, February, January, July, June, March (+4)data-platform
dowincompletepublicDay of week as an integer, counted from Monday. See the values column for the range actually present.Watch out: An integer, not a name. Formatting it for a report is the reader's job.BIGINT0.0%0, 1, 2, 3, 4, 5, 6data-platform
is_weekendno findingspublicTrue for Saturday and Sunday.BOOLEAN0.0%False, Truedata-platform
is_novemberno findingspublicTrue during November, the platform's peak trading month.BOOLEAN0.0%False, Truedata-platform
dim_merchant   400 rows  ·  6 columns
merchant_skno findingsinternalSurrogate key generated by the warehouse build.BIGINT0.0%1 to 400commercial
merchant_idno findingsinternalBusiness key in M#### form, used by every downstream join.VARCHAR0.0%400 distinctcommercial
source_keyno findingsinternalThe merchant key as the source extract emits it (MER-#### form), kept for traceability back to the source system.VARCHAR0.0%400 distinctcommercial
categoryno findingsinternalTrading category, normalized to the canonical set during ingestion.Watch out: The raw extract carries several spellings of each label. Only the normalized value belongs in a rollup.VARCHAR0.0%Apparel, Beauty, Electronics, Grocery, Home & Living, Pet Supplies, Sports & Outdoor, Toys & Kidscommercial
tierno findingsinternalCommercial tier, which sets the merchant's terms.VARCHAR0.0%enterprise, premium, standardcommercial
onboarded_atno findingsinternalDate the merchant went live on the platform.DATE0.0%2022-03-21 to 2025-05-31commercial
dim_product   5,000 rows  ·  4 columns
product_skno findingsinternalSurrogate key generated by the warehouse build.BIGINT0.0%1 to 5000commercial
product_idno findingsinternalBusiness key for the product listing.VARCHAR0.0%5,000 distinctcommercial
merchant_idno findingsinternalMerchant that owns the product listing. This is a catalogue fact, not a fulfilment fact - use fact_orders.merchant_id for revenue rollups.VARCHAR0.0%400 distinctcommercial
catalog_priceno findingsinternalCurrent list price held in the catalogue.DOUBLE0.0%1.5 to 5379.2commercial
fact_orders   107,841 rows  ·  16 columns
txn_idno findingsinternalSurrogate identifier for the line item. The true primary key.VARCHAR0.0%107,841 distinctdata-platform
order_idno findingsinternalThe basket the line belongs to. Many lines share one order_id.Watch out: COUNT(*) is a line count, not an order count. Use COUNT(DISTINCT order_id), and apply the delivered filter the metric registry requires for order_count.VARCHAR0.0%50,000 distinctdata-platform
order_tsno findingsinternalWhen the order was placed. Stored in UTC.Watch out: Philippines payments arrive in local time upstream and are shifted to UTC during ingestion. Anything reading the raw export sees the bug.TIMESTAMP0.0%2025-07-01 08:19:22 to 2026-06-30 22:52:11data-platform
date_keyno findingsinternalCalendar date of the order, the join key into dim_date.DATE0.0%2025-07-01 to 2026-06-30data-platform
statusno findingsinternalFulfilment state of the line. Finance recognizes 'delivered' only.Watch out: Match the casing shown in the values column exactly. A near-miss returns an empty result rather than an error, which reads as a quiet month.VARCHAR0.0%cancelled, delivered, paid, shippeddata-platform
customer_idno findingspiiCanonical customer after identity resolution. Null means the line could not be attributed to any known customer.Watch out: Nullable by design - orphans are flagged, not dropped. An inner join to dim_customer silently removes them.VARCHAR1.0%18,226 distinct (withheld)data-platform
merchant_idno findingsinternalThe merchant that fulfilled the line. Authoritative for every merchant rollup on this fact.Watch out: Not guaranteed equal to dim_product.merchant_id, which is the merchant that OWNS the listing. They differ wherever a line is fulfilled by anyone but the listing owner. Join through this column, not that one.VARCHAR0.0%400 distinctdata-platform
product_idno findingsinternalThe product sold. Null where the line references a product in no catalogue.VARCHAR2.5%5,000 distinctdata-platform
qtyno findingsinternalUnits of the product sold on this line.BIGINT0.0%1, 2, 3data-platform
unit_priceno findingsinternalPrice actually charged per unit at the time of sale.DOUBLE0.0%1.23 to 5379.2data-platform
catalog_priceno findingsinternalList price of the product as held in the catalogue snapshot.Watch out: A snapshot, not point-in-time. It is the current list price, not the price that was listed on the order date.DOUBLE2.5%1.5 to 5379.2data-platform
price_gapno findingsinternalunit_price minus catalog_price. Non-zero exposes the stale snapshot.DOUBLE2.5%-968.26 to 0.0data-platform
discountno findingsinternalDiscount applied to the line, as a fraction of gross value.Watch out: 0.2 means twenty percent. It is not a percentage column.DOUBLE0.0%0.0, 0.05, 0.1, 0.2data-platform
net_amountno findingsinternalMerchandise value of the line after discount. Summed over delivered lines this is GMV, what buyers paid merchants. It is NOT platform revenue.Watch out: Platform revenue is net_amount times the take rate, per the metric registry. Reporting net_amount as revenue overstates the P&L line by about 9x.DOUBLE0.0%0.98 to 16137.6data-platform
is_orphan_productno findingsinternalTrue where product_id resolves to no row in dim_product.BOOLEAN0.0%False, Truedata-platform
is_orphan_customerno findingsinternalTrue where customer_id resolves to no row in dim_customer.BOOLEAN0.0%False, Truedata-platform