diff --git a/dbt_automation/assets/operations.template.yml b/dbt_automation/assets/operations.template.yml index 86046d8..ae45136 100644 --- a/dbt_automation/assets/operations.template.yml +++ b/dbt_automation/assets/operations.template.yml @@ -251,16 +251,24 @@ operations: clauses: - column: operator: <"=" or "!=" or "<" or ">" or "<=" or ">=" > - value: + operand: + value: + is_col: - column: operator: <"=" or "!=" or "<" or ">" or "<=" or ">=" > - value: + operand: + value: + is_col: - column: operator: <"=" or "!=" or "<" or ">" or "<=" or ">=" > - value: + operand: + value: + is_col: - column: operator: <"=" or "!=" or "<" or ">" or "<=" or ">=" > - value: + operand: + value: + is_col: sql_snippet: < custom sql snippet assume its formatted; eg. col1 != 5 > - type: groupby @@ -496,18 +504,26 @@ operations: - where_type: <"and" or "or" or "sql"> clauses: - - column: - operator: <"=" or "!=" or "<" or ">" or "<=" or ">=" > - value: - - column: - operator: <"=" or "!=" or "<" or ">" or "<=" or ">=" > - value: - - column: - operator: <"=" or "!=" or "<" or ">" or "<=" or ">=" > - value: - - column: - operator: <"=" or "!=" or "<" or ">" or "<=" or ">=" > - value: + - column: + operator: <"=" or "!=" or "<" or ">" or "<=" or ">=" > + operand: + value: + is_col: + - column: + operator: <"=" or "!=" or "<" or ">" or "<=" or ">=" > + operand: + value: + is_col: + - column: + operator: <"=" or "!=" or "<" or ">" or "<=" or ">=" > + operand: + value: + is_col: + - column: + operator: <"=" or "!=" or "<" or ">" or "<=" or ">=" > + operand: + value: + is_col: sql_snippet: < custom sql snippet assume its formatted; eg. col1 != 5 > - type: groupby diff --git a/dbt_automation/operations/wherefilter.py b/dbt_automation/operations/wherefilter.py index d6a5792..f4ffdfd 100644 --- a/dbt_automation/operations/wherefilter.py +++ b/dbt_automation/operations/wherefilter.py @@ -67,7 +67,7 @@ def where_filter_sql( source_columns = config["source_columns"] input_table = config["input"] clauses: dict = config.get("clauses", []) - clause_type: str = config.get("where_type", "") # and, or, sql + clause_type: str = config.get("where_type", "and") # and, or, sql sql_snippet: str = config.get("sql_snippet", "") dbt_code = "SELECT\n" @@ -94,10 +94,12 @@ def where_filter_sql( if clause_type in ["and", "or"]: temp = [] for clause in clauses: + operand = clause["operand"] + clause = ( f"{quote_columnname(clause['column'], warehouse.name)} " + f"{clause['operator']} " - + f"{quote_constvalue(str(clause['value']), warehouse.name)} " + + f"{quote_columnname(operand['value'], warehouse.name) if operand['is_col'] else quote_constvalue(str(operand['value']), warehouse.name)} " ) temp.append(clause)