0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

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

Last updated at Posted at 2022-07-11

Connect From Anywhere to Databricks SQL - The Databricks Blogの翻訳です。

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

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

開発者がお好きなアプリケーションからDatabricks SQLへの接続をシンプルにできるようにするために、本日、GoNode.jsPython、そして、CLIのオープンソースコネクターのフルラインアップを発表できることを嬉しく思います。開発者を支援するという同じテーマのもと、我々はMavenセントラルリポジトリで正式なDatabricks JDBCドライバーを発表し、ご自身のビルドシステムで活用し、自信を持ってお使いのアプリケーションにパッケージングできるようになりました。

Databricks SQLコネクター: どこからでも接続し、レイクハウスに支援されるデータアプリケーションを構築

今年前半のGA以来、Python向けDatabricks SQLコネクターは月間平均100万以上のダウンロードがされており、開発者コミュニティに広く受け入れられています。このコネクターが今では完全なオープンソースになったことを発表できて嬉しく思っています。

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

Databricks SQL Goドライバー

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

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

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フォルダーで他のサンプルを見つけることができます。コミュニティへの貢献とGitHubへのフィードバックを楽しみにしています。

Databricks SQL Node.jsドライバー

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

Bash
$ npm i @databricks/sql

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

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も提供しています。リポジトリのサンプルをご覧ください。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ドライバーを用いてデータをクエリーするサンプルコードです。

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でコンタクトしてください)。

Data + AI Summit 2022での発表やアップデートに関して、データに熱中している人たちが会話しているDatabricks Communityに参加してみてください。学び、ネットワークを作り、祝いましょう。

Databricks 無料トライアル

Databricks 無料トライアル

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?