Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Slugify for snowflake #707

Merged

Conversation

fivetran-catfritz
Copy link
Contributor

@fivetran-catfritz fivetran-catfritz commented Oct 17, 2022

resolves #

This is a:

  • documentation update
  • bug fix with no breaking changes
  • new functionality
  • a breaking change

All pull requests from community contributors should target the main branch (default).

Description & motivation

Snowflake does not allow columns to begin with a number, so to preserve the number, the changes adds an underscore to the beginning of the string if the target is Snowflake.

Checklist

  • This code is associated with an Issue which has been triaged and accepted for development.
  • I have verified that these changes work locally on the following warehouses (Note: it's okay if you do not have access to all warehouses, this helps us understand what has been covered)
    • BigQuery
    • Postgres
    • Redshift
    • Snowflake
  • I followed guidelines to ensure that my changes will work on "non-core" adapters by:
    • dispatching any new macro(s) so non-core adapters can also use them (e.g. the star() source)
    • using the limit_zero() macro in place of the literal string: limit 0
    • using dbt.type_* macros instead of explicit datatypes (e.g. dbt.type_timestamp() instead of TIMESTAMP
  • I have updated the README.md (if applicable)
  • I have added tests & descriptions to my models (and macros if applicable)
  • I have added an entry to CHANGELOG.md

Cc: @crowemi thanks so much for collaborating with us on this. I would love to have your feedback!

deanna-minnick and others added 5 commits October 10, 2022 14:29
* add safe_divide documentation

* add safe_divide macro

* add integration test for safe_divide macro

* moved macro and documentation to new SQL generator section

Co-authored-by: Grace Goheen <[email protected]>
@joellabes joellabes added the Hackathon Coalesce Hackathon Submissions label Oct 20, 2022
Copy link
Contributor

@joellabes joellabes left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey @fivetran-catfritz! Happy Hackathon and thanks for opening this.

It's not just Snowflake that has this problem, right? From some quick Googling, Postgres and BigQuery's columns must start with a letter or underscore, and Redshift can't start with a number or $ unless quoted (so basically the same rule).

I think this change can be applied across the board! Which also makes things cleaner for cross-db purposes - I don't love the idea of different column names based on the warehouse this runs on.

@joellabes
Copy link
Contributor

Also, could you please change the target to the utils-v1 branch? I'd love to get this in as part of that (so next week-ish), but even if we don't you'll have a much easier merge if you're already up to date with all the changes that have happened on that branch.

@fivetran-catfritz fivetran-catfritz changed the base branch from main to utils-v1 October 20, 2022 14:35
@fivetran-catfritz
Copy link
Contributor Author

fivetran-catfritz commented Oct 20, 2022

Hi @joellabes - thanks for your feedback on this. I agree you're totally right about the same naming requirements for the other databases. I have made the updates and changed the target branch. Just let me know if you need any further changes!

@joellabes
Copy link
Contributor

@fivetran-catfritz thanks for this! Sorry for the delay getting back to you. Looks good - only thing left would be to add a test that makes sure it works correctly.

The easiest thing to do would be to copy https://github.com/dbt-labs/dbt-utils/blob/main/integration_tests/tests/jinja_helpers/test_slugify.sql but make a new version that starts with a number

The slightly nicer option would be along the lines of

with comparisons as (
  select '{{ dbt_utils.slugify("!Hell0 world-hi") }}' as output, 'hell0_world_hi' as expected
  union 
  select '{{ dbt_utils.slugify("0Hell0 world-hi") }}' as output, '_0hell0_world_hi' as expected
)
select * 
from comparisons
where output != expected

but I haven't tested that code so don't know if it'll work perfectly!

@fivetran-catfritz
Copy link
Contributor Author

@joellabes Thanks again! The test you suggested worked great--just had to change to a "union all" for bigquery. It should be good to go now! 😃

Copy link
Contributor

@joellabes joellabes left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎉

@joellabes joellabes merged commit 2703459 into dbt-labs:utils-v1 Nov 2, 2022
joellabes added a commit to yuanminglee/dbt-utils that referenced this pull request Nov 24, 2022
commit 04536a1
Author: Joel Labes <[email protected]>
Date:   Wed Nov 23 08:30:34 2022 +1300

    Merge main into utils-v1 (dbt-labs#726)

    * Feature/safe divide (dbt-labs#697)

    * add safe_divide documentation

    * add safe_divide macro

    * add integration test for safe_divide macro

    * moved macro and documentation to new SQL generator section

    Co-authored-by: Grace Goheen <[email protected]>

    * Revert "Feature/safe divide (dbt-labs#697)" (dbt-labs#702)

    This reverts commit f368cec.

    * Quick nitpicks (dbt-labs#718)

    I was doing some studying on these and spotted some stuff. One verb conjugation and a consistency in macro description

    Co-authored-by: deanna-minnick <[email protected]>
    Co-authored-by: Grace Goheen <[email protected]>
    Co-authored-by: ian-fahey-dbt <[email protected]>

commit 2703459
Author: fivetran-catfritz <[email protected]>
Date:   Tue Nov 1 20:26:17 2022 -0500

    Slugify for snowflake (dbt-labs#707)

commit 17b017d
Merge: 31c503d b08f7bb
Author: Joel Labes <[email protected]>
Date:   Thu Oct 27 16:51:56 2022 +1300

    Merge branch 'heads/0.9.3' into utils-v1

commit b08f7bb
Author: Joel Labes <[email protected]>
Date:   Thu Oct 27 15:28:55 2022 +1300

    Wrap xdb warnings in if execute block

commit 586f278
Author: Joel Labes <[email protected]>
Date:   Thu Oct 27 15:27:57 2022 +1300

    Change deprecation resolution advice

commit 4fae6c5
Author: Joel Labes <[email protected]>
Date:   Thu Oct 27 15:19:27 2022 +1300

    Switch to dbt.escape_single_quotes
joellabes added a commit that referenced this pull request Dec 1, 2022
* add safe_divide documentation

* add safe_divide macro

* add integration test for safe_divide macro

* Merge changes from main into utils v1 (#699)

* Correct link from README to the CONTRIBUTING guide. (#687)

* fix typo (#688)

Co-authored-by: Alex Malins <[email protected]>

* Change `escape_single_quotes` Reference in Pivot Macro (#692)

* Update pivot.sql

* Changelog Updates

Co-authored-by: Liam O'Boyle <[email protected]>
Co-authored-by: Alex Malins <[email protected]>
Co-authored-by: Alex Malins <[email protected]>
Co-authored-by: zachoj10 <[email protected]>

* Use backwards comaptible versions of timestamp macro

* moved macro and documentation to new SQL generator section

* add tests with expressions

* fix syntax errors  (#705)

* fix syntax errors

* remove whitespace in seed file

* Restore dbt. prefix for all migrated cross-db macros (#701)

* added prefix dbt. on cross db macros

* Also prefix for new macro

* Adding changelog change

* Squashed commit of the following:

commit 5eba82b
Author: Deanna Minnick <[email protected]>
Date:   Wed Oct 12 10:30:42 2022 -0400

    remove whitespace in seed file

commit 7a2a5e3
Author: Deanna Minnick <[email protected]>
Date:   Wed Oct 12 10:22:07 2022 -0400

    fix syntax errors

Co-authored-by: Joel Labes <[email protected]>

* Remove obsolete condition argument from expression_is_true (#700)

* Remove obsolete condition argument from expression_is_true

* Improve docs

* Improve docs

* Update star.sql to allow for non-quote wrapped column names (#706)

* Update star.sql

* Update star.sql

* feat: add testing to star macro 

column encased in quotes functionality

* chore: update schema.yml

* Update star.sql

* chore: update star.sql and schema.yml

* chore: update star.sql to trim blank space

* Update README.md

* Update README.md

adds example usage of star macro's quote_identifiers argument

Co-authored-by: crlough <[email protected]>

* Switch to dbt.escape_single_quotes

* Change deprecation resolution advice

* Wrap xdb warnings in if execute block

* Slugify for snowflake (#707)

* Merge main into utils-v1 (#726)

* Feature/safe divide (#697)

* add safe_divide documentation

* add safe_divide macro

* add integration test for safe_divide macro

* moved macro and documentation to new SQL generator section

Co-authored-by: Grace Goheen <[email protected]>

* Revert "Feature/safe divide (#697)" (#702)

This reverts commit f368cec.

* Quick nitpicks (#718)

I was doing some studying on these and spotted some stuff. One verb conjugation and a consistency in macro description

Co-authored-by: deanna-minnick <[email protected]>
Co-authored-by: Grace Goheen <[email protected]>
Co-authored-by: ian-fahey-dbt <[email protected]>

* Feat: add macro get_query_results_as_single_value (#696)

* feat: add query_results_as_single_value.sql macro

* chore: update the macro definition

Current error to work through: "failed to find conversion function from unknown to text"

* chore: update test

* chore: final edits

* chore: remove extra model reference

* chore: update return() to handle BigQuery

* chore: README.md, macro updates

* feat: factoring in first review changes

* chore: updates to testing

* chore: updates tests

* chore: update test for bigquery

* chore: update cast for bigquery

* Use example with a single record in readme

* Add default value when no record found

* test when no results are found

* Rename test file

* Add test definitions

* Fix incorrect ref

* And another one

* Update test_get_query_results_as_single_value.sql

* cast strings as strings

* Put arg in right place

* Update test_get_query_results_as_single_value.sql

* switch to limit zero for BQ

* Update test_get_query_results_as_single_value.sql

* quote column name in arg

* snowflake wont let you safe cast something to itself

* warning to future readers [skip ci]

* Add singular test to check for multi row/multi column setup

* forgot to save comment [skip ci]

* Rename to get_single_value

Co-authored-by: crlough-gitkraken <[email protected]>
Co-authored-by: Joel Labes <[email protected]>

* Remove rc1 requirement for utils v1

* Recency truncate date option (#731)

* WIP changing recency test

* Add tests

* cast to timestamp for bq

* forgot the curlies

* avoid lateral column aliasing

* ts not dt

* cast source as timestamp

* don't cast inside test

* cast as date instead of truncate

* Update recency.sql

* log bq events

* store pg artifacts

* int tests dir

* Correctly store artifacts

* try casting to date or datetime

* order of operations more like order of ooperations

* dt -> ts

* Do I really have to cast this?

* Revert "Do I really have to cast this?"

This reverts commit 21e2c0d.

* Output a warning when star finds no columns, not '*' (#732)

* Change star() behaviour when no columns returned

* Code review: return a * in compile mode

* README changes

* Delete xdb_deprecation_warning.sql

* Update README.md

* Remove from ToC

* Update toc

* Fix surrogate key variable example

Co-authored-by: Deanna Minnick <[email protected]>
Co-authored-by: Liam O'Boyle <[email protected]>
Co-authored-by: Alex Malins <[email protected]>
Co-authored-by: Alex Malins <[email protected]>
Co-authored-by: zachoj10 <[email protected]>
Co-authored-by: Grace Goheen <[email protected]>
Co-authored-by: deanna-minnick <[email protected]>
Co-authored-by: Simon Quvang <[email protected]>
Co-authored-by: miles <[email protected]>
Co-authored-by: Connor <[email protected]>
Co-authored-by: crlough <[email protected]>
Co-authored-by: fivetran-catfritz <[email protected]>
Co-authored-by: ian-fahey-dbt <[email protected]>
Co-authored-by: crlough-gitkraken <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Hackathon Coalesce Hackathon Submissions
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants