Explore more topics
Market-data lake

lake.options_daily dataset schema

Column types and research semantics for NexusTrade’s lake.options_daily dataset. Read the supported schema before submitting a bounded SQL query.

Query name
lake.options_daily
Storage partition
year
Columns
22
Jump to a section

Columns and types

VARCHAR

  • ticker
  • underlying
  • optionType

DATE

  • expirationDate

DOUBLE

  • strike
  • open
  • high
  • low
  • close
  • volume

TIMESTAMP

  • timestamp

BIGINT

  • transactions

Showing 12 of 22 recorded rows. The complete table is below.

Current logical schema for lake.options_daily

Inspect the complete lake.options_daily schema

Scroll sideways to compare all columns. Select a heading to sort.

tickerVARCHAR
underlyingVARCHAR
expirationDateDATE
strikeDOUBLE
optionTypeVARCHAR
timestampTIMESTAMP
openDOUBLE
highDOUBLE
lowDOUBLE
closeDOUBLE
volumeDOUBLE
transactionsBIGINT
implied_volatilityDOUBLE
deltaDOUBLE
gammaDOUBLE
thetaDOUBLE
vegaDOUBLE
rhoDOUBLE
bid_openDOUBLE
ask_openDOUBLE
bid_closeDOUBLE
ask_closeDOUBLE

Current logical schema for lake.options_daily

Query lake.options_daily using the column names and types below. The query validator and engine use this logical catalog; a field absent from an older shard returns typed NULL.

What this table contains

Daily options OHLCV with Greeks and completed session-boundary NBBO, one row per contract per session. Version 2 uses the opening minute available at 09:31 ET and the last regular-session minute available at the actual exchange close; missing books remain missing. Stored quote coverage begins 2022-03-07; quote columns are nullable before that boundary.

Bounded options daily preview

Query example, not executed here. Inspect the actual returned rows and dates before treating it as evidence.

Read each row at its recorded timestamp. ticker identifies the full option contract; underlying identifies the stock. Compare strike, optionType and expirationDate before joining a quote.

SQL
SELECT "ticker", "underlying", "timestamp", "expirationDate", "strike", "optionType"
FROM lake.options_daily
WHERE "underlying" IN ('AAPL')
  AND "timestamp" >= TIMESTAMP '2026-09-01'
  AND "timestamp" < TIMESTAMP '2026-09-19'
ORDER BY "timestamp", "ticker", "underlying", "expirationDate", "strike", "optionType"
LIMIT 20;

Submit the options_daily example and read back its parts

Run the exact SQL through the Python SDK

Save this page's SQL as query.sql and the runner below as query.py. Use a registered key with lake scope from Developers. The runner submits the displayed options_daily query once, saves its operation, waits on that same ID, saves the returned manifest and downloads its Parquet parts.

This submission has not been executed for the reference page. Inspect the SQL, dates and resource limits before running it. Reuse the request key only for this identical SQL and limits; use a new key when changing them.

Shell
python3 -m pip install nexustrade==1.42.0
export NEXUSTRADE_API_KEY="YOUR_LAKE_SCOPED_KEY"
python3 query.py

Python
import json
from pathlib import Path
from nexustrade import NexusTradeClient

# Save the SQL displayed on this page as query.sql.
sql = Path("query.sql").read_text()
client = NexusTradeClient.from_environment()
operation = client.create_lake_query(
    {"query": sql, "limits": {"timeoutSeconds": 30, "maxRows": 50,
                              "maxResultBytes": 1048576}},
    idempotency_key="reference-options_daily-20261012-v1",
)
Path("query-operation.json").write_text(json.dumps(operation, indent=2))
finished = client.wait_for_lake_query(operation["id"])
if finished["status"] != "completed":
    raise RuntimeError(finished)
manifest = client.get_lake_query_manifest(operation["id"])["result"]
Path("query-manifest.json").write_text(json.dumps(manifest, indent=2))
print(json.dumps(manifest, indent=2))
for part in manifest["parts"]:
    Path(f"query-{part['part']}.parquet").write_bytes(
        client.download_lake_query_part(operation["id"], part["part"], max_bytes=1048576)
    )

Coverage and timing

Inspect source coverage and timing before using the rows

Daily options OHLCV with Greeks and completed session-boundary NBBO, one row per contract per session. Version 2 uses the opening minute available at 09:31 ET and the last regular-session minute available at the actual exchange close; missing books remain missing. Stored quote coverage begins 2022-03-07; quote columns are nullable before that boundary.

One row per contract per trading day. Filter by `underlying` (`'AAPL'`) for a name's options — `ticker` is the full OCC symbol (`O:AAPL250117C00230000`) and is almost never what you want to filter on.

For a chain: filter `underlying` + `expirationDate`, then `ORDER BY strike`.

Greeks (`delta`, `gamma`, `theta`, `vega`, `rho`, `implied_volatility`) are nullable and are commonly NULL for deep OTM/ITM and 0-DTE contracts.

Discussion

Sign in or create a free account to join the discussion.

No comments yet.