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: 操作タイプインジケータ。
I、U、Dを含む。IはINSERTを意味し、UはUPDATEを意味し、DはDELETEを意味する。 - 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 ファイルにはヘッダー行が含まれます。ヘッダー行の列名は次のとおりです。
テーブル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 = trueとoutput-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 = trueとoutput-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 = true 、 output-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"