mirror of
https://github.com/FlipsideCrypto/ethereum-models.git
synced 2026-02-06 14:56:49 +00:00
45 lines
1.3 KiB
SQL
45 lines
1.3 KiB
SQL
{% macro get_merge_sql(
|
|
target,
|
|
source,
|
|
unique_key,
|
|
dest_columns,
|
|
incremental_predicates
|
|
) -%}
|
|
{% set predicate_override = "" %}
|
|
{% if incremental_predicates [0] == "dynamic_range" %}
|
|
-- run some queries to dynamically determine the min + max of this 'input_column' in the new data
|
|
{% set input_column = incremental_predicates [1] %}
|
|
{% set get_limits_query %}
|
|
SELECT
|
|
MIN(
|
|
{{ input_column }}
|
|
) AS lower_limit,
|
|
MAX(
|
|
{{ input_column }}
|
|
) AS upper_limit
|
|
FROM
|
|
{{ source }}
|
|
|
|
{% endset %}
|
|
{% set limits = run_query(get_limits_query) [0] %}
|
|
{% set lower_limit,
|
|
upper_limit = limits [0],
|
|
limits [1] %}
|
|
-- use those calculated min + max values to limit 'target' scan, to only the days with new data
|
|
{% set predicate_override %}
|
|
dbt_internal_dest.{{ input_column }} BETWEEN '{{ lower_limit }}'
|
|
AND '{{ upper_limit }}' {% endset %}
|
|
{% endif %}
|
|
|
|
{% set predicates = [predicate_override] if predicate_override else incremental_predicates %}
|
|
-- standard merge from here
|
|
{% set merge_sql = dbt.get_merge_sql(
|
|
target,
|
|
source,
|
|
unique_key,
|
|
dest_columns,
|
|
predicates
|
|
) %}
|
|
{{ return(merge_sql) }}
|
|
{% endmacro %}
|