What ./app.sh --start --demo loads

The demo data, table by table

Three public datasets power every demo on this site: New York City taxi and weather, US trade and exchange rates, and the city's high-volume rideshare trips. This page is the data's own documentation: every table, its row count, where it came from, the questions it is shaped to answer, and the licence it ships under. The tables render from the same published manifests the loader verifies, so what you read here is what your deployment restores.

What ships, and why it is real

A sample SQL database you can load in one command, from published artifacts, not fixtures

Nothing here is generated test data. Each family is real public data, rebuilt deterministically from pinned sources and published as a versioned, read-only artifact set on the datapipelines-co S3 bucket. The application never downloads data on its own. Loading a family is a deployment step, one command:

./app.sh --start --demo nyc,trade,lake

After that, the same version loads the same tables everywhere, byte-identical in content. An example run on your laptop and a number on this page come from the same rows, because both come from the same verified artifacts: the loader checks every file's checksum against the family's manifest.json before it restores anything.

One honest caveat about sampling: the taxi trips are a 1-in-16 hash sample of the TLC's 24-month window, pinned by trips_sample_modulus 16. The modulus is deterministic, so every deployment samples the identical trips. That is why the showcase comparisons are built as within-mode ratios, not as raw city-wide counts, like the rain-lift question that compares each mode's rainy days against its own dry days, where the sampling rate cancels. The rideshare family carries the same sampling over the same window, and its full unsampled table is published too.

Family one, nyc, version v8

NYC mobility: one question, three engines

The mobility family is the demo's founding question: how do taxi and rideshare respond to weather? It is asked of the NYC taxi dataset the TLC publishes, and answered across three engines on purpose. Yellow-taxi trips live on Postgres, NOAA daily weather on MySQL, and the TLC zones and rate reference tables on SQLite. A single pipeline joins all three, staging each source's rows in memory for the run. The window is 2023-01 through 2024-12.

The weather is NOAA's GHCN-Daily for five pinned NYC-area stations, among them Central Park with station USW00094728. It is melted into one row per station, day and element with units already converted. The reference tables carry the TLC's own zone lookup, rate codes, payment types and a holiday calendar. Every source URL is pinned in scripts/sample-data/sources.lock.

The v8 manifest's tables: engine, table, grain, rows and key columns. Rows render from the manifest; grain and key columns come from the family's DDL files.
EngineTableGrain RowsKey columns
POSTGRES trips one row per sampled yellow-taxi trip 4,897,311 trip_id, pickup_ts, pickup_date, pu_location_id, total_amount
POSTGRES trips_daily one row per day of the window 731 pickup_date, trip_count, total_revenue
POSTGRES trips_monthly one row per month × pickup zone 5,700 month_start, pu_location_id, trip_count, total_revenue
MYSQL stations one row per NOAA GHCN station (the five pinned NYC-area ids) 5 station_id, name, latitude, longitude
MYSQL observations one row per station × day × element, in standard units 17,530 station_id, obs_date, element, value, unit
SQLITE zones one row per TLC taxi zone 265 location_id, borough, zone, service_zone
SQLITE rate_codes one row per rate code 7 rate_code_id, description
SQLITE payment_types one row per payment type 7 payment_type_id, description
SQLITE calendar one row per day of the window, with weekend and holiday flags 731 cal_date, day_of_week, is_weekend, is_holiday

Licence verified 2026-09-02 Attribution: the trip records and zone lookup are published by the NYC Taxi & Limousine Commission as part of NYC Open Data, whose FAQ states: “Open Data belongs to all New Yorkers. There are no restrictions on the use of Open Data.” The TLC's own accuracy disclaimer travels with the data: “The trip data was not created by the TLC, and TLC makes no representations as to the accuracy of these data.” The NOAA observations are US Government work, public domain.

When an agent learns something about one of these tables, like a unit, a time zone or what a code means, it records the fact with the query that proved it. Every session after it reads the answer beside the columns. That is the learned semantic layer →

Family two, trade, version v4

US trade: Census facts, mirrored and priced

The trade family answers the second kind of question a demo should survive: do the mirrors agree? The US Census Bureau's monthly imports and exports at HS-6 commodity grain live on DuckDB, 2.4 million facts across the top 15 partners. The UN Comtrade mirror, what the partner countries report trading with the USA, sits on MySQL. The Federal Reserve's H.10 daily and G.5 monthly exchange rates for the five partner currencies are on SQLite, so a pipeline can price the same trade flow in the partner's own money.

The window is 2023-01 through 2024-12. The Comtrade mirror keeps 2022–2024 annual totals. The fifteen Census partners are Canada, Mexico, China, Japan, Germany, South Korea, Taiwan, Vietnam, India, the United Kingdom, Ireland, the Netherlands, France, Italy and Brazil. The data names them by the Census Bureau's four-digit partner codes, crosswalked to their ISO codes for the mirror join. The Comtrade reporters are China, Canada, Mexico, Japan and Germany. The partner list was derived mechanically from the Census enduse endpoints, not picked by hand.

