Skip to content

Snowflake: Go (gosnowflake v2)

database/sql with the Snowflake driver.

# host / account URL
myorg-myaccount.snowflakecomputing.com
warehouse.internal (MachWarehouse Snowflake REST endpoint, HTTPS 443)
# account
myorg-myaccount
the MachWarehouse account name (any label; kept for drivers that require it)
# user / password, role, warehouse, database, schema
Snowflake values
MachWarehouse values (warehouse = compute pool)
# SNOWFLAKE_DSN
Before
After
app:secret@myorg-myaccount/DEMO/PUBLIC?warehouse=BI&role=ANALYST
app:secret@warehouse.internal:443/DEMO/PUBLIC?account=demo&protocol=https&warehouse=BI&role=ANALYST
Terminal window
go mod tidy
SNOWFLAKE_DSN='app:secret@warehouse.internal:443/DEMO/PUBLIC?account=demo&protocol=https&warehouse=BI' go run .

Library: github.com/snowflakedb/gosnowflake/v2 v2.3.0 (Go 1.27).

The program as it is kept and tested in the Mach Database Warehouse repository; highlighted lines read the connection setting.

main.go
// Command snowflake-go prints revenue per country through database/sql and
// gosnowflake. Plain Snowflake driver code: the DSN host form is the driver's
// own syntax for private links and proxies.
package main
import (
"database/sql"
"fmt"
"log"
"os"
_ "github.com/snowflakedb/gosnowflake/v2"
)
func main() {
// Before: app:secret@myorg-myaccount/DEMO/PUBLIC?warehouse=BI&role=ANALYST
// After: app:secret@warehouse.internal:443/DEMO/PUBLIC?account=demo&protocol=https&warehouse=BI&role=ANALYST
db, err := sql.Open("snowflake", os.Getenv("SNOWFLAKE_DSN"))
if err != nil {
log.Fatal(err)
}
defer db.Close()
rows, err := db.Query("SELECT country, COUNT(*) AS events, TO_VARCHAR(SUM(revenue)) AS revenue FROM events GROUP BY country ORDER BY SUM(revenue) DESC")
if err != nil {
log.Fatal(err)
}
defer rows.Close()
for rows.Next() {
var country, revenue string
var events int64
if err := rows.Scan(&country, &events, &revenue); err != nil {
log.Fatal(err)
}
fmt.Printf("%s\t%d\t%s\n", country, events, revenue)
}
if err := rows.Err(); err != nil {
log.Fatal(err)
}
}
go.mod
module example.com/machwarehouse/snowflake-go
go 1.27
require github.com/snowflakedb/gosnowflake/v2 v2.3.0