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

Quote:true Column Configuration Bug #302

Open
1 of 3 tasks
T-Dunlap opened this issue May 2, 2024 · 1 comment
Open
1 of 3 tasks

Quote:true Column Configuration Bug #302

T-Dunlap opened this issue May 2, 2024 · 1 comment
Labels
bug Something isn't working quoting triage

Comments

@T-Dunlap
Copy link

T-Dunlap commented May 2, 2024

Describe the bug

We're encountering an issue with the quote:true column configuration of one of our external tables. It won't accept a column name [EXAMPLE'COLUMN'2]
See the quote: true property example.

Steps to reproduce

In our yml file for our external tables, we're applying the quote:true property to our column. See example below

tables:
      - name: atxprism_allpositions
        external:
          location: "@{{ env_var('DBT_ENVIRONMENT') }}_BLAH.BLAH.{{ env_var('DBT_ENVIRONMENT') }}_BLAH"  # reference an existing external stage
          file_format: "( type = csv )"      # fully specified here, or reference an existing file format
          pattern: ".*[.]json"  # Optional object key pattern
          # Instead of an external tables, create an empty table, backfill it, and pipe new data
          snowpipe:
            auto_ingest:    true  # requires either `aws_sns_topic` or `integration`
            # aws_sns_topic:  # Amazon S3
            integration: "BLAH_{{ env_var('DBT_ENVIRONMENT') }}_BLAH"   # Google Cloud or Azure
            copy_options:   "on_error = continue, enforce_length = false" # e.g.
        columns:
         ...

        - name: "EXAMPLE`COLUMN`2"
          quote: true
          data_type: varchar(255)
          description: ""

Expected results

We expect that the package will correctly identify the [EXAMPLE'COLUMN'2] as a valid column name and create the external table accordingly.

Actual results

We received the following error

Screenshots and log output

_dbt_copied_at timestamp
16:36:27 Snowflake adapter: Snowflake query id: 01b41004-0202-4857-0001-9f36005278ee
16:36:27 Snowflake adapter: Snowflake error: 001003 (42000): SQL compilation error:
syntax error line 21 at position 27 unexpected '2'.
16:36:27 Snowflake adapter: Rolling back transaction.
16:36:27 Snowflake adapter: Rolling back transaction.
16:36:27 On macro_stage_external_sources: Close
16:36:27 Encountered an error while running operation: Database Error
001003 (42000): SQL compilation error:
syntax error line 21 at position 27 unexpected '2'.
16:36:27 Traceback (most recent call last):
File "/venv/dbt-1.7.0-latest/lib/python3.11/site-packages/dbt/adapters/snowflake/connections.py", line 291, in exception_handler
yield
File "/venv/dbt-1.7.0-latest/lib/python3.11/site-packages/dbt/adapters/sql/connections.py", line 80, in add_query
cursor.execute(sql, bindings)
File "/venv/dbt-1.7.0-latest/lib/python3.11/site-packages/snowflake/connector/cursor.py", line 1080, in execute
Error.errorhandler_wrapper(self.connection, self, error_class, errvalue)
File "/venv/dbt-1.7.0-latest/lib/python3.11/site-packages/snowflake/connector/errors.py", line 290, in errorhandler_wrapper
handed_over = Error.hand_to_other_handler(
File "/venv/dbt-1.7.0-latest/lib/python3.11/site-packages/snowflake/connector/errors.py", line 345, in hand_to_other_handler
cursor.errorhandler(connection, cursor, error_class, error_value)
File "/venv/dbt-1.7.0-latest/lib/python3.11/site-packages/snowflake/connector/errors.py", line 221, in default_errorhandler
raise error_class(
snowflake.connector.errors.ProgrammingError: SQL compilation error:
syntax error line 21 at position 27 unexpected '2'.

System information

The contents of your packages.yml file:

Which database are you using dbt with?

  • redshift
  • snowflake
  • other (specify: ____________)

The output of dbt --version:

<output goes here>

The operating system you're using:

The output of python --version:

Additional context

@T-Dunlap T-Dunlap added bug Something isn't working triage labels May 2, 2024
@dataders
Copy link
Collaborator

dataders commented May 3, 2024

yikes! this is special column. quick question is the column have single quotes (') or backticks (`)?

I wasn't able to reproduce, in fact it worked for me. I suspect there might be something else going on?

Here's what I did. I used the people_a.csv from this repo (link), but the file shouldn't matter since data isn't checked when the CREATE EXTERNAL TABLE statement is run, only when it's queried.

Anyway the below YAML generated the below SQL (can be found in logs/dbt.log). You can see the column name is properly enclosed within double quotes (") as per Snowflake guidance.

# sources.yml
version: 2

sources:
  - name: snowflake_external
    schema: "{{ target.schema }}"
    loader: S3

    tables:
      
      - name: people_csv_unpartitioned
        external:
          location: '@{{ target.schema }}.dbt_external_tables_testing/csv'
          file_format: '( type = csv skip_header = 1 )'
        columns:
          - name: "EXAMPLE`COLUMN`2"
            data_type: varchar(255)
            quote: true
create or replace external table DBT_TEST.dbt_external_tables_integration_tests_snowflake.people_csv_unpartitioned(
                "EXAMPLE`COLUMN`2" varchar(255) as ((case when is_null_value(value:c1) or lower(value:c1) = 'null' then null else value:c1 end)::varchar(255))
        )
    location = @dbt_external_tables_integration_tests_snowflake.dbt_external_tables_testing/csv 

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working quoting triage
Projects
None yet
Development

No branches or pull requests

2 participants