Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Go için Databricks SQL Sürücüsü, Azure Databricks işlem kaynaklarında SQL komutlarını çalıştırmak için Go kodunu kullanmanıza olanak tanıyan bir Go kitaplığıdır. Bu makalede Go README için Databricks SQL Sürücüsü, API başvurusu ve örnekler desteklenir.
Gereksinimler
- Go, sürüm 1.20 veya üzerini çalıştıran bir geliştirme makinesi. Go'nun yüklü sürümünü yazdırmak için komutunu
go versionçalıştırın. Go'u indirin ve yükleyin. - Mevcut bir küme veya SQL ambarı.
- Mevcut küme veya SQL ambarı için Sunucu Ana Bilgisayar Adı, Bağlantı Noktası ve HTTP Yolu değerleri.
Go için Databricks SQL Sürücüsü ile çalışmaya başlama
Go 1.20 veya üzeri yüklü ve zaten oluşturulmuş bir Go kodu projesi bulunan geliştirme makinenizde, komutunu çalıştırarak
go.modGo kodunuzun bağımlılıklarını izlemek için birgo mod initdosya oluşturun, örneğin:go mod init sampleGo için Databricks SQL Sürücüsü paketine bağımlı olmak için
go mod edit -requirekomutunu çalıştırın vev1.5.2yerine, Sürümler'de listelenen Databricks SQL Driver for Go paketinin en son sürümünü kullanın.go mod edit -require github.com/databricks/databricks-sql-go@v1.5.2Dosyanız
go.modşu şekilde görünmelidir:module sample go 1.20 require github.com/databricks/databricks-sql-go v1.5.2Projenizde, Go için Databricks SQL Sürücüsünü içeri aktaran bir Go kod dosyası oluşturun. Aşağıdaki örnek, aşağıdaki içeriklere sahip adlı
main.gobir dosyada Azure Databricks çalışma alanınızdaki tüm kümeleri listeler: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) } }komutunu çalıştırarak
go mod tidyeksik modül bağımlılıklarını ekleyin:go mod tidyNot
hatasını
go: warning: "all" matched no packagesalırsanız, Go için Databricks SQL Sürücüsünü içeri aktaran bir Go kod dosyası eklemeyi unuttunuz.komutunu çalıştırarak modülünüzdeki
mainpaketlerin derlemelerini ve testlerini desteklemek için gereken tüm paketlerin kopyalarınıgo mod vendoroluşturun:go mod vendorAzure Databricks
DATABRICKS_DSNiçin ortam değişkenini ayarlamak için kodunuzu gerektiği gibi değiştirin. Ayrıca bkz . DSN bağlantı dizesiyle bağlanma.komutunu çalıştırarak, adlı
main.gobir dosya varsayarak Go kod dosyanızı çalıştırıngo run:go run main.goHata döndürülmezse, Azure Databricks çalışma alanınızla Go için Databricks SQL Sürücüsünün kimliğini başarıyla doğrulamış ve bu çalışma alanındaki çalışan Azure Databricks kümenize veya SQL ambarınıza bağlanmış olursunuz.
DSN bağlantı dizesi ile bağlanma
Kümelere ve SQL ambarlarına erişmek için veri kaynağı adı (DSN) bağlantı dizesi aracılığıyla veritabanı tanıtıcısı oluşturmak için kullanınsql.Open(). Bu kod örneği, adlı DATABRICKS_DSNbir ortam değişkeninden DSN bağlantı dizesi alır:
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)
}
}
DSN bağlantı dizesini doğru biçimde belirtmek için Kimlik Doğrulaması'ndaki DSN bağlantı dizesi örneklerine bakın. Örneğin, Azure Databricks kişisel erişim belirteci kimlik doğrulaması için aşağıdaki söz dizimini kullanın; burada:
-
<personal-access-token>gereksinimlerinizden Azure Databricks kişisel erişim belirtecinizdir. -
<server-hostname>, gereksinimlerden Sunucu Ana Bilgisayar Adı değeridir. -
<port-number>değeridir. -
<http-path>, gereksinimlerden http yolu değeridir. -
<paramX=valueX>, bu makalenin devamında listelenen bir veya daha fazla İsteğe bağlı parametredir .
token:<personal-access-token>@<server-hostname>:<port-number>/<http-path>?<param1=value1>&<param2=value2>
Örneğin, bir küme için:
token:dapi12345678901234567890123456789012@adb-1234567890123456.7.azuredatabricks.net:443/sql/protocolv1/o/1234567890123456/1234-567890-abcdefgh
Örneğin, bir SQL ambarı için:
token:dapi12345678901234567890123456789012@adb-1234567890123456.7.azuredatabricks.net:443/sql/1.0/endpoints/a1b234c5678901d2
Not
En iyi güvenlik uygulaması olarak, bu DSN bağlantı dizesi Go kodunuzla sabit kod oluşturmamalısınız. Bunun yerine, bu DSN bağlantı dizesi güvenli bir konumdan almanız gerekir. Örneğin, bu makalenin önceki bölümlerindeki kod örneğinde bir ortam değişkeni kullanılmıştır.
İsteğe bağlı parametreler
- Desteklenen isteğe bağlı bağlantı parametreleri içinde
<param=value>belirtilebilir. Daha sık kullanılanlardan bazıları şunlardır:-
catalog: Oturumdaki ilk katalog adını ayarlar. -
schema: Oturumdaki ilk şema adını ayarlar. -
maxRows: İstek başına getirilen en fazla satır sayısını ayarlar. Varsayılan değer:10000. -
timeout: Sunucu sorgusu yürütmesi için zaman aşımını (saniye olarak) ekler. Varsayılan değer zaman aşımı değildir. -
userAgentEntry: İş ortaklarını tanımlamak için kullanılır. Daha fazla bilgi için iş ortağınızın belgelerine bakın.
-
- Desteklenen isteğe bağlı oturum parametreleri içinde
param=valuebelirtilebilir. Daha sık kullanılanlardan bazıları şunlardır:-
ansi_mode: Boole dizesi.trueoturum deyimlerinin ANSI SQL belirtimi tarafından belirtilen kurallara uyması için. Sistem varsayılanı false'tur. -
timezone: Dize, örneğinAmerica/Los_Angeles. Oturumun saat dilimini ayarlar. Sistem varsayılanı UTC'dir. -
query_tags:system.query.historyiçin izleme amacıyla SQL sorgularına eklenecek virgülle ayrılmış anahtar:değer çiftleri dizesi, örneğinteam:engineering,dashboard:abc123. Bu özellik, Özel Önizleme sürümündedir. Erişim istemek için hesap ekibinize başvurun.
-
Örneğin, bir SQL ambarı için:
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&query_tags=team:engineering,env:prod
İşlevle NewConnector bağlanma
Alternatif olarak, ile sql.OpenDB() oluşturulan yeni bir bağlayıcı nesnesi aracılığıyla veritabanı tanıtıcısı oluşturmak için kullanın dbsql.NewConnector() (Azure Databricks kümelerine ve SQL ambarlarına yeni bağlayıcı nesnesiyle bağlanmak için Go için Databricks SQL Sürücüsü v1.0.0 veya üzeri gerekir). Örneğin:
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)
}
}
Doğru ayar kümesini NewConnector belirtmek için Kimlik Doğrulaması'ndaki örneklere bakın.
Not
En iyi güvenlik uygulaması olarak, ayarlarınızı Go kodunuzla NewConnector sabit olarak kodlamayın. Bunun yerine, bu değerleri güvenli bir konumdan almanız gerekir. Örneğin, yukarıdaki kod ortam değişkenlerini kullanır.
Daha sık kullanılan işlevsel seçeneklerden bazıları şunlardır:
-
WithAccessToken(<access-token>): Gereksinimlerden Azure Databricks kişisel erişim belirteciniz. Gereklistring. -
WithServerHostname(<server-hostname>): Gereksinimlerden Sunucu Ana Bilgisayar Adı değeri. Gereklistring. -
WithPort(<port>): Sunucunun bağlantı noktası numarası, genellikle443. Gerekliint. -
WithHTTPPath(<http-path>): Gereksinimlerden HTTP Yolu değeri. Gereklistring. -
WithInitialNamespace(<catalog>, <schema>):Oturumdaki katalog ve şema adı. İsteğe bağlıstring, string. -
WithMaxRows(<max-rows>): İstek başına getirilen en fazla satır sayısı. Varsayılan değer10000.İsteğe bağlıdırint. -
WithSessionParams(<params-map>): "Saat dilimi", "ansi_mode" ve "query_tags" gibi oturum parametreleri. İsteğe bağlımap[string]string. -
WithTimeout(<timeout>). Sunucu sorgusu yürütmesi için zaman aşımı (içindetime.Duration). Varsayılan değer zaman aşımı değildir. isteğe bağlı. -
WithUserAgentEntry(<isv-name-plus-product-name>). İş ortaklarını tanımlamak için kullanılır. Daha fazla bilgi için iş ortağınızın belgelerine bakın. İsteğe bağlıstring.
Örneğin:
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", "query_tags": "team:analytics,project:reporting"}),
dbsql.WithTimeout(time.Minute),
dbsql.WithUserAgentEntry("example-user"),
)
Kimlik Doğrulaması
Go için Databricks SQL Sürücüsü aşağıdaki Azure Databricks kimlik doğrulama türlerini destekler:
- Databricks kişisel erişim jetonu kimlik doğrulaması
- Microsoft Entra ID belirteci ile kimlik doğrulama
- OAuth kullanıcıdan makineye (U2M) kimlik doğrulaması
- OAuth makineler arası (M2M) kimlik doğrulaması
Go için Databricks SQL Sürücüsü henüz aşağıdaki Azure Databricks kimlik doğrulama türlerini desteklemez:
- Azure yönetilen kimlikleriyle kimlik doğrulayın
- Microsoft Entra hizmet sorumlularıyla kimlik doğrulaması
- Azure CLI ile kimlik doğrulaması
Databricks kişisel erişim belirteci kimlik doğrulaması
Go için Databricks SQL Sürücüsünü Azure Databricks kişisel erişim belirteci kimlik doğrulamasıyla kullanmak için önce bir Azure Databricks kişisel erişim belirteci oluşturmanız gerekir. Bu adımla ilgili ayrıntılar için bkz. Çalışma alanı kullanıcıları için kişisel erişim belirteçleri oluşturma.
Go için Databricks SQL Sürücüsünün kimliğini bir DSN bağlantı dizesiyle ve DSN bağlantı dizesiyle bağlanma'daki kod örneğiyle doğrulamak için aşağıdaki DSN bağlantı dizesi söz dizimini kullanın; burada:
-
<personal-access-token>gereksinimlerinizden Azure Databricks kişisel erişim belirtecinizdir. -
<server-hostname>, gereksinimlerden Sunucu Ana Bilgisayar Adı değeridir. -
<port-number>değeridir. -
<http-path>, gereksinimlerden http yolu değeridir.
Ayrıca, bu makalede daha önce listelenen bir veya daha fazla İsteğe bağlı parametre de ekleyebilirsiniz.
token:<personal-access-token>@<server-hostname>:<port-number>/<http-path>
Go için Databricks SQL Sürücüsünün NewConnector kimliğini işlevle doğrulamak için aşağıdaki kod parçacığını ve aşağıdaki ortam değişkenlerini ayarladığınızı varsayan İşlevle NewConnector bağlan'daki kod örneğini kullanın:
-
DATABRICKS_SERVER_HOSTNAMEdeğerini kümenizin veya SQL ambarınızın Sunucu Ana Bilgisayar Adı değerine ayarlayın. -
DATABRICKS_HTTP_PATH, kümeniz veya SQL ambarınız için HTTP Yolu değeri olarak ayarlayın. -
DATABRICKS_TOKEN, Azure Databricks kişisel erişim belirtecine ayarlayın.
Ortam değişkenlerini ayarlamak için işletim sisteminizin belgelerine bakın.
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 Id belirteci kimlik doğrulaması
Go için Databricks SQL Sürücüsü, Azure Databricks kullanıcısı veya Microsoft Entra ID hizmet sorumlusu için Microsoft Entra ID belirteçlerini destekler.
Microsoft Entra ID erişim belirteci oluşturmak için aşağıdakileri yapın:
Azure Databricks kullanıcısı veya Microsoft Entra ID hizmet sorumlusu için Azure CLI'yı kullanın. Bkz. Microsoft Entra Id belirteçlerini el ile alma. Microsoft Entra ID yönetilen bir hizmet ilkesi oluşturmak için bkz. Hizmet ilkeleri.
Microsoft Entra Id belirteçlerinin varsayılan ömrü yaklaşık 1 saattir. Yeni bir Microsoft Entra Id belirteci oluşturmak için bu işlemi yineleyin.
Go için Databricks SQL Sürücüsünün kimliğini bir DSN bağlantı dizesiyle ve DSN bağlantı dizesiyle bağlanma'daki kod örneğiyle doğrulamak için aşağıdaki DSN bağlantı dizesi söz dizimini kullanın; burada:
-
<microsoft-entra-id-token>, Microsoft Entra Id belirtecinizdir. -
<server-hostname>, gereksinimlerden Sunucu Ana Bilgisayar Adı değeridir. -
<port-number>değeridir. -
<http-path>, gereksinimlerden http yolu değeridir.
Ayrıca, bu makalede daha önce listelenen bir veya daha fazla İsteğe bağlı parametre de ekleyebilirsiniz.
token:<microsoft-entra-id-token>@<server-hostname>:<port-number>/<http-path>Go için Databricks SQL Sürücüsünün
NewConnectorkimliğini işlevle doğrulamak için aşağıdaki kod parçacığını ve aşağıdaki ortam değişkenlerini ayarladığınızı varsayan İşlevleNewConnectorbağlan'daki kod örneğini kullanın:-
DATABRICKS_SERVER_HOSTNAMEdeğerini kümenizin veya SQL ambarınızın Sunucu Ana Bilgisayar Adı değerine ayarlayın. -
DATABRICKS_HTTP_PATH, kümeniz veya SQL ambarınız için HTTP Yolu değeri olarak ayarlayın. -
DATABRICKS_TOKENögesini Microsoft Entra ID belirtecinize ayarlayın.
Ortam değişkenlerini ayarlamak için işletim sisteminizin belgelerine bakın.
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 kullanıcıdan makineye (U2M) kimlik doğrulaması
Go için Databricks SQL Sürücüsü 1.5.0 ve üzeri sürümler OAuth kullanıcıdan makineye (U2M) kimlik doğrulamasını destekler.
Go için Databricks SQL Sürücüsünü bir DSN bağlantı dizesiyle ve DSN bağlantı dizesiyle bağlanma'daki kod örneğiyle kullanmak için aşağıdaki DSN bağlantı dizesi söz dizimini kullanın; burada:
-
<server-hostname>, gereksinimlerden Sunucu Ana Bilgisayar Adı değeridir. -
<port-number>değeridir. -
<http-path>, gereksinimlerden http yolu değeridir.
Ayrıca, bu makalede daha önce listelenen bir veya daha fazla İsteğe bağlı parametre de ekleyebilirsiniz.
<server-hostname>:<port-number>/<http-path>?authType=OauthU2M
Go için Databricks SQL Sürücüsünün NewConnector kimliğini doğrulamak için önce bildiriminize import aşağıdakileri eklemeniz gerekir:
"github.com/databricks/databricks-sql-go/auth/oauth/u2m"
Ardından aşağıdaki kod parçacığını ve aşağıdaki ortam değişkenlerini ayarladığınızı varsayan İşlevle NewConnector bağlan'daki kod örneğini kullanın:
-
DATABRICKS_SERVER_HOSTNAMEdeğerini kümenizin veya SQL ambarınızın Sunucu Ana Bilgisayar Adı değerine ayarlayın. -
DATABRICKS_HTTP_PATH, kümeniz veya SQL ambarınız için HTTP Yolu değeri olarak ayarlayın.
Ortam değişkenlerini ayarlamak için işletim sisteminizin belgelerine bakın.
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 makineden makineye (M2M) kimlik doğrulaması
Go için Databricks SQL Sürücüsü 1.5.2 ve üzeri sürümler OAuth makineden makineye (M2M) kimlik doğrulamasını destekler.
Go için Databricks SQL Sürücüsünü OAuth M2M kimlik doğrulamasıyla kullanmak için aşağıdakileri yapmanız gerekir:
Azure Databricks çalışma alanınızda bir Azure Databricks hizmet sorumlusu oluşturun ve bu hizmet sorumlusu için bir OAuth gizli dizisi oluşturun.
Hizmet sorumlusunu ve OAuth gizli dizisini oluşturmak için bkz. OAuth ile Azure Databricks'e hizmet sorumlusu erişimi yetkilendirme. Hizmet prensibinin UUID veya Uygulama Kimliği değerini ve hizmet prensibinin OAuth gizli anahtarı için Gizli Anahtar değerini not edin.
Bu hizmet sorumlusuna kümenize veya ambarınıza erişim verin.
Hizmet sorumlusuna kümenize veya ambarınıza erişim vermek için bkz . İşlem izinleri veya SQL ambarını yönetme.
Go için Databricks SQL Sürücüsünün kimliğini bir DSN bağlantı dizesiyle ve DSN bağlantı dizesiyle bağlanma'daki kod örneğiyle doğrulamak için aşağıdaki DSN bağlantı dizesi söz dizimini kullanın; burada:
-
<server-hostname>, gereksinimlerden Sunucu Ana Bilgisayar Adı değeridir. -
<port-number>değeridir. -
<http-path>, gereksinimlerden http yolu değeridir. -
<client-id>hizmet sorumlusunun UUID veya Uygulama Kimliği değeridir. -
<client-secret>, hizmet sorumlusunun OAuth gizli anahtarının Gizli değeridir.
Ayrıca, bu makalede daha önce listelenen bir veya daha fazla İsteğe bağlı parametre de ekleyebilirsiniz.
<server-hostname>:<port-number>/<http-path>?authType=OAuthM2M&clientID=<client-id>&clientSecret=<client-secret>
Go için Databricks SQL Sürücüsünün NewConnector kimliğini doğrulamak için önce bildiriminize import aşağıdakileri eklemeniz gerekir:
"github.com/databricks/databricks-sql-go/auth/oauth/m2m"
Ardından aşağıdaki kod parçacığını ve aşağıdaki ortam değişkenlerini ayarladığınızı varsayan İşlevle NewConnector bağlan'daki kod örneğini kullanın:
-
DATABRICKS_SERVER_HOSTNAMEdeğerini kümenizin veya SQL ambarınızın Sunucu Ana Bilgisayar Adı değerine ayarlayın. -
DATABRICKS_HTTP_PATH, kümeniz veya SQL ambarınız için HTTP Yolu değeri olarak ayarlayın. -
DATABRICKS_CLIENT_IDdeğerini hizmet sorumlusunun UUID veya Uygulama Kimliği değerine ayarlayın. -
DATABRICKS_CLIENT_SECRET, hizmet principal'inin OAuth gizli anahtarı için Gizli değerine ayarlayın.
Ortam değişkenlerini ayarlamak için işletim sisteminizin belgelerine bakın.
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),
)
Verileri sorgulama
Aşağıdaki kod örneği, Azure Databricks işlem kaynağında temel bir SQL sorgusu çalıştırmak için Go için Databricks SQL Sürücüsünün nasıl çağrılduğunu gösterir. Bu komut, kataloğun trips şemasındaki tablodan samplesnyctaxi ilk iki satırı döndürür.
Bu kod örneği, adlı bir ortam değişkeninden DSN bağlantı dizesiDATABRICKS_DSN.
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)
}
}
Unity Kataloğu birimlerindeki dosyaları yönetme
Databricks SQL Sürücüsü, aşağıdaki örnekte gösterildiği gibi Unity Kataloğu birimlerine yerel dosyalar yazmanızı, birimlerden dosya indirmenizi ve birimlerden dosya silmenizi sağlar:
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()
}
Günlük Kaydı
Go için Databricks SQL Sürücüsünün yaydığı iletileri günlüğe kaydetmek için kullanın github.com/databricks/databricks-sql-go/logger . Aşağıdaki kod örneği, DSN bağlantı dizesi aracılığıyla veritabanı tanıtıcısı oluşturmak için kullanırsql.Open(). Bu kod örneği, adlı DATABRICKS_DSNbir ortam değişkeninden DSN bağlantı dizesi alır. Düzeyinde ve altında yayılan debug tüm günlük iletileri dosyaya results.log yazılır.
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)
}
}
Test Etme
Kodunuzu test etmek için test standart kitaplığı gibi Go test çerçevelerini kullanın. Azure Databricks REST API uç noktalarını çağırmadan veya Azure Databricks hesaplarınızın veya çalışma alanlarınızın durumunu değiştirmeden kodunuzu simüle edilmiş koşullar altında test etmek için testify gibi Go mocklama kütüphanelerini kullanın.
Örneğin, Azure Databricks çalışma alanı bağlantısı döndüren bir helpers.go işlev içeren, adı GetDBWithDSNPAT olan aşağıdaki dosya, kataloğun GetNYCTaxiTrips şemasındaki trips tablodan samples veri döndüren bir nyctaxi işlev ve döndürülen verileri yazdıran bir PrintNYCTaxiTrips işlev verilmiştir:
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 ?", 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)
}
}
Ve bu işlevleri çağıran adlı main.go aşağıdaki dosya göz önünde bulundurulduğunda:
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)
}
Adlı aşağıdaki dosya helpers_test.go , işlevin GetNYCTaxiTrips beklenen yanıtı döndürip döndürmediğini sınar. Bu test, hedef çalışma alanına gerçek bir bağlantı oluşturmak yerine bir sql.DB nesneyle dalga geçer. Test ayrıca şemaya ve gerçek verilerdeki değerlere uyan bazı verilerle dalga geçer. Test, sahte bağlantı üzerinden sahte verileri döndürür ve ardından sahte veri satırlarından birinin değerlerinin beklenen değerle eşleşip eşleşmediğini denetler.
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)
}
GetNYCTaxiTrips İşlev bir SELECT deyim içerdiğinden ve bu nedenle tablonun durumunu trips değiştirmediğinden, bu örnekte sahte işlem yapmak kesinlikle gerekli değildir. Ancak sahte işlem, çalışma alanıyla gerçek bir bağlantının yapılmasını beklemeden testlerinizi hızlı bir şekilde çalıştırmanızı sağlar. Ayrıca, sahtecilik, bir tablonun durumunu değiştirebilecek INSERT INTO, UPDATE ve DELETE FROM gibi işlevler için simülasyon testlerini birden çok kez çalıştırmanıza olanak tanır.
Ek kaynaklar
- GitHub'daki Go için Databricks SQL Sürücüsü deposu
- Veritabanı/sql paketi giriş sayfası
- GitHub'da Go için Databricks SQL Sürücüsü örnekleri