def METHOD_NAME(
    self,
    source_table: BaseTable,
    target_table: BaseTable,
    source_to_target_columns_map: dict[str, str],
    target_conflict_columns: list[str],
    if_conflicts: MergeConflictStrategy = "exception",
) -> None:
    """
    Merge the source table rows into a destination table.
    The argument `if_conflicts` allows the user to define how to handle conflicts.
    :param source_table: Contains the rows to be merged to the target_table
    :param target_table: Contains the destination table in which the rows will be merged
    :param source_to_target_columns_map: Dict of target_table columns names to source_table columns names
    :param target_conflict_columns: List of cols where we expect to have a conflict while combining
    :param if_conflicts: The strategy to be applied if there are conflicts.
    """
    statement = "INSERT INTO {main_table} ({target_columns}) SELECT {append_columns} FROM {source_table} Where true"
    if if_conflicts == "ignore":
        statement += " ON CONFLICT ({merge_keys}) DO NOTHING"
    elif if_conflicts == "update":
        statement += " ON CONFLICT ({merge_keys}) DO UPDATE SET {update_statements}"
    append_column_names = list(source_to_target_columns_map.keys())
    target_column_names = list(source_to_target_columns_map.values())
    update_statements = [f"{col_name}=EXCLUDED.{col_name}" for col_name in target_column_names]
    query = statement.format(
        target_columns=",".join(target_column_names),
        main_table=target_table.name,
        append_columns=",".join(append_column_names),
        source_table=source_table.name,
        update_statements=",".join(update_statements),
        merge_keys=",".join(list(target_conflict_columns)),
    )
    self.run_sql(sql=query)