2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

TiDBAdvent Calendar 2023

Day 3

[Beta] TiDB ServerlessからクラウドBigQueryに同期する

Last updated at Posted at 2023-12-18

はじめに

TiDBからBigQueryなどのクラウドDWHに接続したいというリクエスとは結構聞かれる質問です。
最近、tidb2dw というツールが登場してこれが手軽に出来るようになりました。
この記事ではTiDB ServerlessからBigQueryへのデータ連係を試して見ようと思います。

2023年12月現在、TiDB ServerlessはCDC機能を提供していないので、差分同期はできません。
スナップショット同期のみになります。

なお、公式blogでSnowflakeとの連携についても記載があります。

tidb2dwでBigQueryにデータを同期する

tidb2dwは、TiDBから各種クラウドDWHや、s3やgcsといったクラウドストレージへのレプリケーションを行うツールです。データエクスポートにはdumplingを、差分同期にはTiCDCを利用します。また、TiDB OSSにもTiDB Cloudにも対応しています。

今回TiDB側はお手軽なTiDB Serverlessを利用します。TiDB ServerlessはCDCを提供していないので、スナップショットのみの機能を確認していきます。

前準備

TiDB ServerlessからBigQueryにデータを同期させます。この記事では手順を説明しませんが、下記の準備をします。本記事中で利用した値を記載しておきます。

  • TiDB側テーブルの準備 - test.customers
  • Google Cloudでバケットの作成 - gs://tidb2dwtest
  • BigQueryでデータセットの作成 - tidb2dw

tidb2dwのビルド&インストール

tidb2dwのv0.3ではBigQueryの連携に問題があるため、最新版をビルドします

tidb2dwの最新版をgit cloneして、ビルドします。今回はMacOS上のgolang v1.21で行いました。

git clone https://github.com/pingcap-inc/tidb2dw.git
cd tidb2dw & make

ビルドが成功すると、bin/tidb2dw というコマンドができます。以降、このコマンドを利用していきます。

Google Cloud Application Default Credentialの設定

tidb2dwはBigQueryやGCSのアクセスにGoogle Cloudのクレデンシャルを必要とします。ここではADC(Application Default Credential)を利用します。
google cloud cliのインストールが必要なので、入っていなければ下記の手順に従ってインストール&認証まで済ましておきます。

gcloud auth application-default login

実行

下記のコマンド、オプションで実行します。

bin/tidb2dw bigquery --mode snapshot-only \
-h gateway01.ap-northeast-1.prod.aws.tidbcloud.com \
-u <TIDB USER> -p <TIDB PASSWROD> -t test.customers \
--tidb.ssl-ca /etc/ssl/cert.pem \
--bq.project-id <BQ PROJECT NAME> --bq.dataset-id tidb2dw -s gs://tidb2dwtest/

利用したオプションは下記です

  • bigquery - サブコマンド。対象DWHを指定する。
  • mode - 同期モード。今回はsnapshot-onlyを指定。他のオプションはServerlessでは利用できない。
  • h - TiDBのホスト名を指定
  • u - TiDBのユーザー名を指定
  • p - TiDBのパスワードを指定
  • t - TiDBのテーブルを指定
  • --tidb.ssl-ca - TLSで接続する際のCA証明書を指定。今回はMacOSのものを利用。
  • --bq.project-id - BigQueryのプロジェクト名
  • --bq.dataset-id - BigQueryのデータセット名
  • s - 利用するGoogle Cloud Storageのパス。最後の/も必要です。

内部的にはdumpling出力したテーブル定義とCSVをBigQuery用に変換して、GCSに置き、それをBigQuery側からIMPORTするような動きをしています。ちゃんと出力できたかどうかはGCSを見ると分かります。

image.png

ロードが成功すると、その旨メッセージが出力されます。TiDB ServerlessからデータをExportする際に、いくつかシステムテーブルが出力できないというエラーが出ますが、これはTiDB Serverlessで利用しないシステムテーブルなので無視して構いません。

[2023/12/16 16:09:42.795 +09:00] [INFO] [snapshot.go:123] ["Loading snapshot data into data warehouse"] [table=test.customers] [path=test.customers.0000000010000.csv]
[2023/12/16 16:09:42.795 +09:00] [INFO] [snapshot.go:123] ["Loading snapshot data into data warehouse"] [table=test.customers] [path=test.customers.000000000.csv]
[2023/12/16 16:09:46.058 +09:00] [INFO] [snapshot.go:128] ["Successfully load snapshot data into data warehouse"] [table=test.customers] [path=test.customers.0000000010000.csv]
[2023/12/16 16:09:46.422 +09:00] [INFO] [snapshot.go:128] ["Successfully load snapshot data into data warehouse"] [table=test.customers] [path=test.customers.000000000.csv]
[2023/12/16 16:09:46.422 +09:00] [INFO] [snapshot.go:148] ["Successfully load all snapshot data into data warehouse"] [table=test.customers] [size=8908] [cost=4.239425417s]
[2023/12/16 16:09:46.871 +09:00] [INFO] [snapshot.go:156] ["Successfully upload loadinfo"] [table=test.customers] [loadinfo="Copy to data warehouse start time: 2023-12-16T16:09:42+09:00\nCopy to data warehouse end time: 2023-12-16T16:09:46+09:00\n"]

BigQuery上でもデータが確認できます。
image.png

まとめ

data2dwでTiDBからクラウドDWH(最新版ではSnowflake, BigQuery、Redshiftに対応。S3, GCSへの出力も可能)に連携することが可能です。是非利用してください。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?