Databricksを使ったTiDB Cloudでのアナリティクス
著者 : Qiang Wu (PingCAP TiDB Cloudエンジニア)
編集者 : Calvin Weng, Tom Dewan
TiDB Cloudは、オープンソースの分散SQLデータベースであるTiDBのフルマネージドのDatabase-as-a-Service (DBaaS) です。
Databricksは、Sparkと連携するWebベースのデータ分析プラットフォームです。データウェアハウスとデータレイクをレイクハウスアーキテクチャに組み合わせるには最適です。
Databricksに組み込まれているJDBCドライバーを使用すると、TiDB CloudとDatabricksを数分で接続することができ、TiDBのデータをDatabricksで分析できるようになります。この記事では、TiDB CloudのDeveloper Tierのクラスタ (※Developer Tierは2022年11月1日よりServerless Tierに変わりました) を作成し、TiDBとDatabricksを接続、Databricksを使用してTiDBのデータを処理する方法について説明します。
TiDB CloudでDeveloper Tierクラスタをセットアップする
TiDB Cloudを開始するには次の手順を実行します。
- TiDB Cloudアカウントにサインアップしてログインします。
- Create Cluster > Developer Tierで1 year Free Trialを選択します。
- クラスタ名を設定し、クラスタのリージョンを選択します。
- Createをクリックします。TiDB Cloudのクラスタは約1〜3分で作成されます。
- OverviewパネルでConnectをクリックし、トラフィックフィルターを作成します。ここでは、0.0.0.0/0のIPアドレスを追加して、他のIPからのアクセスを許可します。
- 後程Databricksの設定で使用するJDBC URLをメモします。
サンプルデータをTiDB Cloudにインポートする
クラスタを作成したら、サンプルデータをTiDB Cloudに投入します。デモンストレーションとして自転車シェアリングプラットフォームであるCapital Bikeshareのサンプルシステムデータセットを使用します。サンプルデータは、Capital Bikeshareデータライセンス契約に基づいてリリースされています。
- クラスタ情報ページでimportをクリックします。Data Import Taskページが表示されます。
- インポートタスクを次のように設定します。
- データソースの種類 : Amazon S3
- バケットURL : s3://tidbcloud-samples/data-ingestion/
- データ形式 : TiDB Dumpling
- ロール ARN : arn:aws:iam::385595570414:role/import-sample-access
- Target DatabaseでTiDBクラスタのUsernameとPasswordを入力します。
- サンプルデータのインポートを開始するにはimportをクリックします。このプロセスには約3分かかります。
- 概要パネルに戻り、ConnectをクリックしてMyCLI URLを取得します。
- MyCLIクライアントを使用してサンプルデータのインポートを確認します。
$ mycli -u root -h tidb.xxxxxx.aws.tidbcloud.com -P 4000 (none)> SELECT COUNT(*) FROM bikeshare.trips; +----------+ | COUNT(*) | +----------+ | 816090 | +----------+ 1 row in set Time: 0.786s
DatabricksからTiDB Cloudに接続する
続行する前にご自身のアカウントでDatabricksのワークスペースにログインしていることを確認してください。Databricksアカウントをお持ちでない場合は、こちらから無料のアカウントにサインアップしてください。もしDatabricksの経験が豊富でノートブックを直接インポートしたい場合は、「(オプション) TiDB CloudのサンプルノートブックをDatabricksにインポートする」に進むことができます。
このセクションではDatabricksに新しいノートブックを作成し、それをSparkクラスタにアタッチしてから、JDBC URLを使用してTiDB Cloudに接続します。
- Databricksワークスペースで、次に示すようにSparkクラスタを作成してアタッチします。

2. DatabricksのノートブックでJDBCを設定します。TiDBはDatabricksのデフォルトのJDBCドライバーを使用できるため、ドライバーパラメーターを設定する必要はありません。
%scala val url = "jdbc:mysql://tidb.xxxx.prod.aws.tidbcloud.com:4000" val table = "bikeshare.trips" val user = "root" val password = "xxxxxxxxxx"
ここでは
url : TiDB Cloudへの接続に使用されるJDBC URL
table : ${データベース}.${テーブル}のようにテーブルを指定
user : TiDB Cloudに接続するためのユーザー名
password : ユーザーのパスワードを設定します。
3. TiDB Cloudへの接続を確認します。
%scala import java.sql.DriverManager val connection = DriverManager.getConnection(url, user, password) connection.isClosed() res2: Boolean = false
Databricksでデータを分析する
接続が確立されたらTiDBのデータをSparkデータフレームとしてロードし、Databricksでデータを分析できます。
- Sparkのデータフレームを作成してTiDBのデータをロードします。ここでは前の手順で定義した変数を参照します。
%scala val remote_table = spark.read.format("jdbc") .option("url", url) .option("dbtable", table) .option("user", user) .option("password", password) .load()
2. データに対してクエリします。Databricksには必要なグラフの種類をカスタマイズする強力なグラフ表示関数が用意されています。
%scala display(remote_table.select("*"))

3. データフレームのビューまたはテーブルを作成します。この例では”trips”という名前の一時ビューを作成します。
%scala remote_table.createOrReplaceTempView("trips")
4. SQLステートメントを使用してクエリします。次のステートメントはタイプごとの自転車の数を照会します。
%sql SELECT rideable_type, COUNT(*) count FROM trips GROUP BY rideable_type ORDER BY count DESC
5. 分析結果をTiDB Cloudに書き込みます。
%scala spark.table("type_count") .withColumnRenamed("type", "count") .write .format("jdbc") .option("url", url) .option("dbtable", "bikeshare.type_count") .option("user", user) .option("password", password) .option("isolationLevel", "NONE") .mode(SaveMode.Append) .save()
(オプション) TiDB CloudのサンプルノートブックをDatabricksにインポートする
ここではDatabricksからTiDB Cloudに接続する手順とDatabricksでTiDBデータを分析する手順を含むTiDB Cloudサンプルノートブックを紹介します。こちらを直接インポートすることで分析作業に集中することができます。
- DatabricksワークステーションでCreate > ImportをクリックしてTiDB CloudのサンプルURLを貼り付け、ノートブックをDatabricksワークスペースにダウンロードします。

2. このノートブックをSparkクラスタにアタッチします。
3. この例のJDBC構成を独自のTiDB Cloudクラスタに置き換えます。
4. ノートブックの手順に従いDatabricksを使用してTiDB Cloudを試してください。
おわりに
この記事ではDatabricksでTiDB Cloudを使用する方法を紹介しました。こちらをクリックすることで、わずか数分で今すぐTiDB Cloudを試すことができます。私達は現在、TiDB / TiKV上でApache Sparkを実行するために構築された薄いクエリレイヤーであるTiSparkを介してDatabricksからTiDBに接続する方法に関する別のチュートリアル記事の作成に取り組んでいます。私たちのブログを是非購読して下さい。
こちらもご覧ください
Airbyteを使用してTiDB CloudからSnowflakeにデータを移行する
How to Achieve High-Performance Data Ingestion to TiDB in Apache Flink