Go için Databricks SQL Sürücüsü
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.
- Küme için bu değerleri alın.
- BIR SQL ambarı için bu değerleri alın.
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 mod init
Go kodunuzun bağımlılıklarını izlemek için birgo.mod
dosya oluşturun, örneğin:go mod init sample
Komutunu çalıştırıp
go mod edit -require
yerine Sürümler'de listelenen Databricks SQL Driver for Go paketinin en son sürümüyle değiştirerekv1.5.2
Go için Databricks SQL Sürücüsü paketine bağımlılık yapın:go mod edit -require github.com/databricks/databricks-sql-go@v1.5.2
Dosyanız
go.mod
şu şekilde görünmelidir:module sample go 1.20 require github.com/databricks/databricks-sql-go v1.5.2
Projenizde, 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.go
bir 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 tidy
eksik modül bağımlılıklarını ekleyin:go mod tidy
Not
hatasını
go: warning: "all" matched no packages
alı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
main
paketlerin derlemelerini ve testlerini desteklemek için gereken tüm paketlerin kopyalarınıgo mod vendor
oluşturun:go mod vendor
Azure Databricks kimlik doğrulaması için ortam değişkenini
DATABRICKS_DSN
ayarlamak için kodunuzu gerektiği gibi değiştirin. Ayrıca bkz. DSN bağlantı dizesi ile bağlanma.komutunu çalıştırarak, adlı
main.go
bir dosya varsayarak Go kod dosyanızı çalıştırıngo run
:go run main.go
Hata 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_DSN
bir 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ı dizesi 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>
, genellikle443
olan gereksinimlerden bağlantı noktası 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=value
belirtilebilir. Daha sık kullanılanlardan bazıları şunlardır:ansi_mode
: Boole dizesi.true
oturum 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.
Ö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
İşlevle NewConnector
bağlanma
Alternatif olarak, ile dbsql.NewConnector()
oluşturulan yeni bir bağlayıcı nesnesi aracılığıyla veritabanı tanıtıcısı oluşturmak için kullanın sql.OpenDB()
(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" ve "ansi_mode" 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"}),
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 belirteci kimlik doğrulaması
- Microsoft Entra Id belirteci kimlik doğrulaması
- OAuth kullanıcıdan makineye (U2M) kimlik doğrulaması
- OAuth makineden makineye (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 kimlikleri kimlik doğrulaması
- MS Entra hizmet sorumlusu kimlik doğrulaması
- Azure CLI 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 aşağıdaki gibi bir Azure Databricks kişisel erişim belirteci oluşturmanız gerekir:
- Azure Databricks çalışma alanınızda üst çubukta Azure Databricks kullanıcı adınıza tıklayın ve açılan listeden Ayarlar'ı seçin.
- Geliştirici'ye tıklayın.
- Erişim belirteçleri'nin yanındaki Yönet'e tıklayın.
- Yeni belirteç oluştur'a tıklayın.
- (İsteğe bağlı) Gelecekte bu belirteci tanımlamanıza yardımcı olacak bir açıklama girin ve belirtecin varsayılan 90 günlük ömrünü değiştirin. Yaşam süresi olmayan bir belirteç oluşturmak için (önerilmez), Yaşam Süresi (gün) kutusunu boş (boş) bırakın.
- Generate (Oluştur) düğmesine tıklayın.
- Görüntülenen belirteci güvenli bir konuma kopyalayın ve bitti'ye tıklayın.
Not
Kopyalanan belirteci güvenli bir konuma kaydettiğinizden emin olun. Kopyalanan belirtecinizi başkalarıyla paylaşmayın. Kopyalanan belirteci kaybederseniz, tam olarak aynı belirteci yeniden oluşturamazsınız. Bunun yerine, yeni bir belirteç oluşturmak için bu yordamı yinelemeniz gerekir. Kopyalanan belirteci kaybederseniz veya belirtecin gizliliğinin ihlal edildiğini düşünüyorsanız Databricks, Erişim belirteçleri sayfasındaki belirtecin yanındaki çöp kutusu (İptal Et) simgesine tıklayarak bu belirteci çalışma alanınızdan hemen silmenizi kesinlikle önerir.
Çalışma alanınızda belirteç oluşturamıyor veya kullanamıyorsanız, bunun nedeni çalışma alanı yöneticinizin belirteçleri devre dışı bırakmış olması veya size belirteç oluşturma veya kullanma izni vermemiş olması olabilir. Çalışma alanı yöneticinize veya aşağıdaki konulara bakın:
Go için Databricks SQL Sürücüsünün kimliğini bir DSN bağlantı dizesi ve DSN bağlantı dizesi ile 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>
, genellikle443
olan gereksinimlerden bağlantı noktası 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 doğrulamak için aşağıdaki kod parçacığını ve Aşağıdaki ortam değişkenlerini ayarladığınızı varsayan NewConnector işleviyle bağlan'daki kod örneğini kullanın:
DATABRICKS_SERVER_HOSTNAME
değ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ı için Azure CLI'yı kullanabilirsiniz. Bkz . Azure CLI kullanarak kullanıcılar için Microsoft Entra ID belirteçlerini alma.
- Microsoft Entra ID hizmet sorumlusu için bkz . Azure CLI ile Microsoft Entra ID erişim belirteci alma. Microsoft Entra Id yönetilen hizmet sorumlusu oluşturmak için bkz . Hizmet sorumlularını yönetme.
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ı dizesi ve DSN bağlantı dizesi ile 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>
, genellikle443
olan gereksinimlerden bağlantı noktası 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
NewConnector
kimliğini doğrulamak için aşağıdaki kod parçacığını ve Aşağıdaki ortam değişkenlerini ayarladığınızı varsayan NewConnector işleviyle bağlan'daki kod örneğini kullanın:DATABRICKS_SERVER_HOSTNAME
değ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ı dizesi ve DSN bağlantı dizesi ile bağlanma'daki kod örneğini 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>
, genellikle443
olan gereksinimlerden bağlantı noktası 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 NewConnector işleviyle bağlan'daki kod örneğini kullanın:
DATABRICKS_SERVER_HOSTNAME
değ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 (OAuth M2M) kullanarak hizmet sorumlusuyla Azure Databricks'e erişimin kimliğini doğrulama. Hizmet sorumlusunun UUID veya Uygulama Kimliği değerini ve hizmet sorumlusunun OAuth gizli dizisi için Gizli dizi 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ı dizesi ve DSN bağlantı dizesi ile 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>
, genellikle443
olan gereksinimlerden bağlantı noktası 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 dizisinin Gizli dizi 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 NewConnector işleviyle bağlan'daki kod örneğini kullanın:
DATABRICKS_SERVER_HOSTNAME
değ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_ID
değerini hizmet sorumlusunun UUID veya Uygulama Kimliği değerine ayarlayın.DATABRICKS_CLIENT_SECRET
, hizmet sorumlusunun OAuth gizli dizisi için Gizli dizi 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 nyctaxi
şemasındaki tablodan trips
samples
ilk iki satırı döndürür.
Bu kod örneği, adlı DATABRICKS_DSN
bir ortam değişkeninden DSN bağlantı dizesi 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()
}
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_DSN
bir 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 sanal koşullar altında test etmek için testfify gibi sahte kitaplıklara gidin.
Örneğin, Azure Databricks çalışma alanı bağlantısını döndüren bir GetDBWithDSNPAT
işlev içeren adlı aşağıdaki dosyahelpers.go
, kataloğun nyctaxi
şemasındaki samples
tablodan trips
veri döndüren bir GetNYCTaxiTrips
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 " + 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)
}
}
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 sahte işlem, bir tablonun durumunu değiştirebilecek , UPDATE
ve DELETE FROM
gibi INSERT INTO
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