📣
TiDB Cloud Essential はパブリックプレビュー中です。このページは自動翻訳されたものです。原文はこちらからご覧ください。

TiCDC CSVプロトコル



クラウドstorageサービスをダウンストリームのシンクとして使用する場合、DMLイベントをCSV形式でクラウドstorageサービスに送信できます。

CSVを使用する

以下は、CSVプロトコルを使用する場合の設定例です。

cdc cli changefeed create --server=http://127.0.0.1:8300 --changefeed-id="csv-test" --sink-uri="s3://bucket/prefix" --config changefeed.toml

changefeed.tomlファイルの設定は以下のとおりです。

[sink] protocol = "csv" terminator = "\n" [sink.csv] delimiter = ',' # Before v7.6.0, you can only set the delimiter to a single character. Starting from v7.6.0, you can set it to 1-3 characters. For example, `$^` or `|@|`. quote = '"' null = '\N' include-commit-ts = true output-old-value = false output-field-header = false # New in v8.5.6 (only available in the TiCDC new architecture)

取引上の制約

  • 単一のCSVファイルでは、ある行のcommit-tsは、次の行の{{B-PLACEHOLDER-E}}と同じかそれ以下です。
  • 同一テーブルの同じトランザクションは、同じCSVファイルに保存されます。
  • 同じトランザクションの複数のテーブルを、異なるCSVファイルに保存することができます。

データstorageパス構造

データのstorageパス構造の詳細については、 ストレージパス構造参照してください。

データ形式の定義

CSVファイルでは、各列は次のように定義されています。

  • カラム1: 操作タイプインジケータ。 IUDを含む。 IINSERTを意味し、 UUPDATEを意味し、 DDELETEを意味する。
  • 2カラム:テーブル名。
  • 3カラム:スキーマ名。
  • 4カラム:ソーストランザクションのcommit-ts 。この列は省略可能です。
  • カラム5: is-update列はoutput-old-valueの値が true の場合にのみ存在し、行データの変更が UPDATE イベント (列の値が true の場合) によるものか、INSERT/DELETE イベント (値が false の場合) によるものかを識別するために使用されます。
  • 6カラムから最終列まで:データが変更された列が1つ以上あります。

TiCDCの新アーキテクチャの場合、 output-field-header = trueの場合、CSV ファイルにはヘッダー行が含まれます。ヘッダー行の列名は次のとおりです。

1カラム2カラム3カラム4カラム(任意)5カラム(任意)第6カラム...最後の列
ticdc-meta$operationticdc-meta$tableticdc-meta$schematicdc-meta$commit-tsticdc-meta$is-updateデータが変更された最初の列...データが変更された最後の列

テーブルhr.employeeは次のように定義されていると仮定します。

CREATE TABLE `employee` ( `Id` int NOT NULL, `LastName` varchar(20) DEFAULT NULL, `FirstName` varchar(30) DEFAULT NULL, `HireDate` date DEFAULT NULL, `OfficeLocation` varchar(20) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

include-commit-ts = trueoutput-old-value = falseの場合、このテーブルの DML イベントは、次のように CSV 形式で保存されます。

"I","employee","hr",433305438660591626,101,"Smith","Bob","2014-06-04","New York" "U","employee","hr",433305438660591627,101,"Smith","Bob","2015-10-08","Los Angeles" "D","employee","hr",433305438660591629,101,"Smith","Bob","2017-03-13","Dallas" "I","employee","hr",433305438660591630,102,"Alex","Alice","2017-03-14","Shanghai" "U","employee","hr",433305438660591630,102,"Alex","Alice","2018-06-15","Beijing"

include-commit-ts = trueoutput-old-value = trueの場合、このテーブルの DML イベントは、次のように CSV 形式で保存されます。

"I","employee","hr",433305438660591626,false,101,"Smith","Bob","2014-06-04","New York" "D","employee","hr",433305438660591627,true,101,"Smith","Bob","2015-10-08","Shanghai" "I","employee","hr",433305438660591627,true,101,"Smith","Bob","2015-10-08","Los Angeles" "D","employee","hr",433305438660591629,false,101,"Smith","Bob","2017-03-13","Dallas" "I","employee","hr",433305438660591630,false,102,"Alex","Alice","2017-03-14","Shanghai" "D","employee","hr",433305438660591630,true,102,"Alex","Alice","2017-03-14","Beijing" "I","employee","hr",433305438660591630,true,102,"Alex","Alice","2018-06-15","Beijing"

include-commit-ts = trueoutput-old-value = true 、およびoutput-field-header = trueの場合、このテーブルのDMLイベントは、次のようにCSV形式で保存されます。

ticdc-meta$operation,ticdc-meta$table,ticdc-meta$schema,ticdc-meta$commit-ts,ticdc-meta$is-update,Id,LastName,FirstName,HireDate,OfficeLocation "I","employee","hr",433305438660591626,false,101,"Smith","Bob","2014-06-04","New York" "D","employee","hr",433305438660591627,true,101,"Smith","Bob","2015-10-08","Shanghai" "I","employee","hr",433305438660591627,true,101,"Smith","Bob","2015-10-08","Los Angeles" "D","employee","hr",433305438660591629,false,101,"Smith","Bob","2017-03-13","Dallas" "I","employee","hr",433305438660591630,false,102,"Alex","Alice","2017-03-14","Shanghai" "D","employee","hr",433305438660591630,true,102,"Alex","Alice","2017-03-14","Beijing" "I","employee","hr",433305438660591630,true,102,"Alex","Alice","2018-06-15","Beijing"

データ型マッピング

MySQLタイプCSV形式説明
BOOLEAN / TINYINT / SMALLINT / INT / MEDIUMINT / BIGINT整数123-
FLOAT / DOUBLEフロート153.123-
NULLヌル\N-
TIMESTAMP / DATETIME"1973-12-30 15:30:00.123456"形式: yyyy-MM-dd HH:mm:ss.%06d
DATE"2000-01-01"形式: yyyy-MM-dd
TIME"23:59:59"形式: yyyy-MM-dd
YEAR整数1970-
VARCHAR / JSON / TINYTEXT / MEDIUMTEXT / LONGTEXT / TEXT / CHAR"test"UTF-8エンコード
VARBINARY / TINYBLOB / MEDIUMBLOB / LONGBLOB / BLOB / BINARY"6Zi/5pav"または"e998bfe696af"Base64または16進数エンコード
BIT整数81-
DECIMAL"129012.1230000"-
ENUM"a"-
SET"a,b"-
TiDBVectorFloat32"[1.23, -0.4]"-

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