Skip to content

Commit db459da

Browse files
Add support for Snowflake data stream APIs (#54)
* Add support for Snowflake data stream APIs db-link fqn * typo * Add engine args to create-snowflake-integration * minor * Update changelog * change data stream command args --------- Co-authored-by: Wien Leung <[email protected]>
1 parent 9c9a102 commit db459da

File tree

9 files changed

+241
-9
lines changed

9 files changed

+241
-9
lines changed

CHANGELOG.md

+5
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
# Changelog
22

3+
## v0.1.5-alpha
4+
5+
* Add Snowflake data stream commands
6+
* Update Snowflake integration creation to require assigning a RAI engine
7+
38
## v0.1.4-alpha
49

510
* Add Snowflake integration commands

go.mod

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ go 1.18
44

55
require (
66
github.com/pkg/errors v0.9.1
7-
github.com/relationalai/rai-sdk-go v0.4.4-alpha
7+
github.com/relationalai/rai-sdk-go v0.4.5-alpha
88
github.com/spf13/cobra v1.5.0
99
)
1010

go.sum

+2-2
Original file line numberDiff line numberDiff line change
@@ -277,8 +277,8 @@ github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R
277277
github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
278278
github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A=
279279
github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
280-
github.com/relationalai/rai-sdk-go v0.4.4-alpha h1:AsZsEWK8K9RPIQ0hFDFuPHqtUrhY3Yz5TeRdhkzPvNw=
281-
github.com/relationalai/rai-sdk-go v0.4.4-alpha/go.mod h1:qfIZ7OiUpM+ZLPB8m358DFQPRPFzMjM4ghX4iKR8UHo=
280+
github.com/relationalai/rai-sdk-go v0.4.5-alpha h1:+F7Z2K7H2q8S1x4Y0P7baz9GyCGOlTIVRmnacwmo228=
281+
github.com/relationalai/rai-sdk-go v0.4.5-alpha/go.mod h1:qfIZ7OiUpM+ZLPB8m358DFQPRPFzMjM4ghX4iKR8UHo=
282282
github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
283283
github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
284284
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=

rai/cmds.go

+70-3
Original file line numberDiff line numberDiff line change
@@ -785,6 +785,7 @@ func updateUser(cmd *cobra.Command, args []string) {
785785
func createSnowflakeIntegration(cmd *cobra.Command, args []string) {
786786
action := newAction(cmd)
787787
name := args[0]
788+
engine := action.getString("engine")
788789
account := action.getStringEnv("account", "SNOWSQL_ACCOUNT")
789790
adminUsername := action.getStringEnv("admin-username", "SNOWSQL_USER")
790791
adminPassword := action.getStringEnv("admin-password", "SNOWSQL_PWD")
@@ -796,7 +797,7 @@ func createSnowflakeIntegration(cmd *cobra.Command, args []string) {
796797
Username: proxyUsername, Password: proxyPassword}
797798
action.Start("Create Snowflake integration '%s' account='%s'", name, account)
798799
rsp, err := action.Client().CreateSnowflakeIntegration(
799-
name, account, &adminCreds, &proxyCreds)
800+
name, account, engine, &adminCreds, &proxyCreds)
800801
action.Exit(rsp, err)
801802
}
802803

@@ -837,7 +838,7 @@ func createSnowflakeDatabaseLink(cmd *cobra.Command, args []string) {
837838
schema := action.getStringEnv("schema", "SNOWSQL_SCHEMA")
838839
role := action.getStringEnv("role", "SNOWSQL_ROLE")
839840
username := action.getStringEnv("username", "SNOWSQL_USER")
840-
password := action.getStringEnv("username", "SNOWSQL_PWD")
841+
password := action.getStringEnv("password", "SNOWSQL_PWD")
841842
creds := rai.SnowflakeCredentials{Username: username, Password: password}
842843
name := fmt.Sprintf("%s.%s", database, schema)
843844
action.Start("Create Snowflake database link '%s' (%s)", name, integration)
@@ -853,7 +854,7 @@ func deleteSnowflakeDatabaseLink(cmd *cobra.Command, args []string) {
853854
schema := action.getStringEnv("schema", "SNOWSQL_SCHEMA")
854855
role := action.getStringEnv("role", "SNOWSQL_ROLE")
855856
username := action.getStringEnv("username", "SNOWSQL_USER")
856-
password := action.getStringEnv("username", "SNOWSQL_PWD")
857+
password := action.getStringEnv("password", "SNOWSQL_PWD")
857858
creds := rai.SnowflakeCredentials{Username: username, Password: password}
858859
name := fmt.Sprintf("%s.%s", database, schema)
859860
action.Start("Delete Snowflake database link '%s' (%s)", name, integration)
@@ -881,6 +882,72 @@ func listSnowflakeDatabaseLinks(cmd *cobra.Command, args []string) {
881882
action.Exit(rsp, err)
882883
}
883884

885+
//
886+
// Snowflake data streams
887+
//
888+
889+
func createSnowflakeDataStream(cmd *cobra.Command, args []string) {
890+
action := newAction(cmd)
891+
integration := args[0]
892+
dbLink := args[1]
893+
dataStream := args[2]
894+
role := action.getStringEnv("role", "SNOWSQL_ROLE")
895+
warehouse := action.getStringEnv("warehouse", "SNOWSQL_WAREHOUSE")
896+
username := action.getStringEnv("username", "SNOWSQL_USER")
897+
password := action.getStringEnv("password", "SNOWSQL_PWD")
898+
isView := action.getBool("is-view")
899+
raiDatabase := action.getString("rai-database")
900+
relation := action.getString("rai-relation")
901+
creds := &rai.SnowflakeCredentials{Username: username, Password: password}
902+
903+
opts := &rai.DataStreamOpts{
904+
IsView: isView,
905+
RaiDatabase: raiDatabase,
906+
Relation: relation,
907+
ObjectName: dataStream,
908+
Role: role,
909+
Warehouse: warehouse,
910+
}
911+
action.Start("Create Snowflake data stream '%s' (%s)", dataStream, integration)
912+
rsp, err := action.Client().CreateSnowflakeDataStream(integration, dbLink, creds, opts)
913+
action.Exit(rsp, err)
914+
}
915+
916+
func deleteSnowflakeDataStream(cmd *cobra.Command, args []string) {
917+
action := newAction(cmd)
918+
integration := args[0]
919+
dbLink := args[1]
920+
dataStream := args[2]
921+
role := action.getStringEnv("role", "SNOWSQL_ROLE")
922+
username := action.getStringEnv("username", "SNOWSQL_USER")
923+
password := action.getStringEnv("password", "SNOWSQL_PWD")
924+
creds := rai.SnowflakeCredentials{Username: username, Password: password}
925+
action.Start("Delete Snowflake data stream %s (%s)", dataStream, integration)
926+
err := action.Client().DeleteSnowflakeDataStream(
927+
integration, dbLink, dataStream, role, &creds,
928+
)
929+
action.Exit(nil, err)
930+
}
931+
932+
func getSnowflakeDataStream(cmd *cobra.Command, args []string) {
933+
action := newAction(cmd)
934+
integration := args[0]
935+
dbLink := args[1]
936+
dataStream := args[2]
937+
action.Start("Get Snowflake data stream %s (%s)", dataStream, integration)
938+
rsp, err := action.Client().GetSnowflakeDataStream(integration, dbLink, dataStream)
939+
action.Exit(rsp, err)
940+
}
941+
942+
func listSnowflakeDataStreams(cmd *cobra.Command, args []string) {
943+
action := newAction(cmd)
944+
integration := args[0]
945+
dbLink := args[1]
946+
action.Start("List Snowflake dataStreams linked to %s (%s)", dbLink, integration)
947+
rsp, err := action.Client().ListSnowflakeDataStreams(integration, dbLink)
948+
action.Exit(rsp, err)
949+
}
950+
884951
//
885952
// Misc
886953
//

rai/main.go

+44
Original file line numberDiff line numberDiff line change
@@ -296,6 +296,8 @@ func addCommands(root *cobra.Command) {
296296
Short: "Create a Snowflake integration",
297297
Args: cobra.ExactArgs(1),
298298
Run: createSnowflakeIntegration}
299+
cmd.Flags().String("engine", "", "default RAI engine for integration initiated actions (required)")
300+
cmd.MarkFlagRequired("engine")
299301
cmd.Flags().String("account", "", "Snowflake account (default: SNOWSQL_ACCOUNT env var)")
300302
cmd.Flags().String("admin-username", "", "Snowflake admin username (default: SNOWSQL_USER env var")
301303
cmd.Flags().String("admin-password", "", "Snowflake admin password (default: SNOWSQL_PWD env var")
@@ -367,6 +369,48 @@ func addCommands(root *cobra.Command) {
367369
Run: listSnowflakeDatabaseLinks}
368370
root.AddCommand(cmd)
369371

372+
// Snowflake Data Streams
373+
cmd = &cobra.Command{
374+
Use: "create-snowflake-data-stream integration database-link objectName",
375+
Short: "Create Snowflake data stream associated with an integration",
376+
Args: cobra.ExactArgs(3),
377+
Run: createSnowflakeDataStream}
378+
cmd.Flags().String("role", "", "Snowflake role (default: SNOWSQL_ROLE env var)")
379+
cmd.Flags().String("warehouse", "", "Snowflake warehouse (default: SNOWSQL_WAREHOUSE env var)")
380+
cmd.Flags().String("username", "", "Snowflake username (default: SNOWSQL_USER env var)")
381+
cmd.Flags().String("password", "", "Snowflake password (default: SNOWSQL_PWD env var)")
382+
cmd.Flags().Bool("is-view", false, "Snowflake object is a view (default: false)")
383+
cmd.Flags().String("rai-database", "", "RelationalAI target database name")
384+
cmd.MarkFlagRequired("rai-database")
385+
cmd.Flags().String("rai-relation", "", "RelationalAI target relation")
386+
cmd.MarkFlagRequired("rai-relation")
387+
root.AddCommand(cmd)
388+
389+
cmd = &cobra.Command{
390+
Use: "delete-snowflake-data-stream integration database-link objectName",
391+
Short: "Delete a Snowflake data stream associated with an integration",
392+
Args: cobra.ExactArgs(3),
393+
Run: deleteSnowflakeDataStream}
394+
cmd.Flags().String("role", "", "Snowflake role (default: SNOWSQL_ROLE env var)")
395+
cmd.Flags().String("warehouse", "", "Snowflake warehouse (default: SNOWSQL_WAREHOUSE env var)")
396+
cmd.Flags().String("username", "", "Snowflake username (default: SNOWSQL_USER env var)")
397+
cmd.Flags().String("password", "", "Snowflake password (default: SNOWSQL_PWD env var)")
398+
root.AddCommand(cmd)
399+
400+
cmd = &cobra.Command{
401+
Use: "get-snowflake-data-stream integration database-link objectName",
402+
Short: "Get information about a Snowflake data stream associated with an integration and database-link",
403+
Args: cobra.ExactArgs(3),
404+
Run: getSnowflakeDataStream}
405+
root.AddCommand(cmd)
406+
407+
cmd = &cobra.Command{
408+
Use: "list-snowflake-data-streams integration database-link",
409+
Short: "List Snowflake data streams associated with an integration ",
410+
Args: cobra.ExactArgs(2),
411+
Run: listSnowflakeDataStreams}
412+
root.AddCommand(cmd)
413+
370414
// Misc
371415
cmd = &cobra.Command{
372416
Use: "get-access-token",

vendor/github.com/relationalai/rai-sdk-go/rai/client.go

+66-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/relationalai/rai-sdk-go/rai/models.go

+51
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/relationalai/rai-sdk-go/rai/version.go

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/modules.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ github.com/pierrec/lz4/v4/internal/xxh32
4949
# github.com/pkg/errors v0.9.1
5050
## explicit
5151
github.com/pkg/errors
52-
# github.com/relationalai/rai-sdk-go v0.4.4-alpha
52+
# github.com/relationalai/rai-sdk-go v0.4.5-alpha
5353
## explicit; go 1.18
5454
github.com/relationalai/rai-sdk-go/rai
5555
github.com/relationalai/rai-sdk-go/rai/pb

0 commit comments

Comments
 (0)