TiDB User Day 2024のアーカイブ動画を公開中!詳細を見る
use airbyte to migrate data from tidb cloud to 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を使う

  1. 無料のTiDB Cloudアカウントにサインアップ してログインします。 すでにTiDB Cloudアカウントをお持ちの場合は、アカウントに直接 ログイン することもできます。
  2. Active Clustersページで、Create Clusterrをクリックします。次に、Developer Tierボックスで、1 year Free Trialを選択します。
    注:有料のDedicated Tierを選択して、パフォーマンスを向上させることもできます。 image
  3. クラスタ名、クラウドプロバイダー (Developer Tierで使用できるのはAWSのみ)、およびリージョンを設定します。(近くのリージョンが推奨されます。) 次に、Createをクリックしてクラスタを作成します。
    注:通常、TiDB Cloudクラスタの作成には1〜3分かかります。
  4. クラスタを作成すると、Active Clustersページが表示されます。作成したクラスター名をクリックして、クラスタコントロールパネルに移動します。 image
  5. Connectをクリックして、トラフィックフィルターを作成します。 image
  6. ポップアップウィンドウで、IPアドレスに0.0.0.0/0を設定して、他のIPアドレスからのアクセスを許可します。 image

サンプルデータをTiDB Cloudにインポートする

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

  1. Importをクリックすると、Data Import Taskページに移動します。 image image
  2. Data Import Taskページのフィールドに次のパラメーターを入力します。
    • Data Source TypeAWS S3
    • Bucket URLs3://tidbcloud-samples/data-ingestion/
    • Data FormatTiDB Dumpling
    • Role-ARNarn:aws:iam::385595570414:role/import-sample-access
    • Target Cluster Username and password:TiDB clusterのものと同じ
  3. すべてのフィールドに入力したら、Importをクリックします。これでサンプルデータをTiDB Cloudにインポートできます。通常、インポートプロセスが完了するまでに約3分かかります。

SnowflakeでAirbyte固有のエンティティを設定する

データをSnowflakeに書き込むには、ウェアハウス、データベース、スキーマ、ユーザー、およびロールを含むAirbyte固有のSnowflakeエンティティを、OWNERSHIP権限で作成する必要があります。

  1. 最初にSnowflakeアカウントにサインアップすると、30日間無料で試用できます。すでにお持ちの場合は、アカウントに直接サインアップできます。
  2. Snowflakeアカウントにサインインしたら、Worksheetsをクリックして新しいワークシートを作成します。 image
  3. 次のスクリプトでpasswordaribyte_roleairbyte_usernameairbyte_warehouseairbyte_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; 
    

image 4.Queryをクリックします。 image 5.Airbyteのホームページに戻りDatabaseをクリックします。AIRBYTE_DATABASEという名前のワークシートがACCOUNTADMINAIRBYTE_ROLEで作成されていることがわかります。 image
注:これらのパラメーターを書き留めておいてください。後でSnowflakeの宛先を作成するときに、それらの一部を再度入力します。Airbyteのドキュメントで詳細を確認することもできます。

独自のワークスペースにAirbyteをデプロイする

いくつかの手順を実行するだけでAirbyteをローカル環境に展開することができます。

  1. アプリケーションコンテナであるDockerをワークスペースにインストールします。
  2. 以下のようにAirbyteのソースコードををDockerにクローンします。
    $ git clone https://github.com/airbytehq/airbyte.git
    $ cd airbyte
    
  3. docker-composeでDockerイメージを実行します。Airbyteのバナーが表示されたら、UIでhttp://localhost:8000にアクセスする準備ができています。
    $ docker-compose up
    

AirbyteでTiDB Cloudソースを作成する

Airbyteをデプロイしたら、TiDB Cloud用の新しいソースコネクタをセットアップすることができます。

  1. DockerパネルでSourcesをクリックし、ソースタイプとしてTiDBを選択します。
  2. パネルのName、Host、Port、Database、UsernameおよびPasswordを含むすべてのフィールドに入力します。 image
  3. JDBC URL Paramsフィールドに、enabledTLSProtocols=TLSv1.2または、enabledTLSProtocols=TLSv1.3のいずれかを入力して、TLSプロトコルをTLSv1.2または、TLSv1.3に設定します。
  4. SSL Connection.を有効にします。
    注:TiDB Cloudとの TLS connectionを無効にする場合は、JDBC URL Paramsフィールドの前のパラメーターをuseSSL=falseに変更し、SSL Connectionを無効にする必要があります。
  5. Set up sourceをクリックして、TiDB Cloudソースを作成します。