The v4 manifest's tables: engine, table, grain, rows and key columns. Rows render from the manifest; grain and key columns come from the family's DDL files.
EngineTableGrain RowsKey columns
duckdb trade_monthly one row per flow × month × partner × HS-6 commodity 2,373,825 flow, period, partner_code, hs_code, value_usd
duckdb partners one row per Census partner country (the top 15 by 2024 goods trade) 15 partner_code, partner_name
duckdb hs_chapters one row per HS-2 chapter 98 chapter, chapter_name
duckdb trade_flow_monthly one row per flow × month, all partners and chapters totalled 48 flow, period, total_value_usd, hs6_cell_count
duckdb partner_iso_crosswalk one row per Census code the Comtrade reconciliation needs 5 census_code, iso_numeric, partner_name
mysql comtrade_annual one row per reporter × flow × year at the headline TOTAL level 27 reporter_code, flow, period, value_usd
mysql reporters one row per Comtrade reporter country 5 reporter_code, reporter_name
sqlite fx_daily one row per business day × currency, in both quote directions 2,500 rate_date, currency, per_usd, usd_per
sqlite fx_monthly one row per month × currency, the G.5 monthly average 120 month, currency, per_usd, usd_per
sqlite currencies one row per currency, with the Board's own series ids 5 currency, name, series_daily, series_monthly
sqlite partner_currency one row per reconciled Census partner, naming its currency 5 census_code, partner, currency

Licence verified 2026-09-04 Attribution: “This product uses the Census Bureau Data API but is not endorsed or certified by the Census Bureau.” That notice is verbatim and mandatory under the Census API terms of service, and it travels with this data everywhere. The Comtrade slice is deliberately kept below the 100,000-record line that marks Comtrade's fee-free re-dissemination limit. The Federal Reserve's H.10 and G.5 rates are a work of the US Government: no copyright, the credit is courtesy.

Family three, lake, version v1

dp-lake: the rideshare census, read in place

The lake family is the demo's biggest dataset and its different shape: NYC TLC high-volume for-hire trips, the Uber, Lyft, Via and Juno records, published as Parquet and Apache Iceberg on S3 and read in place. Nothing downloads at start; there is no loader. The app's own engine opens the objects over HTTPS and reads only what a query names, which is why the family's big table is partitioned by pickup_date. Filter on the partition column and the engine prunes to just the days you asked about: a one-week question reads about seven objects, and an unfiltered scan reads seven gigabytes. The 1-in-16 sample over the same 2023-01 → 2024-12 window as the taxi data is what lets one question compare taxi and rideshare fairly.

The zone ids are the same TLC zone ids the mobility family's zones table holds, so one borough lookup serves both trip sources. The licence number to company mapping ships as its own tiny table: the four licensees Uber, Lyft, Via and Juno, named by the TLC's HVFHS data dictionary.

The v1 manifest's tables: format, table, grain, rows, objects and bytes, all from the manifest.
FormatTableGrain RowsObjectsBytes (exact)
parquet hvfhv_trips one row per high-volume for-hire trip, one directory per day 471,851,707 731 6,523,027,848
parquet hvfhv_trips_sample the same trips, hash-sampled 1 in 16, one file per month 29,492,699 24 483,114,021
parquet hvfhv_zone_day one row per pickup zone × day × company 377,148 1 7,627,553
parquet hvfhs_companies one row per HVFHS licensee code 4 1 550
iceberg hvfhv_trips_iceberg the 1-in-16 sample again, as an Iceberg table read by its metadata file 29,492,699 98 555,620,647

The objects, exactly

The bucket denies listing. You name an object and you get it; you cannot browse. So this page is the listing, rendered from the manifest's recorded table locations under s3://datapipelines-co/sample-data/lake/v1/:

  • s3://datapipelines-co/sample-data/lake/v1/hvfhv_trips/pickup_date=*/part-*.parquet
  • s3://datapipelines-co/sample-data/lake/v1/hvfhv_trips_sample/part-*.parquet
  • s3://datapipelines-co/sample-data/lake/v1/hvfhv_zone_day/part-0.parquet
  • s3://datapipelines-co/sample-data/lake/v1/hvfhs_companies/part-0.parquet
  • s3://datapipelines-co/sample-data/lake/v1/hvfhv_trips_iceberg
  • s3://datapipelines-co/sample-data/lake/v1/manifest.json

The Iceberg table is opened by its current metadata file, s3://datapipelines-co/sample-data/lake/v1/hvfhv_trips_iceberg/metadata/00024-040f66d1-2124-4294-8bc5-a136be52b28d.metadata.json, which the registry row names, because a published prefix has no catalog service.

