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
Hata
go: warning: "all" matched no packageskodunu alırsanız, Go için Databricks SQL Sürücüsünü import eden bir Go kod dosyasını 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 kimlik doğrulaması için
DATABRICKS_DSNortam değişkenini ayarlamak amacıyla kodunuzu gerektiği gibi değiştirin. Ayrıca bkz . DSN bağlantı dizesiyle bağlanma.Go kod dosyanızı,
main.goadlı bir dosyayı varsayarakgo runkomutunu çalıştırarak çalıştırın.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
sql.Open()'yı veri kaynağı adı (DSN) bağlantı dizesi aracılığıyla veritabanı tanıtıcısı oluşturmak için kullanın, kümelere ve SQL ambarlarına erişim sağlayın. 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 jetonu kimlik doğrulaması için aşağıdaki söz dizimini kullanın; burada:
-
<personal-access-token>gereksinimler listesindeki Azure Databricks kişisel erişim belirtecinizdir. -
<server-hostname>, gereksinimlerden Sunucu Ana Bilgisayar Adı değeridir. -
<port-number>, gereksinimlerdeki Port değeridir ve genellikle443'dir. -
<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
Güvenlik açısından en iyi uygulama olarak, bu DSN bağlantı dizesini Go kodunuza sabit kodlamamalı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 olarak zaman aşımı yoktur. -
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 Genel Önizleme aşamasındadır.
-
Ö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ğlan
Alternatif olarak, sql.OpenDB() ile oluşturulan yeni bir bağlayıcı nesnesi aracılığıyla dbsql.NewConnector() kullanarak veritabanı tanıtıcısı oluşturun (Azure Databricks kümelerine ve SQL ambarlarına yeni bir bağlayıcı nesnesiyle bağlanmak için Go için Databricks SQL Sürücüsü'nün v1.0.0 veya daha üstü 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 çalıştırma için zaman aşımı (içindetime.Duration). Varsayılan olarak zaman aşımı yoktur. 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 jetonu 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>gereksinimler listesindeki Azure Databricks kişisel erişim belirtecinizdir. -
<server-hostname>, gereksinimlerden Sunucu Ana Bilgisayar Adı değeridir. -
<port-number>, gereksinimlerdeki Port değeridir ve genellikle443'dir. -
<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>, gereksinimlerdeki Port değeridir ve genellikle443'dir. -
<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öğesini Microsoft Entra ID 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")), )-
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>, gereksinimlerdeki Port değeridir ve genellikle443'dir. -
<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ü NewConnector işleviyle kimlik doğrulaması yapmak için import bildiriminize önce 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 makineler arası (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 ilkesi oluşturun ve bu hizmet ilkesi için bir OAuth gizli anahtar oluşturun.
Hizmet asıl nesnesini ve OAuth gizli anahtarını oluşturmak için bkz. OAuth ile Azure Databricks'e hizmet asıl nesnesi 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>, gereksinimlerdeki Port değeridir ve genellikle443'dir. -
<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 için SQL Sürücüsünü NewConnector fonksiyonu ile doğrulamak için, önce şu ifadeyi import bildiriminize 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, DATABRICKS_DSN adlı bir ortam değişkeninden DSN bağlantı dizesini alır.
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()
}
Loglama
Databricks SQL Go Sürücüsünün kaydettiği iletileri günlüğe kaydetmek için github.com/databricks/databricks-sql-go/logger kullanın. Aşağıdaki kod örneği, bir DSN bağlantı dizesi aracılığıyla veritabanı tanıtıcısı oluşturmak için sql.Open() kullanır. Bu kod örneği, adlı DATABRICKS_DSNbir ortam değişkeninden DSN bağlantı dizesi alır.
debug düzeyinde ve altında yayılan tüm günlük iletileri results.log dosyasına 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)
}
}
Aşağıdaki işlevleri çağıran main.go adlı 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 nesnesini taklit eder. Test ayrıca şemaya ve gerçek verilerdeki değerlere uyan bazı verileri taklit eder. 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 işlevi bir SELECT deyim içerdiğinden ve bu nedenle trips tablosunun durumunu değiştirmediğinden, bu örnekte taklit etmek kesinlikle gerekli değildir. Ancak mock işlemi, çalışma alanına gerçek bir bağlantı kurmadan testlerinizi hızlıca ç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