From 041626d9bcd0a2f8eccc562bfd1a8d2ae8bc6afe Mon Sep 17 00:00:00 2001 From: Jack Forgash <58153492+forgxyz@users.noreply.github.com> Date: Tue, 17 Jun 2025 09:26:38 -0600 Subject: [PATCH] AN-6276/add gold view to snag/transaction_entries workflow (#454) * add gold view to snag/transaction_entries workflow * add sortDir param * backfill * upd gha to hourly --- .../dbt_run_scheduled_streamline_non_core.yml | 4 +- ...line_external_points_balances_realtime.yml | 4 +- .../dbt_run_streamline_external_realtime.yml | 4 +- models/descriptions/DATA.md | 5 ++ models/descriptions/INDEX.md | 5 ++ models/descriptions/_inserted_timestamp.md | 2 +- models/descriptions/account_id.md | 5 ++ models/descriptions/amount.md | 2 +- models/descriptions/amount_end.md | 5 ++ models/descriptions/amount_start.md | 5 ++ models/descriptions/created_at.md | 5 ++ models/descriptions/direction.md | 2 +- models/descriptions/entry_id.md | 5 ++ models/descriptions/idempotency_key.md | 5 ++ models/descriptions/organization_id.md | 5 ++ models/descriptions/partition_key.md | 5 ++ models/descriptions/reward_points_spend_id.md | 5 ++ models/descriptions/rule_description.md | 5 ++ models/descriptions/rule_id.md | 5 ++ models/descriptions/rule_metadata.md | 5 ++ models/descriptions/rule_name.md | 5 ++ models/descriptions/rule_type.md | 5 ++ .../descriptions/transaction_description.md | 5 ++ models/descriptions/transaction_id.md | 5 ++ models/descriptions/transaction_type.md | 5 ++ models/descriptions/user_id.md | 5 ++ models/descriptions/user_wallet_address.md | 5 ++ models/descriptions/website_id.md | 5 ++ .../rewards__fact_transaction_entries.sql | 25 ++++++++++ .../rewards__fact_transaction_entries.yml | 46 +++++++++++++++++++ models/sources.yml | 9 +++- .../silver_api__reward_points_spend.sql | 29 +----------- .../silver_api__reward_points_spend.yml | 30 ------------ .../silver_api__transaction_entries.sql | 27 ++++++++++- ...reamline__transaction_entries_realtime.sql | 2 +- .../tests__unique_address_count_threshold.sql | 2 +- 36 files changed, 228 insertions(+), 70 deletions(-) create mode 100644 models/descriptions/DATA.md create mode 100644 models/descriptions/INDEX.md create mode 100644 models/descriptions/account_id.md create mode 100644 models/descriptions/amount_end.md create mode 100644 models/descriptions/amount_start.md create mode 100644 models/descriptions/created_at.md create mode 100644 models/descriptions/entry_id.md create mode 100644 models/descriptions/idempotency_key.md create mode 100644 models/descriptions/organization_id.md create mode 100644 models/descriptions/partition_key.md create mode 100644 models/descriptions/reward_points_spend_id.md create mode 100644 models/descriptions/rule_description.md create mode 100644 models/descriptions/rule_id.md create mode 100644 models/descriptions/rule_metadata.md create mode 100644 models/descriptions/rule_name.md create mode 100644 models/descriptions/rule_type.md create mode 100644 models/descriptions/transaction_description.md create mode 100644 models/descriptions/transaction_id.md create mode 100644 models/descriptions/transaction_type.md create mode 100644 models/descriptions/user_id.md create mode 100644 models/descriptions/user_wallet_address.md create mode 100644 models/descriptions/website_id.md create mode 100644 models/gold/rewards/rewards__fact_transaction_entries.sql create mode 100644 models/gold/rewards/rewards__fact_transaction_entries.yml diff --git a/.github/workflows/dbt_run_scheduled_streamline_non_core.yml b/.github/workflows/dbt_run_scheduled_streamline_non_core.yml index 3b6cb5a..65ac3a1 100644 --- a/.github/workflows/dbt_run_scheduled_streamline_non_core.yml +++ b/.github/workflows/dbt_run_scheduled_streamline_non_core.yml @@ -4,8 +4,8 @@ run-name: dbt_run_scheduled_streamline_non_core on: workflow_dispatch: schedule: - # Daily at 04:00 UTC - - cron: "0 4 * * *" + # Daily at 06:00 UTC + - cron: "0 6 * * *" env: SLACK_WEBHOOK_URL: "${{ secrets.SLACK_WEBHOOK_URL }}" diff --git a/.github/workflows/dbt_run_streamline_external_points_balances_realtime.yml b/.github/workflows/dbt_run_streamline_external_points_balances_realtime.yml index 21c2c3b..65f5197 100644 --- a/.github/workflows/dbt_run_streamline_external_points_balances_realtime.yml +++ b/.github/workflows/dbt_run_streamline_external_points_balances_realtime.yml @@ -7,8 +7,8 @@ description: | on: workflow_dispatch: schedule: - # Daily at 0, 1, 2, 3 UTC - - cron: "0 0,1,2,3 * * *" + # Daily at 0, 1, 2, 3, 4 UTC + - cron: "0 0,1,2,3,4 * * *" env: USE_VARS: "${{ vars.USE_VARS }}" diff --git a/.github/workflows/dbt_run_streamline_external_realtime.yml b/.github/workflows/dbt_run_streamline_external_realtime.yml index a6776d4..1f77f5f 100644 --- a/.github/workflows/dbt_run_streamline_external_realtime.yml +++ b/.github/workflows/dbt_run_streamline_external_realtime.yml @@ -6,8 +6,8 @@ description: | on: workflow_dispatch: schedule: - # Daily at 00:00 UTC - - cron: "0 0 * * *" + # Runs hourly + - cron: "0 * * * *" env: USE_VARS: "${{ vars.USE_VARS }}" diff --git a/models/descriptions/DATA.md b/models/descriptions/DATA.md new file mode 100644 index 0000000..cdd1587 --- /dev/null +++ b/models/descriptions/DATA.md @@ -0,0 +1,5 @@ +{% docs DATA %} + +Remaining raw data from the transaction entry, with key fields removed. + +{% enddocs %} \ No newline at end of file diff --git a/models/descriptions/INDEX.md b/models/descriptions/INDEX.md new file mode 100644 index 0000000..ce08d54 --- /dev/null +++ b/models/descriptions/INDEX.md @@ -0,0 +1,5 @@ +{% docs INDEX %} + +Index of the transaction entry within the batch or partition. + +{% enddocs %} \ No newline at end of file diff --git a/models/descriptions/_inserted_timestamp.md b/models/descriptions/_inserted_timestamp.md index 4cc7b2a..258a777 100644 --- a/models/descriptions/_inserted_timestamp.md +++ b/models/descriptions/_inserted_timestamp.md @@ -1,5 +1,5 @@ {% docs _inserted_timestamp %} -Time the record was inserted into snowflake +Time the record was inserted into the warehouse. {% enddocs %} \ No newline at end of file diff --git a/models/descriptions/account_id.md b/models/descriptions/account_id.md new file mode 100644 index 0000000..8ed0916 --- /dev/null +++ b/models/descriptions/account_id.md @@ -0,0 +1,5 @@ +{% docs account_id %} + +Loyalty account identifier involved in the transaction. + +{% enddocs %} \ No newline at end of file diff --git a/models/descriptions/amount.md b/models/descriptions/amount.md index 0c82469..ed2f465 100644 --- a/models/descriptions/amount.md +++ b/models/descriptions/amount.md @@ -1,5 +1,5 @@ {% docs amount %} -The amount of the asset involved in the transaction. +Number of points transferred in the transaction. {% enddocs %} \ No newline at end of file diff --git a/models/descriptions/amount_end.md b/models/descriptions/amount_end.md new file mode 100644 index 0000000..8718e13 --- /dev/null +++ b/models/descriptions/amount_end.md @@ -0,0 +1,5 @@ +{% docs amount_end %} + +Ending balance of the loyalty account after the transaction. + +{% enddocs %} \ No newline at end of file diff --git a/models/descriptions/amount_start.md b/models/descriptions/amount_start.md new file mode 100644 index 0000000..e2cb774 --- /dev/null +++ b/models/descriptions/amount_start.md @@ -0,0 +1,5 @@ +{% docs amount_start %} + +Starting balance of the loyalty account before the transaction. + +{% enddocs %} \ No newline at end of file diff --git a/models/descriptions/created_at.md b/models/descriptions/created_at.md new file mode 100644 index 0000000..776bae9 --- /dev/null +++ b/models/descriptions/created_at.md @@ -0,0 +1,5 @@ +{% docs created_at %} + +Timestamp when the transaction entry was created. + +{% enddocs %} \ No newline at end of file diff --git a/models/descriptions/direction.md b/models/descriptions/direction.md index 4931581..fb97832 100644 --- a/models/descriptions/direction.md +++ b/models/descriptions/direction.md @@ -1,5 +1,5 @@ {% docs direction %} -For bridging transactions, inbound refers to tokens bridged to the Flow blockchain, while outbound indicated tokens were sent from Flow to another (i.e. to Ethereum, BSC, etc.). +Direction of the points transfer (e.g., debit or credit). {% enddocs %} \ No newline at end of file diff --git a/models/descriptions/entry_id.md b/models/descriptions/entry_id.md new file mode 100644 index 0000000..8b77938 --- /dev/null +++ b/models/descriptions/entry_id.md @@ -0,0 +1,5 @@ +{% docs entry_id %} + +Unique identifier for the transaction entry record. + +{% enddocs %} \ No newline at end of file diff --git a/models/descriptions/idempotency_key.md b/models/descriptions/idempotency_key.md new file mode 100644 index 0000000..f47ec82 --- /dev/null +++ b/models/descriptions/idempotency_key.md @@ -0,0 +1,5 @@ +{% docs idempotency_key %} + +Key used to ensure idempotency of the transaction entry. + +{% enddocs %} \ No newline at end of file diff --git a/models/descriptions/organization_id.md b/models/descriptions/organization_id.md new file mode 100644 index 0000000..485d119 --- /dev/null +++ b/models/descriptions/organization_id.md @@ -0,0 +1,5 @@ +{% docs organization_id %} + +Identifier for the organization associated with the transaction. + +{% enddocs %} \ No newline at end of file diff --git a/models/descriptions/partition_key.md b/models/descriptions/partition_key.md new file mode 100644 index 0000000..672d17b --- /dev/null +++ b/models/descriptions/partition_key.md @@ -0,0 +1,5 @@ +{% docs partition_key %} + +Partition key used for efficient querying and incremental loading. + +{% enddocs %} \ No newline at end of file diff --git a/models/descriptions/reward_points_spend_id.md b/models/descriptions/reward_points_spend_id.md new file mode 100644 index 0000000..2f74729 --- /dev/null +++ b/models/descriptions/reward_points_spend_id.md @@ -0,0 +1,5 @@ +{% docs reward_points_spend_id %} + +Surrogate key for the reward points spend event, generated from entry_id and partition_key. + +{% enddocs %} \ No newline at end of file diff --git a/models/descriptions/rule_description.md b/models/descriptions/rule_description.md new file mode 100644 index 0000000..a591cc8 --- /dev/null +++ b/models/descriptions/rule_description.md @@ -0,0 +1,5 @@ +{% docs rule_description %} + +Description of the loyalty rule applied to the transaction. + +{% enddocs %} \ No newline at end of file diff --git a/models/descriptions/rule_id.md b/models/descriptions/rule_id.md new file mode 100644 index 0000000..5b3a814 --- /dev/null +++ b/models/descriptions/rule_id.md @@ -0,0 +1,5 @@ +{% docs rule_id %} + +Identifier for the loyalty rule applied to the transaction. + +{% enddocs %} \ No newline at end of file diff --git a/models/descriptions/rule_metadata.md b/models/descriptions/rule_metadata.md new file mode 100644 index 0000000..bd6aaa9 --- /dev/null +++ b/models/descriptions/rule_metadata.md @@ -0,0 +1,5 @@ +{% docs rule_metadata %} + +Metadata associated with the loyalty rule applied to the transaction. + +{% enddocs %} \ No newline at end of file diff --git a/models/descriptions/rule_name.md b/models/descriptions/rule_name.md new file mode 100644 index 0000000..fe51d6b --- /dev/null +++ b/models/descriptions/rule_name.md @@ -0,0 +1,5 @@ +{% docs rule_name %} + +Name of the loyalty rule applied to the transaction. + +{% enddocs %} \ No newline at end of file diff --git a/models/descriptions/rule_type.md b/models/descriptions/rule_type.md new file mode 100644 index 0000000..4c6d596 --- /dev/null +++ b/models/descriptions/rule_type.md @@ -0,0 +1,5 @@ +{% docs rule_type %} + +Type of the loyalty rule applied to the transaction. + +{% enddocs %} \ No newline at end of file diff --git a/models/descriptions/transaction_description.md b/models/descriptions/transaction_description.md new file mode 100644 index 0000000..7ad5261 --- /dev/null +++ b/models/descriptions/transaction_description.md @@ -0,0 +1,5 @@ +{% docs transaction_description %} + +Description of the loyalty transaction. + +{% enddocs %} \ No newline at end of file diff --git a/models/descriptions/transaction_id.md b/models/descriptions/transaction_id.md new file mode 100644 index 0000000..1d25316 --- /dev/null +++ b/models/descriptions/transaction_id.md @@ -0,0 +1,5 @@ +{% docs transaction_id %} + +Identifier for the loyalty transaction. + +{% enddocs %} \ No newline at end of file diff --git a/models/descriptions/transaction_type.md b/models/descriptions/transaction_type.md new file mode 100644 index 0000000..533b658 --- /dev/null +++ b/models/descriptions/transaction_type.md @@ -0,0 +1,5 @@ +{% docs transaction_type %} + +Type of the loyalty transaction (e.g., earn, spend). + +{% enddocs %} \ No newline at end of file diff --git a/models/descriptions/user_id.md b/models/descriptions/user_id.md new file mode 100644 index 0000000..a985b3a --- /dev/null +++ b/models/descriptions/user_id.md @@ -0,0 +1,5 @@ +{% docs user_id %} + +User identifier associated with the loyalty account. + +{% enddocs %} \ No newline at end of file diff --git a/models/descriptions/user_wallet_address.md b/models/descriptions/user_wallet_address.md new file mode 100644 index 0000000..1281561 --- /dev/null +++ b/models/descriptions/user_wallet_address.md @@ -0,0 +1,5 @@ +{% docs user_wallet_address %} + +Wallet address of the user associated with the loyalty account. + +{% enddocs %} \ No newline at end of file diff --git a/models/descriptions/website_id.md b/models/descriptions/website_id.md new file mode 100644 index 0000000..830098c --- /dev/null +++ b/models/descriptions/website_id.md @@ -0,0 +1,5 @@ +{% docs website_id %} + +Identifier for the website associated with the transaction. + +{% enddocs %} \ No newline at end of file diff --git a/models/gold/rewards/rewards__fact_transaction_entries.sql b/models/gold/rewards/rewards__fact_transaction_entries.sql new file mode 100644 index 0000000..3bb9d43 --- /dev/null +++ b/models/gold/rewards/rewards__fact_transaction_entries.sql @@ -0,0 +1,25 @@ +{{ config( + materialized = 'view', + tags = ['streamline_non_core'] +)}} + +SELECT + entry_id, + created_at, + direction, + amount, + amount_start, + amount_end, + account_id, + user_id, + user_wallet_address, + transaction_id, + DATA, + partition_key, + INDEX, + _inserted_timestamp, + reward_points_spend_id AS fact_transaction_entries_id, + inserted_timestamp, + modified_timestamp +FROM + {{ ref('silver_api__reward_points_spend') }} diff --git a/models/gold/rewards/rewards__fact_transaction_entries.yml b/models/gold/rewards/rewards__fact_transaction_entries.yml new file mode 100644 index 0000000..caa07a6 --- /dev/null +++ b/models/gold/rewards/rewards__fact_transaction_entries.yml @@ -0,0 +1,46 @@ +version: 2 + +models: + - name: rewards__fact_transaction_entries + description: "individual flow points transfer events flattened from responses from the snag transaction entries endpoint" + tests: + - dbt_utils.recency: + datepart: day + field: INSERTED_TIMESTAMP + interval: 1 + + columns: + - name: ENTRY_ID + description: '{{ doc("entry_id") }}' + - name: CREATED_AT + description: '{{ doc("created_at") }}' + - name: DIRECTION + description: '{{ doc("direction") }}' + - name: AMOUNT + description: '{{ doc("amount") }}' + - name: AMOUNT_START + description: '{{ doc("amount_start") }}' + - name: AMOUNT_END + description: '{{ doc("amount_end") }}' + - name: ACCOUNT_ID + description: '{{ doc("account_id") }}' + - name: USER_ID + description: '{{ doc("user_id") }}' + - name: USER_WALLET_ADDRESS + description: '{{ doc("user_wallet_address") }}' + - name: TRANSACTION_ID + description: '{{ doc("transaction_id") }}' + - name: DATA + description: '{{ doc("DATA") }}' + - name: PARTITION_KEY + description: '{{ doc("partition_key") }}' + - name: INDEX + description: '{{ doc("INDEX") }}' + - name: _INSERTED_TIMESTAMP + description: '{{ doc("_inserted_timestamp") }}' + - name: FACT_TRANSACTION_ENTRIES_ID + description: '{{ doc("pk_id") }}' + - name: INSERTED_TIMESTAMP + description: '{{ doc("inserted_timestamp") }}' + - name: MODIFIED_TIMESTAMP + description: '{{ doc("modified_timestamp") }}' diff --git a/models/sources.yml b/models/sources.yml index fc8e9de..64bed45 100644 --- a/models/sources.yml +++ b/models/sources.yml @@ -191,4 +191,11 @@ sources: - name: silver schema: silver tables: - - name: nft_topshot_metadata \ No newline at end of file + - name: nft_topshot_metadata + + - name: flow_seeds + database: | + {{ "FLOW" if target.database == 'FLOW' else "FLOW_DEV" }} + schema: seeds + tables: + - name: transaction_entries diff --git a/models/streamline/external/snag/transaction_entries/silver_api__reward_points_spend.sql b/models/streamline/external/snag/transaction_entries/silver_api__reward_points_spend.sql index 9e207c9..8d89d8a 100644 --- a/models/streamline/external/snag/transaction_entries/silver_api__reward_points_spend.sql +++ b/models/streamline/external/snag/transaction_entries/silver_api__reward_points_spend.sql @@ -5,7 +5,7 @@ merge_exclude_columns = ["inserted_timestamp"], cluster_by = ['_inserted_timestamp :: DATE'], post_hook = [ "ALTER TABLE {{ this }} ADD SEARCH OPTIMIZATION on equality(user_wallet_address)" ], - tags = ['rewards_points_spend'] + tags = ['rewards_points_spend', 'streamline_non_core'] ) }} WITH silver_responses AS ( @@ -43,38 +43,13 @@ SELECT DATA :loyaltyAccountStartAmount :: NUMBER AS amount_start, DATA :loyaltyAccountEndAmount :: NUMBER AS amount_end, - DATA :idempotencyKey :: STRING AS idempotency_key, - DATA :organizationId :: STRING AS organization_id, - DATA :websiteId :: STRING AS website_id, - DATA :loyaltyAccountId :: STRING AS account_id, DATA :loyaltyAccount :user :id :: STRING AS user_id, DATA :loyaltyAccount :user :walletAddress :: STRING AS user_wallet_address, DATA :loyaltyTransactionId :: STRING AS transaction_id, - DATA :loyaltyTransaction :description :: STRING AS transaction_description, - DATA :loyaltyTransaction :type :: STRING AS transaction_type, - DATA :loyaltyTransaction :loyaltyRule :id :: STRING AS rule_id, - DATA :loyaltyTransaction :loyaltyRule :type :: STRING AS rule_type, - DATA :loyaltyTransaction :loyaltyRule :name :: STRING AS rule_name, - DATA :loyaltyTransaction :loyaltyRule :description :: STRING AS rule_description, - DATA :loyaltyTransaction :loyaltyRule :metadata :: variant AS rule_metadata, - - OBJECT_DELETE( - DATA, - 'amount', - 'createdAt', - 'direction', - 'idempotencyKey', - 'loyaltyAccount', - 'loyaltyAccountId', - 'loyaltyAccountEndAmount', - 'loyaltyAccountStartAmount', - 'loyaltyTransactionId', - 'organizationId', - 'websiteId' - ) AS DATA, + DATA, partition_key, INDEX, _inserted_timestamp, diff --git a/models/streamline/external/snag/transaction_entries/silver_api__reward_points_spend.yml b/models/streamline/external/snag/transaction_entries/silver_api__reward_points_spend.yml index 9f44814..f84e735 100644 --- a/models/streamline/external/snag/transaction_entries/silver_api__reward_points_spend.yml +++ b/models/streamline/external/snag/transaction_entries/silver_api__reward_points_spend.yml @@ -35,16 +35,6 @@ models: tests: - not_null - - name: idempotency_key - - - name: organization_id - tests: - - not_null - - - name: website_id - tests: - - not_null - - name: account_id tests: - not_null @@ -62,26 +52,6 @@ models: - not_null - unique - - name: transaction_description - - - name: transaction_type - tests: - - not_null - - - name: rule_id - tests: - - not_null - - - name: rule_type - tests: - - not_null - - - name: rule_name - - - name: rule_description - - - name: rule_metadata - - name: data - name: partition_key diff --git a/models/streamline/external/snag/transaction_entries/silver_api__transaction_entries.sql b/models/streamline/external/snag/transaction_entries/silver_api__transaction_entries.sql index 73419c7..ab93a2b 100644 --- a/models/streamline/external/snag/transaction_entries/silver_api__transaction_entries.sql +++ b/models/streamline/external/snag/transaction_entries/silver_api__transaction_entries.sql @@ -6,9 +6,33 @@ incremental_strategy = 'merge', merge_exclude_columns = ["inserted_timestamp"], cluster_by = ['_inserted_timestamp :: DATE'], - tags = ['rewards_points_spend'] + tags = ['rewards_points_spend', 'streamline_non_core'] ) }} +{% if var('STOREFRONT_INITIAL_RUN', false) %} + +SELECT + partition_key, + NULL AS entry_count, + NULL AS starting_after, + NULL AS api_limit, + NULL AS first_entry_id, + NULL AS last_entry_id, + TRY_PARSE_JSON(DATA) :createdAt :: timestamp_ntz AS created_at, + TRY_PARSE_JSON(DATA) :id :: STRING AS entry_id, + index_in_batch :: INTEGER AS INDEX, + TRY_PARSE_JSON(DATA) AS DATA, + _inserted_timestamp :: timestamp_ntz AS _inserted_timestamp, + {{ dbt_utils.generate_surrogate_key( + ['entry_id', 'partition_key'] + ) }} AS transaction_entries_id, + SYSDATE() AS inserted_timestamp, + SYSDATE() AS modified_timestamp, + '{{ invocation_id }}' AS _invocation_id +FROM + {{ source('flow_seeds', 'transaction_entries') }} + +{% else %} WITH bronze AS ( SELECT @@ -61,3 +85,4 @@ FROM input => DATA :data :: ARRAY ) +{% endif %} diff --git a/models/streamline/external/snag/transaction_entries/streamline__transaction_entries_realtime.sql b/models/streamline/external/snag/transaction_entries/streamline__transaction_entries_realtime.sql index 2ffd178..4fab78f 100644 --- a/models/streamline/external/snag/transaction_entries/streamline__transaction_entries_realtime.sql +++ b/models/streamline/external/snag/transaction_entries/streamline__transaction_entries_realtime.sql @@ -55,7 +55,7 @@ SELECT DATE_PART('EPOCH', SYSDATE()) :: INTEGER AS partition_key, {{ target.database }}.live.udf_api( 'GET', - '{Service}/api/loyalty/transaction_entries' || '?organizationId=' || '{organization_id}' || '&websiteId=' || '{website_id}' || '&limit=' || api_limit{% if not var('STOREFRONT_INITIAL_RUN', false) %} || '&startingAfter=' || '{{ starting_after }}'{% endif %}, + '{Service}/api/loyalty/transaction_entries' || '?organizationId=' || '{organization_id}' || '&websiteId=' || '{website_id}' || '&limit=' || api_limit{% if not var('STOREFRONT_INITIAL_RUN', false) %} || '&startingAfter=' || '{{ starting_after }}'{% endif %}{% if not var('IS_BACKFILL', false) %} || '&sortDir=asc'{% endif %}, { 'x-api-key': '{Authentication}' }, {}, 'Vault/prod/flow/snag-api' diff --git a/tests/points/tests__unique_address_count_threshold.sql b/tests/points/tests__unique_address_count_threshold.sql index ddcf94b..c0860e7 100644 --- a/tests/points/tests__unique_address_count_threshold.sql +++ b/tests/points/tests__unique_address_count_threshold.sql @@ -18,4 +18,4 @@ SELECT FROM distinct_count WHERE - ct > 110000 + ct > 150000