Airbyteを使用してTiDB CloudからSnowflakeにデータを移行する
著者:Qiang Wu, Xiang Zhang (TiDB Cloudエンジニア)
編集者:Ran Huang, Tom Dewan
TiDB Cloudは、オープンソースのハイブリッドトランザクションおよび分析処理 (HTAP) データベースであるTiDBをクラウドにもたらす、フルマネージドDatabase-as-a-Service (DBaaS) です。
Airbyteは、データウェアハウス、データレイク、およびデータベース内のデータを統合するのに役立つオープンソースのデータ統合エンジンです。
Snowflakeは、シームレスなデータコラボレーションを備えたデータウェアハウジング用の単一のグローバルプラットフォームを備えたSoftware-as-a-Service (SaaS) サービスを提供します。
AirbyteはTiDB CloudをSnowflakeに接続し、ソースであるTiDB Cloudから宛先であるSnowflakeにデータを移行し、Snowflakeの強力な分析機能を活用して多次元の分析クエリに対応するのに役立ちます。(ソースデータは、TiDB Cloudまたは自社環境にインストールしたTiDBクラスタのいずれかから取得できます。) AirbyteはTiDB CloudからSnowflakeにデータを定期的に同期し、macro-progressiveデータビューを提供することもできます。
このチュートリアルではAirbyteを使用してTiDB CloudとSnowflakeを接続する方法と、前者から後者へのデータ移行の方法について説明します。
TiDB Cloud Developer Tierを使う
- 無料のTiDB Cloudアカウントにサインアップしてログインします。すでにTiDB Cloudアカウントをお持ちの場合は、アカウントに直接ログインすることもできます。
- Active Clustersページで、Create Clusterをクリックします。次に、Developer Tierボックスで、1 year Free Trialを選択します。
注:有料のTiDB Dedicated Tierを選択して、パフォーマンスを向上させることもできます。
注:Developer Tierは、2022年11月1日よりServerless Tierに変わりました。

- クラスタ名、クラウドプロバイダー (Developer Tierで使用できるのはAWSのみ)、およびリージョンを設定します。(近くのリージョンが推奨されます。) 次に、Createをクリックしてクラスタを作成します。
注:通常、TiDB Cloudクラスタの作成には1〜3分かかります。
- クラスタを作成すると、Active Clustersページが表示されます。作成したクラスター名をクリックして、クラスタコントロールパネルに移動します。

- Connectをクリックして、トラフィックフィルターを作成します。

- ポップアップウィンドウで、IPアドレスに0.0.0.0/0を設定して、他のIPアドレスからのアクセスを許可します。

サンプルデータをTiDB Cloudにインポートする
TiDB Cloudクラスタを作成したら、データをTiDB Cloudに移行できます。ここでは、Capital Bikeshareのシステムデータセットをサンプルデータとして使用して、データをTiDB Cloudにインポートする方法を説明します。
- Importをクリックすると、Data Import Taskページに移動します。


- Data Import Taskページのフィールドに次のパラメーターを入力します。
- Data Source Type:AWS S3
- Bucket URL:s3://tidbcloud-samples/data-ingestion/
- Data Format:TiDB Dumpling
- Role-ARN:arn:aws:iam::385595570414:role/import-sample-access
- Target Cluster Username and password:TiDB clusterのものと同じ
- すべてのフィールドに入力したら、Importをクリックします。これでサンプルデータをTiDB Cloudにインポートできます。通常、インポートプロセスが完了するまでに約3分かかります。
SnowflakeでAirbyte固有のエンティティを設定する
データをSnowflakeに書き込むには、ウェアハウス、データベース、スキーマ、ユーザー、およびロールを含むAirbyte固有のSnowflakeエンティティを、OWNERSHIP権限で作成する必要があります。

- 次のスクリプトでpassword、aribyte_role、airbyte_username、airbyte_warehouse、airbyte_database、およびairbyte_schemaを変更します。ここではデフォルトパラメータを例として使用します。次に、スクリプト全体をコピーしてWorksheetsページに貼り付けます。
-- set variables (these need to be uppercase) set airbyte_role = 'AIRBYTE_ROLE'; set airbyte_username = 'AIRBYTE_USER'; set airbyte_warehouse = 'AIRBYTE_WAREHOUSE'; set airbyte_database = 'AIRBYTE_DATABASE'; set airbyte_schema = 'AIRBYTE_SCHEMA'; -- set user password set airbyte_password = 'password'; begin; -- create Airbyte role use role securityadmin; create role if not exists identifier($airbyte_role); grant role identifier($airbyte_role) to role SYSADMIN; -- create Airbyte user create user if not exists identifier($airbyte_username) password = $airbyte_password default_role = $airbyte_role default_warehouse = $airbyte_warehouse; grant role identifier($airbyte_role) to user identifier($airbyte_username); -- change role to sysadmin for warehouse / database steps use role sysadmin; -- create Airbyte warehouse create warehouse if not exists identifier($airbyte_warehouse) warehouse_size = xsmall warehouse_type = standard auto_suspend = 60 auto_resume = true initially_suspended = true; -- create Airbyte database create database if not exists identifier($airbyte_database); -- grant Airbyte warehouse access grant USAGE on warehouse identifier($airbyte_warehouse) to role identifier($airbyte_role); -- grant Airbyte database access grant OWNERSHIP on database identifier($airUse existing destinationbyte_database) to role identifier($airbyte_role); commit; begin; USE DATABASE identifier($airbyte_database); -- create schema for Airbyte data CREATE SCHEMA IF NOT EXISTS identifier($airbyte_schema); commit; begin; -- grant Airbyte schema access grant OWNERSHIP on schema identifier($airbyte_schema) to role identifier($airbyte_role); commit;

