どこからでもDatabricks SQLに接続する

[Connect From Anywhere to Databricks SQL \- The Databricks Blog](https://databricks.com/blog/2022/06/29/connect-from-anywhere-to-databricks-sql.html)の翻訳です。

:::note warn
本書は抄訳であり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。
:::

# Databricks SQL向けGo、Node.js、Python、CLIオープンソースコネクターの発表

開発者がお好きなアプリケーションからDatabricks SQLへの接続をシンプルにできるようにするために、本日、[Go](https://github.com/databricks/databricks-sql-go)、[Node\.js](https://github.com/databricks/databricks-sql-nodejs)、[Python](https://github.com/databricks/databricks-sql-python)、そして、[CLI](https://github.com/databricks/databricks-sql-cli)のオープンソースコネクターのフルラインアップを発表できることを嬉しく思います。開発者を支援するという同じテーマのもと、我々は[Mavenセントラルリポジトリ](https://search.maven.org/artifact/com.databricks/databricks-jdbc/)で正式なDatabricks JDBCドライバーを発表し、ご自身のビルドシステムで活用し、自信を持ってお使いのアプリケーションにパッケージングできるようになりました。
![](https://databricks.com/wp-content/uploads/2022/06/connectors.png)
*Databricks SQLコネクター: どこからでも接続し、レイクハウスに支援されるデータアプリケーションを構築*

今年前半の[GA](https://databricks.com/blog/2022/01/26/building-data-applications-on-the-lakehouse-with-the-databricks-sql-connector-for-python.html)以来、Python向けDatabricks SQLコネクターは月間平均100万以上のダウンロードがされており、開発者コミュニティに広く受け入れられています。このコネクターが今では完全なオープンソースになったことを発表できて嬉しく思っています。

新たなDatabricks SQLコネクターの基礎を提供してくれたオープンソースプロジェクトのコントリビュータに感謝の意を表します。GitHubに参加いただき、データ接続性の将来に関してコラボレーションできればと考えています。

# Databricks SQL Goドライバー

[Go](https://go.dev/)は信頼性のあるクラウド、ネットワークサービス、webアプリケーションを構築する際に広く用いられている人気のあるオープンソース言語です。オープンソース[ドライバー](https://github.com/databricks/databricks-sql-go)は、データベースアクセスにおける慣用的な[database/sql](https://golang.org/pkg/database/sql)標準を実装しています。

以下が、GoからDatabricksにSQLクエリーをどのように送信するのかを示すクイックなサンプルです。

```go:Go
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](https://github.com/databricks/databricks-sql-go/tree/main/examples)フォルダーで他のサンプルを見つけることができます。コミュニティへの貢献と[GitHub](https://github.com/databricks/databricks-sql-go)へのフィードバックを楽しみにしています。 

# Databricks SQL Node.jsドライバー

Node.jsはJavaScriptとTypeScriptにおけるサービスの構築では非常に人気のあるものです。外部への依存性が最小にされ、全てがTypeScriptで記述されたネイティブの[Node\.jsドライバー](https://github.com/databricks/databricks-sql-nodejs)では、寛容的かつ非ブロックオペレーションにおけるasync/awaitパターンをサポートしています。NPM(Node.js 14+)を用いてインストールすることができます。

```bash:Bash
$ npm i @databricks/sql
```

テーブルの作成、データのインサート、データのクエリーのサンプルです。

```javascript:JavaScript
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も提供しています。[リポジトリのサンプル](https://github.com/databricks/databricks-sql-nodejs/tree/master/examples)をご覧ください。Node.jsコミュニティのフィードバックを楽しみにしています。

# Databricks SQL CLI

[Databricks SQL CLI](https://github.com/databricks/databricks-sql-cli)はSQLクエリーを発行し、全てのSQLオペレーションを実行するための新たなコマンドラインインタフェース(CLI)です。人気のあるオープンソース[DBCLI](https://github.com/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`を実行することができます。

**以下をクリックすると別タブで動画が開きます**

https://player.vimeo.com/video/725081359?h=865f7dc9a9&version=hd1080%E2%80%9D%20frameborder=

```
$ dbsqlcli -e 'SELECT * FROM samples.nyctaxi.trips LIMIT 10'
```

```
$ dbsqlcli -e query.sql
```

```
$ dbsqlcli -e query.sql > output.csv
```

他のドキュメントとサンプルについては、`–help`を使うか、[リポジトリ](https://github.com/databricks/databricks-sql-cli)をチェックしてください。

# Databricks JDBCドライバー on Maven

JavaとJVM開発者はデータベースにアクセスするための標準的なAPIとしてJDBCを使用します。[Maven Central repository](https://search.maven.org/artifact/com.databricks/databricks-jdbc/)でDatabricks JDBCドライバーが利用できるようになっており、お使いのビルドシステムやCI/CDの処理でこのドライバーを使用することができます。お使いのJavaプロジェクトに取り込むには、お使いのアプリケーションの`pom.xml`に以下のエントリーを追加します。

```xml
    <dependency>
      <groupId>com.databricks<ʇgroupId>
      <artifactId>databricks-jdbc</artifactId>
      <version>2.6.25-1</version>
    </dependency>
```

JDBCドライバーを用いてデータをクエリーするサンプルコードです。

```java:Java
    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](https://community.databricks.com/s/)でコンタクトしてください)。

Data + AI Summit 2022での発表やアップデートに関して、データに熱中している人たちが会話している[Databricks Community](https://community.databricks.com/s/topic/0TO8Y000000VJEhWAO/summit22)に参加してみてください。学び、ネットワークを作り、祝いましょう。

### Databricks 無料トライアル

[Databricks 無料トライアル](https://databricks.com/jp/try-databricks)