Skip to main content
Codex datasets are designed so any two can join without custom wrangling. This page documents the keys that make that possible, which datasets carry which keys, and how to use them.

The keys

Key availability by dataset

PK = primary key. opt. = emitted when the relevant entity is known. = not applicable.

Join examples

Civic decisions in high-signal cells

Join Civic Intelligence to Urban Signal Grid via h3_index to find recent zoning decisions in high-scoring cells:

Full event detail for a jurisdiction

Join Events Timeline to Civic Intelligence via event_id to get entities, blockers, and hostility scores for civic events:

Vessel positions around dark events

Join AIS Maritime to Events Timeline via event_id to find vessels and their positions around Overwatch dark events:

Commuter inflow to high-signal cells

Join LEHD Commuter Flows to Urban Signal Grid via h3_index:

Joins that will not work

Key construction rules

h3_index

Always resolution 8. Stored as the canonical H3 hexadecimal string (e.g. 88283082b9fffff). When a record covers an area, the dataset either emits a separate row per H3 cell or an array column h3_indexes — the choice is documented in each dataset’s schema.

jurisdiction_slug

Lowercase, hyphen-separated:
  • Cities: {city}-{state-abbr} (e.g. philadelphia-pa, san-francisco-ca)
  • Counties: {county}-county-{state-abbr} (e.g. harris-county-tx)
  • States: {state-full-name} (e.g. texas)
  • Special districts: {name}-{state-abbr} (e.g. port-authority-ny)

mmsi vs. imo

mmsi is the runtime identifier on every AIS position — use it for linking positions to vessel records during ingest. imo is the permanent vessel identifier (IMO A.600) that survives ownership, flag, and name changes. Use imo as the primary vessel key when available. Vessels without an IMO number (some fishing vessels and small craft) carry has_imo=false.

entity_urn

Format: urn:aprs:entity:{type}:{canonical-id} where type is one of person, company, agency, trust, vessel, or nonprofit. Two source records share the same entity_urn when Codex entity resolution determines they refer to the same real-world entity.