mirror of
https://github.com/FlipsideCrypto/stellar-models.git
synced 2026-02-06 11:27:29 +00:00
AN-5773 standard prices with some customizations (#6)
* standard prices with some customizations * . * check * tests/desc * added overview file --------- Co-authored-by: Mike Stepanovic <mike.stepanovic@flipsidecrypto.com>
This commit is contained in:
parent
e554067c3c
commit
3b3b95f7d5
@ -0,0 +1,26 @@
|
||||
{{ config (
|
||||
materialized = 'view',
|
||||
tags = ['bronze_prices']
|
||||
) }}
|
||||
|
||||
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(
|
||||
'crosschain_silver',
|
||||
'complete_native_asset_metadata'
|
||||
) }}
|
||||
WHERE
|
||||
blockchain = 'stellar'
|
||||
29
models/bronze/prices/bronze__complete_native_prices.sql
Normal file
29
models/bronze/prices/bronze__complete_native_prices.sql
Normal file
@ -0,0 +1,29 @@
|
||||
{{ config (
|
||||
materialized = 'view',
|
||||
tags = ['bronze_prices']
|
||||
) }}
|
||||
|
||||
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(
|
||||
'crosschain_silver',
|
||||
'complete_native_prices'
|
||||
) }}
|
||||
WHERE
|
||||
blockchain = 'stellar'
|
||||
@ -0,0 +1,28 @@
|
||||
{{ config (
|
||||
materialized = 'view',
|
||||
tags = ['bronze_prices']
|
||||
) }}
|
||||
|
||||
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(
|
||||
'crosschain_silver',
|
||||
'complete_provider_asset_metadata'
|
||||
) }}
|
||||
WHERE
|
||||
LOWER(platform) = 'stellar'
|
||||
AND len(token_address) > 0
|
||||
AND token_address NOT ILIKE 'http%'
|
||||
24
models/bronze/prices/bronze__complete_provider_prices.sql
Normal file
24
models/bronze/prices/bronze__complete_provider_prices.sql
Normal file
@ -0,0 +1,24 @@
|
||||
{{ config (
|
||||
materialized = 'view',
|
||||
tags = ['bronze_prices']
|
||||
) }}
|
||||
|
||||
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(
|
||||
'crosschain_silver',
|
||||
'complete_provider_prices'
|
||||
) }}
|
||||
@ -0,0 +1,29 @@
|
||||
{{ config (
|
||||
materialized = 'view',
|
||||
tags = ['bronze_prices']
|
||||
) }}
|
||||
|
||||
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(
|
||||
'crosschain_silver',
|
||||
'complete_token_asset_metadata'
|
||||
) }}
|
||||
WHERE
|
||||
blockchain = 'stellar'
|
||||
32
models/bronze/prices/bronze__complete_token_prices.sql
Normal file
32
models/bronze/prices/bronze__complete_token_prices.sql
Normal file
@ -0,0 +1,32 @@
|
||||
{{ config (
|
||||
materialized = 'view',
|
||||
tags = ['bronze_prices']
|
||||
) }}
|
||||
|
||||
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(
|
||||
'crosschain_silver',
|
||||
'complete_token_prices'
|
||||
) }}
|
||||
WHERE
|
||||
blockchain = 'stellar'
|
||||
@ -37,6 +37,18 @@ There is more information on how to use dbt docs in the last section of this doc
|
||||
- [defi.fact_liquidity_pools](https://flipsidecrypto.github.io/stellar-models/#!/model/model.stellar_models.defi__fact_liquidity_pools)
|
||||
- [defi.fact_trades](https://flipsidecrypto.github.io/stellar-models/#!/model/model.stellar_models.defi__fact_trades)
|
||||
|
||||
### Price Tables (`stellar`.`PRICE`.`<table_name>`)
|
||||
|
||||
**Dimension Tables:**
|
||||
- [price.dim_asset_metadata](https://flipsidecrypto.github.io/stellar-models/#!/model/model.stellar_models.price__dim_asset_metadata)
|
||||
|
||||
**Fact Tables:**
|
||||
- [price.fact_prices_ohlc_hourly](https://flipsidecrypto.github.io/stellar-models/#!/model/model.stellar_models.price__fact_prices_ohlc_hourly)
|
||||
|
||||
**Convenience Views:**
|
||||
- [price.ez_prices_hourly](https://flipsidecrypto.github.io/stellar-models/#!/model/model.stellar_models.price__ez_prices_hourly)
|
||||
- [price.ez_asset_metadata](https://flipsidecrypto.github.io/stellar-models/#!/model/model.stellar_models.price__ez_asset_metadata)
|
||||
|
||||
## **Data Model Overview**
|
||||
|
||||
These Stellar models are built a few different ways, but the core fact tables are built using three layers of sql models: **bronze, silver, and gold (or core).**
|
||||
|
||||
177
models/descriptions/prices.md
Normal file
177
models/descriptions/prices.md
Normal file
@ -0,0 +1,177 @@
|
||||
{% docs prices_table_doc %}
|
||||
|
||||
This table contains hourly prices for tokens on this blockchain.
|
||||
The sources of this data are [CoinMarketCap](https://coinmarketcap.com/) and [CoinGecko](https://www.coingecko.com/).
|
||||
|
||||
{% enddocs %}
|
||||
|
||||
|
||||
{% docs prices_address %}
|
||||
|
||||
The unique address for a given token on this EVM blockchain.
|
||||
|
||||
{% enddocs %}
|
||||
|
||||
|
||||
{% docs prices_decimals %}
|
||||
|
||||
The number of decimals for the token contract on this EVM blockchain.
|
||||
|
||||
{% enddocs %}
|
||||
|
||||
|
||||
{% docs prices_hour %}
|
||||
|
||||
The hour at which the token price was recorded on this EVM blockchain.
|
||||
|
||||
{% enddocs %}
|
||||
|
||||
|
||||
{% docs prices_imputed %}
|
||||
|
||||
This column indicates whether or not the price has been pulled forward from the previous hour. Sometimes hourly prices are missed from our data source, and in that case, we carry forward the last recorded hourly price until we record a new price.
|
||||
|
||||
{% enddocs %}
|
||||
|
||||
|
||||
{% docs prices_price %}
|
||||
|
||||
The token price for a given hour on this EVM blockchain.
|
||||
|
||||
{% enddocs %}
|
||||
|
||||
|
||||
{% 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 the asset.
|
||||
|
||||
{% enddocs %}
|
||||
|
||||
|
||||
{% docs prices_symbol %}
|
||||
|
||||
The symbol of the asset.
|
||||
|
||||
{% enddocs %}
|
||||
|
||||
|
||||
{% docs prices_token_address %}
|
||||
|
||||
The specific address representing the asset on this EVM blockchain. This will be NULL if referring to a native asset.
|
||||
|
||||
{% enddocs %}
|
||||
|
||||
|
||||
{% docs prices_token_address_evm %}
|
||||
|
||||
The specific address representing the asset on this EVM blockchain. 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_is_native %}
|
||||
|
||||
A flag indicating assets native to this EVM blockchain.
|
||||
|
||||
{% enddocs %}
|
||||
|
||||
|
||||
{% docs prices_is_deprecated %}
|
||||
|
||||
A flag indicating if the asset is deprecated or no longer supported by the provider.
|
||||
|
||||
{% 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 %}
|
||||
|
||||
32
models/gold/prices/price__dim_asset_metadata.sql
Normal file
32
models/gold/prices/price__dim_asset_metadata.sql
Normal file
@ -0,0 +1,32 @@
|
||||
{{ config(
|
||||
materialized = 'incremental',
|
||||
incremental_strategy = 'merge',
|
||||
merge_exclude_columns = ["inserted_timestamp"],
|
||||
unique_key = 'dim_asset_metadata_id',
|
||||
post_hook = "ALTER TABLE {{ this }} ADD SEARCH OPTIMIZATION ON EQUALITY(asset_issuer, asset_code,symbol, name) ",
|
||||
tags = ['gold_prices','scheduled_core']
|
||||
) }}
|
||||
|
||||
SELECT
|
||||
provider_asset_id,
|
||||
asset_issuer,
|
||||
asset_code,
|
||||
NAME,
|
||||
symbol,
|
||||
platform AS blockchain,
|
||||
platform_id AS blockchain_id,
|
||||
provider,
|
||||
{{ dbt_utils.generate_surrogate_key(['complete_provider_asset_metadata_id']) }} AS dim_asset_metadata_id,
|
||||
SYSDATE() AS inserted_timestamp,
|
||||
SYSDATE() AS modified_timestamp
|
||||
FROM
|
||||
{{ ref('silver__complete_provider_asset_metadata') }}
|
||||
|
||||
{% if is_incremental() %}
|
||||
WHERE
|
||||
modified_timestamp > (
|
||||
SELECT
|
||||
COALESCE(MAX(modified_timestamp), '1970-01-01' :: TIMESTAMP) AS modified_timestamp
|
||||
FROM
|
||||
{{ this }})
|
||||
{% endif %}
|
||||
26
models/gold/prices/price__dim_asset_metadata.yml
Normal file
26
models/gold/prices/price__dim_asset_metadata.yml
Normal file
@ -0,0 +1,26 @@
|
||||
version: 2
|
||||
models:
|
||||
- name: price__dim_asset_metadata
|
||||
description: '{{ doc("prices_dim_asset_metadata_table_doc") }}'
|
||||
|
||||
columns:
|
||||
- name: PROVIDER
|
||||
description: '{{ doc("prices_provider")}}'
|
||||
- name: PROVIDER_ASSET_ID
|
||||
description: '{{ doc("prices_asset_id") }}'
|
||||
- name: NAME
|
||||
description: '{{ doc("prices_name") }}'
|
||||
- name: SYMBOL
|
||||
description: '{{ doc("prices_symbol") }}'
|
||||
- name: TOKEN_ADDRESS
|
||||
description: '{{ doc("prices_token_address") }}'
|
||||
- name: BLOCKCHAIN
|
||||
description: '{{ doc("prices_blockchain") }}'
|
||||
- name: BLOCKCHAIN_ID
|
||||
description: '{{ doc("prices_blockchain_id") }}'
|
||||
- name: DIM_ASSET_METADATA_ID
|
||||
description: '{{ doc("pk") }}'
|
||||
- name: INSERTED_TIMESTAMP
|
||||
description: '{{ doc("inserted_timestamp") }}'
|
||||
- name: MODIFIED_TIMESTAMP
|
||||
description: '{{ doc("modified_timestamp") }}'
|
||||
60
models/gold/prices/price__ez_asset_metadata.sql
Normal file
60
models/gold/prices/price__ez_asset_metadata.sql
Normal file
@ -0,0 +1,60 @@
|
||||
{{ config(
|
||||
materialized = 'incremental',
|
||||
incremental_strategy = 'merge',
|
||||
merge_exclude_columns = ["inserted_timestamp"],
|
||||
unique_key = 'ez_asset_metadata_id',
|
||||
post_hook = "ALTER TABLE {{ this }} ADD SEARCH OPTIMIZATION ON EQUALITY(asset_issuer, asset_code, asset_id, symbol, name)",
|
||||
tags = ['gold_prices','scheduled_core']
|
||||
) }}
|
||||
|
||||
SELECT
|
||||
provider_asset_id,
|
||||
asset_issuer,
|
||||
asset_code,
|
||||
asset_id,
|
||||
NAME,
|
||||
symbol,
|
||||
decimals,
|
||||
blockchain,
|
||||
FALSE AS is_native,
|
||||
is_deprecated,
|
||||
{{ dbt_utils.generate_surrogate_key(['complete_token_asset_metadata_id']) }} AS ez_asset_metadata_id,
|
||||
SYSDATE() AS inserted_timestamp,
|
||||
SYSDATE() AS modified_timestamp
|
||||
FROM
|
||||
{{ ref('silver__complete_token_asset_metadata') }}
|
||||
|
||||
{% if is_incremental() %}
|
||||
WHERE
|
||||
modified_timestamp > (
|
||||
SELECT
|
||||
COALESCE(MAX(modified_timestamp), '1970-01-01' :: TIMESTAMP) AS modified_timestamp
|
||||
FROM
|
||||
{{ this }})
|
||||
{% endif %}
|
||||
UNION ALL
|
||||
SELECT
|
||||
asset_id AS provider_asset_id,
|
||||
NULL AS asset_issuer,
|
||||
NULL AS asset_code,
|
||||
-5706705804583548011 AS asset_id,
|
||||
NAME,
|
||||
symbol,
|
||||
decimals,
|
||||
blockchain,
|
||||
TRUE AS is_native,
|
||||
is_deprecated,
|
||||
{{ dbt_utils.generate_surrogate_key(['complete_native_asset_metadata_id']) }} AS ez_asset_metadata_id,
|
||||
SYSDATE() AS inserted_timestamp,
|
||||
SYSDATE() AS modified_timestamp
|
||||
FROM
|
||||
{{ ref('silver__complete_native_asset_metadata') }}
|
||||
|
||||
{% if is_incremental() %}
|
||||
WHERE
|
||||
modified_timestamp > (
|
||||
SELECT
|
||||
COALESCE(MAX(modified_timestamp), '1970-01-01' :: TIMESTAMP) AS modified_timestamp
|
||||
FROM
|
||||
{{ this }})
|
||||
{% endif %}
|
||||
33
models/gold/prices/price__ez_asset_metadata.yml
Normal file
33
models/gold/prices/price__ez_asset_metadata.yml
Normal file
@ -0,0 +1,33 @@
|
||||
version: 2
|
||||
models:
|
||||
- name: price__ez_asset_metadata
|
||||
description: '{{ doc("prices_ez_asset_metadata_table_doc") }}'
|
||||
|
||||
columns:
|
||||
- name: PROVIDER_ASSET_ID
|
||||
description: '{{ doc("prices_asset_id") }}'
|
||||
- name: ASSET_ISSUER
|
||||
description: '{{ doc("asset_issuer") }}'
|
||||
- name: ASSET_CODE
|
||||
description: '{{ doc("asset_code") }}'
|
||||
- name: ASSET_ID
|
||||
description: '{{ doc("asset_id") }}'
|
||||
- name: NAME
|
||||
description: '{{ doc("prices_name") }}'
|
||||
- name: SYMBOL
|
||||
description: '{{ doc("prices_symbol") }}'
|
||||
- name: BLOCKCHAIN
|
||||
description: '{{ doc("prices_blockchain") }}'
|
||||
- name: DECIMALS
|
||||
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") }}'
|
||||
|
||||
63
models/gold/prices/price__ez_prices_hourly.sql
Normal file
63
models/gold/prices/price__ez_prices_hourly.sql
Normal file
@ -0,0 +1,63 @@
|
||||
{{ config(
|
||||
materialized = 'incremental',
|
||||
incremental_strategy = 'merge',
|
||||
merge_exclude_columns = ["inserted_timestamp"],
|
||||
unique_key = 'ez_prices_hourly_id',
|
||||
cluster_by = ['hour::DATE'],
|
||||
post_hook = "ALTER TABLE {{ this }} ADD SEARCH OPTIMIZATION ON EQUALITY(asset_issuer, asset_code, asset_id, symbol, name)",
|
||||
tags = ['gold_prices','scheduled_core']
|
||||
) }}
|
||||
|
||||
SELECT
|
||||
HOUR,
|
||||
asset_issuer,
|
||||
asset_code,
|
||||
asset_id,
|
||||
price,
|
||||
symbol,
|
||||
decimals,
|
||||
blockchain,
|
||||
FALSE AS is_native,
|
||||
is_imputed,
|
||||
is_deprecated,
|
||||
{{ dbt_utils.generate_surrogate_key(['complete_token_prices_id']) }} AS ez_prices_hourly_id,
|
||||
SYSDATE() AS inserted_timestamp,
|
||||
SYSDATE() AS modified_timestamp
|
||||
FROM
|
||||
{{ ref('silver__complete_token_prices') }}
|
||||
|
||||
{% if is_incremental() %}
|
||||
WHERE
|
||||
modified_timestamp > (
|
||||
SELECT
|
||||
COALESCE(MAX(modified_timestamp), '1970-01-01' :: TIMESTAMP) AS modified_timestamp
|
||||
FROM
|
||||
{{ this }})
|
||||
{% endif %}
|
||||
UNION ALL
|
||||
SELECT
|
||||
HOUR,
|
||||
NULL AS asset_issuer,
|
||||
NULL AS asset_code,
|
||||
-5706705804583548011 AS asset_id,
|
||||
NAME,
|
||||
symbol,
|
||||
decimals,
|
||||
blockchain,
|
||||
TRUE AS is_native,
|
||||
is_imputed,
|
||||
is_deprecated,
|
||||
{{ dbt_utils.generate_surrogate_key(['complete_native_prices_id']) }} AS ez_prices_hourly_id,
|
||||
SYSDATE() AS inserted_timestamp,
|
||||
SYSDATE() AS modified_timestamp
|
||||
FROM
|
||||
{{ ref('silver__complete_native_prices') }}
|
||||
|
||||
{% if is_incremental() %}
|
||||
WHERE
|
||||
modified_timestamp > (
|
||||
SELECT
|
||||
COALESCE(MAX(modified_timestamp), '1970-01-01' :: TIMESTAMP) AS modified_timestamp
|
||||
FROM
|
||||
{{ this }})
|
||||
{% endif %}
|
||||
38
models/gold/prices/price__ez_prices_hourly.yml
Normal file
38
models/gold/prices/price__ez_prices_hourly.yml
Normal file
@ -0,0 +1,38 @@
|
||||
version: 2
|
||||
models:
|
||||
- name: price__ez_prices_hourly
|
||||
description: '{{ doc("prices_ez_prices_hourly_table_doc") }}'
|
||||
|
||||
columns:
|
||||
- name: HOUR
|
||||
description: '{{ doc("prices_hour")}}'
|
||||
tests:
|
||||
- dbt_expectations.expect_row_values_to_have_recent_data:
|
||||
datepart: day
|
||||
interval: 2
|
||||
- name: ASSET_ISSUER
|
||||
description: '{{ doc("asset_issuer") }}'
|
||||
- name: ASSET_CODE
|
||||
description: '{{ doc("asset_code") }}'
|
||||
- name: ASSET_ID
|
||||
description: '{{ doc("asset_id") }}'
|
||||
- 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") }}'
|
||||
30
models/gold/prices/price__fact_prices_ohlc_hourly.sql
Normal file
30
models/gold/prices/price__fact_prices_ohlc_hourly.sql
Normal file
@ -0,0 +1,30 @@
|
||||
{{ config(
|
||||
materialized = 'incremental',
|
||||
incremental_strategy = 'delete+insert',
|
||||
unique_key = 'fact_prices_ohlc_hourly_id',
|
||||
cluster_by = ['hour::DATE','provider'],
|
||||
tags = ['gold_prices','scheduled_core']
|
||||
) }}
|
||||
|
||||
SELECT
|
||||
provider_asset_id,
|
||||
recorded_hour AS HOUR,
|
||||
OPEN,
|
||||
high,
|
||||
low,
|
||||
CLOSE,
|
||||
provider,
|
||||
{{ dbt_utils.generate_surrogate_key(['complete_provider_prices_id']) }} AS fact_prices_ohlc_hourly_id,
|
||||
SYSDATE() AS inserted_timestamp,
|
||||
SYSDATE() AS modified_timestamp
|
||||
FROM
|
||||
{{ ref('silver__complete_provider_prices') }}
|
||||
|
||||
{% if is_incremental() %}
|
||||
WHERE
|
||||
modified_timestamp > (
|
||||
SELECT
|
||||
COALESCE(MAX(modified_timestamp), '1970-01-01' :: TIMESTAMP) AS modified_timestamp
|
||||
FROM
|
||||
{{ this }})
|
||||
{% endif %}
|
||||
30
models/gold/prices/price__fact_prices_ohlc_hourly.yml
Normal file
30
models/gold/prices/price__fact_prices_ohlc_hourly.yml
Normal file
@ -0,0 +1,30 @@
|
||||
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")}}'
|
||||
tests:
|
||||
- dbt_expectations.expect_row_values_to_have_recent_data:
|
||||
datepart: day
|
||||
interval: 2
|
||||
- name: PROVIDER_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: PROVIDER
|
||||
description: '{{ doc("prices_provider")}}'
|
||||
- name: FACT_PRICES_OHLC_HOURLY_ID
|
||||
description: '{{ doc("pk") }}'
|
||||
- name: INSERTED_TIMESTAMP
|
||||
description: '{{ doc("inserted_timestamp") }}'
|
||||
- name: MODIFIED_TIMESTAMP
|
||||
description: '{{ doc("modified_timestamp") }}'
|
||||
@ -0,0 +1,38 @@
|
||||
{{ config(
|
||||
materialized = 'incremental',
|
||||
incremental_strategy = 'merge',
|
||||
merge_exclude_columns = ["inserted_timestamp"],
|
||||
unique_key = 'complete_native_asset_metadata_id',
|
||||
tags = ['silver_prices','scheduled_core']
|
||||
) }}
|
||||
|
||||
SELECT
|
||||
asset_id,
|
||||
symbol,
|
||||
NAME,
|
||||
decimals,
|
||||
blockchain,
|
||||
is_deprecated,
|
||||
provider,
|
||||
source,
|
||||
_inserted_timestamp,
|
||||
SYSDATE() AS inserted_timestamp,
|
||||
SYSDATE() AS modified_timestamp,
|
||||
{{ dbt_utils.generate_surrogate_key(['complete_native_asset_metadata_id']) }} AS complete_native_asset_metadata_id,
|
||||
'{{ invocation_id }}' AS _invocation_id
|
||||
FROM
|
||||
{{ ref(
|
||||
'bronze__complete_native_asset_metadata'
|
||||
) }}
|
||||
|
||||
{% if is_incremental() %}
|
||||
WHERE
|
||||
modified_timestamp >= (
|
||||
SELECT
|
||||
MAX(
|
||||
modified_timestamp
|
||||
)
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
{% endif %}
|
||||
@ -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
|
||||
42
models/silver/prices/silver__complete_native_prices.sql
Normal file
42
models/silver/prices/silver__complete_native_prices.sql
Normal file
@ -0,0 +1,42 @@
|
||||
{{ config(
|
||||
materialized = 'incremental',
|
||||
incremental_strategy = 'merge',
|
||||
merge_exclude_columns = ["inserted_timestamp"],
|
||||
unique_key = 'complete_native_prices_id',
|
||||
cluster_by = ['hour::DATE'],
|
||||
tags = ['silver_prices','scheduled_core']
|
||||
) }}
|
||||
|
||||
SELECT
|
||||
HOUR,
|
||||
asset_id,
|
||||
symbol,
|
||||
NAME,
|
||||
decimals,
|
||||
price,
|
||||
blockchain,
|
||||
is_imputed,
|
||||
is_deprecated,
|
||||
provider,
|
||||
source,
|
||||
_inserted_timestamp,
|
||||
SYSDATE() AS inserted_timestamp,
|
||||
SYSDATE() AS modified_timestamp,
|
||||
{{ dbt_utils.generate_surrogate_key(['complete_native_prices_id']) }} AS complete_native_prices_id,
|
||||
'{{ invocation_id }}' AS _invocation_id
|
||||
FROM
|
||||
{{ ref(
|
||||
'bronze__complete_native_prices'
|
||||
) }}
|
||||
|
||||
{% if is_incremental() %}
|
||||
WHERE
|
||||
modified_timestamp >= (
|
||||
SELECT
|
||||
MAX(
|
||||
modified_timestamp
|
||||
)
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
{% endif %}
|
||||
37
models/silver/prices/silver__complete_native_prices.yml
Normal file
37
models/silver/prices/silver__complete_native_prices.yml
Normal file
@ -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
|
||||
@ -0,0 +1,58 @@
|
||||
{{ config(
|
||||
materialized = 'incremental',
|
||||
incremental_strategy = 'merge',
|
||||
merge_exclude_columns = ["inserted_timestamp"],
|
||||
unique_key = 'complete_provider_asset_metadata_id',
|
||||
tags = ['silver_prices','scheduled_core']
|
||||
) }}
|
||||
|
||||
SELECT
|
||||
asset_id AS provider_asset_id,
|
||||
UPPER(
|
||||
CASE
|
||||
WHEN len(TRIM(token_address)) = 56 THEN token_address
|
||||
ELSE SPLIT_PART(
|
||||
token_address,
|
||||
'-',
|
||||
2
|
||||
)
|
||||
END
|
||||
) AS asset_issuer,
|
||||
UPPER(
|
||||
CASE
|
||||
WHEN token_address LIKE '%-%' THEN SPLIT_PART(
|
||||
token_address,
|
||||
'-',
|
||||
1
|
||||
)
|
||||
ELSE symbol
|
||||
END
|
||||
) AS asset_code,
|
||||
NAME,
|
||||
UPPER(symbol) AS symbol,
|
||||
platform,
|
||||
platform_id,
|
||||
provider,
|
||||
source,
|
||||
_inserted_timestamp,
|
||||
SYSDATE() AS inserted_timestamp,
|
||||
SYSDATE() AS modified_timestamp,
|
||||
{{ dbt_utils.generate_surrogate_key(['complete_provider_asset_metadata_id']) }} AS complete_provider_asset_metadata_id,
|
||||
'{{ invocation_id }}' AS _invocation_id
|
||||
FROM
|
||||
{{ ref(
|
||||
'bronze__complete_provider_asset_metadata'
|
||||
) }}
|
||||
WHERE
|
||||
len(asset_issuer) > 0
|
||||
|
||||
{% if is_incremental() %}
|
||||
AND modified_timestamp >= (
|
||||
SELECT
|
||||
MAX(
|
||||
modified_timestamp
|
||||
)
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
{% endif %}
|
||||
@ -0,0 +1,27 @@
|
||||
version: 2
|
||||
models:
|
||||
- name: silver__complete_provider_asset_metadata
|
||||
tests:
|
||||
- dbt_utils.unique_combination_of_columns:
|
||||
combination_of_columns:
|
||||
- PROVIDER_ASSET_ID
|
||||
- ASSET_ISSUER
|
||||
- ASSET_CODE
|
||||
- NAME
|
||||
- SYMBOL
|
||||
- PLATFORM
|
||||
- PLATFORM_ID
|
||||
- PROVIDER
|
||||
columns:
|
||||
- name: PROVIDER
|
||||
tests:
|
||||
- not_null
|
||||
- name: PROVIDER_ASSET_ID
|
||||
tests:
|
||||
- not_null
|
||||
- name: MODIFIED_TIMESTAMP
|
||||
tests:
|
||||
- not_null
|
||||
- name: COMPLETE_PROVIDER_ASSET_METADATA_ID
|
||||
tests:
|
||||
- unique
|
||||
47
models/silver/prices/silver__complete_provider_prices.sql
Normal file
47
models/silver/prices/silver__complete_provider_prices.sql
Normal file
@ -0,0 +1,47 @@
|
||||
{{ config(
|
||||
materialized = 'incremental',
|
||||
incremental_strategy = 'merge',
|
||||
merge_exclude_columns = ["inserted_timestamp"],
|
||||
unique_key = 'complete_provider_prices_id',
|
||||
cluster_by = ['recorded_hour::DATE','provider'],
|
||||
tags = ['silver_prices','scheduled_core']
|
||||
) }}
|
||||
|
||||
SELECT
|
||||
p.asset_id AS provider_asset_id,
|
||||
recorded_hour,
|
||||
OPEN,
|
||||
high,
|
||||
low,
|
||||
CLOSE,
|
||||
p.provider,
|
||||
p.source,
|
||||
p._inserted_timestamp,
|
||||
SYSDATE() AS inserted_timestamp,
|
||||
SYSDATE() AS modified_timestamp,
|
||||
{{ dbt_utils.generate_surrogate_key(['p.complete_provider_prices_id']) }} AS complete_provider_prices_id,
|
||||
'{{ invocation_id }}' AS _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
|
||||
25
models/silver/prices/silver__complete_provider_prices.yml
Normal file
25
models/silver/prices/silver__complete_provider_prices.yml
Normal file
@ -0,0 +1,25 @@
|
||||
version: 2
|
||||
models:
|
||||
- name: silver__complete_provider_prices
|
||||
tests:
|
||||
- dbt_utils.unique_combination_of_columns:
|
||||
combination_of_columns:
|
||||
- PROVIDER_ASSET_ID
|
||||
- RECORDED_HOUR
|
||||
- PROVIDER
|
||||
columns:
|
||||
- name: PROVIDER
|
||||
tests:
|
||||
- not_null
|
||||
- name: PROVIDER_ASSET_ID
|
||||
tests:
|
||||
- not_null
|
||||
- name: RECORDED_HOUR
|
||||
tests:
|
||||
- not_null
|
||||
- name: MODIFIED_TIMESTAMP
|
||||
tests:
|
||||
- not_null
|
||||
- name: COMPLETE_PROVIDER_PRICES_ID
|
||||
tests:
|
||||
- unique
|
||||
@ -0,0 +1,96 @@
|
||||
{{ config(
|
||||
materialized = 'incremental',
|
||||
incremental_strategy = 'merge',
|
||||
merge_exclude_columns = ["inserted_timestamp"],
|
||||
unique_key = 'complete_token_asset_metadata_id',
|
||||
tags = ['silver_prices','scheduled_core']
|
||||
) }}
|
||||
|
||||
WITH providers AS (
|
||||
|
||||
SELECT
|
||||
asset_id AS provider_asset_id,
|
||||
UPPER(
|
||||
CASE
|
||||
WHEN len(TRIM(token_address)) = 56 THEN token_address
|
||||
ELSE SPLIT_PART(
|
||||
token_address,
|
||||
'-',
|
||||
2
|
||||
)
|
||||
END
|
||||
) AS asset_issuer,
|
||||
UPPER(
|
||||
CASE
|
||||
WHEN token_address LIKE '%-%' THEN SPLIT_PART(
|
||||
token_address,
|
||||
'-',
|
||||
1
|
||||
)
|
||||
ELSE symbol
|
||||
END
|
||||
) AS asset_code,
|
||||
NAME,
|
||||
UPPER(symbol) AS symbol,
|
||||
decimals,
|
||||
blockchain,
|
||||
blockchain_name,
|
||||
blockchain_id,
|
||||
is_deprecated,
|
||||
provider,
|
||||
source,
|
||||
_inserted_timestamp
|
||||
FROM
|
||||
{{ ref(
|
||||
'bronze__complete_token_asset_metadata'
|
||||
) }} A
|
||||
WHERE
|
||||
len(asset_issuer) > 0
|
||||
|
||||
{% if is_incremental() %}
|
||||
AND modified_timestamp >= (
|
||||
SELECT
|
||||
MAX(
|
||||
modified_timestamp
|
||||
)
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
{% endif %}
|
||||
|
||||
qualify (ROW_NUMBER() over (PARTITION BY asset_issuer, asset_code
|
||||
ORDER BY
|
||||
provider, _inserted_timestamp DESC)) = 1
|
||||
)
|
||||
SELECT
|
||||
A.provider_asset_id,
|
||||
A.asset_issuer,
|
||||
A.asset_code,
|
||||
COALESCE(
|
||||
b.asset_id,
|
||||
b2.asset_id
|
||||
) AS asset_id,
|
||||
A.name,
|
||||
A.symbol,
|
||||
A.decimals,
|
||||
A.blockchain,
|
||||
A.blockchain_name,
|
||||
A.blockchain_id,
|
||||
A.is_deprecated,
|
||||
A.provider,
|
||||
A.source,
|
||||
A._inserted_timestamp,
|
||||
SYSDATE() AS inserted_timestamp,
|
||||
SYSDATE() AS modified_timestamp,
|
||||
{{ dbt_utils.generate_surrogate_key(['a.asset_issuer','a.asset_code']) }} AS complete_token_asset_metadata_id,
|
||||
'{{ invocation_id }}' AS _invocation_id
|
||||
FROM
|
||||
providers A
|
||||
LEFT JOIN {{ ref('silver__assets') }}
|
||||
b
|
||||
ON A.asset_issuer = b.asset_issuer
|
||||
AND A.asset_code = b.asset_code
|
||||
LEFT JOIN {{ ref('silver__assets') }}
|
||||
b2
|
||||
ON A.asset_issuer = b2.asset_issuer
|
||||
AND A.symbol = b2.asset_code
|
||||
@ -0,0 +1,32 @@
|
||||
version: 2
|
||||
models:
|
||||
- name: silver__complete_token_asset_metadata
|
||||
tests:
|
||||
- dbt_utils.unique_combination_of_columns:
|
||||
combination_of_columns:
|
||||
- ASSET_ISSUER
|
||||
- ASSET_CODE
|
||||
- BLOCKCHAIN
|
||||
|
||||
columns:
|
||||
- name: PROVIDER
|
||||
tests:
|
||||
- not_null
|
||||
- name: ASSET_ISSUER
|
||||
tests:
|
||||
- not_null
|
||||
- name: ASSET_CODE
|
||||
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
|
||||
105
models/silver/prices/silver__complete_token_prices.sql
Normal file
105
models/silver/prices/silver__complete_token_prices.sql
Normal file
@ -0,0 +1,105 @@
|
||||
{{ config(
|
||||
materialized = 'incremental',
|
||||
incremental_strategy = 'merge',
|
||||
merge_exclude_columns = ["inserted_timestamp"],
|
||||
unique_key = 'complete_token_prices_id',
|
||||
cluster_by = ['hour::DATE'],
|
||||
tags = ['silver_prices','scheduled_core']
|
||||
) }}
|
||||
|
||||
WITH providers AS (
|
||||
|
||||
SELECT
|
||||
HOUR,
|
||||
asset_id AS provider_asset_id,
|
||||
UPPER(
|
||||
CASE
|
||||
WHEN len(TRIM(token_address)) = 56 THEN token_address
|
||||
ELSE SPLIT_PART(
|
||||
token_address,
|
||||
'-',
|
||||
2
|
||||
)
|
||||
END
|
||||
) AS asset_issuer,
|
||||
UPPER(
|
||||
CASE
|
||||
WHEN token_address LIKE '%-%' THEN SPLIT_PART(
|
||||
token_address,
|
||||
'-',
|
||||
1
|
||||
)
|
||||
ELSE symbol
|
||||
END
|
||||
) AS asset_code,
|
||||
NAME,
|
||||
UPPER(symbol) AS symbol,
|
||||
decimals,
|
||||
price,
|
||||
blockchain,
|
||||
blockchain_name,
|
||||
blockchain_id,
|
||||
is_imputed,
|
||||
is_deprecated,
|
||||
provider,
|
||||
source,
|
||||
_inserted_timestamp
|
||||
FROM
|
||||
{{ ref(
|
||||
'bronze__complete_token_prices'
|
||||
) }}
|
||||
p
|
||||
WHERE
|
||||
len(asset_issuer) > 0
|
||||
|
||||
{% if is_incremental() %}
|
||||
AND modified_timestamp >= (
|
||||
SELECT
|
||||
MAX(
|
||||
modified_timestamp
|
||||
)
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
{% endif %}
|
||||
|
||||
qualify (ROW_NUMBER() over (PARTITION BY asset_issuer, asset_code, HOUR
|
||||
ORDER BY
|
||||
provider, _inserted_timestamp DESC)) = 1
|
||||
)
|
||||
SELECT
|
||||
A.hour,
|
||||
A.provider_asset_id,
|
||||
A.asset_issuer,
|
||||
A.asset_code,
|
||||
COALESCE(
|
||||
b.asset_id,
|
||||
b2.asset_id
|
||||
) AS asset_id,
|
||||
A.name,
|
||||
A.symbol,
|
||||
A.decimals,
|
||||
A.price,
|
||||
A.blockchain,
|
||||
A.blockchain_name,
|
||||
A.blockchain_id,
|
||||
A.is_imputed,
|
||||
A.is_deprecated,
|
||||
A.provider,
|
||||
A.source,
|
||||
A._inserted_timestamp,
|
||||
SYSDATE() AS inserted_timestamp,
|
||||
SYSDATE() AS modified_timestamp,
|
||||
{{ dbt_utils.generate_surrogate_key(['a.asset_code','a.asset_issuer','a.HOUR']) }} AS complete_token_prices_id,
|
||||
'{{ invocation_id }}' AS _invocation_id
|
||||
FROM
|
||||
providers A
|
||||
LEFT JOIN {{ ref('silver__assets') }}
|
||||
b
|
||||
ON A.asset_issuer = b.asset_issuer
|
||||
AND A.asset_code = b.asset_code
|
||||
LEFT JOIN {{ ref('silver__assets') }}
|
||||
b2
|
||||
ON A.asset_issuer = b2.asset_issuer
|
||||
AND A.symbol = b.asset_code
|
||||
AND b.asset_id IS NULL
|
||||
42
models/silver/prices/silver__complete_token_prices.yml
Normal file
42
models/silver/prices/silver__complete_token_prices.yml
Normal file
@ -0,0 +1,42 @@
|
||||
version: 2
|
||||
models:
|
||||
- name: silver__complete_token_prices
|
||||
tests:
|
||||
- dbt_utils.unique_combination_of_columns:
|
||||
combination_of_columns:
|
||||
- HOUR
|
||||
- ASSET_ISSUER
|
||||
- ASSET_CODE
|
||||
|
||||
columns:
|
||||
- name: HOUR
|
||||
tests:
|
||||
- not_null
|
||||
- name: ASSET_ISSUER
|
||||
tests:
|
||||
- not_null
|
||||
- name: ASSET_CODE
|
||||
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
|
||||
@ -26,6 +26,12 @@ sources:
|
||||
tables:
|
||||
- name: number_sequence
|
||||
- name: labels_combined
|
||||
- name: complete_native_asset_metadata
|
||||
- name: complete_native_prices
|
||||
- name: complete_provider_asset_metadata
|
||||
- name: complete_provider_prices
|
||||
- name: complete_token_asset_metadata
|
||||
- name: complete_token_prices
|
||||
- name: github_actions
|
||||
database: STELLAR
|
||||
schema: github_actions
|
||||
|
||||
Loading…
Reference in New Issue
Block a user