diff --git a/models/bronze/prices/bronze__asset_metadata_all_providers.sql b/models/bronze/prices/_legacy/bronze__asset_metadata_all_providers.sql similarity index 100% rename from models/bronze/prices/bronze__asset_metadata_all_providers.sql rename to models/bronze/prices/_legacy/bronze__asset_metadata_all_providers.sql diff --git a/models/bronze/prices/bronze__asset_metadata_priority.sql b/models/bronze/prices/_legacy/bronze__asset_metadata_priority.sql similarity index 100% rename from models/bronze/prices/bronze__asset_metadata_priority.sql rename to models/bronze/prices/_legacy/bronze__asset_metadata_priority.sql diff --git a/models/bronze/prices/bronze__hourly_prices_all_providers.sql b/models/bronze/prices/_legacy/bronze__hourly_prices_all_providers.sql similarity index 100% rename from models/bronze/prices/bronze__hourly_prices_all_providers.sql rename to models/bronze/prices/_legacy/bronze__hourly_prices_all_providers.sql diff --git a/models/bronze/prices/bronze__hourly_prices_priority.sql b/models/bronze/prices/_legacy/bronze__hourly_prices_priority.sql similarity index 100% rename from models/bronze/prices/bronze__hourly_prices_priority.sql rename to models/bronze/prices/_legacy/bronze__hourly_prices_priority.sql diff --git a/models/bronze/prices/bronze__hourly_prices_priority_eth.sql b/models/bronze/prices/_legacy/bronze__hourly_prices_priority_eth.sql similarity index 100% rename from models/bronze/prices/bronze__hourly_prices_priority_eth.sql rename to models/bronze/prices/_legacy/bronze__hourly_prices_priority_eth.sql diff --git a/models/bronze/prices/bronze__complete_native_asset_metadata.sql b/models/bronze/prices/bronze__complete_native_asset_metadata.sql new file mode 100644 index 0000000..39001f3 --- /dev/null +++ b/models/bronze/prices/bronze__complete_native_asset_metadata.sql @@ -0,0 +1,26 @@ +{{ config ( + materialized = 'view' +) }} + +SELECT + asset_id, + symbol, + NAME, + decimals, + blockchain, + is_deprecated, + provider, + source, + _inserted_timestamp, + inserted_timestamp, + modified_timestamp, + complete_native_asset_metadata_id, + _invocation_id +FROM + {{ source( + 'silver_crosschain', + 'complete_native_asset_metadata' + ) }} +WHERE + blockchain = 'ethereum' + AND symbol = 'ETH' diff --git a/models/bronze/prices/bronze__complete_native_prices.sql b/models/bronze/prices/bronze__complete_native_prices.sql new file mode 100644 index 0000000..84539f0 --- /dev/null +++ b/models/bronze/prices/bronze__complete_native_prices.sql @@ -0,0 +1,29 @@ +{{ config ( + materialized = 'view' +) }} + +SELECT + HOUR, + asset_id, + symbol, + NAME, + decimals, + price, + blockchain, + is_imputed, + is_deprecated, + provider, + source, + _inserted_timestamp, + inserted_timestamp, + modified_timestamp, + complete_native_prices_id, + _invocation_id +FROM + {{ source( + 'silver_crosschain', + 'complete_native_prices' + ) }} +WHERE + blockchain = 'ethereum' + AND symbol = 'ETH' diff --git a/models/bronze/prices/bronze__complete_provider_asset_metadata.sql b/models/bronze/prices/bronze__complete_provider_asset_metadata.sql new file mode 100644 index 0000000..3b2eb87 --- /dev/null +++ b/models/bronze/prices/bronze__complete_provider_asset_metadata.sql @@ -0,0 +1,26 @@ +{{ config ( + materialized = 'view' +) }} + +SELECT + asset_id, + token_address, + NAME, + symbol, + platform, + platform_id, + provider, + source, + _inserted_timestamp, + inserted_timestamp, + modified_timestamp, + complete_provider_asset_metadata_id, + _invocation_id +FROM + {{ source( + 'silver_crosschain', + 'complete_provider_asset_metadata' + ) }} +WHERE + platform = 'Blast' +-- platforms specific to Blast \ No newline at end of file diff --git a/models/bronze/prices/bronze__complete_provider_prices.sql b/models/bronze/prices/bronze__complete_provider_prices.sql new file mode 100644 index 0000000..7d85636 --- /dev/null +++ b/models/bronze/prices/bronze__complete_provider_prices.sql @@ -0,0 +1,24 @@ +{{ config ( + materialized = 'view' +) }} + +SELECT + asset_id, + recorded_hour, + OPEN, + high, + low, + CLOSE, + provider, + source, + _inserted_timestamp, + inserted_timestamp, + modified_timestamp, + complete_provider_prices_id, + _invocation_id +FROM + {{ source( + 'silver_crosschain', + 'complete_provider_prices' + ) }} +-- prices for all ids \ No newline at end of file diff --git a/models/bronze/prices/bronze__complete_token_asset_metadata.sql b/models/bronze/prices/bronze__complete_token_asset_metadata.sql new file mode 100644 index 0000000..690c712 --- /dev/null +++ b/models/bronze/prices/bronze__complete_token_asset_metadata.sql @@ -0,0 +1,28 @@ +{{ config ( + materialized = 'view' +) }} + +SELECT + token_address, + asset_id, + symbol, + NAME, + decimals, + blockchain, + blockchain_name, + blockchain_id, + is_deprecated, + provider, + source, + _inserted_timestamp, + inserted_timestamp, + modified_timestamp, + complete_token_asset_metadata_id, + _invocation_id +FROM + {{ source( + 'silver_crosschain', + 'complete_token_asset_metadata' + ) }} +WHERE + blockchain = 'blast' \ No newline at end of file diff --git a/models/bronze/prices/bronze__complete_token_prices.sql b/models/bronze/prices/bronze__complete_token_prices.sql new file mode 100644 index 0000000..d33cfd1 --- /dev/null +++ b/models/bronze/prices/bronze__complete_token_prices.sql @@ -0,0 +1,31 @@ +{{ config ( + materialized = 'view' +) }} + +SELECT + HOUR, + token_address, + asset_id, + symbol, + NAME, + decimals, + price, + blockchain, + blockchain_name, + blockchain_id, + is_imputed, + is_deprecated, + provider, + source, + _inserted_timestamp, + inserted_timestamp, + modified_timestamp, + complete_token_prices_id, + _invocation_id +FROM + {{ source( + 'silver_crosschain', + 'complete_token_prices' + ) }} +WHERE + blockchain = 'blast' diff --git a/models/doc_descriptions/general/__overview__.md b/models/doc_descriptions/general/__overview__.md index eb30940..101eda5 100644 --- a/models/doc_descriptions/general/__overview__.md +++ b/models/doc_descriptions/general/__overview__.md @@ -36,10 +36,10 @@ There is more information on how to use dbt docs in the last section of this doc - [ez_decoded_event_logs](https://flipsidecrypto.github.io/blast-models/#!/model/model.blast_models.core__ez_decoded_event_logs) ### Price Tables (blast.price) -- [fact_hourly_token_prices](https://flipsidecrypto.github.io/blast-models/#!/model/model.blast_models.price__fact_hourly_token_prices) -- [ez_hourly_token_prices](https://flipsidecrypto.github.io/blast-models/#!/model/model.blast_models.price__ez_hourly_token_prices) - [dim_asset_metadata](https://flipsidecrypto.github.io/blast-models/#!/model/model.blast_models.price__dim_asset_metadata) +- [fact_prices_ohlc_hourly](https://flipsidecrypto.github.io/blast-models/#!/model/model.blast_models.price__fact_prices_ohlc_hourly) - [ez_asset_metadata](https://flipsidecrypto.github.io/blast-models/#!/model/model.blast_models.price__ez_asset_metadata) +- [ez_prices_hourly](https://flipsidecrypto.github.io/blast-models/#!/model/model.blast_models.price__ez_prices_hourly) ### Stats Tables (blast.stats) - [ez_core_metrics_hourly](https://flipsidecrypto.github.io/blast-models/#!/model/model.blast_models.stats__ez_core_metrics_hourly) diff --git a/models/doc_descriptions/prices/prices.md b/models/doc_descriptions/prices/prices.md new file mode 100644 index 0000000..60d4e96 --- /dev/null +++ b/models/doc_descriptions/prices/prices.md @@ -0,0 +1,143 @@ +{% docs prices_dim_asset_metadata_table_doc %} + +A comprehensive dimensional table holding asset metadata and other relevant details pertaining to each id, from multiple providers. This data set includes raw, non-transformed data coming directly from the provider APIs and rows are not intended to be unique. As a result, there may be data quality issues persisting in the APIs that flow through to this dimensional model. If you are interested in using a curated data set instead, please utilize ez_asset_metadata. + +{% enddocs %} + +{% docs prices_ez_asset_metadata_table_doc %} + +A convenience table holding prioritized asset metadata and other relevant details pertaining to each token_address and native asset. This data set is highly curated and contains metadata for one unique asset per blockchain. + +{% enddocs %} + +{% docs prices_fact_prices_ohlc_hourly_table_doc %} + +A comprehensive fact table holding id and provider specific open, high, low, close hourly prices, from multiple providers. This data set includes raw, non-transformed data coming directly from the provider APIs and rows are not intended to be unique. As a result, there may be data quality issues persisting in the APIs that flow through to this fact based model. If you are interested in using a curated data set instead, please utilize ez_prices_hourly. + +{% enddocs %} + +{% docs prices_ez_prices_hourly_table_doc %} + +A convenience table for determining token prices by address and blockchain, and native asset prices by symbol and blockchain. This data set is highly curated and contains metadata for one price per hour per unique asset and blockchain. + +{% enddocs %} + +{% docs prices_provider %} + +The provider or source of the data. + +{% enddocs %} + +{% docs prices_asset_id %} + +The unique identifier representing the asset. + +{% enddocs %} + +{% docs prices_name %} + +The name of asset. + +{% enddocs %} + +{% docs prices_symbol %} + +The symbol of asset. + +{% enddocs %} + +{% docs prices_token_address %} + +The specific address representing the asset on a specific platform. This will be NULL if referring to a native asset. + +{% enddocs %} + +{% docs prices_token_address_evm %} + +The specific address representing the asset on a specific platform. This will be NULL if referring to a native asset. The case (upper / lower) may or may not be specified within the `dim_asset_metadata` table, as this column is raw and not transformed, coming directly from the provider APIs. However, in the `ez_` views, it will be lowercase by default for all EVMs. + +{% enddocs %} + +{% docs prices_blockchain %} + +The Blockchain, Network, or Platform for this asset. + +{% enddocs %} + +{% docs prices_blockchain_id %} + +The unique identifier of the Blockchain, Network, or Platform for this asset. + +{% enddocs %} + +{% docs prices_decimals %} + +The number of decimals for the asset. May be NULL. + +{% enddocs %} + +{% docs prices_is_native %} + +A flag indicating assets native to the respective blockchain. + +{% enddocs %} + +{% docs prices_is_deprecated %} + +A flag indicating if the asset is deprecated or no longer supported by the provider. + +{% enddocs %} + +{% docs prices_id_deprecation %} + +Deprecating soon! Please use the `asset_id` column instead. + +{% enddocs %} + +{% docs prices_decimals_deprecation %} + +Deprecating soon! Please use the decimals column in `ez_asset_metadata` or join in `dim_contracts` instead. + +{% enddocs %} + +{% docs prices_hour %} + +Hour that the price was recorded at. + +{% enddocs %} + +{% docs prices_price %} + +Closing price of the recorded hour in USD. + +{% enddocs %} + +{% docs prices_is_imputed %} + +A flag indicating if the price was imputed, or derived, from the last arriving record. This is generally used for tokens with low-liquidity or inconsistent reporting. + +{% enddocs %} + +{% docs prices_open %} + +Opening price of the recorded hour in USD. + +{% enddocs %} + +{% docs prices_high %} + +Highest price of the recorded hour in USD + +{% enddocs %} + +{% docs prices_low %} + +Lowest price of the recorded hour in USD + +{% enddocs %} + +{% docs prices_close %} + +Closing price of the recorded hour in USD + +{% enddocs %} \ No newline at end of file diff --git a/models/gold/price/price__dim_asset_metadata.sql b/models/gold/price/price__dim_asset_metadata.sql index 215bd88..ba69cf6 100644 --- a/models/gold/price/price__dim_asset_metadata.sql +++ b/models/gold/price/price__dim_asset_metadata.sql @@ -6,13 +6,22 @@ SELECT token_address, - id, - symbol, - NAME, - decimals, + asset_id AS id, -- id column pending deprecation + asset_id, + A.symbol, + A.name, + C.decimals, -- decimals column pending deprecation + platform AS blockchain, + platform_id AS blockchain_id, provider, - asset_metadata_all_providers_id AS dim_asset_metadata_id, - inserted_timestamp, - modified_timestamp + A.inserted_timestamp, + A.modified_timestamp, + A.complete_provider_asset_metadata_id AS dim_asset_metadata_id FROM - {{ ref('silver__asset_metadata_all_providers') }} + {{ ref('silver__complete_provider_asset_metadata') }} A + LEFT JOIN {{ ref('core__dim_contracts') }} C --remove this join alongside decimal column deprecation + ON LOWER( + C.address + ) = LOWER( + A.token_address + ) \ No newline at end of file diff --git a/models/gold/price/price__dim_asset_metadata.yml b/models/gold/price/price__dim_asset_metadata.yml index fe7022b..7352d96 100644 --- a/models/gold/price/price__dim_asset_metadata.yml +++ b/models/gold/price/price__dim_asset_metadata.yml @@ -1,28 +1,27 @@ version: 2 models: - name: price__dim_asset_metadata - description: A comprehensive dimensional table holding all provider asset metadata and other relevant details pertaining to each token_address. - tests: - - dbt_utils.unique_combination_of_columns: - combination_of_columns: - - PROVIDER - - ID - - TOKEN_ADDRESS - - SYMBOL + description: Deprecating soon! Note, only the ID and DECIMALS columns are being removed. The dim_asset_metadata table itself is not being deprecated. '{{ doc("prices_dim_asset_metadata_table_doc") }}' columns: - name: PROVIDER - description: The provider or source of the data. + description: '{{ doc("prices_provider")}}' - name: ID - description: The unique identifier representing the asset. + description: '{{ doc("prices_id_deprecation") }}' + - name: ASSET_ID + description: '{{ doc("prices_asset_id") }}' - name: NAME - description: The name of asset. + description: '{{ doc("prices_name") }}' - name: SYMBOL - description: The symbol of asset. + description: '{{ doc("prices_symbol") }}' - name: TOKEN_ADDRESS - description: The specific address representing the asset in a specific platform. + description: '{{ doc("prices_token_address_evm") }}' + - name: BLOCKCHAIN + description: '{{ doc("prices_blockchain") }}' + - name: BLOCKCHAIN_ID + description: '{{ doc("prices_blockchain_id") }}' - name: DECIMALS - description: The number of decimal places the token needs adjusted where token values exist. + description: '{{ doc("prices_decimals_deprecation") }}' - name: DIM_ASSET_METADATA_ID description: '{{ doc("pk") }}' - name: INSERTED_TIMESTAMP diff --git a/models/gold/price/price__ez_asset_metadata.sql b/models/gold/price/price__ez_asset_metadata.sql index 5356a53..a77af41 100644 --- a/models/gold/price/price__ez_asset_metadata.sql +++ b/models/gold/price/price__ez_asset_metadata.sql @@ -6,12 +6,32 @@ SELECT token_address, - id, + asset_id AS id, -- id column pending deprecation + asset_id, symbol, NAME, decimals, - asset_metadata_priority_id AS ez_asset_metadata_id, + blockchain, + FALSE AS is_native, + is_deprecated, inserted_timestamp, - modified_timestamp + modified_timestamp, + complete_token_asset_metadata_id AS ez_asset_metadata_id FROM - {{ ref('silver__asset_metadata_priority') }} + {{ ref('silver__complete_token_asset_metadata') }} +UNION ALL +SELECT + NULL AS token_address, + asset_id AS id, -- id column pending deprecation + asset_id, + symbol, + NAME, + decimals, + blockchain, + TRUE AS is_native, + is_deprecated, + inserted_timestamp, + modified_timestamp, + complete_native_asset_metadata_id AS ez_asset_metadata_id +FROM + {{ ref('silver__complete_native_asset_metadata') }} diff --git a/models/gold/price/price__ez_asset_metadata.yml b/models/gold/price/price__ez_asset_metadata.yml index a7a2c3e..a2acc80 100644 --- a/models/gold/price/price__ez_asset_metadata.yml +++ b/models/gold/price/price__ez_asset_metadata.yml @@ -1,26 +1,31 @@ version: 2 models: - name: price__ez_asset_metadata - description: A convenience table holding prioritized asset metadata and other relevant details pertaining to each token_address. - tests: - - dbt_utils.unique_combination_of_columns: - combination_of_columns: - - TOKEN_ADDRESS + description: Deprecating soon! Note, only the ID column is changing. The ez_asset_metadata table itself is not being deprecated. '{{ doc("prices_ez_asset_metadata_table_doc") }}' columns: - name: ID - description: The unique identifier representing the asset. + description: '{{ doc("prices_id_deprecation")}}' + - name: ASSET_ID + description: '{{ doc("prices_asset_id") }}' - name: NAME - description: The name of asset. + description: '{{ doc("prices_name") }}' - name: SYMBOL - description: The symbol of asset. + description: '{{ doc("prices_symbol") }}' - name: TOKEN_ADDRESS - description: The specific address representing the asset in a specific platform. + description: '{{ doc("prices_token_address_evm") }}' + - name: BLOCKCHAIN + description: '{{ doc("prices_blockchain") }}' - name: DECIMALS - description: The number of decimal places the token needs adjusted where token values exist. + description: '{{ doc("prices_decimals") }}' + - name: IS_NATIVE + description: '{{ doc("prices_is_native") }}' + - name: IS_DEPRECATED + description: '{{ doc("prices_is_deprecated") }}' - name: EZ_ASSET_METADATA_ID description: '{{ doc("pk") }}' - name: INSERTED_TIMESTAMP description: '{{ doc("inserted_timestamp") }}' - name: MODIFIED_TIMESTAMP - description: '{{ doc("modified_timestamp") }}' \ No newline at end of file + description: '{{ doc("modified_timestamp") }}' + \ No newline at end of file diff --git a/models/gold/price/price__ez_hourly_token_prices.sql b/models/gold/price/price__ez_hourly_token_prices.sql index 70994bf..53d6494 100644 --- a/models/gold/price/price__ez_hourly_token_prices.sql +++ b/models/gold/price/price__ez_hourly_token_prices.sql @@ -11,8 +11,19 @@ SELECT decimals, price, is_imputed, - hourly_prices_priority_id AS ez_hourly_token_prices_id, - inserted_timestamp, - modified_timestamp + COALESCE ( + hourly_prices_priority_id, + {{ dbt_utils.generate_surrogate_key( + ['token_address', 'hour'] + ) }} + ) AS ez_hourly_token_prices_id, + COALESCE( + inserted_timestamp, + '2000-01-01' + ) AS inserted_timestamp, + COALESCE( + modified_timestamp, + '2000-01-01' + ) AS modified_timestamp FROM {{ ref('silver__hourly_prices_priority') }} diff --git a/models/gold/price/price__ez_hourly_token_prices.yml b/models/gold/price/price__ez_hourly_token_prices.yml index e705476..4ea34c4 100644 --- a/models/gold/price/price__ez_hourly_token_prices.yml +++ b/models/gold/price/price__ez_hourly_token_prices.yml @@ -1,29 +1,4 @@ version: 2 models: - name: price__ez_hourly_token_prices - description: A convenience table for determining token prices by address. - tests: - - dbt_utils.unique_combination_of_columns: - combination_of_columns: - - HOUR - - TOKEN_ADDRESS - - columns: - - name: HOUR - description: Hour that the price was recorded at - - name: TOKEN_ADDRESS - description: Address of the token - - name: SYMBOL - description: Symbol of the token - - name: DECIMALS - description: The number of decimals for token contract - - name: PRICE - description: Closing price of the recorded hour in USD - - name: IS_IMPUTED - description: Whether the price was imputed from an earlier record (generally used for low trade volume tokens) - - name: EZ_HOURLY_TOKEN_PRICES_ID - description: '{{ doc("pk") }}' - - name: INSERTED_TIMESTAMP - description: '{{ doc("inserted_timestamp") }}' - - name: MODIFIED_TIMESTAMP - description: '{{ doc("modified_timestamp") }}' \ No newline at end of file + description: Deprecating soon! Please use price.ez_prices_hourly or price.fact_prices_ohlc_hourly instead. \ No newline at end of file diff --git a/models/gold/price/price__ez_prices_hourly.sql b/models/gold/price/price__ez_prices_hourly.sql new file mode 100644 index 0000000..dfda724 --- /dev/null +++ b/models/gold/price/price__ez_prices_hourly.sql @@ -0,0 +1,39 @@ +{{ config( + materialized = 'view', + persist_docs ={ "relation": true, + "columns": true } +) }} + +SELECT + HOUR, + token_address, + symbol, + NAME, + decimals, + price, + blockchain, + FALSE AS is_native, + is_imputed, + is_deprecated, + inserted_timestamp, + modified_timestamp, + complete_token_prices_id AS ez_prices_hourly_id +FROM + {{ ref('silver__complete_token_prices') }} +UNION ALL +SELECT + HOUR, + NULL AS token_address, + symbol, + NAME, + decimals, + price, + blockchain, + TRUE AS is_native, + is_imputed, + is_deprecated, + inserted_timestamp, + modified_timestamp, + complete_native_prices_id AS ez_prices_hourly_id +FROM + {{ ref('silver__complete_native_prices') }} diff --git a/models/gold/price/price__ez_prices_hourly.yml b/models/gold/price/price__ez_prices_hourly.yml new file mode 100644 index 0000000..96cf4e5 --- /dev/null +++ b/models/gold/price/price__ez_prices_hourly.yml @@ -0,0 +1,30 @@ +version: 2 +models: + - name: price__ez_prices_hourly + description: '{{ doc("prices_ez_prices_hourly_table_doc") }}' + + columns: + - name: HOUR + description: '{{ doc("prices_hour")}}' + - name: TOKEN_ADDRESS + description: '{{ doc("prices_token_address_evm") }}' + - name: SYMBOL + description: '{{ doc("prices_symbol") }}' + - name: BLOCKCHAIN + description: '{{ doc("prices_blockchain") }}' + - name: DECIMALS + description: '{{ doc("prices_decimals") }}' + - name: PRICE + description: '{{ doc("prices_price") }}' + - name: IS_NATIVE + description: '{{ doc("prices_is_native") }}' + - name: IS_IMPUTED + description: '{{ doc("prices_is_imputed") }}' + - name: IS_DEPRECATED + description: '{{ doc("prices_is_deprecated") }}' + - name: EZ_PRICES_HOURLY_ID + description: '{{ doc("pk") }}' + - name: INSERTED_TIMESTAMP + description: '{{ doc("inserted_timestamp") }}' + - name: MODIFIED_TIMESTAMP + description: '{{ doc("modified_timestamp") }}' \ No newline at end of file diff --git a/models/gold/price/price__fact_hourly_token_prices.sql b/models/gold/price/price__fact_hourly_token_prices.sql index cb41128..8bb363e 100644 --- a/models/gold/price/price__fact_hourly_token_prices.sql +++ b/models/gold/price/price__fact_hourly_token_prices.sql @@ -10,8 +10,19 @@ SELECT price, is_imputed, provider, - hourly_prices_all_providers_id AS fact_hourly_token_prices_id, - inserted_timestamp, - modified_timestamp + COALESCE ( + hourly_prices_all_providers_id, + {{ dbt_utils.generate_surrogate_key( + ['token_address', 'hour', 'provider'] + ) }} + ) AS fact_hourly_token_prices_id, + COALESCE( + inserted_timestamp, + '2000-01-01' + ) AS inserted_timestamp, + COALESCE( + modified_timestamp, + '2000-01-01' + ) AS modified_timestamp FROM {{ ref('silver__hourly_prices_all_providers') }} diff --git a/models/gold/price/price__fact_hourly_token_prices.yml b/models/gold/price/price__fact_hourly_token_prices.yml index 3b12c10..ab8f694 100644 --- a/models/gold/price/price__fact_hourly_token_prices.yml +++ b/models/gold/price/price__fact_hourly_token_prices.yml @@ -1,22 +1,4 @@ version: 2 models: - name: price__fact_hourly_token_prices - description: A comprehensive fact table holding provider specific hourly token prices. - - columns: - - name: HOUR - description: Hour that the price was recorded at - - name: TOKEN_ADDRESS - description: Address of the token - - name: PROVIDER - description: Source of the token price. - - name: PRICE - description: Closing price of the recorded hour in USD - - name: IS_IMPUTED - description: Whether the price was imputed from an earlier record (generally used for low trade volume tokens) - - name: FACT_HOURLY_TOKEN_PRICES_ID - description: '{{ doc("pk") }}' - - name: INSERTED_TIMESTAMP - description: '{{ doc("inserted_timestamp") }}' - - name: MODIFIED_TIMESTAMP - description: '{{ doc("modified_timestamp") }}' \ No newline at end of file + description: Deprecating soon! Please use price.ez_prices_hourly or price.fact_prices_ohlc_hourly instead. \ No newline at end of file diff --git a/models/gold/price/price__fact_prices_ohlc_hourly.sql b/models/gold/price/price__fact_prices_ohlc_hourly.sql new file mode 100644 index 0000000..2be7d75 --- /dev/null +++ b/models/gold/price/price__fact_prices_ohlc_hourly.sql @@ -0,0 +1,19 @@ +{{ config( + materialized = 'view', + persist_docs ={ "relation": true, + "columns": true } +) }} + +SELECT + asset_id, + recorded_hour AS HOUR, + OPEN, + high, + low, + CLOSE, + provider, + inserted_timestamp, + modified_timestamp, + complete_provider_prices_id AS fact_prices_ohlc_hourly_id +FROM + {{ ref('silver__complete_provider_prices') }} diff --git a/models/gold/price/price__fact_prices_ohlc_hourly.yml b/models/gold/price/price__fact_prices_ohlc_hourly.yml new file mode 100644 index 0000000..29ff045 --- /dev/null +++ b/models/gold/price/price__fact_prices_ohlc_hourly.yml @@ -0,0 +1,24 @@ +version: 2 +models: + - name: price__fact_prices_ohlc_hourly + description: '{{ doc("prices_fact_prices_ohlc_hourly_table_doc") }}' + + columns: + - name: HOUR + description: '{{ doc("prices_hour")}}' + - name: ASSET_ID + description: '{{ doc("prices_asset_id") }}' + - name: OPEN + description: '{{ doc("prices_open") }}' + - name: HIGH + description: '{{ doc("prices_high") }}' + - name: LOW + description: '{{ doc("prices_low") }}' + - name: CLOSE + description: '{{ doc("prices_close") }}' + - name: FACT_PRICES_OHLC_HOURLY_ID + description: '{{ doc("pk") }}' + - name: INSERTED_TIMESTAMP + description: '{{ doc("inserted_timestamp") }}' + - name: MODIFIED_TIMESTAMP + description: '{{ doc("modified_timestamp") }}' \ No newline at end of file diff --git a/models/gold/stats/stats__ez_core_metrics_hourly.sql b/models/gold/stats/stats__ez_core_metrics_hourly.sql index 4830518..2556bd0 100644 --- a/models/gold/stats/stats__ez_core_metrics_hourly.sql +++ b/models/gold/stats/stats__ez_core_metrics_hourly.sql @@ -32,6 +32,7 @@ SELECT FROM {{ ref('silver_stats__core_metrics_hourly') }} s - LEFT JOIN {{ ref('silver__hourly_prices_priority_eth') }} + LEFT JOIN {{ ref('silver__complete_token_prices') }} p ON s.block_timestamp_hour = p.hour + AND p.token_address = '0x4300000000000000000000000000000000000004' \ No newline at end of file diff --git a/models/silver/core/silver__native_transfers.sql b/models/silver/core/silver__native_transfers.sql index 89fbbb3..e19d464 100644 --- a/models/silver/core/silver__native_transfers.sql +++ b/models/silver/core/silver__native_transfers.sql @@ -98,11 +98,12 @@ SELECT '{{ invocation_id }}' AS _invocation_id FROM eth_base A - LEFT JOIN {{ ref('silver__hourly_prices_priority_eth') }} + LEFT JOIN {{ ref('silver__complete_token_prices') }} p ON DATE_TRUNC( 'hour', A.block_timestamp ) = HOUR + AND p.token_address = '0x4300000000000000000000000000000000000004' JOIN tx_table USING ( tx_hash, block_number diff --git a/models/silver/core/silver__transfers.sql b/models/silver/core/silver__transfers.sql index f4ee332..7db266f 100644 --- a/models/silver/core/silver__transfers.sql +++ b/models/silver/core/silver__transfers.sql @@ -1,4 +1,4 @@ --- depends_on: {{ ref('silver__hourly_prices_priority') }} +-- depends_on: {{ ref('silver__complete_token_prices') }} {{ config( materialized = 'incremental', incremental_strategy = 'delete+insert', @@ -85,7 +85,7 @@ token_transfers AS ( _inserted_timestamp FROM logs t - LEFT JOIN {{ ref('price__ez_hourly_token_prices') }} + LEFT JOIN {{ ref('price__ez_prices_hourly') }} p ON t.contract_address = p.token_address AND DATE_TRUNC( @@ -147,7 +147,7 @@ heal_model AS ( FROM {{ this }} t0 - LEFT JOIN {{ ref('price__ez_hourly_token_prices') }} + LEFT JOIN {{ ref('price__ez_prices_hourly') }} p ON t0.contract_address = p.token_address AND DATE_TRUNC( @@ -203,7 +203,7 @@ heal_model AS ( SELECT 1 FROM - {{ ref('silver__hourly_prices_priority') }} + {{ ref('silver__complete_token_prices') }} p WHERE p._inserted_timestamp > DATEADD('DAY', -14, SYSDATE()) diff --git a/models/silver/prices/silver__asset_metadata_all_providers.sql b/models/silver/prices/_legacy/silver__asset_metadata_all_providers.sql similarity index 100% rename from models/silver/prices/silver__asset_metadata_all_providers.sql rename to models/silver/prices/_legacy/silver__asset_metadata_all_providers.sql diff --git a/models/silver/prices/silver__asset_metadata_all_providers.yml b/models/silver/prices/_legacy/silver__asset_metadata_all_providers.yml similarity index 100% rename from models/silver/prices/silver__asset_metadata_all_providers.yml rename to models/silver/prices/_legacy/silver__asset_metadata_all_providers.yml diff --git a/models/silver/prices/silver__asset_metadata_priority.sql b/models/silver/prices/_legacy/silver__asset_metadata_priority.sql similarity index 100% rename from models/silver/prices/silver__asset_metadata_priority.sql rename to models/silver/prices/_legacy/silver__asset_metadata_priority.sql diff --git a/models/silver/prices/silver__asset_metadata_priority.yml b/models/silver/prices/_legacy/silver__asset_metadata_priority.yml similarity index 100% rename from models/silver/prices/silver__asset_metadata_priority.yml rename to models/silver/prices/_legacy/silver__asset_metadata_priority.yml diff --git a/models/silver/prices/silver__hourly_prices_all_providers.sql b/models/silver/prices/_legacy/silver__hourly_prices_all_providers.sql similarity index 100% rename from models/silver/prices/silver__hourly_prices_all_providers.sql rename to models/silver/prices/_legacy/silver__hourly_prices_all_providers.sql diff --git a/models/silver/prices/silver__hourly_prices_all_providers.yml b/models/silver/prices/_legacy/silver__hourly_prices_all_providers.yml similarity index 100% rename from models/silver/prices/silver__hourly_prices_all_providers.yml rename to models/silver/prices/_legacy/silver__hourly_prices_all_providers.yml diff --git a/models/silver/prices/silver__hourly_prices_priority.sql b/models/silver/prices/_legacy/silver__hourly_prices_priority.sql similarity index 100% rename from models/silver/prices/silver__hourly_prices_priority.sql rename to models/silver/prices/_legacy/silver__hourly_prices_priority.sql diff --git a/models/silver/prices/silver__hourly_prices_priority.yml b/models/silver/prices/_legacy/silver__hourly_prices_priority.yml similarity index 100% rename from models/silver/prices/silver__hourly_prices_priority.yml rename to models/silver/prices/_legacy/silver__hourly_prices_priority.yml diff --git a/models/silver/prices/silver__hourly_prices_priority_eth.sql b/models/silver/prices/_legacy/silver__hourly_prices_priority_eth.sql similarity index 100% rename from models/silver/prices/silver__hourly_prices_priority_eth.sql rename to models/silver/prices/_legacy/silver__hourly_prices_priority_eth.sql diff --git a/models/silver/prices/silver__hourly_prices_priority_eth.yml b/models/silver/prices/_legacy/silver__hourly_prices_priority_eth.yml similarity index 100% rename from models/silver/prices/silver__hourly_prices_priority_eth.yml rename to models/silver/prices/_legacy/silver__hourly_prices_priority_eth.yml diff --git a/models/silver/prices/silver__complete_native_asset_metadata.sql b/models/silver/prices/silver__complete_native_asset_metadata.sql new file mode 100644 index 0000000..f06d593 --- /dev/null +++ b/models/silver/prices/silver__complete_native_asset_metadata.sql @@ -0,0 +1,37 @@ +{{ config( + materialized = 'incremental', + incremental_strategy = 'delete+insert', + unique_key = 'complete_native_asset_metadata_id', + tags = ['non_realtime'] +) }} + +SELECT + asset_id, + symbol, + NAME, + decimals, + blockchain, + is_deprecated, + provider, + source, + _inserted_timestamp, + inserted_timestamp, + modified_timestamp, + complete_native_asset_metadata_id, + _invocation_id +FROM + {{ ref( + 'bronze__complete_native_asset_metadata' + ) }} + +{% if is_incremental() %} +WHERE + modified_timestamp >= ( + SELECT + MAX( + modified_timestamp + ) + FROM + {{ this }} + ) +{% endif %} diff --git a/models/silver/prices/silver__complete_native_asset_metadata.yml b/models/silver/prices/silver__complete_native_asset_metadata.yml new file mode 100644 index 0000000..1c1fdf1 --- /dev/null +++ b/models/silver/prices/silver__complete_native_asset_metadata.yml @@ -0,0 +1,24 @@ +version: 2 +models: + - name: silver__complete_native_asset_metadata + tests: + - dbt_utils.unique_combination_of_columns: + combination_of_columns: + - SYMBOL + + columns: + - name: PROVIDER + tests: + - not_null + - name: SYMBOL + tests: + - not_null + - name: BLOCKCHAIN + tests: + - not_null + - name: MODIFIED_TIMESTAMP + tests: + - not_null + - name: COMPLETE_NATIVE_ASSET_METADATA_ID + tests: + - unique \ No newline at end of file diff --git a/models/silver/prices/silver__complete_native_prices.sql b/models/silver/prices/silver__complete_native_prices.sql new file mode 100644 index 0000000..375cbed --- /dev/null +++ b/models/silver/prices/silver__complete_native_prices.sql @@ -0,0 +1,40 @@ +{{ config( + materialized = 'incremental', + incremental_strategy = 'delete+insert', + unique_key = 'complete_native_prices_id', + tags = ['non_realtime'] +) }} + +SELECT + HOUR, + asset_id, + symbol, + NAME, + decimals, + price, + blockchain, + is_imputed, + is_deprecated, + provider, + source, + _inserted_timestamp, + inserted_timestamp, + modified_timestamp, + complete_native_prices_id, + _invocation_id +FROM + {{ ref( + 'bronze__complete_native_prices' + ) }} + +{% if is_incremental() %} +WHERE + modified_timestamp >= ( + SELECT + MAX( + modified_timestamp + ) + FROM + {{ this }} + ) +{% endif %} diff --git a/models/silver/prices/silver__complete_native_prices.yml b/models/silver/prices/silver__complete_native_prices.yml new file mode 100644 index 0000000..bb72433 --- /dev/null +++ b/models/silver/prices/silver__complete_native_prices.yml @@ -0,0 +1,37 @@ +version: 2 +models: + - name: silver__complete_native_prices + tests: + - dbt_utils.unique_combination_of_columns: + combination_of_columns: + - HOUR + - SYMBOL + + columns: + - name: HOUR + tests: + - not_null + - name: SYMBOL + tests: + - not_null + - name: BLOCKCHAIN + tests: + - not_null + - name: PROVIDER + tests: + - not_null + - name: PRICE + tests: + - not_null + - name: IS_IMPUTED + tests: + - not_null + - name: _INSERTED_TIMESTAMP + tests: + - not_null + - name: MODIFIED_TIMESTAMP + tests: + - not_null + - name: COMPLETE_NATIVE_PRICES_ID + tests: + - unique \ No newline at end of file diff --git a/models/silver/prices/silver__complete_provider_asset_metadata.sql b/models/silver/prices/silver__complete_provider_asset_metadata.sql new file mode 100644 index 0000000..a22da44 --- /dev/null +++ b/models/silver/prices/silver__complete_provider_asset_metadata.sql @@ -0,0 +1,37 @@ +{{ config( + materialized = 'incremental', + incremental_strategy = 'delete+insert', + unique_key = 'complete_provider_asset_metadata_id', + tags = ['non_realtime'] +) }} + +SELECT + asset_id, + token_address, + NAME, + symbol, + platform, + platform_id, + provider, + source, + _inserted_timestamp, + inserted_timestamp, + modified_timestamp, + complete_provider_asset_metadata_id, + _invocation_id +FROM + {{ ref( + 'bronze__complete_provider_asset_metadata' + ) }} + +{% if is_incremental() %} +WHERE + modified_timestamp >= ( + SELECT + MAX( + modified_timestamp + ) + FROM + {{ this }} + ) +{% endif %} \ No newline at end of file diff --git a/models/silver/prices/silver__complete_provider_asset_metadata.yml b/models/silver/prices/silver__complete_provider_asset_metadata.yml new file mode 100644 index 0000000..8fa56fd --- /dev/null +++ b/models/silver/prices/silver__complete_provider_asset_metadata.yml @@ -0,0 +1,26 @@ +version: 2 +models: + - name: silver__complete_provider_asset_metadata + tests: + - dbt_utils.unique_combination_of_columns: + combination_of_columns: + - ASSET_ID + - TOKEN_ADDRESS + - NAME + - SYMBOL + - PLATFORM + - PLATFORM_ID + - PROVIDER + columns: + - name: PROVIDER + tests: + - not_null + - name: ASSET_ID + tests: + - not_null + - name: MODIFIED_TIMESTAMP + tests: + - not_null + - name: COMPLETE_PROVIDER_ASSET_METADATA_ID + tests: + - unique \ No newline at end of file diff --git a/models/silver/prices/silver__complete_provider_prices.sql b/models/silver/prices/silver__complete_provider_prices.sql new file mode 100644 index 0000000..c6aa062 --- /dev/null +++ b/models/silver/prices/silver__complete_provider_prices.sql @@ -0,0 +1,45 @@ +{{ config( + materialized = 'incremental', + incremental_strategy = 'delete+insert', + unique_key = 'complete_provider_prices_id', + tags = ['non_realtime'] +) }} + +SELECT + p.asset_id, + recorded_hour, + OPEN, + high, + low, + CLOSE, + p.provider, + p.source, + p._inserted_timestamp, + p.inserted_timestamp, + p.modified_timestamp, + p.complete_provider_prices_id, + p._invocation_id +FROM + {{ ref( + 'bronze__complete_provider_prices' + ) }} + p + INNER JOIN {{ ref('bronze__complete_provider_asset_metadata') }} + m + ON p.asset_id = m.asset_id + +{% if is_incremental() %} +WHERE + p.modified_timestamp >= ( + SELECT + MAX( + modified_timestamp + ) + FROM + {{ this }} + ) +{% endif %} + +qualify(ROW_NUMBER() over (PARTITION BY p.asset_id, recorded_hour, p.provider +ORDER BY + p.modified_timestamp DESC)) = 1 diff --git a/models/silver/prices/silver__complete_provider_prices.yml b/models/silver/prices/silver__complete_provider_prices.yml new file mode 100644 index 0000000..8db23c7 --- /dev/null +++ b/models/silver/prices/silver__complete_provider_prices.yml @@ -0,0 +1,25 @@ +version: 2 +models: + - name: silver__complete_provider_prices + tests: + - dbt_utils.unique_combination_of_columns: + combination_of_columns: + - ASSET_ID + - RECORDED_HOUR + - PROVIDER + columns: + - name: PROVIDER + tests: + - not_null + - name: ASSET_ID + tests: + - not_null + - name: RECORDED_HOUR + tests: + - not_null + - name: MODIFIED_TIMESTAMP + tests: + - not_null + - name: COMPLETE_PROVIDER_PRICES_ID + tests: + - unique \ No newline at end of file diff --git a/models/silver/prices/silver__complete_token_asset_metadata.sql b/models/silver/prices/silver__complete_token_asset_metadata.sql new file mode 100644 index 0000000..2dfc8a3 --- /dev/null +++ b/models/silver/prices/silver__complete_token_asset_metadata.sql @@ -0,0 +1,42 @@ +{{ config( + materialized = 'incremental', + incremental_strategy = 'delete+insert', + unique_key = 'complete_token_asset_metadata_id', + tags = ['non_realtime'] +) }} + +SELECT + LOWER( + A.token_address + ) AS token_address, + asset_id, + symbol, + NAME, + decimals, + blockchain, + blockchain_name, + blockchain_id, + is_deprecated, + provider, + source, + _inserted_timestamp, + inserted_timestamp, + modified_timestamp, + complete_token_asset_metadata_id, + _invocation_id +FROM + {{ ref( + 'bronze__complete_token_asset_metadata' + ) }} A + +{% if is_incremental() %} +WHERE + modified_timestamp >= ( + SELECT + MAX( + modified_timestamp + ) + FROM + {{ this }} + ) +{% endif %} diff --git a/models/silver/prices/silver__complete_token_asset_metadata.yml b/models/silver/prices/silver__complete_token_asset_metadata.yml new file mode 100644 index 0000000..3eea590 --- /dev/null +++ b/models/silver/prices/silver__complete_token_asset_metadata.yml @@ -0,0 +1,28 @@ +version: 2 +models: + - name: silver__complete_token_asset_metadata + tests: + - dbt_utils.unique_combination_of_columns: + combination_of_columns: + - TOKEN_ADDRESS + - BLOCKCHAIN + + columns: + - name: PROVIDER + tests: + - not_null + - name: TOKEN_ADDRESS + tests: + - not_null + - name: BLOCKCHAIN + tests: + - not_null + - name: BLOCKCHAIN_ID + tests: + - not_null + - name: MODIFIED_TIMESTAMP + tests: + - not_null + - name: COMPLETE_TOKEN_ASSET_METADATA_ID + tests: + - unique \ No newline at end of file diff --git a/models/silver/prices/silver__complete_token_prices.sql b/models/silver/prices/silver__complete_token_prices.sql new file mode 100644 index 0000000..f343d5a --- /dev/null +++ b/models/silver/prices/silver__complete_token_prices.sql @@ -0,0 +1,46 @@ +{{ config( + materialized = 'incremental', + incremental_strategy = 'delete+insert', + unique_key = 'complete_token_prices_id', + tags = ['non_realtime'] +) }} + +SELECT + HOUR, + LOWER( + p.token_address + ) AS token_address, + asset_id, + symbol, + NAME, + decimals, + price, + blockchain, + blockchain_name, + blockchain_id, + is_imputed, + is_deprecated, + provider, + source, + _inserted_timestamp, + inserted_timestamp, + modified_timestamp, + complete_token_prices_id, + _invocation_id +FROM + {{ ref( + 'bronze__complete_token_prices' + ) }} + p + +{% if is_incremental() %} +WHERE + modified_timestamp >= ( + SELECT + MAX( + modified_timestamp + ) + FROM + {{ this }} + ) +{% endif %} diff --git a/models/silver/prices/silver__complete_token_prices.yml b/models/silver/prices/silver__complete_token_prices.yml new file mode 100644 index 0000000..d2ac57f --- /dev/null +++ b/models/silver/prices/silver__complete_token_prices.yml @@ -0,0 +1,41 @@ +version: 2 +models: + - name: silver__complete_token_prices + tests: + - dbt_utils.unique_combination_of_columns: + combination_of_columns: + - HOUR + - TOKEN_ADDRESS + - BLOCKCHAIN + + columns: + - name: HOUR + tests: + - not_null + - name: TOKEN_ADDRESS + tests: + - not_null + - name: BLOCKCHAIN + tests: + - not_null + - name: BLOCKCHAIN_ID + tests: + - not_null + - name: PROVIDER + tests: + - not_null + - name: PRICE + tests: + - not_null + - name: IS_IMPUTED + tests: + - not_null + - name: _INSERTED_TIMESTAMP + tests: + - not_null + - name: MODIFIED_TIMESTAMP + tests: + - not_null + - name: COMPLETE_TOKEN_PRICES_ID + tests: + - unique \ No newline at end of file diff --git a/models/silver/protocols/blitz/silver__blitz_collateral.sql b/models/silver/protocols/blitz/silver__blitz_collateral.sql index 2802563..5aba942 100644 --- a/models/silver/protocols/blitz/silver__blitz_collateral.sql +++ b/models/silver/protocols/blitz/silver__blitz_collateral.sql @@ -106,7 +106,7 @@ FINAL AS ( A._inserted_timestamp FROM product_id_join A - LEFT JOIN {{ ref('price__ez_hourly_token_prices') }} + LEFT JOIN {{ ref('price__ez_prices_hourly') }} p ON A.token_address = p.token_address AND DATE_TRUNC( diff --git a/models/sources.yml b/models/sources.yml index 94e42f8..f9ab20d 100644 --- a/models/sources.yml +++ b/models/sources.yml @@ -44,6 +44,12 @@ sources: - name: asset_metadata_all_providers - name: near_address_encoded - name: labels_combined + - name: complete_token_asset_metadata + - name: complete_token_prices + - name: complete_provider_asset_metadata + - name: complete_provider_prices + - name: complete_native_asset_metadata + - name: complete_native_prices - name: crosschain_public database: crosschain schema: bronze_public