Why ETL Tools Like Tableau Prep Often Use Quotes in Snowflake

If you’ve ever created a table in Snowflake using an ETL tool and noticed column names like "Code" or "First Name", you might have wondered:

Why are there double quotes around everything?

If you’re using tools like Tableau Prep, Qlik Replicate, Informatica, or Matillion, this behavior is very common when loading data into Snowflake.

Let’s break down why this happens, what it means, and whether you should care.


Understanding Snowflake Identifier Behavior

In Snowflake:

  • Unquoted identifiers are automatically converted to UPPERCASE
  • Quoted identifiers preserve exact casing and formatting
  • Quoted identifiers are case-sensitive

For example:

CREATE TABLE my_table (
Code VARCHAR
);

Snowflake stores the column as:

CODE

But if you create:

CREATE TABLE my_table (
"Code" VARCHAR
);

Snowflake stores it exactly as:

Code

Now it becomes case-sensitive and must always be referenced as "Code" in queries.


Why ETL Tools Quote Identifiers by Default

Most ETL tools generate DDL with quoted identifiers intentionally. This is not accidental — it’s defensive engineering.

Here’s why.


✔ 1. To Preserve Feature Richness and Compatibility

Quoted identifiers allow:

  • Lowercase names
  • Spaces in field names ("First Name")
  • Special characters
  • Names starting with nonstandard characters
  • CamelCase formatting

ETL tools often don’t know what naming patterns exist in your source system (Excel, CSV, Salesforce, APIs, etc.). Instead of trying to sanitize or transform every column name, they quote everything to guarantee the SQL will execute successfully.

Without quoting, certain names would fail immediately in Snowflake.

Example:

First Name VARCHAR

❌ Invalid (space not allowed)

But:

"First Name" VARCHAR

✅ Valid

Quoting ensures compatibility across unpredictable source schemas.


✔ 2. To Avoid SQL Syntax Errors

Snowflake automatically uppercases unquoted identifiers.

That means:

FirstName

Becomes:

FIRSTNAME

But tools like Tableau preserve display names exactly as users see them.

If your Tableau model contains:

FirstName

And Snowflake stores:

FIRSTNAME

You now have a casing mismatch between your data warehouse and BI layer.

By quoting everything, ETL tools ensure:

  • The Snowflake schema matches the data model exactly
  • No unexpected uppercase transformations occur
  • BI tools retrieve fields exactly as defined

This prevents subtle integration issues.


Tableau and Naming Behavior

While there isn’t explicit documentation stating that Tableau Prep always quotes identifiers in Snowflake, community experience consistently shows:

  • Tableau often preserves camelCase and mixed case field names
  • Published tables frequently contain quoted identifiers
  • Field names in Snowflake match exactly what appears in Tableau

This aligns with general ETL best practice:

When in doubt, quote everything.

It is safer to over-quote than to generate failing SQL.


What’s Actually Happening Behind the Scenes

When Tableau Prep writes to Snowflake, it typically generates SQL like this:

CREATE TABLE my_table (
"Column Name" VARCHAR,
"SomeOtherField" VARCHAR,
"Code" VARCHAR
);

This guarantees:

  • Column names match the Tableau data model
  • Snowflake does not uppercase them
  • The user experience remains consistent

However…

Because Snowflake treats quoted identifiers as case-sensitive, you must reference them exactly:

SELECT "Code" FROM my_table;

This will fail:

SELECT Code FROM my_table;

Because Snowflake interprets Code (without quotes) as CODE.


Summary — Why Tableau Prep Used "Code"

ReasonExplanation
Preserve original namesTableau kept the exact field name from your dataset
Avoid invalid identifiersQuoting allows spaces, special characters, camelCase
Ensure compatibilityPrevents SQL failures from unpredictable source schemas
Maintain BI consistencyKeeps Snowflake aligned with Tableau metadata

Bottom Line

You’re seeing quotes because the ETL tool generated quoted identifiers by design — not because Snowflake requires them in all cases.

Quoted identifiers are:

  • ✅ Valid SQL standard behavior
  • ✅ Fully supported in Snowflake
  • ⚠️ Case-sensitive
  • ⚠️ Slightly less convenient for manual querying

It’s a tradeoff between flexibility and simplicity.


If You Don’t Want Quoted Identifiers

You have two main options:

✅ Option 1: Standardize Naming

Rename columns to:

  • Uppercase
  • No spaces
  • No special characters

Example:

CODE
STORE_ID
CUSTOMER_NAME

Then Snowflake will store them without requiring quotes.


✅ Option 2: Configure Your ETL Tool

Some ETL tools allow you to disable quoted identifiers or apply naming transformations.

Check:

  • Output DDL settings
  • Identifier handling settings
  • Naming conventions configuration

(Not all tools expose this option.)


Final Thoughts

Quoted identifiers are not a mistake — they’re a safety mechanism.

ETL tools optimize for:

  • Guaranteed execution
  • Metadata consistency
  • Cross-system compatibility

But as a Snowflake developer, you may prefer clean, unquoted, uppercase naming conventions for simplicity.

Understanding why quotes appear gives you control over whether to keep them — or refactor your schema intentionally.


If you’re designing Snowflake standards for your organization, this is an important architectural decision worth making early.

Click to rate this post!
Spread the love