5
1

TiDB Cloudに登録して30分以内にTROCCO®のHTTP・HTTPSコネクタでデータ転送してみた話

Last updated at Posted at 2024-07-26

はじめに

【第一回】激突!データ基盤プロレス大会という、TiDB、Databricks、TROCCO®が参加する謎イベント(笑)に参加していました。そのなかで、TROCCO®はDatabricksがコネクタとして存在しており、転送元/先としてDatabricksのデータ転送ができるのですが、TiDBはできないよねという話がありました。

いや、TiDBはMySQL互換ということなので、MySQLコネクタでできるのでは?と思いながらイベント時間内のタイムアタックに挑戦してみたところ、実はHTTP・HTTPSコネクタで転送元としてデータ転送ができたので、そのときの設定方法について記事にしておきます!

TiDBとは

その前に、TiDBとは何かについて簡単に説明しておきましょう。と思ったものの、TiDBの詳しい話は今回のイベントで初めて聞いたので、参加者のツイートで紹介します!

  • NewSQLでOLAPとOLAPのハイブリッドで利用可能

  • 加えてMySQL互換で、フルマネージド、スモールスタートが可能

なるほど、なかなか強そうなDBですね。

TiDBに登録する

TiDBのHPにアクセスし、右上の「無料で始める」から利用開始できます。データ転送を行うまで、クレジットカードの登録もなく進めることができました。

image.png

TiDBの設定

TiDBでデータを準備する

TiDBのコンソールに入ると、自動でClusterというものができています。このなかでデータベースを作成し、テーブルを作っていきます。

image.png

ImportでCSVファイルを指定し、データをインポートします。

image.png

ファイルをアップロードし、作成するデータベースとテーブルを指定します。

image.png

CSVファイルの場合、データを読み取って自動で型定義をしてくれます。なお、Titanicのデータでは、自動定義される型に合わないデータがあり、エラーで困ったので最終的には全部文字列で指定しました。(ここで無駄に時間を食った・・・)

image.png

取込が完了すると、SQL Editorからクエリが叩けるようになります。

image.png

Data Serviceを設定する

TiDBにはData Serviceという機能があり、ここでHTTPリクエストに応じてデータを抽出するためのAPIを設計することができます。

TiDB Cloud Data Service is a fully managed low-code backend-as-a-service solution that simplifies backend application development, empowering developers to rapidly build highly scalable, secure, data-driven applications. Inside Data Services, your journey begins with a Data App, a container hosting REST Endpoints, forming the foundation of your project.

image.png

必要事項を記入して、Data Appを作成します。

image.png

Settingsのタブは以下のような形で、ここに記載のあるBase URLがAPIとして叩くときのエンドポイントになります。

image.png

左の+ボタンを押し、Autogenerate Endpointをクリックすることで、具体の設定を作成していきます。

image.png

こんな画面になるので、Cluster、Database、Tableを指定します。

image.png

勝手にエンドポイントとクエリが設定されます。なにこれ便利。右上のDeployボタンでデプロイします。

image.png

これでData Serviceが作成できたので、認証のために再度Settingsの画面に戻り、AuthenticationからCreate API Keyでキーを作成します。

image.png

必要事項を記入します。

image.png

するとKeyが生成されます。

image.png

これでTiDB側の設定は完了です。

TROCCO®の設定

転送元HTTP・HTTPSと転送先として送りたいDWHを選択します。

HTTP・HTTPSのURLとして、作成したData Serviceのエンドポイントを記載します。

image.png

入力ファイル形式はJSONPathで、JSONPathとして$.data.rowsを指定します。ヘッダの認証の設定方法は後述します。

image.png

TiDBのドキュメントによると、認証方式は下記のようになっています。

TiDB Cloud Data API は基本認証とダイジェスト認証の両方をサポートします。

  • 基本認証 暗号化されていない Base64 エンコードを使用して、公開キーと秘密キーを送信します。 HTTPS により通信のセキュリティが確保されます。詳細については、 RFC 7617 - 「基本」HTTP 認証スキームを参照してください。
  • ダイジェスト認証 ネットワーク送信前に公開キー、秘密キー、サーバー提供の nonce 値、HTTP メソッド、および要求された URI をハッシュすることにより、追加のセキュリティレイヤーを提供します。これにより、秘密キーが暗号化され、平文で送信されるのを防ぎます。詳細については、 RFC 7616 - HTTP ダイジェスト アクセス認証を参照してください。

出典:公式ドキュメント「データサービスの API キー」

今回はひとまず基本認証を利用するので、この形式に合わせてヘッダーで設定する必要があります。ここでの入力形式は下記の通りです。

  • キー: Authorization
  • 値: Basic {'Public Key:Private Key'をbase64でエンコードしたもの}

値に入力するテキストを生成するには、'Public Key:Private Key'をTiDB_key.txtに保存し、Windows環境ではコマンドプロンプトでcertutil -f -encode TiDB_key.txt TiDB_key_encoded.txtというコマンドを叩きます。これで生成されたものを先ほどの値として入力します。

そのほか、転送先の設定は適宜必要事項を入力してください。

image.png

先に進むとデータプレビューが表示され、データが適切に取得できていることがわかります。なかなか面白いですね。

image.png

ここに至るまで約30分間でしたが、イベント終了までには間に合いませんでした。残念!

APIに変数を組み込める

ここまで試していてなにこれすごい!!!と思ったのが、このAPIを生成するときに、クエリに変数を組み込むことができ、HTTPで叩くときにクエリパラメータで指定できるというところです。

image.png

普段使っているAPIをDB側でサクッと作成できるような機能で、非常にわくわくしますね!

さいごに

1時間くらいでさっと記事にしてみました!個人的にはTiDBの理解も深まりなかなか面白かったですし、みなさんにもご参考いただけると嬉しいです。

5
1
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
5
1