diff --git a/dbt/include/snowflake/macros/utils/cast.sql b/dbt/include/snowflake/macros/utils/cast.sql index 212361a6d..3da7c3aec 100644 --- a/dbt/include/snowflake/macros/utils/cast.sql +++ b/dbt/include/snowflake/macros/utils/cast.sql @@ -1,8 +1,8 @@ {% macro snowflake__cast(field, type) %} {% if (type|upper == "GEOGRAPHY") -%} - to_geography({{field}} as {{type}}) + to_geography({{field}}) {% elif (type|upper == "GEOMETRY") -%} - to_geometry({{field}} as {{type}}) + to_geometry({{field}}) {% else -%} cast({{field}} as {{type}}) {% endif -%} diff --git a/dbt/include/snowflake/macros/utils/safe_cast.sql b/dbt/include/snowflake/macros/utils/safe_cast.sql index acb36c107..0ce6a1088 100644 --- a/dbt/include/snowflake/macros/utils/safe_cast.sql +++ b/dbt/include/snowflake/macros/utils/safe_cast.sql @@ -1,7 +1,11 @@ {% macro snowflake__safe_cast(field, type) %} - {% if (type|upper != "VARIANT") -%} + {% if type|upper == "VARIANT" -%} {% set field_as_sting = dbt.string_literal(field) if field is number else field %} try_cast({{field_as_sting}} as {{type}}) + {% elif type|upper == "GEOMETRY" -%} + try_to_geometry({{field}}) + {% elif type|upper == "GEOGRAPHY" -%} + try_to_geography({{field}}) {% else -%} {{ adapter.dispatch('cast', 'dbt')(field, type) }} {% endif -%} diff --git a/tests/functional/adapter/unit_testing/test_unit_testing.py b/tests/functional/adapter/unit_testing/test_unit_testing.py index 6fb8cc93b..2a6b3a7f0 100644 --- a/tests/functional/adapter/unit_testing/test_unit_testing.py +++ b/tests/functional/adapter/unit_testing/test_unit_testing.py @@ -18,6 +18,8 @@ def data_types(self): ["'2013-11-03 00:00:00-0'::TIMESTAMPTZ", "2013-11-03 00:00:00-0"], ["TO_NUMBER('3', 10, 9)", "3"], ["3::VARIANT", "3"], + ["TO_GEOMETRY('POINT(1820.12 890.56)')", "POINT(1820.12 890.56)"], + ["TO_GEOGRAPHY('POINT(-122.35 37.55)')", "POINT(-122.35 37.55)"], [ "{'Alberta':'Edmonton','Manitoba':'Winnipeg'}", "{'Alberta':'Edmonton','Manitoba':'Winnipeg'}",