Licence verified 2026-09-07 Attribution: published by the NYC Taxi & Limousine Commission under the same NYC Open Data programme as the yellow-taxi months: “There are no restrictions on the use of Open Data.” One difference is quoted where it applies. HVFHV carries its own accuracy disclaimer, not the yellow-taxi one: “These records are generated from the FHV Trip Record submissions made by bases, so we cannot guarantee or confirm their accuracy or completeness.”

What you can ask it

Pipelines the demo ships, and the question each answers

Every family seeds worked pipelines into your workspace at first login. The mobility six: nyc/mobility/revenue_by_borough, which borough earns the most and who tips best; nyc/mobility/rainy_vs_dry_ridership, whether New Yorkers take more taxis when it rains; nyc/mobility/borough_od_matrix, where each borough's trips end up; nyc/mobility/airport_access_by_borough, who rides to JFK, LaGuardia and Newark and at what cost; nyc/mobility/weather_sensitivity_by_borough, which boroughs lose riders when it rains; and nyc/mobility/mobility_briefing, one row per borough for trips, self-trips and value.

The showcase: nyc/mobility/taxi_vs_rideshare joins the Postgres taxi trips, the lake's zone-day rideshare aggregate, the SQLite zones and the MySQL rain series in one four-engine run, and ranks boroughs by how much ridership shifts in the rain. That is the reason the sampling note above matters.

The trade three: trade/balance_by_partner for imports minus exports per partner and month; trade/reconciliation for US-reported Census facts against the partners' own Comtrade returns; and trade/fx/imports_in_partner_currency for the same import bill priced in the partner's currency from the Federal Reserve rates.

Any other question the data can answer, you can ask too. Type it, or write the SQL yourself. The mechanics of a cross-engine question are on federated query, and the lake reads on dp-lake.

Call it as an API

Call the demo pipelines as APIs, no account needed

The demo workspace also ships a working API key, printed below. It is public by design, and it serves the demo workspace only: it can call the demo endpoints published beneath /api/demo/ and read the executions it started, and nothing else. Pass it in the DP-API-Key header and read the JSON.

dpk_DEMOPUBLIC42.THISKEYISPUBLICBYDESIGNDEMOONLYREADONLY222222222

NYC mobility: nyc/mobility/revenue_by_borough

curl -H "DP-API-Key: dpk_DEMOPUBLIC42.THISKEYISPUBLICBYDESIGNDEMOONLYREADONLY222222222" https://datapipelines.co/api/demo/nyc/mobility/revenue-by-borough

US trade: trade/balance_by_partner

curl -H "DP-API-Key: dpk_DEMOPUBLIC42.THISKEYISPUBLICBYDESIGNDEMOONLYREADONLY222222222" https://datapipelines.co/api/demo/trade/balance-by-partner

dp-lake: nyc/mobility/taxi_vs_rideshare

reads from S3 and may take a few seconds

curl -H "DP-API-Key: dpk_DEMOPUBLIC42.THISKEYISPUBLICBYDESIGNDEMOONLYREADONLY222222222" https://datapipelines.co/api/demo/nyc/mobility/taxi-vs-rideshare

The response is one JSON document: the execution id, the result schema, the first page of rows, the total, and a cursor URL for the rest.

{"execution_id": "…", "schema": ["column", "…"], "rows": [["value", "…"]], "row_count": 1, "total_rows": 1, "has_more": false, "result_url": "…", "expires_at": "…"}

A request budget applies to the key, so one script cannot run the demo nonstop. When a key spends its budget the API answers 429 with a retry hint, and the key works again when the window rolls over. Every demo datasource is read-only, and the published pipelines take the parameters their descriptions declare.

Licence and attribution

Every source, and the terms it ships under

Each manifest carries its sources as provenance rows: the URL, the transform, the licence string and the date the licence was verified. The lists below render from those rows, so the page cannot claim a licence the artifact does not. Where a family has no verification stamp, its block says so and makes no licence claim at all.

mobility (v8)

Licence verified 2026-09-02
  • nyc_tlc_yellow_trips: https://d37ci6vzurychx.cloudfront.net/trip-data/yellow_tripdata_{YYYY-MM}.parquet; NYC Open Data / freely usable (nyc.gov terms of use)
  • noaa_ghcn_daily: https://www.ncei.noaa.gov/data/global-historical-climatology-network-daily/access/{STATION}.csv; US Government work, public domain (NOAA/NCEI)
  • noaa_ghcn_stations: https://www.ncei.noaa.gov/pub/data/ghcn/daily/ghcnd-stations.txt; US Government work, public domain (NOAA/NCEI)
  • tlc_taxi_zones: https://d37ci6vzurychx.cloudfront.net/misc/taxi_zone_lookup.csv; NYC Open Data / freely usable (nyc.gov terms of use)
  • tlc_reference_codes: https://www.nyc.gov/site/tlc/about/tlc-trip-record-data.page (Data Dictionary - Yellow Taxi Trip Records, PDF); NYC Open Data / freely usable (nyc.gov terms of use)
  • us_federal_holidays: https://www.opm.gov/policy-data-oversight/pay-leave/federal-holidays/; Facts (statutory schedule); no licence claimed