4. Queryをクリックします。

- Airbyteのホームページに戻りDatabaseをクリックします。AIRBYTE_DATABASEという名前のワークシートがACCOUNTADMINとAIRBYTE_ROLEで作成されていることがわかります。

注:これらのパラメーターを書き留めておいてください。後でSnowflakeの宛先を作成するときに、それらの一部を再度入力します。Airbyteのドキュメントで詳細を確認することもできます。
独自のワークスペースにAirbyteをデプロイする
いくつかの手順を実行するだけでAirbyteをローカル環境に展開することができます。
- アプリケーションコンテナであるDockerをワークスペースにインストールします。
- 以下のようにAirbyteのソースコードをDockerにクローンします。
$ git clone https://github.com/airbytehq/airbyte.git $ cd airbyte
- docker-composeでDockerイメージを実行します。Airbyteのバナーが表示されたら、UIで http://localhost:8000にアクセスする準備ができています。
$ docker-compose up
AirbyteでTiDB Cloudソースを作成する
Airbyteをデプロイしたら、TiDB Cloud用の新しいソースコネクタをセットアップすることができます。
- DockerパネルでSourcesをクリックし、ソースタイプとしてTiDBを選択します。
- パネルのName、Host、Port、Database、Username、およびPasswordを含むすべてのフィールドに入力します。

- JDBC URL Paramsフィールドに、enabledTLSProtocols=TLSv1.2またはenabledTLSProtocols=TLSv1.3のいずれかを入力して、TLSプロトコルをTLSv1.2またはTLSv1.3に設定します。
- SSL Connectionを有効にします。
注:TiDB CloudとのTLS Connectionを無効にする場合は、JDBC URL Paramsフィールドの前のパラメーターをuseSSL=falseに変更し、SSL Connectionを無効にする必要があります。
- Set up sourceをクリックして、TiDB Cloudソースを作成します。
AirbyteでSnowflakeの宛先を作成する
- DockerパネルでDestinationsをクリックし、宛先タイプとしてSnowflakeを選択します。
- Name、Host、Role、Warehouse、Database、Default Schema、およびUsernameを含むすべてのフィールドに入力します。これらはSnowflakeでAirbyte固有のエンティティを設定するセクションのパラメーターです。
- Authorization Methodドロップダウンボックスで、Username and Passwordを選択して、PasswordをUsernameに関連付けます。

- Loading Methodドロップダウンボックスで[Recommended] Internal Stagingを選択します。
- Set up destinationをクリックしてSnowflakeの宛先を作成します。
接続を構築し、TiDB CloudからSnowflakeにデータを変換する
TiDB CloudソースとSnowflakeの宛先を設定したら、2つの間の接続を構築できます。
- DockerパネルでDestinationsを選択しNew Connectionをクリックします。
- Create a sourceをクリックしSelect an existing sourceを選択します。次に、ドロップダウンボックスで以前に作成したTiDBを選択しUse existing sourceをクリックします。

- 同様に先に作成したSnowflakeを宛先として選択し、Use existing destinationをクリックします。

- ソースと宛先を選択したら、Set up connectionパネルに移動します。この接続を識別するのに役立つ名前を作成します。ここではTiDB-Snowflakeを接続名として使用します。

- Replication frequencyフィールドでManualを選択します。これはデータが手動で移行されることを意味します。
- Destination NamespaceフィールドでMirror source structureを選択して、ソースと同じ場所にデータを保存します。
- TiDB CloudからSnowflakeに移行するスキーマを選択してアクティブ化します。ここでは例としてtripsテーブルとtype_countテーブルを選択します。
注:
- TiDBソースコネクタは、インクリメンタルとフルリフレッシュの2種類の同期をサポートしています。インクリメンタル同期モードでは、Airbyteは最後の同期タスク以降にソースに追加されたレコードのみを読み取ります。(最初の同期タスクでは、インクリメンタル同期モードはフルリフレッシュ同期モードと同等です)フルリフレッシュ同期モードでは、Airbyteはすべての同期タスク中にソースのすべてのレコードを読み取り、移行先に移行します。
- AirbyteのNamespaceセクションで、各テーブルの同期モードを個別に設定できます。
- Normalization & Transformationセクションで、Normalized tabular dataを選択します。

- Set up connectionをクリックして、データ同期タスクを開始します。通常このプロセスが完了するまでに数分かかります。おめでとうございます!上記のすべての手順を完了すると、データがTiDB CloudからSnowflakeに正常に移行され、データがAIRBYTE_DATABASE.BIKESHAREスキーマに保存されます。これでSnowflakeで分析クエリを作成できるようになりました。
まとめ
このチュートリアルではTiDB Cloud、Snowflake、およびAirbyteを構成する方法と、Airbyteを使用して他の2つを接続する方法を学習しました。また、多次元分析のためにTiDB CloudとSnowflakeからデータを移行する方法も学びました。TiDBソースコネクタはAirbyteのローカル環境で既に利用可能であり、他のソースからのデータ移行をサポートするために、TiDB宛先コネクタをすぐにリリースする予定です。
構成または移行中に問題が発生した場合は、Twitter、Slackチャンネルからご連絡いただくか、TiDB Internalsに参加してご意見やフィードバックをお寄せください。
こちらも合わせてご覧ください: