metrics.tokens_prices_daily carries one row per token per day: the price in USD at midnight UTC. metrics.tokens_prices_hourly carries the same price hour by hour. Both cover every token in the catalog, so every priced row joins to dimensions.tokens on token_id.
Columns
Both tables share one schema.| Column | Type | Description |
|---|---|---|
timestamp | TIMESTAMP | The moment the price was taken: midnight UTC in the daily table, the top of the hour in the hourly one. |
token_id | STRING | Token the price belongs to: {token_address}-{chain_id}. |
chain_id | STRING | Chain the token is deployed on. |
price | FLOAT64 | The price in US dollars at that moment. |
Sample queries
- Daily
- Hourly
Read one tokenβs daily price series with its metadata.
Notes
The daily table suits long histories, and joins to the other daily tables at a fraction of the hourly tableβs size. The hourly table suits analysis within a day, and pricing individual events precisely. Both key the same way, so moving a query from one to the other means swapping the table name and the time bounds.price is never empty in either table. A token with no price on a day has no row for that day, rather than a row with nothing in it. A left join from another table comes back empty because the join found nothing, not because the column was blank.