Technologies used: Snowflake, Python, Flask, Docker
This project demonstrates how to build a custom REST API powered by Snowflake. It uses a simple Python Flask API service running in Snowflake Container Services.
- Snowflake account
- Snowflake user with
- SELECT access to the
SNOWFLAKE_SAMPLES.TPCH_SF10.ORDERS
table - USAGE access on a warehouse
- SELECT access to the
- Docker
Using docker
, build the container:
docker build -t api .
The container will be created with all the necessary prerequisite packages.
To start the server, run the following command updated with your Snowflake Account, User, Password, and Warehouse:
docker run -it -d -e SNOWFLAKE_ACCOUNT='<YOUR_SNOWFLAKE_ACCOUNT>' -e SNOWFLAKE_USER='<YOUR_SNOWFLAKE_USER>' -e SNOWFLAKE_PASSWORD='<YOUR_SNOWFLAKE_PASSWORD>' -e SNOWFLAKE_WAREHOUSE='<YOUR_SNOWFLAKE_WAREHOUSE>' -e SNOWFLAKE_DATABASE='SNOWFLAKE_SAMPLE_DATA' -e SNOWFLAKE_SCHEMA='TPCH_SF10' -p 8001:8001 api
The API creates two sets of endpoints, one for using the Snowflake connector:
http://localhost:8001/connector/customers/top10
- Which takes the following optional query parameters:
start_range
- the start date of the range inYYYY-MM-DD
format. Defaults to1995-01-01
.end_range
- the end date of the range inYYYY-MM-DD
format. Defaults to1995-03-31
.
http://localhost:8001/connector/clerk/<CLERKID>/yearly_sales/<YEAR>
- Which takes 2 required path parameters:
CLERKID
- the clerk ID. Use just the numbers, such as000000001
.YEAR
- the year to use, such as1995
.
And the same ones using Snowpark:
http://localhost:8001/snowpark/customers/top10
- Which takes the following optional query parameters:
start_range
- the start date of the range inYYYY-MM-DD
format. Defaults to1995-01-01
.end_range
- the end date of the range inYYYY-MM-DD
format. Defaults to1995-03-31
.
http://localhost:8001/snowpark/clerk/<CLERKID>/yearly_sales/<YEAR>
- Which takes 2 required path parameters:
CLERKID
- the clerk ID. Use just the numbers, such as000000001
.YEAR
- the year to use, such as1995
.
You can test this API using curl or other command-line tools. You can also use a tool such as Postman.
Additionally, the API serves a testing page you can open in a web browser at http://localhost:8001/test
.