Connect From Anywhere to Databricks SQL - The Databricks Blogの翻訳です。
本書は抄訳であり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。
Databricks SQL向けGo、Node.js、Python、CLIオープンソースコネクターの発表
開発者がお好きなアプリケーションからDatabricks SQLへの接続をシンプルにできるようにするために、本日、Go、Node.js、Python、そして、CLIのオープンソースコネクターのフルラインアップを発表できることを嬉しく思います。開発者を支援するという同じテーマのもと、我々はMavenセントラルリポジトリで正式なDatabricks JDBCドライバーを発表し、ご自身のビルドシステムで活用し、自信を持ってお使いのアプリケーションにパッケージングできるようになりました。
Databricks SQLコネクター: どこからでも接続し、レイクハウスに支援されるデータアプリケーションを構築
今年前半のGA以来、Python向けDatabricks SQLコネクターは月間平均100万以上のダウンロードがされており、開発者コミュニティに広く受け入れられています。このコネクターが今では完全なオープンソースになったことを発表できて嬉しく思っています。
新たなDatabricks SQLコネクターの基礎を提供してくれたオープンソースプロジェクトのコントリビュータに感謝の意を表します。GitHubに参加いただき、データ接続性の将来に関してコラボレーションできればと考えています。
Databricks SQL Goドライバー
Goは信頼性のあるクラウド、ネットワークサービス、webアプリケーションを構築する際に広く用いられている人気のあるオープンソース言語です。オープンソースドライバーは、データベースアクセスにおける慣用的なdatabase/sql標準を実装しています。
以下が、GoからDatabricksにSQLクエリーをどのように送信するのかを示すクイックなサンプルです。
package main
import (
"database/sql"
"log"
"fmt"
_ "github.com/databricks/databricks-sql-go"
)
// replace these values
const (
token = "dapi***********"
hostname = "********.databricks.com"
path = "/sql/1.0/endpoints/*******"
)
func main() {
dsn := fmt.Sprintf("databricks://:%s@%s%s", token, hostname, path)
db, err := sql.Open("databricks", dsn)
if err != nil {
log.Fatalf("Could not connect to %s: %s", dsn, err)
}
defer db.Close()
db.Query("CREATE TABLE example (id INT, text VARCHAR(20))")
db.Query("INSERT INTO example VALUES (1, \"Hello\"), (2, \"World\")")
rows, err := db.Query("SELECT * FROM example")
if err != nil {
log.Fatal(err)
}
for rows.Next() {
var text string
var id int
if err := rows.Scan(&id, &text); err != nil {
log.Fatal(err)
}
fmt.Printf("%d %s\n", id, text)
}
}
出力
1 Hello
2 World
リポジトリのexamplesフォルダーで他のサンプルを見つけることができます。コミュニティへの貢献とGitHubへのフィードバックを楽しみにしています。
Databricks SQL Node.jsドライバー
Node.jsはJavaScriptとTypeScriptにおけるサービスの構築では非常に人気のあるものです。外部への依存性が最小にされ、全てがTypeScriptで記述されたネイティブのNode.jsドライバーでは、寛容的かつ非ブロックオペレーションにおけるasync/awaitパターンをサポートしています。NPM(Node.js 14+)を用いてインストールすることができます。
$ npm i @databricks/sql
テーブルの作成、データのインサート、データのクエリーのサンプルです。
const { DBSQLClient } = require('@databricks/sql');
// replace these values
const host = '********.databricks.com';
const path = '/sql/1.0/endpoints/*******';
const token = 'dapi***********';
async function execute(session, statement) {
const utils = DBSQLClient.utils;
const operation = await session.executeStatement(statement, { runAsync: true });
await utils.waitUntilReady(operation);
await utils.fetchAll(operation);
await operation.close();
return utils.getResult(operation).getValue();
}
const client = new DBSQLClient();
client.connect({ host, path, token }).then(async client => {
const session = await client.openSession();
await execute(session, 'CREATE TABLE example (id INT, text VARCHAR(20))');
await execute(session, 'INSERT INTO example VALUES (1, "Hello"), (2, "World")');
const result = await execute(session, 'SELECT * FROM example');
console.table(result);
await session.close();
client.close();
}).catch(error => {
console.log(error);
});
出力
┌────┬─────────┐
│ id │ text │
├────┼─────────┤
│ 1 │ 'Hello' │
│ 2 │ 'World' │
└────┴─────────┘
また、ドライバーはgetColumnsのようなテーブルメタデータを取得するためのダイレクトAPIも提供しています。リポジトリのサンプルをご覧ください。Node.jsコミュニティのフィードバックを楽しみにしています。
Databricks SQL CLI
Databricks SQL CLIはSQLクエリーを発行し、全てのSQLオペレーションを実行するための新たなコマンドラインインタフェース(CLI)です。人気のあるオープンソースDBCLIパッケージ上に構築されているので、オートコンプリートとシンタックスハイライトをサポートしています。CLIはインタラクティブなクエリーとSQLファイルの実行をサポートしています。pipを用いてインストールすることもできます(Python 3.7+)。
python3 -m pip install databricks-sql-cli
接続するには、以下のようにコマンドラインの引数として、あるいは環境変数、あるいは設定ファイルの[credentials]セクションにホスト名、HTTPパス、PATを設定します。
$ dbsqlcli --hostname '********.databricks.com' --http-path '/sql/1.0/endpoints/*******' --access-token 'dapi***********'
クエリー文字列あるいは.sqlファイルを指定してターミナルからdbsqlcli
を実行することができます。
以下をクリックすると別タブで動画が開きます
$ dbsqlcli -e 'SELECT * FROM samples.nyctaxi.trips LIMIT 10'
$ dbsqlcli -e query.sql
$ dbsqlcli -e query.sql > output.csv
他のドキュメントとサンプルについては、–help
を使うか、リポジトリをチェックしてください。
Databricks JDBCドライバー on Maven
JavaとJVM開発者はデータベースにアクセスするための標準的なAPIとしてJDBCを使用します。Maven Central repositoryでDatabricks JDBCドライバーが利用できるようになっており、お使いのビルドシステムやCI/CDの処理でこのドライバーを使用することができます。お使いのJavaプロジェクトに取り込むには、お使いのアプリケーションのpom.xml
に以下のエントリーを追加します。
<dependency>
<groupId>com.databricks<ʇgroupId>
<artifactId>databricks-jdbc</artifactId>
<version>2.6.25-1</version>
</dependency>
JDBCドライバーを用いてデータをクエリーするサンプルコードです。
import java.sql.*;
public static void main(String[] args) throws Exception {
// Open a connection
// replace the values below
String token = "dapi*****";
String url = "jdbc:databricks://********.cloud.databricks.com:443/default;" + "transportMode=http;ssl=1;AuthMech=3;httpPath=sql/protocolv1/o/*****;" +
"UID=token;" +
"PWD=" + token;
try (Connection conn = DriverManager.getConnection(url);
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM samples.nyctaxi.trips");) {
// Extract data from result set
while (rs.next()) {
// Retrieve by column name
System.out.print("ID: " + rs.getString("col_name"));
}
}
}
どこからでもレイクハウスに接続する
これらが追加されることによって、Databricks SQLはPython、Go、Node.js、CLI、ODBC/JDBC、プライベートプレビューの新たなSQL Execution REST APIによるネイティブな接続性を持つことになります。 追加の認証スキーマ、Unity Catalogのサポート、SQLAlchemyのサポート、性能改善を含むロードマップ上の新機能についても興奮しています。我々のパートナーや開発者コミュニティがDatabricks SQLを用いて構築する素晴らしいデータアプリケーションを見るのが待ちきれません。
ベストなデータウェアハウスはレイクハウスです。誰でも、どこからでもレイクハウスに接続できるようになることを嬉しく思っています!コネクターをトライしていただいた上で、次のビルドで何をすべきかに関するフィードバックや提案を楽しみにしています(GitHubやDatabricks Communityでコンタクトしてください)。
Data + AI Summit 2022での発表やアップデートに関して、データに熱中している人たちが会話しているDatabricks Communityに参加してみてください。学び、ネットワークを作り、祝いましょう。