Quickstart
Introduction
Section titled “Introduction”This guide explains how to set up the Snowflake emulator and develop a Python program using the Snowflake Connector for Python (snowflake-connector-python
) to interact with emulated Snowflake running on your local machine.
Prerequisites
Section titled “Prerequisites”localstack
CLI- LocalStack for Snowflake
- Python 3.10 or later
snowflake-connector-python
library
Instructions
Section titled “Instructions”Before you begin, pull the Snowflake emulator image (localstack/snowflake
) and start the container:
export LOCALSTACK_AUTH_TOKEN=<your_auth_token>IMAGE_NAME=localstack/snowflake:latest localstack start
Check the emulator’s availability by running:
curl -d '{}' snowflake.localhost.localstack.cloud:4566/session
The response should be:
{"success": true}
Connect to the Snowflake emulator
Section titled “Connect to the Snowflake emulator”Create a new Python file named main.py
and use the following code to connect to the Snowflake emulator:
import snowflake.connector as sf
sf_conn_obj = sf.connect( user="test", password="test", account="test", database="test", host="snowflake.localhost.localstack.cloud",)
Specify the host
parameter as snowflake.localhost.localstack.cloud
and the other parameters as test
to avoid connecting to the real Snowflake instance.
Create and execute a query
Section titled “Create and execute a query”Extend the Python program to insert rows from a list object into the emulated Snowflake table. Create a cursor object and execute the query:
print("1. Insert lot of rows from a list object to Snowflake table")print("2. Creating a cursor object")sf_cur_obj = sf_conn_obj.cursor()
print("3. Executing a query on cursor object")try: sf_cur_obj.execute( "create or replace table " "ability(name string, skill string )")
rows_to_insert = [('John', 'SQL'), ('Alex', 'Java'), ('Pete', 'Snowflake')]
sf_cur_obj.executemany( " insert into ability (name, skill) values (%s,%s) " ,rows_to_insert)
sf_cur_obj.execute("select name, skill from ability")
print("4. Fetching the results") result = sf_cur_obj.fetchall() print("Total # of rows :" , len(result)) print("Row-1 =>",result[0]) print("Row-2 =>",result[1])finally: sf_cur_obj.close()
This program creates a table named ability
, inserts rows, and fetches the results.
Run the Python program
Section titled “Run the Python program”Execute the Python program with:
python main.py
The output should be:
Insert lot of rows from a list object to Snowflake table1. Insert lot of rows from a list object to Snowflake table2. Creating a cursor object3. Executing a query on cursor object4. Fetching the resultsTotal # of rows : 3Row-1 => ('John', 'SQL')Row-2 => ('Alex', 'Java')
Verify the results by navigating to the LocalStack logs:
2024-02-22T06:03:13.627 INFO --- [ asgi_gw_0] localstack.request.http : POST /session/v1/login-request => 2002024-02-22T06:03:16.122 WARN --- [ asgi_gw_0] l.packages.core : postgresql will be installed as an OS package, even though install target is _not_ set to be static.2024-02-22T06:03:45.917 INFO --- [ asgi_gw_0] localstack.request.http : POST /queries/v1/query-request => 2002024-02-22T06:03:46.016 INFO --- [ asgi_gw_1] localstack.request.http : POST /queries/v1/query-request => 2002024-02-22T06:03:49.361 INFO --- [ asgi_gw_0] localstack.request.http : POST /queries/v1/query-request => 2002024-02-22T06:03:49.412 INFO --- [ asgi_gw_1] localstack.request.http : POST /session => 200
Destroy the local infrastructure
Section titled “Destroy the local infrastructure”To stop LocalStack and remove locally created resources, use:
localstack stop
LocalStack is ephemeral and doesn’t persist data across restarts. It runs inside a Docker container, and once it’s stopped, all locally created resources are automatically removed. In a future release of the Snowflake emulator, we will provide proper persistence and integration with a Cloud Pods feature as well.
Next steps
Section titled “Next steps”You can now explore the following resources to learn more about the Snowflake emulator:
- Features: Learn about the Snowflake emulator’s features and how to use them.
- SQL Functions: Learn about the SQL functions supported by the Snowflake emulator.
- Changelog: Find information about the Snowflake emulator’s changelog.