CSV ファイルから TiDB へのデータの移行

このドキュメントでは、CSV ファイルから TiDB にデータを移行する方法について説明します。

TiDB Lightning は、 CSV ファイルやタブ区切り値 (TSV) などの他の区切り形式からデータを読み取ることができます。その他のフラット ファイル データ ソースについては、このドキュメントを参照してデータを TiDB に移行することもできます。

前提条件

ステップ1. CSVファイルを準備する

すべての CSV ファイルを同じディレクトリに配置します。TiDB TiDB Lightning ですべての CSV ファイルを認識する必要がある場合は、ファイル名が次の要件を満たしている必要があります。

  • CSV ファイルにテーブル全体のデータが含まれている場合は、ファイルに${db_name}.${table_name}.csv名前を付けます。
  • 1 つのテーブルのデータが複数の CSV ファイルに分割されている場合は、これらの CSV ファイルに数値サフィックスを追加します。たとえば、 ${db_name}.${table_name}.003.csv 。数値サフィックスは連続していなくてもかまいませんが、昇順である必要があります。また、すべてのサフィックスが同じ長さになるように、数字の前にゼロを追加する必要があります。

ステップ2. ターゲットテーブルスキーマを作成する

CSV ファイルにはスキーマ情報が含まれていないため、CSV ファイルから TiDB にデータをインポートする前に、ターゲット テーブル スキーマを作成する必要があります。ターゲット テーブル スキーマは、次の 2 つの方法のいずれかで作成できます。

  • 方法 1 : TiDB Lightningを使用してターゲット テーブル スキーマを作成します。

    必要な DDL ステートメントを含む SQL ファイルを作成します。

    • ${db_name}-schema-create.sqlファイルにCREATE DATABASEステートメントを追加します。
    • ${db_name}.${table_name}-schema.sqlファイルにCREATE TABLEステートメントを追加します。
  • 方法 2 : ターゲット テーブル スキーマを手動で作成します。

ステップ3. 構成ファイルを作成する

次の内容のファイルをtidb-lightning.toml作成します。

[lightning] # Log level = "info" file = "tidb-lightning.log" [tikv-importer] # "local": Default backend. The local backend is recommended to import large volumes of data (1 TiB or more). During the import, the target TiDB cluster cannot provide any service. # "tidb": The "tidb" backend is recommended to import data less than 1 TiB. During the import, the target TiDB cluster can provide service normally. # For more information on import mode, refer to <https://docs.pingcap.com/tidb/stable/tidb-lightning-overview#tidb-lightning-architecture> backend = "local" # Set the temporary storage directory for the sorted Key-Value files. The directory must be empty, and the storage space must be greater than the size of the dataset to be imported. For better import performance, it is recommended to use a directory different from `data-source-dir` and use flash storage, which can use I/O exclusively. sorted-kv-dir = "/mnt/ssd/sorted-kv-dir" [mydumper] # Directory of the data source. data-source-dir = "${data-path}" # A local path or S3 path. For example, 's3://my-bucket/sql-backup'. # Defines CSV format. [mydumper.csv] # Field separator of the CSV file. Must not be empty. If the source file contains fields that are not string or numeric, such as binary, blob, or bit, it is recommended not to usesimple delimiters such as ",", and use an uncommon character combination like "|+|" instead. separator = ',' # Delimiter. Can be zero or multiple characters. delimiter = '"' # Configures whether the CSV file has a table header. # If this item is set to true, TiDB Lightning uses the first line of the CSV file to parse the corresponding relationship of fields. header = true # Configures whether the CSV file contains NULL. # If this item is set to true, any column of the CSV file cannot be parsed as NULL. not-null = false # If `not-null` is set to false (CSV contains NULL), # The following value is parsed as NULL. null = '\N' # Whether to treat the backslash ('\') in the string as an escape character. backslash-escape = true # Whether to trim the last separator at the end of each line. trim-last-separator = false [tidb] # The target cluster. host = ${host} # e.g.: 172.16.32.1 port = ${port} # e.g.: 4000 user = "${user_name}" # e.g.: "root" password = "${password}" # e.g.: "rootroot" status-port = ${status-port} # During the import, TiDB Lightning needs to obtain the table schema information from the TiDB status port. e.g.: 10080 pd-addr = "${ip}:${port}" # The address of the PD cluster, e.g.: 172.16.31.3:2379. TiDB Lightning obtains some information from PD. When backend = "local", you must specify status-port and pd-addr correctly. Otherwise, the import will be abnormal.

