source_db: art_relations
dim_table: dim_track_artist
export_sql: >-
  SELECT
    ta.id,
    ta.track_id,
    ta.type,
    ta.name
  FROM
    track_artist ta
update_sql:
  - >-
    UPDATE
      {db}.{schema}.{dim_table}
    SET
      track_id = st.track_id,
      type = st.type,
      name = st.name,
      last_updated = '{current_timestamp}'
    FROM
      {db}.{schema}.{staging_table} st
    WHERE
      {db}.{schema}.{dim_table}.id = st.id AND
      (
        NOT (
          nvl({db}.{schema}.{dim_table}.track_id = st.track_id, false) OR
          ({db}.{schema}.{dim_table}.track_id is null and st.track_id is null)
        ) OR
        NOT (
          nvl({db}.{schema}.{dim_table}.type = st.type, false) OR
          ({db}.{schema}.{dim_table}.type is null and st.type is null)
        ) OR
        NOT (
          nvl({db}.{schema}.{dim_table}.name = st.name, false) OR
          ({db}.{schema}.{dim_table}.name is null and st.name is null)
        )
      )
insert_sql:
  - >-
    INSERT INTO
      {db}.{schema}.{dim_table}
    SELECT
      st.id,
      st.track_id,
      st.type,
      st.name,
      '{current_timestamp}',
      '{current_timestamp}'
    FROM
      {db}.{schema}.{staging_table} st
    LEFT JOIN
      {db}.{schema}.{dim_table} dt
        ON dt.id = st.id
    WHERE
      dt.id IS NULL
delete_sql:
  - >-
    DELETE FROM {db}.{schema}.{dim_table}
    WHERE id NOT IN (
    SELECT id from {db}.{schema}.{staging_table})
