From eb03d05036bcc2e3fdb8e3de401b2c67533a6842 Mon Sep 17 00:00:00 2001 From: Austin Date: Wed, 19 Mar 2025 08:37:19 -0400 Subject: [PATCH] confirmed blocks --- models/bronze/core/bronze__confirm_blocks.sql | 7 ++ .../core/fr/bronze__confirm_blocks_fr.sql | 7 ++ .../silver/core/silver__confirmed_blocks.sql | 68 ++++++++++++++++--- 3 files changed, 73 insertions(+), 9 deletions(-) create mode 100644 models/bronze/core/bronze__confirm_blocks.sql create mode 100644 models/bronze/core/fr/bronze__confirm_blocks_fr.sql diff --git a/models/bronze/core/bronze__confirm_blocks.sql b/models/bronze/core/bronze__confirm_blocks.sql new file mode 100644 index 0000000..55357f2 --- /dev/null +++ b/models/bronze/core/bronze__confirm_blocks.sql @@ -0,0 +1,7 @@ +{{ config ( + materialized = 'view' +) }} +{{ fsc_evm.streamline_external_table_query( + model = "confirm_blocks", + partition_function = "CAST(SPLIT_PART(SPLIT_PART(file_name, '/', 4), '_', 1) AS INTEGER)" +) }} diff --git a/models/bronze/core/fr/bronze__confirm_blocks_fr.sql b/models/bronze/core/fr/bronze__confirm_blocks_fr.sql new file mode 100644 index 0000000..7aae1f5 --- /dev/null +++ b/models/bronze/core/fr/bronze__confirm_blocks_fr.sql @@ -0,0 +1,7 @@ +{{ config ( + materialized = 'view' +) }} +{{ fsc_evm.streamline_external_table_fr_query( + model = "confirm_blocks", + partition_function = "CAST(SPLIT_PART(SPLIT_PART(file_name, '/', 4), '_', 1) AS INTEGER )" +) }} \ No newline at end of file diff --git a/models/silver/core/silver__confirmed_blocks.sql b/models/silver/core/silver__confirmed_blocks.sql index b3b5862..5c879bb 100644 --- a/models/silver/core/silver__confirmed_blocks.sql +++ b/models/silver/core/silver__confirmed_blocks.sql @@ -1,11 +1,61 @@ -{{ config( - materialized = 'view' +-- depends_on: {{ ref('bronze__confirm_blocks') }} +{% set build_mode = var('SILVER_CONFIRM_BLOCKS_RELOAD', false) %} + +{{ config ( + materialized = "incremental", + incremental_strategy = 'delete+insert', + unique_key = "block_number", + cluster_by = ['modified_timestamp::DATE'], + post_hook = "ALTER TABLE {{ this }} ADD SEARCH OPTIMIZATION on equality(block_number)", + tags = ['non_realtime'] ) }} -SELECT - * -FROM - {{ source( - 'klaytn_silver', - 'confirmed_blocks' - ) }} +WITH bronze_confirm_blocks AS ( + SELECT + block_number, + partition_key, + DATA:result AS block_json, + block_json :hash :: STRING AS block_hash, + block_json :transactions AS txs, + _inserted_timestamp + FROM + {% if is_incremental() %} + {% if build_mode %} + {{ ref('bronze__confirm_blocks_fr') }} + WHERE partition_key BETWEEN ( + SELECT ROUND(MAX(block_number), -3) FROM {{ this }} + ) + AND ( + SELECT ROUND(MAX(block_number), -3) FROM {{ this }} + ) + 10000000 + AND DATA:result IS NOT NULL + {% else %} + {{ ref('bronze__confirm_blocks') }} + WHERE _inserted_timestamp >= ( + SELECT COALESCE(MAX(_inserted_timestamp), '1900-01-01'::TIMESTAMP) AS _inserted_timestamp + FROM {{ this }} + ) AND DATA:result IS NOT NULL + {% endif %} + {% else %} + {{ ref('bronze__confirm_blocks_fr') }} + WHERE DATA:result IS NOT NULL + and partition_key <= 10000000 + {% endif %} + qualify(ROW_NUMBER() over (PARTITION BY block_number ORDER BY _inserted_timestamp DESC)) = 1 +) + +SELECT + block_number, + partition_key, + block_json, + block_hash, + VALUE :: STRING AS tx_hash, + _inserted_timestamp, + {{ dbt_utils.generate_surrogate_key(['block_number','tx_hash']) }} AS confirm_blocks_id, + SYSDATE() AS inserted_timestamp, + SYSDATE() AS modified_timestamp, + '{{ invocation_id }}' AS _invocation_id +FROM bronze_confirm_blocks, + LATERAL FLATTEN ( + input => txs + ) \ No newline at end of file