Databricks SQL Driver for Go
A Databricks SQL Driver for Go egy Go-kódtár , amely lehetővé teszi, hogy Go-kód használatával SQL-parancsokat futtasson az Azure Databricks számítási erőforrásain. Ez a cikk kiegészíti a Databricks SQL-illesztőprogramot a Go README-hez, az API-referenciákat és példákat.
Követelmények
- A Go 1.20-es vagy újabb verzióját futtató fejlesztőgép. A Go telepített verziójának nyomtatásához futtassa a parancsot
go version
. Töltse le és telepítse a Go-t. - Meglévő fürt vagy SQL Warehouse.
- A kiszolgáló állomásneve, portja és HTTP-elérési útja a meglévő fürt vagy SQL-raktár esetében.
- A fürt értékeinek lekérése.
- Ezeket az értékeket lekérheti egy SQL Warehouse-hoz.
A Databricks SQL Driver for Go használatának első lépései
A Go 1.20 vagy újabb verziójú fejlesztői gépen, és már létrehozott egy meglévő Go-kódprojektet, hozzon létre egy
go.mod
fájlt a Go-kód függőségeinek nyomon követéséhez ago mod init
parancs futtatásával, például:go mod init sample
A Databricks SQL Driver for Go csomagtól való függőséget a parancs futtatásával
go mod edit -require
, a Databricks SQL Driver for Go csomag legújabb verziójára cserélvev1.5.2
, a kiadásokban felsorolt módon:go mod edit -require github.com/databricks/databricks-sql-go@v1.5.2
A
go.mod
fájlnak így kell kinéznie:module sample go 1.20 require github.com/databricks/databricks-sql-go v1.5.2
A projektben hozzon létre egy Go-kódfájlt, amely importálja a Databricks SQL Driver for Go-t. Az alábbi példa egy, a következő tartalommal elnevezett
main.go
fájlban felsorolja az Azure Databricks-munkaterület összes fürtjének listáját:package main import ( "database/sql" "os" _ "github.com/databricks/databricks-sql-go" ) func main() { dsn := os.Getenv("DATABRICKS_DSN") if dsn == "" { panic("No connection string found. " + "Set the DATABRICKS_DSN environment variable, and try again.") } db, err := sql.Open("databricks", dsn) if err != nil { panic(err) } defer db.Close() if err := db.Ping(); err != nil { panic(err) } }
Adja hozzá a hiányzó modulfüggőségeket a
go mod tidy
parancs futtatásával:go mod tidy
Feljegyzés
Ha megjelenik a hiba
go: warning: "all" matched no packages
, elfelejtette hozzáadni a Databricks SQL Driver for Go-t importáló Go-kódfájlt.Készítsen másolatot a modulban lévő
main
csomagok buildjeinek és tesztjeinek támogatásához szükséges összes csomagról ago mod vendor
parancs futtatásával:go mod vendor
Szükség szerint módosítsa a kódot az
DATABRICKS_DSN
Azure Databricks-hitelesítés környezeti változójának beállításához. Lásd még: Csatlakozás DSN-kapcsolati sztring.Futtassa a Go-kódfájlt, feltéve, hogy a következő nevű fájlt
main.go
futtatja:go run
go run main.go
Ha nem ad vissza hibát, sikeresen hitelesítette a Databricks SQL Driver for Go-t az Azure Databricks-munkaterülettel, és csatlakozott a munkaterületen futó Azure Databricks-fürthöz vagy SQL Warehouse-hoz.
Csatlakozás DSN-kapcsolati sztring
Fürtök és SQL-raktárak sql.Open()
eléréséhez hozzon létre egy adatbázis-kezelőt egy adatforrásnévvel (DSN) kapcsolati sztring. Ez a példakód lekéri a DSN-kapcsolati sztring a következő nevű DATABRICKS_DSN
környezeti változóból:
package main
import (
"database/sql"
"os"
_ "github.com/databricks/databricks-sql-go"
)
func main() {
dsn := os.Getenv("DATABRICKS_DSN")
if dsn == "" {
panic("No connection string found. " +
"Set the DATABRICKS_DSN environment variable, and try again.")
}
db, err := sql.Open("databricks", dsn)
if err != nil {
panic(err)
}
defer db.Close()
if err := db.Ping(); err != nil {
panic(err)
}
}
A DSN-kapcsolati sztring helyes formátumban történő megadásához tekintse meg a DSN kapcsolati sztring példákat a hitelesítésben. Az Azure Databricks személyes hozzáférési jogkivonatának hitelesítéséhez például használja a következő szintaxist, ahol:
-
<personal-access-token>
Az Azure Databricks személyes hozzáférési jogkivonata a követelményekből. -
<server-hostname>
A kiszolgáló gazdagépnevének értéke a követelményekből. -
<port-number>
a követelmények portértéke , amely általában443
. -
<http-path>
a követelmények http-elérési útvonalának értéke. -
<paramX=valueX>
A cikk későbbi részében felsorolt egy vagy több választható paraméter.
token:<personal-access-token>@<server-hostname>:<port-number>/<http-path>?<param1=value1>&<param2=value2>
Például egy fürt esetében:
token:dapi12345678901234567890123456789012@adb-1234567890123456.7.azuredatabricks.net:443/sql/protocolv1/o/1234567890123456/1234-567890-abcdefgh
Például egy SQL-raktár esetében:
token:dapi12345678901234567890123456789012@adb-1234567890123456.7.azuredatabricks.net:443/sql/1.0/endpoints/a1b234c5678901d2
Feljegyzés
Ajánlott biztonsági eljárásként ne kódozza be ezt a DSN-t a Go-kódba kapcsolati sztring. Ehelyett le kell kérnie ezt a DSN-kapcsolati sztring egy biztonságos helyről. A cikk korábbi példakódja például egy környezeti változót használt.
Választható paraméterek
- A támogatott választható kapcsolati paraméterek a következőben
<param=value>
adhatók meg: . A leggyakrabban használtak közé tartoznak a következők:-
catalog
: Beállítja a kezdeti katalógusnevet a munkamenetben. -
schema
: Beállítja a kezdeti sémanevet a munkamenetben. -
maxRows
: Beállítja a kérésenként lekért sorok maximális számát. Az alapértelmezett érték10000
. -
timeout
: Hozzáadja a kiszolgálói lekérdezés végrehajtásához szükséges időtúllépést (másodpercben). Az alapértelmezett érték nem időtúllépés. -
userAgentEntry
: Partnerek azonosítására szolgál. További információkért tekintse meg a partner dokumentációját.
-
- A támogatott opcionális munkamenetparaméterek a következőben
param=value
adhatók meg: A leggyakrabban használtak közé tartoznak a következők:-
ansi_mode
: Logikai sztring.true
a munkamenet-utasítások az ANSI SQL-specifikációban meghatározott szabályok betartásához. A rendszer alapértelmezése hamis. -
timezone
: Egy sztring, példáulAmerica/Los_Angeles
. Beállítja a munkamenet időzónáját. A rendszer alapértelmezett értéke UTC.
-
Például egy SQL-raktár esetében:
token:dapi12345678901234567890123456789012@adb-1234567890123456.7.azuredatabricks.net:443/sql/1.0/endpoints/a1b234c5678901d2?catalog=hive_metastore&schema=example&maxRows=100&timeout=60&timezone=America/Sao_Paulo&ansi_mode=true
Csatlakozás a NewConnector
függvényhez
Azt is megteheti sql.OpenDB()
, hogy egy új összekötőobjektumon dbsql.NewConnector()
keresztül hoz létre adatbázis-kezelőt (az Új összekötő objektummal rendelkező Azure Databricks-fürtökhöz és SQL-tárolókhoz való csatlakozáshoz a Databricks SQL Driver for Go 1.0.0-s vagy újabb verziója szükséges). Példa:
package main
import (
"database/sql"
"os"
dbsql "github.com/databricks/databricks-sql-go"
)
func main() {
connector, err := dbsql.NewConnector(
dbsql.WithAccessToken(os.Getenv("DATABRICKS_ACCESS_TOKEN")),
dbsql.WithServerHostname(os.Getenv("DATABRICKS_HOST")),
dbsql.WithPort(443),
dbsql.WithHTTPPath(os.Getenv("DATABRICKS_HTTP_PATH")),
)
if err != nil {
panic(err)
}
db := sql.OpenDB(connector)
defer db.Close()
if err := db.Ping(); err != nil {
panic(err)
}
}
A megfelelő beállításkészlet NewConnector
megadásához tekintse meg a hitelesítés példáit.
Feljegyzés
Biztonsági ajánlott eljárásként ne írja be a NewConnector
beállításokat a Go-kódba. Ehelyett ezeket az értékeket biztonságos helyről kell lekérnie. Az előző kód például környezeti változókat használ.
A leggyakrabban használt funkcionális lehetőségek közé tartoznak a következők:
-
WithAccessToken(<access-token>)
: Az Azure Databricks személyes hozzáférési jogkivonata a követelményekből. Kötelezőstring
. -
WithServerHostname(<server-hostname>)
: A kiszolgáló gazdagépnév értéke a követelményekből. Kötelezőstring
. -
WithPort(<port>)
: A kiszolgáló portszáma általában443
. Kötelezőint
. -
WithHTTPPath(<http-path>)
: A http-elérési út értéke a követelményekből. Kötelezőstring
. -
WithInitialNamespace(<catalog>, <schema>)
:A katalógus és a séma neve a munkamenetben. Nem kötelezőstring, string
. -
WithMaxRows(<max-rows>)
: A lekért sorok maximális száma kérésenként. Az alapértelmezett beállítás nem10000.
kötelezőint
. -
WithSessionParams(<params-map>)
: A munkamenet paraméterei, beleértve az "időzónát" és a "ansi_mode". Nem kötelezőmap[string]string
. -
WithTimeout(<timeout>)
. A kiszolgálói lekérdezés végrehajtásának időtúllépése (intime.Duration
) Az alapértelmezett érték nem időtúllépés. Opcionális. -
WithUserAgentEntry(<isv-name-plus-product-name>)
. Partnerek azonosítására szolgál. További információkért tekintse meg a partner dokumentációját. Nem kötelezőstring
.
Példa:
connector, err := dbsql.NewConnector(
dbsql.WithAccessToken(os.Getenv("DATABRICKS_ACCESS_TOKEN")),
dbsql.WithServerHostname(os.Getenv("DATABRICKS_HOST")),
dbsql.WithPort(443),
dbsql.WithHTTPPath(os.Getenv("DATABRICKS_HTTP_PATH")),
dbsql.WithInitialNamespace("samples", "nyctaxi"),
dbsql.WithMaxRows(100),
dbsql.SessionParams(map[string]string{"timezone": "America/Sao_Paulo", "ansi_mode": "true"}),
dbsql.WithTimeout(time.Minute),
dbsql.WithUserAgentEntry("example-user"),
)
Hitelesítés
A Databricks SQL Driver for Go a következő Azure Databricks-hitelesítési típusokat támogatja:
- Databricks személyes hozzáférési jogkivonat hitelesítése
- Microsoft Entra-azonosító jogkivonat hitelesítése
- OAuth user-to-machine (U2M) hitelesítés
- OAuth gépről gépre (M2M) hitelesítés
A Databricks SQL Driver for Go még nem támogatja a következő Azure Databricks-hitelesítési típusokat:
- Felügyelt Azure-identitások hitelesítése
- MS Entra szolgáltatásnév hitelesítése
- Azure CLI hitelesítés
Databricks személyes hozzáférési jogkivonat hitelesítése
A Databricks SQL Driver for Go Azure Databricks személyes hozzáférési jogkivonat-hitelesítéssel való használatához először létre kell hoznia egy Azure Databricks személyes hozzáférési jogkivonatot. A lépés részleteiért tekintse meg az Azure Databricks személyes hozzáférési jogkivonatait a munkaterület felhasználói számára.
A Databricks SQL Driver for Go DSN-kapcsolati sztring és a Connect with a DSN kapcsolati sztring kód példájának hitelesítéséhez használja a következő DSN-kapcsolati sztring szintaxist, ahol:
-
<personal-access-token>
Az Azure Databricks személyes hozzáférési jogkivonata a követelményekből. -
<server-hostname>
A kiszolgáló gazdagépnevének értéke a követelményekből. -
<port-number>
a követelmények portértéke , amely általában443
. -
<http-path>
a követelmények http-elérési útvonalának értéke.
Hozzáfűzhet egy vagy több választható paramétert is a cikkben korábban felsoroltakhoz.
token:<personal-access-token>@<server-hostname>:<port-number>/<http-path>
A Databricks SQL Driver for Go függvénysel való NewConnector
hitelesítéséhez használja a következő kódrészletet és a Connect with the NewConnector függvény kódpéldát, amely feltételezi, hogy a következő környezeti változókat állította be:
- Állítsa be a
DATABRICKS_SERVER_HOSTNAME
komponenst a szerver hosztnév értékére a fürt vagy az SQL tárház számára. -
DATABRICKS_HTTP_PATH
, állítsa be HTTP-elérési út értékét a fürt vagy SQL-adattárház számára. -
DATABRICKS_TOKEN
, állítsa be az Azure Databricks személyes hozzáférési tokenre.
A környezeti változók beállításához tekintse meg az operációs rendszer dokumentációját.
connector, err := dbsql.NewConnector(
dbsql.WithServerHostname(os.Getenv("DATABRICKS_SERVER_HOSTNAME")),
dbsql.WithHTTPPath(os.Getenv("DATABRICKS_HTTP_PATH")),
dbsql.WithPort(443),
dbsql.WithAccessToken(os.Getenv("DATABRICKS_TOKEN")),
)
Microsoft Entra-azonosító jogkivonat hitelesítése
A Databricks SQL Driver for Go támogatja a Microsoft Entra ID-jogkivonatokat egy Azure Databricks-felhasználóhoz vagy egy Microsoft Entra ID szolgáltatásnévhez.
Microsoft Entra ID hozzáférési jogkivonat létrehozásához tegye a következőket:
Azure Databricks-felhasználó esetén használhatja az Azure CLI-t. Lásd: Microsoft Entra-azonosító jogkivonatok lekérése felhasználók számára az Azure CLIhasználatával.
- A Microsoft Entra ID szolgáltatásnévvel kapcsolatban lásd : Microsoft Entra ID hozzáférési jogkivonat beszerzése az Azure CLI-vel. A Microsoft Entra ID által felügyelt szolgáltatásnév létrehozásához lásd: Szolgáltatásnevek kezelése.
A Microsoft Entra ID-jogkivonatok alapértelmezett élettartama körülbelül 1 óra. Új Microsoft Entra ID-jogkivonat létrehozásához ismételje meg ezt a folyamatot.
A Databricks SQL Driver for Go DSN-kapcsolati sztring és a Connect with a DSN kapcsolati sztring kód példájának hitelesítéséhez használja a következő DSN-kapcsolati sztring szintaxist, ahol:
-
<microsoft-entra-id-token>
A Microsoft Entra ID-jogkivonata. -
<server-hostname>
A kiszolgáló gazdagépnevének értéke a követelményekből. -
<port-number>
a követelmények portértéke , amely általában443
. -
<http-path>
a követelmények http-elérési útvonalának értéke.
Hozzáfűzhet egy vagy több választható paramétert is a cikkben korábban felsoroltakhoz.
token:<microsoft-entra-id-token>@<server-hostname>:<port-number>/<http-path>
A Databricks SQL Driver for Go függvénysel való
NewConnector
hitelesítéséhez használja a következő kódrészletet és a Connect with the NewConnector függvény kódpéldát, amely feltételezi, hogy a következő környezeti változókat állította be:- Állítsa be a
DATABRICKS_SERVER_HOSTNAME
komponenst a szerver hosztnév értékére a fürt vagy az SQL tárház számára. -
DATABRICKS_HTTP_PATH
, állítsa be HTTP-elérési út értékét a fürt vagy SQL-adattárház számára. -
DATABRICKS_TOKEN
elemet, állítsa be a Microsoft Entra ID-jogkivonatot.
A környezeti változók beállításához tekintse meg az operációs rendszer dokumentációját.
connector, err := dbsql.NewConnector( dbsql.WithServerHostname(os.Getenv("DATABRICKS_SERVER_HOSTNAME")), dbsql.WithHTTPPath(os.Getenv("DATABRICKS_HTTP_PATH")), dbsql.WithPort(443), dbsql.WithAccessToken(os.Getenv("DATABRICKS_TOKEN")), )
OAuth user-to-machine (U2M) hitelesítés
A Databricks SQL Driver for Go 1.5.0-s és újabb verziói támogatják az OAuth felhasználó–gép (U2M) hitelesítést.
A Databricks SQL Driver for Go DSN-kapcsolati sztring és a Connect with a DSN kapcsolati sztring kód példájának használatához használja a következő DSN-kapcsolati sztring szintaxist, ahol:
-
<server-hostname>
A kiszolgáló gazdagépnevének értéke a követelményekből. -
<port-number>
a követelmények portértéke , amely általában443
. -
<http-path>
a követelmények http-elérési útvonalának értéke.
Hozzáfűzhet egy vagy több választható paramétert is a cikkben korábban felsoroltakhoz.
<server-hostname>:<port-number>/<http-path>?authType=OauthU2M
A Databricks SQL Driver for Go függvénysel való NewConnector
hitelesítéséhez először a következőket kell hozzáadnia a import
deklarációhoz:
"github.com/databricks/databricks-sql-go/auth/oauth/u2m"
Ezután használja a következő kódrészletet és a Kódpéldát a Connect with the NewConnector függvényben, amely feltételezi, hogy a következő környezeti változókat állította be:
- Állítsa be a
DATABRICKS_SERVER_HOSTNAME
komponenst a szerver hosztnév értékére a fürt vagy az SQL tárház számára. -
DATABRICKS_HTTP_PATH
, állítsa be HTTP-elérési út értékét a fürt vagy SQL-adattárház számára.
A környezeti változók beállításához tekintse meg az operációs rendszer dokumentációját.
authenticator, err := u2m.NewAuthenticator(os.Getenv("DATABRICKS_SERVER_HOSTNAME"), 1*time.Minute)
if err != nil {
panic(err)
}
connector, err := dbsql.NewConnector(
dbsql.WithServerHostname(os.Getenv("DATABRICKS_SERVER_HOSTNAME")),
dbsql.WithHTTPPath(os.Getenv("DATABRICKS_HTTP_PATH")),
dbsql.WithPort(443),
dbsql.WithAuthenticator(authenticator),
)
OAuth machine-to-machine (M2M) hitelesítés
A Databricks SQL Driver for Go 1.5.2-es és újabb verziói támogatják az OAuth machine-to-machine (M2M) hitelesítést.
A Databricks SQL Driver for Go OAuth M2M-hitelesítéssel való használatához a következőket kell tennie:
Hozzon létre egy Azure Databricks-szolgáltatásnevet az Azure Databricks-munkaterületen, és hozzon létre egy OAuth-titkos kulcsot a szolgáltatásnévhez.
A szolgáltatásnév és az OAuth-titkos kód létrehozásához lásd: Felügyelet nélküli hozzáférés engedélyezése az Azure Databricks-erőforrásokhoz egy szolgáltatásnévvel az OAuthhasználatával. Jegyezze fel a szolgáltatásnév UUID - vagy alkalmazásazonosító-értékét , valamint a szolgáltatásnév OAuth-titkos kódjának titkos értékét.
Adjon hozzáférést a szolgáltatásnévnek a fürthöz vagy a raktárhoz.
Ha hozzáférést szeretne adni a szolgáltatásnévnek a fürthöz vagy a raktárhoz, olvassa el a számítási engedélyeket vagy az SQL-raktár kezelését.
A Databricks SQL Driver for Go DSN-kapcsolati sztring és a Connect with a DSN kapcsolati sztring kód példájának hitelesítéséhez használja a következő DSN-kapcsolati sztring szintaxist, ahol:
-
<server-hostname>
A kiszolgáló gazdagépnevének értéke a követelményekből. -
<port-number>
a követelmények portértéke , amely általában443
. -
<http-path>
a követelmények http-elérési útvonalának értéke. -
<client-id>
A szolgáltatásnév UUID - vagy alkalmazásazonosító-értéke . -
<client-secret>
A szolgáltatásnév OAuth-titkos kódjának titkos értéke.
Hozzáfűzhet egy vagy több választható paramétert is a cikkben korábban felsoroltakhoz.
<server-hostname>:<port-number>/<http-path>?authType=OAuthM2M&clientID=<client-id>&clientSecret=<client-secret>
A Databricks SQL Driver for Go függvénysel való NewConnector
hitelesítéséhez először a következőket kell hozzáadnia a import
deklarációhoz:
"github.com/databricks/databricks-sql-go/auth/oauth/m2m"
Ezután használja a következő kódrészletet és a Kódpéldát a Connect with the NewConnector függvényben, amely feltételezi, hogy a következő környezeti változókat állította be:
- Állítsa be a
DATABRICKS_SERVER_HOSTNAME
komponenst a szerver hosztnév értékére a fürt vagy az SQL tárház számára. -
DATABRICKS_HTTP_PATH
, állítsa be HTTP-elérési út értékét a fürt vagy SQL-adattárház számára. -
DATABRICKS_CLIENT_ID
, állítsa be a szolgáltatásnév UUID - vagy alkalmazásazonosító-értékét . -
DATABRICKS_CLIENT_SECRET
, állítsa be a szolgáltatásnév OAuth-titkos kódjának titkos értékét.
A környezeti változók beállításához tekintse meg az operációs rendszer dokumentációját.
authenticator := m2m.NewAuthenticator(
os.Getenv("DATABRICKS_CLIENT_ID"),
os.Getenv("DATABRICKS_CLIENT_SECRET"),
os.Getenv("DATABRICKS_SERVER_HOSTNAME"),
)
connector, err := dbsql.NewConnector(
dbsql.WithServerHostname(os.Getenv("DATABRICKS_SERVER_HOSTNAME")),
dbsql.WithHTTPPath(os.Getenv("DATABRICKS_HTTP_PATH")),
dbsql.WithPort(443),
dbsql.WithAuthenticator(authenticator),
)
Adatok lekérdezése
Az alábbi példakód bemutatja, hogyan hívhatja meg a Databricks SQL Driver for Go-t egy alapszintű SQL-lekérdezés futtatásához egy Azure Databricks számítási erőforráson. Ez a parancs a katalógus sémájában lévő trips
táblázat első két sorát samples
nyctaxi
adja vissza.
Ez a példakód lekéri a DSN-kapcsolati sztring egy nevesített DATABRICKS_DSN
környezeti változóból.
package main
import (
"database/sql"
"fmt"
"os"
"time"
_ "github.com/databricks/databricks-sql-go"
)
func main() {
dsn := os.Getenv("DATABRICKS_DSN")
if dsn == "" {
panic("No connection string found." +
"Set the DATABRICKS_DSN environment variable, and try again.")
}
db, err := sql.Open("databricks", dsn)
if err != nil {
panic(err)
}
defer db.Close()
var (
tpep_pickup_datetime time.Time
tpep_dropoff_datetime time.Time
trip_distance float64
fare_amount float64
pickup_zip int
dropoff_zip int
)
rows, err := db.Query("SELECT * FROM samples.nyctaxi.trips LIMIT 2")
if err != nil {
panic(err)
}
defer rows.Close()
fmt.Print("tpep_pickup_datetime,",
"tpep_dropoff_datetime,",
"trip_distance,",
"fare_amount,",
"pickup_zip,",
"dropoff_zip\n")
for rows.Next() {
err := rows.Scan(&tpep_pickup_datetime,
&tpep_dropoff_datetime,
&trip_distance,
&fare_amount,
&pickup_zip,
&dropoff_zip)
if err != nil {
panic(err)
}
fmt.Print(tpep_pickup_datetime, ",",
tpep_dropoff_datetime, ",",
trip_distance, ",",
fare_amount, ",",
pickup_zip, ",",
dropoff_zip, "\n")
}
err = rows.Err()
if err != nil {
panic(err)
}
}
Fájlok kezelése Unity Catalog-kötetekben
A Databricks SQL-illesztővel helyi fájlokat írhat a Unity Catalog-kötetekbe, fájlokat tölthet le kötetekről, és fájlokat törölhet a kötetekből, ahogyan az alábbi példában látható:
package main
import (
"context"
"database/sql"
"os"
_ "github.com/databricks/databricks-sql-go"
"github.com/databricks/databricks-sql-go/driverctx"
)
func main() {
dsn := os.Getenv("DATABRICKS_DSN")
if dsn == "" {
panic("No connection string found." +
"Set the DATABRICKS_DSN environment variable, and try again.")
}
db, err := sql.Open("databricks", dsn)
if err != nil {
panic(err)
}
defer db.Close()
// For writing local files to volumes and downloading files from volumes,
// you must first specify the path to the local folder that contains the
// files to be written or downloaded.
// For multiple folders, add their paths to the following string array.
// For deleting files in volumes, this string array is ignored but must
// still be provided, so in that case its value can be set for example
// to an empty string.
ctx := driverctx.NewContextWithStagingInfo(
context.Background(),
[]string{"/tmp/"},
)
// Write a local file to the path in the specified volume.
// Specify OVERWRITE to overwrite any existing file in that path.
db.ExecContext(ctx, "PUT '/tmp/my-data.csv' INTO '/Volumes/main/default/my-volume/my-data.csv' OVERWRITE")
// Download a file from the path in the specified volume.
db.ExecContext(ctx, "GET '/Volumes/main/default/my-volume/my-data.csv' TO '/tmp/my-downloaded-data.csv'")
// Delete a file from the path in the specified volume.
db.ExecContext(ctx, "REMOVE '/Volumes/main/default/my-volume/my-data.csv'")
db.Close()
}
Naplózás
A Databricks SQL Driver for Go által kibocsátott üzenetek naplózására használható github.com/databricks/databricks-sql-go/logger
. Az alábbi példakód egy adatbázis-kezelő DSN-kapcsolati sztring keresztüli létrehozására szolgálsql.Open()
. Ez a példakód lekéri a DSN-kapcsolati sztring egy nevesített DATABRICKS_DSN
környezeti változóból. Minden, az debug
adott szinten és alatt kibocsátott naplóüzenet a results.log
fájlba lesz írva.
package main
import (
"database/sql"
"io"
"log"
"os"
_ "github.com/databricks/databricks-sql-go"
dbsqllog "github.com/databricks/databricks-sql-go/logger"
)
func main() {
dsn := os.Getenv("DATABRICKS_DSN")
// Use the specified file for logging messages to.
file, err := os.Create("results.log")
if err != nil {
log.Fatal(err)
}
defer file.Close()
writer := io.Writer(file)
// Log messages at the debug level and below.
if err := dbsqllog.SetLogLevel("debug"); err != nil {
log.Fatal(err)
}
// Log messages to the file.
dbsqllog.SetLogOutput(writer)
if dsn == "" {
panic("Error: Cannot connect. No connection string found. " +
"Set the DATABRICKS_DSN environment variable, and try again.")
}
db, err := sql.Open("databricks", dsn)
if err != nil {
panic(err)
}
defer db.Close()
if err := db.Ping(); err != nil {
panic(err)
}
}
Tesztelés
A kód teszteléséhez használja a Go tesztelési keretrendszereket, például a tesztelési standard kódtárat. Ha szimulált körülmények között szeretné tesztelni a kódot az Azure Databricks REST API-végpontok meghívása vagy az Azure Databricks-fiókok vagy -munkaterületek állapotának módosítása nélkül, használja a Go-kódtárakat, például a testfify-et.
Ha például a következő fájl neve helpers.go
egy GetDBWithDSNPAT
Azure Databricks-munkaterületi kapcsolatot visszaadó függvényt tartalmaz, egy GetNYCTaxiTrips
függvény, amely adatokat ad vissza a trips
samples
katalógus sémájában nyctaxi
lévő táblából, és a PrintNYCTaxiTrips
visszaadott adatokat kinyomtatja:
package main
import (
"database/sql"
"fmt"
"strconv"
"time"
)
func GetDBWithDSNPAT(dsn string) (*sql.DB, error) {
db, err := sql.Open("databricks", dsn)
if err != nil {
return nil, err
}
return db, nil
}
func GetNYCTaxiTrips(db *sql.DB, numRows int) (*sql.Rows, error) {
rows, err := db.Query("SELECT * FROM samples.nyctaxi.trips LIMIT " + strconv.Itoa(numRows))
if err != nil {
return nil, err
}
return rows, nil
}
func PrintNYCTaxiTrips(rows *sql.Rows) {
var (
tpep_pickup_datetime time.Time
tpep_dropoff_datetime time.Time
trip_distance float64
fare_amount float64
pickup_zip int
dropoff_zip int
)
fmt.Print(
"tpep_pickup_datetime,",
"tpep_dropoff_datetime,",
"trip_distance,",
"fare_amount,",
"pickup_zip,",
"dropoff_zip\n",
)
for rows.Next() {
err := rows.Scan(
&tpep_pickup_datetime,
&tpep_dropoff_datetime,
&trip_distance,
&fare_amount,
&pickup_zip,
&dropoff_zip,
)
if err != nil {
panic(err)
}
fmt.Print(
tpep_pickup_datetime, ",",
tpep_dropoff_datetime, ",",
trip_distance, ",",
fare_amount, ",",
pickup_zip, ",",
dropoff_zip, "\n",
)
}
err := rows.Err()
if err != nil {
panic(err)
}
}
És mivel a következő fájl neve main.go
hívja ezeket a függvényeket:
package main
import (
"os"
)
func main() {
db, err := GetDBWithDSNPAT(os.Getenv("DATABRICKS_DSN"))
if err != nil {
panic(err)
}
rows, err := GetNYCTaxiTrips(db, 2)
if err != nil {
panic(err)
}
PrintNYCTaxiTrips(rows)
}
A következő elnevezett helpers_test.go
fájl ellenőrzi, hogy a GetNYCTaxiTrips
függvény a várt választ adja-e vissza. Ahelyett, hogy valódi kapcsolatot hoz létre a cél-munkaterülethez, ez a teszt egy sql.DB
objektumot szimulál. A teszt néhány olyan adatot is szimulál, amely megfelel a valós adatok sémájának és értékeinek. A teszt a szimulált kapcsolaton keresztül adja vissza a szimulált adatokat, majd ellenőrzi, hogy a szimulált adatsorok egyik értéke megegyezik-e a várt értékkel.
package main
import (
"database/sql"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/mock"
)
// Define an interface that contains a method with the same signature
// as the real GetNYCTaxiTrips function that you want to test.
type MockGetNYCTaxiTrips interface {
GetNYCTaxiTrips(db *sql.DB, numRows int) (*sql.Rows, error)
}
// Define a struct that represents the receiver of the interface's method
// that you want to test.
type MockGetNYCTaxiTripsObj struct {
mock.Mock
}
// Define the behavior of the interface's method that you want to test.
func (m *MockGetNYCTaxiTripsObj) GetNYCTaxiTrips(db *sql.DB, numRows int) (*sql.Rows, error) {
args := m.Called(db, numRows)
return args.Get(0).(*sql.Rows), args.Error(1)
}
func TestGetNYCTaxiTrips(t *testing.T) {
// Instantiate the receiver.
mockGetNYCTaxiTripsObj := new(MockGetNYCTaxiTripsObj)
// Define how the mock function should be called and what it should return.
// We're not concerned with whether the actual database is connected to--just
// what is returned.
mockGetNYCTaxiTripsObj.On("GetNYCTaxiTrips", mock.Anything, mock.AnythingOfType("int")).Return(&sql.Rows{}, nil)
// Call the mock function that you want to test.
rows, err := mockGetNYCTaxiTripsObj.GetNYCTaxiTrips(nil, 2)
// Assert that the mock function was called as expected.
mockGetNYCTaxiTripsObj.AssertExpectations(t)
// Assert that the mock function returned what you expected.
assert.NotNil(t, rows)
assert.Nil(t, err)
}
Mivel a GetNYCTaxiTrips
függvény egy SELECT
utasítást tartalmaz, és ezért nem változtatja meg a trips
tábla állapotát, ebben a példában nem feltétlenül szükséges a mockolás. A gúnyolással azonban gyorsan futtathatja a teszteket anélkül, hogy tényleges kapcsolatra kellene várnia a munkaterülettel. Emellett a mockolás lehetővé teszi, hogy a szimulált tesztek többször is lefuttathatók legyenek olyan függvények esetében, amelyek megváltoztathatják a tábla állapotát, például INSERT INTO
, UPDATE
és DELETE FROM
.
További erőforrások
- A Databricks SQL Driver for Go-adattár a GitHubon
- Az adatbázis/sql-csomag kezdőlapja
- A Databricks SQL Driver for Go-példák a GitHubon