Combined size of the published files: 118 MB across 4 files.

trade (v4)

Licence verified 2026-09-04
  • US Census Bureau International Trade API (imports/hs, exports/hs): https://api.census.gov/data/timeseries/intltrade/; US Government work; Census API terms of service This product uses the Census Bureau Data API but is not endorsed or certified by the Census Bureau.
  • UN Comtrade preview API (annual TOTAL flows, reporters x USA): https://comtradeapi.un.org/public/v1/preview/; UN Comtrade terms of use (preview tier); the slice is deliberately under the 100,000-record fee-free re-dissemination line Source: UN Comtrade (https://comtradeplus.un.org)
  • Board of Governors of the Federal Reserve System, H.10 Foreign Exchange Rates (daily) and its G.5 monthly averages, via the Data Download Program: https://www.federalreserve.gov/releases/h10/; Work of the US Government; no copyright (17 U.S.C. 105). The H.10 release page, its About page, the DDP chooser and the Board's site-wide Website Policies carry no terms-of-use or copyright statement over Board content (checked 2026-09-04). Source: Board of Governors of the Federal Reserve System, H.10

Combined size of the published files: 234 MB across 4 files.

lake (v1)

Licence verified 2026-09-07
  • nyc_tlc_hvfhv_trips: https://d37ci6vzurychx.cloudfront.net/trip-data/fhvhv_tripdata_{YYYY-MM}.parquet; NYC Open Data / no restrictions on use (NYC Open Data FAQ) the publisher's page the NYC Open Data collection
  • tlc_hvfhs_licensees: https://www.nyc.gov/assets/tlc/downloads/pdf/data_dictionary_trip_records_hvfhs.pdf; NYC Open Data / no restrictions on use (NYC Open Data FAQ) the publisher's page

Reproduce it

You do not have to trust the bucket

The artifacts are rebuildable from their pinned sources: each family's scripts/sample-data*/ directory carries a runbook and a sources.lock pinning every source URL and its SHA-256. The two living APIs are pinned at content level instead, so an upstream revision is the event that fails the build. The hash-sampled outputs re-derive to the same row checksums on any machine. On the consuming side, check-published.sh verifies a published version against its own manifest by hash, the same check a deployment runs before restoring. The runbooks: mobility, trade, lake.

Questions about the data

About the demo data

Is the demo data real?

Yes. All three families are real public data, not fixtures: NYC Taxi & Limousine Commission trip records and NOAA weather for New York, US Census trade and Federal Reserve exchange rates, and the TLC high-volume for-hire feed on S3. Every family is rebuilt deterministically from pinned sources, so the same version loads the same numbers anywhere. What ships is documented table by table on the demo-data page. (The build and its pins: docs/deployment.md Appendix B.)

Can I use the demo data in my own product?

That is what the licences are for. The NYC-derived families ship under NYC Open Data's no-restrictions statement; NOAA and the Federal Reserve are US Government works with no copyright; the Census slice carries the Bureau's API terms, including its not-endorsed notice; the Comtrade slice stays under the fee-free re-dissemination line. Each family's section on the demo-data page quotes the operative sentence and links the source. (The demo and its gates: docs/deployment.md Appendix B.)

How big is the demo on disk?

The nyc family's files are about 118 MB and the trade family's about 223 MB, restored into the demo containers at start; the lake family is about 7.6 GB of Parquet and Iceberg objects that are never downloaded, and the engine reads only the partitions a query names. The exact per-file and per-table figures render from the published manifests on the demo-data page, so they are always the published numbers. (The artifacts the loader fetches: docs/deployment.md Appendix B.)

Can I add my own data next to it?

Yes. The demo families are ordinary datasources. Register yours in the app, or in the bootstrap file the demo profiles use, and any pipeline can join them to the demo tables, exactly as the shipped examples join Postgres trips to SQLite zones and MySQL weather. Nothing about the demo is privileged; it is seeded data with example pipelines. (Registration: docs/datasources.md §3.)

Does the demo need internet access?

At start, yes: the nyc and trade artifacts download from the published bucket and the lake datasource points at S3. After that they differ. nyc and trade are local files restored into the demo engines, so running them needs no network, while the lake family is read in place over HTTPS at query time and always needs it. (The consuming side: docs/deployment.md Appendix B.)