github.com/snowflakedb/gosnowflake@v1.9.0/cmd/distributedfetch/distributedfetch.go (about)

     1  package main
     2  
     3  import (
     4  	"database/sql"
     5  	"flag"
     6  	"fmt"
     7  	"log"
     8  
     9  	sf "github.com/snowflakedb/gosnowflake"
    10  )
    11  
    12  func main() {
    13  	defer printExampleDescription()
    14  	if !flag.Parsed() {
    15  		flag.Parse()
    16  	}
    17  
    18  	cfg, err := sf.GetConfigFromEnv([]*sf.ConfigParam{
    19  		{Name: "Account", EnvName: "SNOWFLAKE_TEST_ACCOUNT", FailOnMissing: true},
    20  		{Name: "User", EnvName: "SNOWFLAKE_TEST_USER", FailOnMissing: true},
    21  		{Name: "Password", EnvName: "SNOWFLAKE_TEST_PASSWORD", FailOnMissing: true},
    22  		{Name: "Host", EnvName: "SNOWFLAKE_TEST_HOST", FailOnMissing: false},
    23  		{Name: "Port", EnvName: "SNOWFLAKE_TEST_PORT", FailOnMissing: false},
    24  		{Name: "Protocol", EnvName: "SNOWFLAKE_TEST_PROTOCOL", FailOnMissing: false},
    25  	})
    26  	if err != nil {
    27  		log.Fatalf("failed to create Config, err: %v", err)
    28  	}
    29  	dsn, err := sf.DSN(cfg)
    30  	if err != nil {
    31  		log.Fatalf("failed to create DSN from Config: %v, err: %v", cfg, err)
    32  	}
    33  
    34  	db, err := sql.Open("snowflake", dsn)
    35  	if err != nil {
    36  		log.Fatalf("failed to connect. %v, err: %v", dsn, err)
    37  	}
    38  	defer db.Close()
    39  
    40  	sf.GetLogger().SetLogLevel("debug")
    41  
    42  	query := "SELECT 1 FROM TABLE(GENERATOR(ROWCOUNT=>10000000))"
    43  	rows, err := db.Query(query) // no cancel is allowed
    44  	if err != nil {
    45  		log.Fatalf("failed to run a query. %v, err: %v", query, err)
    46  	}
    47  	defer rows.Close()
    48  	var v int
    49  	for rows.Next() {
    50  		err := rows.Scan(&v)
    51  		if err != nil {
    52  			log.Fatalf("failed to get result. err: %v", err)
    53  		}
    54  		if v != 1 {
    55  			log.Fatalf("failed to get 1. got: %v", v)
    56  		}
    57  	}
    58  	if rows.Err() != nil {
    59  		fmt.Printf("ERROR: %v\n", rows.Err())
    60  		return
    61  	}
    62  
    63  	sf.GetLogger().SetLogLevel("error")
    64  }
    65  
    66  func printExampleDescription() {
    67  	fmt.Printf(`
    68  		Logs should present links from which particular chunks has been downloaded.
    69  		Also, notice logs like "decoded <number> rows" from multiple goroutines (the number after log level), as chunks are downloaded in parallel.
    70  	`)
    71  }