From 838f92bcb2cace60a44071b6a8822f4806425b4f Mon Sep 17 00:00:00 2001 From: Saurav Haloi Date: Wed, 13 Feb 2019 12:40:54 +0530 Subject: [PATCH] added example to enumerate DBs in Impala --- examples/enumerateDB.go | 81 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100755 examples/enumerateDB.go diff --git a/examples/enumerateDB.go b/examples/enumerateDB.go new file mode 100755 index 0000000..f283905 --- /dev/null +++ b/examples/enumerateDB.go @@ -0,0 +1,81 @@ +package main + +// Simple program to list databases and the tables + +import ( + "context" + "fmt" + "log" + + impala "github.com/bippio/go-impala" +) + +func main() { + host := "" + port := 21000 + + opts := impala.DefaultOptions + + // enable LDAP authentication: + opts.UseLDAP = true + opts.Username = "" + opts.Password = "" + + // enable TLS + opts.UseTLS = true + opts.CACertPath = "/path/to/cacert" + + con, err := impala.Connect(host, port, &opts) + if err != nil { + log.Fatal(err) + } + + ctx := context.Background() + + var rows impala.RowSet + + // get all databases for the connection object + query := fmt.Sprintf("SHOW DATABASES") + rows, err = con.Query(ctx, query) + if err != nil { + log.Fatal("error in retrieving databases: ", err) + } + + databases := make([]string, 0) // databases will contain all the DBs to enumerate later + for rows.Next(ctx) { + row := make(map[string]interface{}) + err = rows.MapScan(row) + if err != nil { + log.Println(err) + continue + } + if db, ok := row["name"].(string); ok { + databases = append(databases, db) + } + } + log.Println("List of Databases", databases) + + for _, d := range databases { + q := "SHOW TABLES IN " + d + + rows, err = con.Query(ctx, q) + if err != nil { + log.Printf("error in querying database %s: %s", d, err.Error()) + continue + } + + tables := make([]string, 0) // databases will contain all the DBs to enumerate later + for rows.Next(ctx) { + row := make(map[string]interface{}) + err = rows.MapScan(row) + if err != nil { + log.Println(err) + continue + } + if tab, ok := row["name"].(string); ok { + tables = append(tables, tab) + } + } + log.Printf("List of Tables in Database %s: %v\n", d, tables) + } +}