設定ファイルの詳細については、 TiDB Lightningコンフィグレーションを参照してください。

ステップ 4. インポート パフォーマンスを調整する (オプション)

約 256 MiB の均一サイズの CSV ファイルからデータをインポートする場合、 TiDB Lightning は最高のパフォーマンスで動作します。ただし、単一の大きな CSV ファイルからデータをインポートする場合、 TiDB Lightning はデフォルトで 1 つのスレッドのみを使用してインポートを処理するため、インポート速度が低下する可能性があります。

インポートを高速化するために、大きな CSV ファイルを小さなファイルに分割することができます。一般的な形式の CSV ファイルの場合、 TiDB Lightning がファイル全体を読み取る前に、各行の開始位置と終了位置をすばやく見つけることは困難です。そのため、 TiDB Lightning はデフォルトで CSV ファイルを自動的に分割しません。ただし、インポートする CSV ファイルが特定の形式要件を満たしている場合は、 strict-formatモードを有効にすることができます。このモードでは、 TiDB Lightning は1 つの大きな CSV ファイルをそれぞれ約 256 MiB の複数のファイルに自動的に分割し、それらを並列処理します。

注記:

CSV ファイルが厳密な形式ではないのに、誤ってstrict-formatモードがtrueに設定されている場合、複数行にまたがるフィールドが 2 つのフィールドに分割されます。これにより解析が失敗し、 TiDB Lightning はエラーを報告せずに破損したデータをインポートする可能性があります。

厳密な形式の CSV ファイルでは、各フィールドは 1 行のみを占めます。次の要件を満たす必要があります。

  • 区切り文字が空です。
  • 各フィールドにはCR( \r )またはLF( \n )が含まれません。

CSV ファイルが上記の要件を満たしている場合は、次のようにstrict-formatモードを有効にすることでインポートを高速化できます。

[mydumper] strict-format = true

ステップ5. データをインポートする

インポートを開始するには、 tidb-lightning実行します。コマンドラインでプログラムを起動すると、SIGHUP シグナルを受け取った後にプロセスが予期せず終了することがあります。この場合、 nohupまたはscreenツールを使用してプログラムを実行することをお勧めします。例:

nohup tiup tidb-lightning -config tidb-lightning.toml > nohup.out 2>&1 &

インポートが開始されたら、次のいずれかの方法でインポートの進行状況を確認できます。

TiDB Lightning はインポートを完了すると、自動的に終了します。最後の行のtidb-lightning.logthe whole procedure completedが含まれているかどうかを確認します。含まれている場合は、インポートは成功です。含まれていない場合は、インポートでエラーが発生します。エラー メッセージの指示に従ってエラーに対処してください。

注記:

インポートが成功したかどうかに関係なく、ログの最後の行にはtidb lightning exitが表示されます。これは、 TiDB Lightning が正常に終了したことを意味しますが、必ずしもインポートが成功したことを意味するわけではありません。

インポートに失敗した場合は、トラブルシューティングについてはTiDB LightningFAQを参照してください。

その他のファイル形式

データ ソースが他の形式の場合、データ ソースからデータを移行するには、ファイル名を.csvで終了し、 tidb-lightning.toml構成ファイルの[mydumper.csv]セクションで対応する変更を行う必要があります。一般的な形式の変更例を次に示します。

翻訳:

# Format example # ID Region Count # 1 East 32 # 2 South NULL # 3 West 10 # 4 North 39 # Format configuration [mydumper.csv] separator = "\t" delimiter = '' header = true not-null = false null = 'NULL' backslash-escape = false trim-last-separator = false

TPC-H DBGEN:

# Format example # 1|East|32| # 2|South|0| # 3|West|10| # 4|North|39| # Format configuration [mydumper.csv] separator = '|' delimiter = '' header = false not-null = true backslash-escape = false trim-last-separator = true

次は何ですか

このページは役に立ちましたか?

Playground
登録なしで TiDB の機能をワンストップでインタラクティブに体験できます。
製品
TiDB Dedicated
TiDB Serverless
TiDB
価格
PoC お問い合わせ
エコシステム
TiKV
TiFlash
OSS Insight
© 2024 PingCAP. All Rights Reserved.
Privacy Policy.