Amazon S3 または GCS からTiDB Cloudに Apache Parquet ファイルをインポートする
非圧縮および Snappy 圧縮アパッチ寄木細工形式のデータ ファイルの両方をTiDB Cloudにインポートできます。このドキュメントでは、Amazon Simple Storage Service (Amazon S3) または Google Cloud Storage (GCS) からTiDB Cloudに Parquet ファイルをインポートする方法について説明します。
ノート:
- TiDB Cloudは、空のテーブルへの Parquet ファイルのインポートのみをサポートしています。既にデータが含まれている既存のテーブルにデータをインポートするには、このドキュメントに従って、 TiDB Cloudを使用してデータを一時的な空のテーブルにインポートし、
INSERT SELECTステートメントを使用してデータをターゲットの既存のテーブルにコピーします。- Dedicated Tier クラスターに変更フィードがある場合、現在のデータのインポート機能では物理インポート モード .このモードでは、インポートされたデータは変更ログを生成しないため、変更フィードはインポートされたデータを検出できません。
ステップ 1.Parquet ファイルを準備する
ノート:
現在、 TiDB Cloudは、次のデータ型のいずれかを含む Parquet ファイルのインポートをサポートしていません。インポートする Parquet ファイルにそのようなデータ型が含まれている場合は、最初にサポートされているデータ型 (たとえば、
STRING) を使用して Parquet ファイルを再生成する必要があります。または、AWS Glue などのサービスを使用してデータ型を簡単に変換することもできます。
LISTNEST STRUCTBOOLARRAYMAP
Parquet ファイルが 256 MB より大きい場合は、それぞれのサイズが約 256 MB の小さなファイルに分割することを検討してください。
TiDB Cloudは、非常に大きな Parquet ファイルのインポートをサポートしていますが、サイズが 256 MB 前後の複数の入力ファイルで最高のパフォーマンスを発揮します。これは、 TiDB Cloudが複数のファイルを並行して処理できるため、インポート速度が大幅に向上する可能性があるためです。
次のように Parquet ファイルに名前を付けます。
Parquet ファイルにテーブル全体のすべてのデータが含まれている場合は、ファイルに
${db_name}.${table_name}.parquet形式の名前を付けます。これは、データをインポートするときに${db_name}.${table_name}テーブルにマップされます。1 つのテーブルのデータが複数の Parquet ファイルに分割されている場合は、これらの Parquet ファイルに数値のサフィックスを追加します。たとえば、
${db_name}.${table_name}.000001.parquetと${db_name}.${table_name}.000002.parquetです。数値サフィックスは連続していなくてもかまいませんが、昇順でなければなりません。また、数字の前にゼロを追加して、すべてのサフィックスが同じ長さになるようにする必要もあります。
ノート:
上記のルールに従って Parquet ファイル名を更新できない場合 (たとえば、Parquet ファイル リンクが他のプログラムでも使用されている場合) は、ファイル名を変更せずにステップ 4のファイル パターンを使用してソース データをインポートできます。単一のターゲット テーブルに。
ステップ 2. ターゲット表スキーマを作成する
Parquet ファイルにはスキーマ情報が含まれていないため、Parquet ファイルからTiDB Cloudにデータをインポートする前に、次のいずれかの方法を使用してテーブル スキーマを作成する必要があります。
方法 1: TiDB Cloudで、ソース データのターゲット データベースとテーブルを作成します。
方法 2: Parquet ファイルが配置されている Amazon S3 または GCS ディレクトリで、ソース データのターゲット テーブル スキーマ ファイルを次のように作成します。
ソース データのデータベース スキーマ ファイルを作成します。
Parquet ファイルがステップ1の命名規則に従っている場合、データベース スキーマ ファイルはデータ インポートのオプションです。それ以外の場合、データベース スキーマ ファイルは必須です。
各データベース スキーマ ファイルは
${db_name}-schema-create.sql形式で、CREATE DATABASEDDL ステートメントを含む必要があります。このファイルを使用すると、 TiDB Cloudは、データをインポートするときにデータを格納するための${db_name}のデータベースを作成します。たとえば、次のステートメントを含む
mydb-scehma-create.sqlファイルを作成すると、データをインポートするときにTiDB Cloudによってmydbデータベースが作成されます。CREATE DATABASE mydb;ソース データのテーブル スキーマ ファイルを作成します。
Parquet ファイルが配置されている Amazon S3 または GCS ディレクトリにテーブル スキーマ ファイルを含めない場合、データをインポートするときに、 TiDB Cloudは対応するテーブルを作成しません。
各テーブル スキーマ ファイルは
${db_name}.${table_name}-schema.sql形式で、CREATE TABLEDDL ステートメントを含む必要があります。このファイルを使用すると、データをインポートすると、 TiDB Cloudは${db_name}データベースに${db_table}テーブルを作成します。たとえば、次のステートメントを含む
mydb.mytable-schema.sqlファイルを作成すると、データをインポートすると、 TiDB Cloudはmydbデータベースにmytableテーブルを作成します。CREATE TABLE mytable ( ID INT, REGION VARCHAR(20), COUNT INT );ノート:
各
${db_name}.${table_name}-schema.sqlファイルには、単一の DDL ステートメントのみを含める必要があります。ファイルに複数の DDL ステートメントが含まれている場合、最初のステートメントのみが有効になります。
ステップ 3. クロスアカウント アクセスを構成する
TiDB Cloudが Amazon S3 または GCS バケット内の Parquet ファイルにアクセスできるようにするには、次のいずれかを実行します。
Parquet ファイルが Amazon S3 にある場合、 Amazon S3 アクセスを構成する .
完了したら、 ステップ 4で必要になるため、Role ARN の値を書き留めます。
Parquet ファイルが GCS にある場合は、 GCS アクセスを構成する .
ステップ 4. Parquet ファイルをTiDB Cloudにインポートする
Parquet ファイルをTiDB Cloudにインポートするには、次の手順を実行します。
TiDB Cloudコンソールにログインしてクラスターページに移動し、左側のナビゲーション バーの上部でターゲット プロジェクトを選択します。
クラスターを見つけて、クラスター領域の右上隅にある [ ... ] をクリックし、 [データのインポート] を選択します。
[インポート] ページで、右上隅にある [データのインポート] をクリックし、 [ S3 から] を選択します。
ヒント:
または、[クラスター] ページでターゲット クラスターの名前をクリックし、[インポート] 領域で [データのインポート] をクリックすることもできます。
[**データのインポート]**ページで、次の情報を提供します。
- データ形式: Parquetを選択します。
- バケット URI : Parquet ファイルが配置されているバケット URI を選択します。
- Role ARN : (このフィールドは AWS S3 でのみ表示されます): Role ARN のRole ARN 値を入力します。
- ターゲットクラスタ: クラスター名とリージョン名が表示されます。
バケットのリージョンがクラスターと異なる場合は、クロス リージョンのコンプライアンスを確認します。 [次へ] をクリックします。
TiDB Cloudは、指定されたバケット URI でデータにアクセスできるかどうかの検証を開始します。検証後、 TiDB Cloudはデフォルトのファイル命名パターンを使用してデータ ソース内のすべてのファイルをスキャンしようとし、次のページの左側にスキャンの概要結果を返します。
AccessDeniedエラーが発生した場合は、 S3 からのデータ インポート中のアクセス拒否エラーのトラブルシューティングを参照してください。ファイル パターンを変更し、必要に応じてテーブル フィルター ルールを追加します。
ファイル パターン: ファイル名が特定のパターンに一致する Parquet ファイルを単一のターゲット テーブルにインポートする場合は、ファイル パターンを変更します。
ノート:
この機能を使用すると、1 つのインポート タスクで一度に 1 つのテーブルにのみデータをインポートできます。この機能を使用してデータを別のテーブルにインポートする場合は、インポートするたびに別のターゲット テーブルを指定して、複数回インポートする必要があります。
ファイル パターンを変更するには、[変更] をクリックし、次のフィールドでParquetファイルと単一のターゲット テーブルとの間のカスタム マッピング ルールを指定して、[スキャン] をクリックします。その後、提供されたカスタム マッピング ルールを使用して、データ ソース ファイルが再スキャンされます。
ソース ファイル名: インポートする Parquet ファイルの名前と一致するパターンを入力します。 Parquet ファイルが 1 つしかない場合は、ここにファイル名を直接入力できます。 Parquet ファイルの名前にはサフィックス
.parquetを含める必要があることに注意してください。例えば:
my-data?.parquet:my-dataと 1 文字 (my-data1.parquetとmy-data2.parquetなど) で始まるすべての Parquet ファイルが同じターゲット テーブルにインポートされます。my-data*.parquet:my-dataで始まるすべての Parquet ファイルが同じターゲット テーブルにインポートされます。
ターゲット テーブル名: TiDB Cloudのターゲット テーブルの名前を入力します。これは
${db_name}.${table_name}形式である必要があります。たとえば、mydb.mytableです。このフィールドは特定のテーブル名を 1 つしか受け付けないため、ワイルドカードはサポートされていないことに注意してください。
テーブル フィルター: インポートするテーブルをフィルター処理する場合は、この領域でテーブル フィルター ルールを指定できます。
例えば:
db01.*:db01データベース内のすべてのテーブルがインポートされます。!db02.*:db02データベースのテーブルを除き、他のすべてのテーブルがインポートされます。!は、インポートする必要のないテーブルを除外するために使用されます。*.*: すべてのテーブルがインポートされます。
詳細については、 テーブル フィルタの構文を参照してください。
[次へ] をクリックします。
[プレビュー] ページでインポートするデータを確認し、[インポートの開始] をクリックします。
インポートの進行状況がFinishedと表示されたら、インポートされたテーブルを確認します。
数値がゼロの場合は、[ソース ファイル名] フィールドに入力した値と一致するデータ ファイルがないことを意味します。この場合、[ソース ファイル名] フィールドに入力ミスがないかどうかを確認して、もう一度やり直してください。
インポート タスクを実行するときに、サポートされていない変換または無効な変換が検出された場合、 TiDB Cloudはインポート ジョブを自動的に終了し、インポート エラーを報告します。
インポート エラーが発生した場合は、次の手順を実行します。
部分的にインポートされたテーブルを削除します。
テーブル スキーマ ファイルを確認してください。エラーがある場合は、テーブル スキーマ ファイルを修正します。
Parquet ファイルのデータ型を確認します。
サポートされていないデータ型 (
NEST STRUCT、ARRAY、またはMAPなど) が Parquet ファイルに含まれている場合は、 サポートされているデータ型 (STRINGなど) を使用して Parquet ファイルを再生成する必要があります。インポート タスクを再試行します。
サポートされているデータ型
次の表に、 TiDB Cloudにインポートできる、サポートされている Parquet データ型を示します。