near-models/models/silver/atlas/supply/silver__atlas_supply_epochs.sql
2025-03-11 12:47:59 -06:00

67 lines
1.6 KiB
SQL

{{ config(
materialized = "table",
cluster_by = ["epoch_id"],
unique_key = "atlas_epochs_id",
tags = ['atlas']
) }}
WITH blocks AS (
SELECT
block_id,
block_timestamp,
block_author,
header_json :total_supply :: NUMBER AS total_supply,
header_json :epoch_id :: STRING AS epoch_id,
_partition_by_block_number
FROM
{{ ref('silver__blocks_final') }}
{% if var("MANUAL_FIX") %}
WHERE {{ partition_load_manual('no_buffer') }}
{% else %}
WHERE modified_timestamp >= (
SELECT
MAX(modified_timestamp)
FROM
{{ this }}
)
{% endif %}
),
epochs AS (
SELECT
epoch_id,
MIN(block_id) AS min_block_id,
MAX(block_id) AS max_block_id,
COUNT(*) AS blocks,
COUNT(
DISTINCT block_author
) AS block_producers,
MIN(block_timestamp) AS start_time,
MAX(block_timestamp) AS end_time,
MAX(total_supply) / 1e24 AS total_near_supply,
ROW_NUMBER() over (
ORDER BY
min_block_id ASC
) - 1 + 900 AS epoch_num
FROM
blocks AS b
GROUP BY
1
)
SELECT
epoch_id,
min_block_id,
max_block_id,
blocks,
block_producers,
start_time,
end_time,
total_near_supply,
epoch_num,
{{ dbt_utils.generate_surrogate_key(['epoch_id']) }} AS atlas_epochs_id,
SYSDATE() AS inserted_timestamp,
SYSDATE() AS modified_timestamp,
'{{ invocation_id }}' AS _invocation_id
FROM
epochs