diff --git a/models/core/core__fact_governance_votes.sql b/models/core/core__fact_governance_votes.sql index 6eba3dd..e6fe5d8 100644 --- a/models/core/core__fact_governance_votes.sql +++ b/models/core/core__fact_governance_votes.sql @@ -17,5 +17,6 @@ SELECT voter, proposal_id, vote_option, - vote_weight + vote_weight, + memo FROM {{ ref('silver__governance_votes') }} \ No newline at end of file diff --git a/models/core/core__fact_governance_votes.yml b/models/core/core__fact_governance_votes.yml index b1c53b3..af2be1f 100644 --- a/models/core/core__fact_governance_votes.yml +++ b/models/core/core__fact_governance_votes.yml @@ -29,5 +29,9 @@ models: - dbt_expectations.expect_column_to_exist - name: VOTE_OPTION description: "{{ doc('vote_option') }}" + tests: + - dbt_expectations.expect_column_to_exist + - name: MEMO + description: "{{ doc('memo') }}" tests: - dbt_expectations.expect_column_to_exist \ No newline at end of file diff --git a/models/descriptions/memo.md b/models/descriptions/memo.md new file mode 100644 index 0000000..f371689 --- /dev/null +++ b/models/descriptions/memo.md @@ -0,0 +1,5 @@ +{% docs memo %} + +The memo the user input into the transaction body + +{% enddocs %} \ No newline at end of file diff --git a/models/silver/silver__governance_votes.sql b/models/silver/silver__governance_votes.sql index 0772383..08cded5 100644 --- a/models/silver/silver__governance_votes.sql +++ b/models/silver/silver__governance_votes.sql @@ -5,126 +5,143 @@ cluster_by = ['block_timestamp::DATE'], ) }} -WITH - -{% if is_incremental() %} -max_date AS ( +WITH base_tx AS ( SELECT - MAX( - _inserted_timestamp - ) _inserted_timestamp + block_id, + block_timestamp, + tx_id, + tx_succeeded, + tx_body :memo :: STRING AS memo, + tx_body :messages AS messages, + _inserted_timestamp FROM - {{ this }} -), -{% endif %} + {{ ref('silver__transactions') }} +{% if is_incremental() %} +WHERE + _inserted_timestamp >= ( + SELECT + MAX( + _inserted_timestamp + ) + FROM + {{ this }} + ) +{% endif %} +), +memo_text AS ( + SELECT + tx_id, + memo + FROM + base_tx + WHERE + memo IS NOT NULL +), weighted_votes AS ( SELECT block_id, block_timestamp, tx_id, tx_succeeded, - tx_body, + messages, path :: STRING AS _path, _inserted_timestamp FROM - {{ ref('silver__transactions') }}, + base_tx, LATERAL FLATTEN ( - input => tx_body :messages, + input => messages, recursive => TRUE ) b WHERE key = '@type' AND VALUE :: STRING = '/cosmos.gov.v1beta1.MsgVoteWeighted' - -{% if is_incremental() %} -AND _inserted_timestamp >= ( +), +pre_final AS ( SELECT - MAX( - _inserted_timestamp - ) - FROM - max_date -) -{% endif %} -) -SELECT - block_id, - block_timestamp, - tx_id, - tx_succeeded, - path :: STRING AS _path, - this :proposal_id :: STRING AS proposal_id, - this :voter :: STRING AS voter, - CASE - WHEN this :option :: STRING = 'VOTE_OPTION_YES' THEN 1 - WHEN this :option :: STRING = 'VOTE_OPTION_ABSTAIN' THEN 2 - WHEN this :option :: STRING = 'VOTE_OPTION_NO' THEN 3 - WHEN this :option :: STRING = 'VOTE_OPTION_NO_WITH_VETO' THEN 4 - ELSE this :option - END AS vote_option, - 1.000 AS vote_weight, - _inserted_timestamp, - concat_ws( - '-', + block_id, + block_timestamp, tx_id, - proposal_id, - voter, - vote_option, - _path - ) AS _unique_key -FROM - {{ ref('silver__transactions') }}, - LATERAL FLATTEN ( - input => tx_body :messages, - recursive => TRUE - ) b -WHERE - key = '@type' - AND VALUE :: STRING = '/cosmos.gov.v1beta1.MsgVote' - -{% if is_incremental() %} -AND _inserted_timestamp >= ( - SELECT - MAX( - _inserted_timestamp - ) + tx_succeeded, + path :: STRING AS _path, + this :proposal_id :: STRING AS proposal_id, + this :voter :: STRING AS voter, + CASE + WHEN this :option :: STRING = 'VOTE_OPTION_YES' THEN 1 + WHEN this :option :: STRING = 'VOTE_OPTION_ABSTAIN' THEN 2 + WHEN this :option :: STRING = 'VOTE_OPTION_NO' THEN 3 + WHEN this :option :: STRING = 'VOTE_OPTION_NO_WITH_VETO' THEN 4 + ELSE this :option + END AS vote_option, + 1.000 AS vote_weight, + _inserted_timestamp, + concat_ws( + '-', + tx_id, + proposal_id, + voter, + vote_option, + _path + ) AS _unique_key FROM - max_date + base_tx, + LATERAL FLATTEN ( + input => messages, + recursive => TRUE + ) b + WHERE + key = '@type' + AND VALUE :: STRING = '/cosmos.gov.v1beta1.MsgVote' + UNION ALL + SELECT + block_id, + block_timestamp, + tx_id, + tx_succeeded, + _path, + b.value :proposal_id :: NUMBER AS proposal_id, + b.value :voter :: STRING AS voter, + CASE + WHEN o.value :option :: STRING = 'VOTE_OPTION_YES' THEN 1 + WHEN o.value :option :: STRING = 'VOTE_OPTION_ABSTAIN' THEN 2 + WHEN o.value :option :: STRING = 'VOTE_OPTION_NO' THEN 3 + WHEN o.value :option :: STRING = 'VOTE_OPTION_NO_WITH_VETO' THEN 4 + ELSE o.value :option + END AS vote_option, + o.value :weight :: FLOAT AS vote_weight, + _inserted_timestamp, + concat_ws( + '-', + tx_id, + proposal_id, + voter, + vote_option, + _path + ) AS _unique_key + FROM + weighted_votes, + LATERAL FLATTEN ( + input => messages + ) b, + LATERAL FLATTEN ( + input => b.value :options + ) o ) -{% endif %} -UNION ALL SELECT block_id, block_timestamp, - tx_id, + m.tx_id, tx_succeeded, _path, - b.value :proposal_id :: NUMBER AS proposal_id, - b.value :voter :: STRING AS voter, - CASE - WHEN o.value :option :: STRING = 'VOTE_OPTION_YES' THEN 1 - WHEN o.value :option :: STRING = 'VOTE_OPTION_ABSTAIN' THEN 2 - WHEN o.value :option :: STRING = 'VOTE_OPTION_NO' THEN 3 - WHEN o.value :option :: STRING = 'VOTE_OPTION_NO_WITH_VETO' THEN 4 - ELSE o.value :option - END AS vote_option, - o.value :weight :: FLOAT AS vote_weight, + proposal_id, + voter, + vote_option, + vote_weight, + memo, _inserted_timestamp, - concat_ws( - '-', - tx_id, - proposal_id, - voter, - vote_option, - _path - ) AS _unique_key + _unique_key FROM - weighted_votes, - LATERAL FLATTEN ( - input => tx_body :messages - ) b, - LATERAL FLATTEN ( - input => b.value :options - ) o + pre_final p + LEFT OUTER JOIN memo_text m + ON p.tx_id = m.tx_id diff --git a/models/silver/silver__governance_votes.yml b/models/silver/silver__governance_votes.yml index a09e5c8..f6a7945 100644 --- a/models/silver/silver__governance_votes.yml +++ b/models/silver/silver__governance_votes.yml @@ -80,4 +80,11 @@ models: - dbt_expectations.expect_column_values_to_be_in_type_list: column_type_list: - NUMBER - - FLOAT \ No newline at end of file + - FLOAT + - name: MEMO + description: "{{ doc('memo') }}" + tests: + - dbt_expectations.expect_column_values_to_be_in_type_list: + column_type_list: + - STRING + - VARCHAR \ No newline at end of file