accounts
curated/accounts — one row per credit union, per account code, per quarter, from the newest filing.
accounts — curated/accounts/quarter=YYYYQn/data.parquet | column | type | notes |
|---|---|---|
quarter | VARCHAR | 2026Q1 (also the Hive partition) |
cycle_date | DATE | quarter-end, 2026-03-31 |
cu_number | INTEGER | charter number (the CU key) |
submission_id | BIGINT | unique per filing |
version | SMALLINT | amendment version; curated contains newest only (see §5) |
account_code | VARCHAR | raw NCUA code, exactly as filed — no remapping/series logic |
account_value | DECIMAL(24,8) | money-exact and ratio-exact — see the note below |
ingested_at | TIMESTAMP | when callbase last built this cycle's file — one value for every row of a cycle, not a per-filing time. A cycle is rebuilt only when something it is built from changed (§0), so this moves when the cycle's content may have. For when a filing arrived, use first_seen on the index |
cuid | INTEGER | NCUA's entity id — the key that survives a charter conversion; see Which key below. NULL for the two filings whose payload has no Profile block |
Before you read a NULL, read gotcha 1: a NULL accounts.account_value means published as text when accounts_text has the row and not reported when it does not. A code a credit union did not file has no row at
all. None of these is zero.
Rows are sorted by accounts.cu_number, so a filter on it lets DuckDB skip most of a file. A filter
on accounts.cuid reads the whole file; the one credit union over time recipe looks the
charters up in the index first. accounts.ingested_at is one value for the whole quarter: when its
file was built, not when a filing arrived.