TiDB Cloudへのデータインポート方法をまとめて実際にやってみた
こんにちは、ゲームソリューション部のsoraです。
今回は、TiDB Cloudへのデータインポート方法をまとめて実際にやってみたことについて書いていきます。
インポート方法
CSVファイルをインポートする方法として、以下4種類を挙げます。
今回はCSVファイルを対象として、移行ではなくあくまでデータのインポートに絞っています。
- ローカルファイルのインポート
- S3(Google CloudだとGCS)からのインポート
- tidb-lightnigツールでのインポート
- LOAD DATA LOCAL INFILEでのインポート
基本的にはファイルサイズの制限が「S3からのインポート」か「tidb-lightnigツールでのインポート」が良いと思います。
ローカルファイルのインポート
TiDB Cloudの画面でローカルファイルをドラッグアンドドロップでインポートする方法です。
Serverlessクラスタのみで利用可能な方法です。
1ファイルごとの実行で、1ファイルのサイズは50MiBの制限あります。
事前準備が不要なため一番手軽です。
S3経由でインポート
TiDB Cloudの画面でS3バケットとIAMロール(またはアクセスキー)を指定してインポートする方法です。
DedicatedクラスタとServerlessクラスタのどちらでも使用可能です。
複数ファイルをまとめてインポートすることも可能です。
TiDB Lightningでのインポート
TiDB Lightningとは、TiDBへデータインポートするためのツールです。
EC2などにTiDB Lightningをインストールして使用します。
複数のファイルをまとめてインポート可能です。
インストールが必要なものの、S3経由の場合と違ってIAMロールやアクセスキーなどは不要なため、人によっては使いやすい場合もあると思います。
弊社にもやってみたブログがあるので、詳細はそちらをご確認ください。
LOAD DATA LOCAL INFILEなどでのインポート
TiDB CloudはMySQL互換であり、LOAD DATA LOCAL INFILEが使えるため、こちらを使用してもインポート可能です。
その他のSQLについて、TiDB CloudのDedicatedとServerlessで使用できるSQLが異なるため、詳細は以下をご確認ください。
やってみた
今回は、ローカルファイルのインポートとS3経由でインポートを実際にやってみます。
インポートするデータについては、生成AIに投げて、データ項目を含めたデータ作成のためのPythonコードを生成し、そちらを実行して作成しました。
生成したCSVファイルは以下のようなものです。
商品ID,商品名,カテゴリ,価格,在庫数,説明,発売日
I50nivmx9G,VwkyhWN4rLsTOfM,Electronics,764.61,166,HhpgUyeXD8OYVxLfoOyxK4y3nyXvH0hHgW9ZPEvq2cVMNgdvJFOQgydaZJOs1irGAXEzmpefyXO4Cwsy8Y9,2012-12-30
………
ローカルファイルをアップロードしてインポート
TiDB Cloud上のImportにて、ローカルファイルをドラッグアンドドロップして、インポート先のデータベースとテーブルを指定することでインポートできます。
事前準備も知識も不要なため、手軽にインポートすることができました。
ちなみに、50MiBを超えた256MBのデータをインポートするために、ドラッグアンドドロップしてみるとエラーが出ることも確認できました。
S3経由でのインポート
S3バケットとIAMロールの作成
事前準備としてインポート元のS3バケットとIAMロール(アクセスキーでも可能)を作成します。
TiDB CloudのアカウントIDと外部IDは、TiDB CloudのCreate Importから確認できます。
AWS上でのS3バケットを作成してファイルを配置、IAMロールの作成をするだけのため、今回は省略します。
手順は以下をご確認ください。
スキーマファイルの作成
CSVファイルにはスキーマ情報が含まれていないため、事前にTiDB Cloudでデータベースとテーブルを作成しておくか、インポート元のS3バケットにスキーマファイルを作成します。
今回は、スキーマファイルを作成する方法でやってみます。
まずインポートするCSVファイルについて、以下を参考にファイル名を修正します。${db_name}.${table_name}.csv
の形式で、test_item.items.csv
と名付けます。
複数ファイルある場合は、test_item.items.01.csv
とtest_item.items.02.csv
のように番号を割り振ります。
ちなみに圧縮ファイルもサポートしているため、zipファイルなども可能です。
データインポート時にデータベースとテーブルを作成するために、sqlファイルを作成してCSVファイルと同じバケットに配置します。
CREATE DATABASE test_item;
CREATE TABLE items (
商品id VARCHAR(10) NOT NULL,
商品名 VARCHAR(15) NOT NULL,
カテゴリ VARCHAR(255) NOT NULL,
価格 DECIMAL(10, 2) NOT NULL,
在庫数 INT NOT NULL,
説明 VARCHAR(100) NOT NULL,
発売日 DATE NOT NULL,
PRIMARY KEY (商品id)
);
TiDB Cloudへのインポート
その後、TiDB Cloud上のImportにて、S3バケットとIAMロールを指定してインポートします。
インポートできていることが確認できました。
参考
最後に
今回は、TiDB Cloudへのデータインポート方法をまとめて実際にやってみたことを記事にしました。
どなたかの参考になると幸いです。