📌

TiDB Data Service を触ってみる その1

2024/04/22に公開

前回の記事でChat2Query から 2種類のData Service EndPointが作成されています。
https://zenn.dev/kameping/articles/9ebee487d30359

Data Service とは
https://docs.pingcap.com/ja/tidbcloud/data-service-get-started

カスタム API エンドポイントを使用して
HTTPS リクエスト経由でTiDB Cloudデータにアクセスでき、
HTTPS と互換性のあるアプリケーションやサービスとシームレスに統合できます。
とのことです。

つまりHTTPベースでデータにアクセスが可能でSQLの実行結果をJSON形式で入手することが可能になるため、WEBサービスなどへの組み込みが容易になる機能です。フロントエンドから直接任意のSQLが発行できるという意味ではSQLインジェクション等が懸念されるかもしれないですが、Data Service ではあらかじめクラスター側にプリセットされたSQL毎にEnd Point が作成されそれを呼び出すという形態ととるため、特定のSQLしか実行されないようになっており安心です。

さっそくやってみる

前回までの手順で2種類のEndPointがすでに作成されています。

New App ServiceがChat2Query経由で生成されたもの、New Appが外部SQLファイル経由で作成されたものです。
この記事では外部SQLファイル経由で作成されたものを外部HTTPエンドポイント経由で実行してみます。
まずSQLエディタでSQLを以下のように書き換えておきます。Chat2Queryの画面で実行したSQLとData Service で実行するSQLは作成時点は同じものがコピーされていますが、別々のものとして存在しており書き換えることが可能です。この点は作業手順的に少しややこしいですが、Data Service はあくまで任意のSQLをHTTPエンドポイント経由で実行する機能であり、Chat2Queryで作成したビューないしはマテリアライズドにアクセスする物ではないということです。

SQLが実行出来たらEnd Pointの作成と実行に必要な認証識別子の作成に入ります。まずはアプリケーションをクリックします。

Settingsタブをクリックし画面下部のAuthenticationからCreate API Keyをクリックします。

デフォルトのままRead OnlyNextをクリックします。

Copy AllをクリックしてPublicとPrivate Keyをcopyしてメモ帳か何かに貼り付けておきます。

次にGET Getting Startedをクリックし右側のPropertiesタブをクリックします。

実行されるSQLに任意のエンドポイント名を指定する必要がありますのでselectallと指定します。
この際必ず/から始まる必要があります。

次にShow Code Exampleをクリックします。テスト環境と本番環境の選択が出てきますが、現時点ではこのエンドポイントは本番環境にデプロイされていないため、テスト環境を指定しコードをcopyします。

curl --digest --user ${PUBLIC_KEY}:${PRIVATE_KEY} --request GET 'https://ap-northeast-1.data.tidbcloud.com/api/v1beta/app/dataapp-doIwDKPm/endpoint/selectall'\
 --header 'endpoint-type: draft'

鍵を置き換えます。${ }の部分は不要です。以下のようなJSONが出力されます。

{
   "type":"sql_endpoint",
   "data":{
      "columns":[
         {
            "col":"id",
            "data_type":"INT",
            "nullable":false
         },
         {
            "col":"name",
            "data_type":"VARCHAR",
            "nullable":false
         }
      ],
      "rows":[
         {
            "id":"1",
            "name":"koiping"
         },
         {
            "id":"2",
            "name":"kameping"
         }
      ],
      "result":{
         "code":200,
         "message":"Query OK!",
         "start_ms":1713763621868,
         "end_ms":1713763622459,
         "latency":"591.289824ms",
         "row_count":2,
         "row_affect":0,
         "limit":1000
      }
   }
}

実行が確認出来たら画面右上からDeployボタンを押します。

先ほどのCurlコマンドから

--header 'endpoint-type: draft'

部分を削除して再度実行してください。
同様に実行結果がJSONで戻ります。

Chat2Query API 経由で生成されたData Service 用エンドポイントはまた少し画面構成などが異なっており、次回の記事で解説したいと思います!

Discussion