What you will be able to do
- Compare the JDBC and ODBC drivers, including their platform and version requirements
- Describe what the Snowflake SQL API does and how clients authenticate to it
- Use SYSTEM$ALLOWLIST to find the hosts and ports a firewall must allow
- Explain how SnowSQL and Snowflake CLI relate to each other, and name the languages Snowpark supports
1.JDBC and ODBC drivers
When an application isn't written in Python, it usually connects to Snowflake through a standard driver. Snowflake ships two.
The JDBC driver is a type 4 driver that supports core JDBC functionality. It must run in a 64-bit environment on a Java LTS (Long-Term Support) version, 1.8 or higher. Most client tools that support JDBC can use it. Google Cloud Storage regional endpoints are supported from driver version 3.21.0 onward.
The ODBC driver serves applications built on ODBC. It now has two major lines. From version 4.0.0, it's built on the Universal Core, a thin C layer over a shared Rust library. The public ODBC interface hasn't changed, and application code never sees the Rust layer. Snowflake's advice on which line to install has a twist: choose based on the driver already on your machine, not on how old your Snowflake account is. If a vendor tool manages the driver, follow the vendor's upgrade process. File transfer is another place where the version matters, because the minimum version that supports the GET and PUT commands depends on your cloud:
| Cloud hosting the account | Minimum ODBC driver version |
|---|---|
| Amazon Web Services | 2.17.5 |
| Microsoft Azure | 2.20.2 |
| Google Cloud Platform | 2.21.5 |
Checkpoint 1 of 7· Match them up
Match each driver fact to the driver it describes.
Tap a term, then the definition that fits it.
The Java requirements belong to JDBC. The Universal Core and the per-cloud GET/PUT minimums belong to ODBC.
“Snowflake provides a JDBC type 4 driver that supports core JDBC functionality.”Source: docs.snowflake.com
2.The Snowflake SQL API
Drivers keep a session open from inside the client application. The Snowflake SQL API takes a different approach. It's a REST API, so any program that can send HTTP requests can access and update data in Snowflake, whether to run queries or to manage the deployment, for example by provisioning users and roles or creating tables. It offers three core operations:
- submit SQL statements for execution - check the status of a statement's execution - cancel a statement's execution
It can run standard queries and most DDL and DML statements. Some statement types aren't supported, and Snowflake documents those limitations separately. A single request can carry multiple statements. A stored procedure can be created by specifying it in the request body. Explicit transactions are possible by specifying the start, end and statements in the transaction. Requests authenticate with OAuth or key pair authentication.
Checkpoint 2 of 7· Exam question
An architect is reviewing what the Snowflake Connector for Kafka provisions automatically for each Kafka topic it consumes in its default (non-streaming) mode. Which set of objects does the connector create per topic?
Correct answer: A — One internal stage to buffer files, one pipe per topic partition, and one destination table with `RECORD_CONTENT` and `RECORD_METADATA` VARIANT columns.
- A. This is correct because the connector creates exactly this trio per topic: an internal stage for buffered files, one pipe per partition to drive Snowpipe ingestion, and a table whose default schema stores the raw message and its metadata as VARIANT.
- B. The connector provisions an internal stage, not an external stage pointing at customer-managed cloud storage, and it does not create a stream object to track incoming files; ingestion is pipe-driven, not stream-driven.
- C. The connector does not rely on a scheduled task or a stored procedure to move data; ingestion is event-driven through Snowpipe pipes, and the default table stores structured VARIANT columns rather than a single flat VARCHAR field.
- D. Materialized views and dynamic tables are transformation objects an engineer might build downstream of the loaded data, but the connector itself does not create either of them, nor does it partition the landing table by Kafka offset.
Checkpoint 3 of 7· Check yourself
A team is building a serverless integration that calls Snowflake over HTTPS through the SQL API. Which authentication methods does the SQL API documentation list?
The SQL API documentation describes authenticating to the server with OAuth or key pair. A DSN is an ODBC concept.
“Use OAuth or Key Pair to authenticate with the Snowflake server.”Source: docs.snowflake.com
Sources3
3.Opening the firewall with SYSTEM$ALLOWLIST
Every client covered so far, whether a driver, a connector or a CLI, needs a network path to Snowflake. Firewalls often block that path by default. SYSTEM$ALLOWLIST is the system function that returns the host names and port numbers you need to allow, covering your account URL, your stages and the other hosts Snowflake uses. You can also pass its output to SnowCD.
The function takes no arguments. It returns a VARIANT holding an array of JSON structures, each with three fields: type, host and port. Some types can appear more than once in the output, STAGE and OCSP_RESPONDER for example. Here is part of the sample output:
{"type":"SNOWFLAKE_DEPLOYMENT", "host":"xy12345.snowflakecomputing.com", "port":443}, {"type":"STAGE", "host":"sfc-customer-stage.s3.us-west-2.amazonaws.com", "port":443},Some of the types point straight back to the tools in this lesson. SNOWSQL_REPO is the endpoint SnowSQL uses for automatic downloads or upgrades. OUT_OF_BAND_TELEMETRY lists the hosts that drivers report metrics and incidents to. OCSP_CACHE and OCSP_RESPONDER handle certificate revocation checks, and OCSP_RESPONDER isn't needed when you use private connectivity. To get a table instead of JSON, combine the function with PARSE_JSON and FLATTEN:
Checkpoint 4 of 7· Fill the gap
Which table function turns the JSON array into one row per host?
SELECT t.VALUE:type::VARCHAR as type, t.VALUE:host::VARCHAR as host, t.VALUE:port as port FROM TABLE( ? (input => PARSE_JSON(SYSTEM$ALLOWLIST()))) AS t;FLATTEN expands the parsed array into one row per element, and the VALUE path expressions then pull out type, host and port.
Source: docs.snowflake.comSources4
4.SnowSQL and Snowflake CLI
Snowflake has two command-line clients. SnowSQL connects to Snowflake to run SQL queries and all DDL and DML operations, including loading data into tables and unloading it out of them. The snowsql executable runs as an interactive shell, or in batch mode through stdin or with the -f option. It was built with the Python connector, but you don't need to install the connector first, because the installers bundle everything SnowSQL needs. SnowSQL is now legacy, with support ending per minor release:
| SnowSQL version | Initial release date | Support end date |
|---|---|---|
| 1.2.x | February 02, 2023 | December 19, 2025 |
| 1.3.x | May 02, 2024 | May 02, 2026 |
| 1.4.x | May 22, 2025 | May 22, 2027 |
| 1.5.x | April 16, 2026 | April 16, 2028 |
Snowflake CLI is the preferred client for new installs and new work. It's open source and was designed for developer workloads as well as SQL. Its snow command creates, manages and deploys apps across Streamlit in Snowflake, the Native App Framework, Snowpark Container Services and Snowpark. It can also handle user-defined functions, stored procedures, stages, Git repositories and SQL execution. You can install it as a Python tool:
pip install snowflake-cliThe pip method modifies the Python environment where you install Snowflake CLI, so the docs suggest considering uv or pipx instead to avoid dependency conflicts. pipx installs and runs Python packages in isolated virtual environments, so it doesn't modify your current Python environment:
pipx install snowflake-cliOnce installed, run snow --help to verify the installation, snow --version to show the CLI version, and snow --info to show information about it. The top-level commands include sql (executes Snowflake queries), stage, streamlit, snowpark, connection and object.
Checkpoint 5 of 7· Exam question
A data engineering team wants to read a 4 TB Snowflake table into an existing Apache Spark cluster, join it against data already cached in Spark, and write the joined result back to a new Snowflake table. Which statement about the Snowflake Connector for Spark is accurate for this workflow?
Correct answer: A — The connector supports bidirectional movement, populating a Spark DataFrame from the Snowflake table and later writing the DataFrame's contents back to a Snowflake table.
- A. This is correct because the Spark connector explicitly supports both directions: populating a DataFrame from a Snowflake table or query, and writing a DataFrame's contents to a Snowflake table, which is exactly the read-then-write shape in this scenario.
- B. Writing back to Snowflake is a first-class, directly supported connector operation; the team does not need to manually stage Parquet files and issue a separate `COPY INTO` command as a workaround.
- C. Query pushdown lets large and complex portions of a Spark logical plan execute inside Snowflake instead of Spark, so Snowflake can participate in parts of the plan; the claim that it never can is incorrect.
- D. Whenever the connector pushes work down to Snowflake or performs the read/write against a Snowflake table, a running virtual warehouse still supplies that compute; the connector does not eliminate the warehouse requirement.
Checkpoint 6 of 7· Check yourself
A new team member asks which command-line client to learn for deploying Streamlit apps and Snowpark procedures in a new project. What is the accurate answer?
Snowflake CLI is the preferred client for new installs, and it manages apps across Streamlit in Snowflake and Snowpark. SnowSQL is legacy, and sfsql is deprecated.
“Snowflake CLI is the preferred command-line client for new installs and new work.”Source: docs.snowflake.com
5.Snowpark: Python, Scala and Java libraries
Every tool so far moves data or SQL between an outside system and Snowflake. Snowpark works the other way round: it brings the processing to the data. The Snowpark API is a library for querying and processing data at scale. Applications built with it process data inside Snowflake, on its elastic, serverless engine, so the data doesn't have to travel to wherever the application code runs.
Snowflake provides Snowpark libraries for exactly three languages: Python, Scala and Java. Each has its own developer guide and API reference, and the libraries are available from the Snowpark Client Download page. Snowflake explicitly compares developing with Snowpark against using the Snowflake Connector for Spark. The Spark connector brings Snowflake into the Apache Spark ecosystem, enabling Spark to read data from, and write data to, Snowflake; it runs as a Spark plugin provided as a Spark package (spark-snowflake). Snowflake lists these benefits of Snowpark over it:
- libraries and patterns purpose built for different languages, without compromising on performance or functionality - code can be authored with local tools such as Jupyter, VS Code or IntelliJ - pushdown for all operations, including Snowflake UDFs, so transformation and heavy lifting happen in Snowflake - no separate cluster outside Snowflake for computations; scale and compute management are handled by Snowflake
That comparison is the deciding question in architecture scenarios: a Spark cluster pulling data out through the connector, or the same logic running in Snowflake through Snowpark. Snowflake CLI ties back in here too, because its snow snowpark commands build, deploy and run Snowpark procedures and functions.
Checkpoint 7 of 7· Check yourself
A hiring manager writes that the role will 'build Snowpark pipelines in Python, Scala, Java or C#'. Which correction is accurate?
Snowflake provides Snowpark libraries for three languages: Java, Python and Scala. There is no C# library.
“Snowflake currently provides Snowpark libraries for three languages: Java, Python, and Scala.”Source: docs.snowflake.com
Exam traps
Each one states something that sounds right. Open it to see what is actually true.
1.Older Snowflake accounts should stay on ODBC driver 3.x, and newer accounts should use 4.x.Why is that wrong?
Snowflake says to choose the ODBC path based on the driver installed on your machine, not on how old your account is.
Covered in JDBC and ODBC drivers
2.You have to install the Snowflake Connector for Python before you can install SnowSQL, because SnowSQL is built on it.Why is that wrong?
SnowSQL was built with the Python connector, but the installers bundle all the software it needs, so the connector isn't a prerequisite.
Covered in SnowSQL and Snowflake CLI
3.The SQL API can run any SQL statement that works through a JDBC session.Why is that wrong?
The SQL API runs standard queries and most DDL and DML statements. Some statement types are unsupported and are documented as limitations.
Covered in The Snowflake SQL API
Practise it for real
Produce a firewall allowlist for your Snowflake account and read it as a table
1.Run SELECT SYSTEM$ALLOWLIST(); in a worksheet or in Snowflake CLI
Why: The function returns every host and port that your clients need to reach
You should see: One VARIANT value containing a JSON array of objects with type, host and port fields
2.Run the FLATTEN and PARSE_JSON version of the query shown in the allowlist section
Why: Tabular output is easier to hand to a network team than raw JSON
You should see: One row per entry, with TYPE, HOST and PORT columns, including SNOWFLAKE_DEPLOYMENT and STAGE rows
3.Find the SNOWSQL_REPO, OCSP_CACHE and OCSP_RESPONDER rows, and note whether more than one STAGE row appears
Why: These are the entries that client tools depend on for upgrades and certificate checks
You should see: Hosts on port 443 for the deployment and stage entries, and port 80 for the OCSP entries
Stuck? Get a nudge
If the call fails with an error such as 'SYSTEM$ALLOWLIST: Connection failure', wait a few minutes and rerun it before you contact Snowflake Support.
Sources
Every claim above is drawn from one of these pages, quoted as it was written on the date shown.
- 1.
“The JDBC driver must be installed in a 64-bit environment and requires Java LTS (Long-Term Support) versions 1.8 or higher.”
↩︎ JDBC and ODBC drivers“Snowflake provides a JDBC type 4 driver that supports core JDBC functionality.”
↩︎ Checkpoint - 2.
“Starting with version 4.0.0, the driver is built on the Universal Core: a thin C layer over a shared Rust library”
↩︎ JDBC and ODBC drivers“Choose based on the driver installed on your machine, not the age of your Snowflake account.”
↩︎ Exam trap 1 - 3.
“The Snowflake SQL API is a REST API that you can use to access and update data in a Snowflake database.”
↩︎ The Snowflake SQL API“Execute SQL in a transaction by specifying the start, end, and statements in the transaction.”
↩︎ The Snowflake SQL API“You can use this API to execute standard queries and most DDL and DML statements.”
↩︎ Exam trap 3“Use OAuth or Key Pair to authenticate with the Snowflake server.”
↩︎ Checkpoint - 4.
“The output of this function can then be passed into SnowCD.”
↩︎ Opening the firewall with SYSTEM$ALLOWLIST“Endpoint accessed by SnowSQL to perform automatic downloads or upgrades.”
↩︎ Opening the firewall with SYSTEM$ALLOWLIST“The output might include multiple entries for certain types (e.g. STAGE, OCSP_RESPONDER).”
↩︎ Opening the firewall with SYSTEM$ALLOWLIST - 5.https://docs.snowflake.com/en/user-guide/snowsqlOfficial docs
“SnowSQL (snowsql executable) can be run as an interactive shell or in batch mode through stdin or using the -f option.”
↩︎ SnowSQL and Snowflake CLI“however, the connector is not a prerequisite for installing SnowSQL.”
↩︎ Exam trap 2“SnowSQL is a legacy command-line client. Snowflake will only add new features and enhancements to Snowflake CLI.”
↩︎ Prediction - 6.
“It supports a range of Snowflake features, including user-defined functions, stored procedures, Streamlit in Snowflake, and SQL execution.”
↩︎ SnowSQL and Snowflake CLI“Snowflake CLI is the preferred command-line client for new installs and new work.”
↩︎ Checkpoint - 7.
“Consider uv or pipx instead to avoid dependency conflicts.”
↩︎ SnowSQL and Snowflake CLI - 8.
“you can build applications that process data in Snowflake without moving data to the system where your application code runs”
↩︎ Snowpark: Python, Scala and Java libraries“In comparison to using the Snowflake Connector for Spark, developing with Snowpark includes the following benefits:”
↩︎ Snowpark: Python, Scala and Java libraries“Snowflake currently provides Snowpark libraries for three languages: Java, Python, and Scala.”
↩︎ Checkpoint - 9.
“enabling Spark to read data from, and write data to, Snowflake”
↩︎ Snowpark: Python, Scala and Java libraries