AirbyteでSnowflakeの宛先を作成する

  1. DockerパネルでDestinationsをクリックし、宛先タイプとしてSnowflakeを選択します。
  2. Name、Host、Role、Warehouse、Database、Default Schema,、およびUsernameを含むすべてのフィールドに入力します。これらはSnowflakeでAirbyte固有のエンティティを設定するセクションのパラメーターです。
  3. Authorization Methodドロップダウンボックスで、Username and Passwordを選択して、PasswordUsernameに関連付けます。 image
  4. Loading Methodドロップダウンボックスで、[Recommended] Internal Stagingを選択します。
  5. Set up destinationをクリックしてSnowflakeの宛先を作成します。

接続を構築し、TiDB CloudからSnowflakeにデータを変換する

TiDB CloudソースとSnowflakeの宛先を設定したら、2つの間の接続を構築できます。

  1. DockerパネルでDestinationsを選択しNew Connectionをクリックします。
  2. Create a sourceをクリックしSelect an existing sourceを選択します。次に、ドロップダウンボックスで以前に作成したTiDBを選択しUse existing sourceをクリックします。 image
  3. 同様に先に作成したSnowflakeを宛先として選択し、Use existing destinationをクリックします。 image
  4. ソースと宛先を選択したら、Set up connectionパネルに移動します。この接続を識別するのに役立つ名前を作成します。ここではTiDB-Snowflakeを接続名として使用します。 image
  5. Replication frequencyフィールドでManualを選択します。これはデータが手動で移行されることを意味します。
  6. Destination NamespaceフィールドでMirror source structureを選択して、ソースと同じ場所にデータを保存します。
  7. TiDB CloudからSnowflakeに移行するスキーマを選択してアクティブ化します。ここでは例としてtripstype_countテーブルを選択します。
    注:
    • TiDBソースコネクタは、インクリメンタルとフルリフレッシュの2種類の同期をサポートしています:インクリメンタル同期モードでは、Airbyteは最後の同期タスク以降にソースに追加されたレコードのみを読み取ります。(最初の同期タスクでは、インクリメンタル同期モードはフルリフレッシュ同期モードと同等です) フルリフレッシュ同期モードでは、Airbyteはすべての同期タスク中にソースのすべてのレコードを読み取り、移行先に移行します。
    • AirbyteのNamespaceセクションで、各テーブルの同期モードを個別に設定できます。
  8. Normalization & Transformationセクションで、Normalized tabular dataを選択します。 image
  9. Set up connectionをクリックして、データ同期タスクを開始します。通常このプロセスが完了するまでに数分かかります。 おめでとうございます!上記のすべての手順を完了すると、データがTiDB CloudからSnowflakeに正常に移行され、データがAIRBYTE_DATABASE.BIKESHAREスキーマに保存されます。これでSnowflakeで分析クエリを作成できるようになりました。 image

まとめ

このチュートリアルではTiDB Cloud、Snowflake、およびAirbyteを構成する方法と、Airbyteを使用して他の2つを接続する方法を学習しました。また、多次元分析のためにTiDB CloudとSnowflakeからデータを移行する方法も学びました。TiDBソースコネクタはAirbyteのローカル環境で既に利用可能であり、他のソースからのデータ移行をサポートするために、TiDB宛先コネクタをすぐにリリースする予定です。

構成または移行中に問題が発生した場合は、TwitterまたはSlackチャンネルに参加してご意見やフィードバックをお寄せください。

こちらも合わせてご覧ください:
Databricksを使用したTiDB Cloudでの分析
Apache FlinkでTiDBへの高性能データ取り込みを実現する方法
TiDBでのデータ変換がより簡単に


Have questions? Let us know how we can help.

Contact Us

TiDB Cloud Dedicated

TiDB Cloudのエンタープライズ版。
専用VPC上に構築された専有DBaaSでAWSとGoogle Cloudで利用可能。

TiDB Cloud Serverless

TiDB Cloudのライト版。
TiDBの機能をフルマネージド環境で使用でき無料かつお客様の裁量で利用開始。