dimensions.apps holds one row per app: one deployed version of a protocol that a project runs, such as uniswap-v3 or hyperliquid-spot. Rows come from the registry we author by hand, so a row exists because somebody wrote it down, not because we detected activity. A project can run several apps; dimensions.projects holds the project side.
Columns
| Column | Type | Description |
|---|---|---|
app_id | STRING | Identifier of the app. Every table that mentions an app joins on this. |
project_id | STRING | Project that runs the app. Joins dimensions.projects. |
name | STRING | Display name. |
market_sectors | ARRAY<STRING> | Every market sector tag the app carries. |
primary_market_sector | STRING | The first element of market_sectors. One value per row. |
created_at | TIMESTAMP | When the app was added to the registry. |
Sample queries
- Apps for one project
- Apps by sector
- Apps with their project
List every app one project runs.
Notes
market_sectors is a list, so joining through unnest(market_sectors) yields one row per tag and counts an app once for every tag it carries. Group by primary_market_sector to keep one row per app. Projects โธ Registry carries the same rule for projects.