Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

lightning: add load data doc #13344

Merged
merged 73 commits into from
Mar 27, 2023
Merged
Show file tree
Hide file tree
Changes from 70 commits
Commits
Show all changes
73 commits
Select commit Hold shift + click to select a range
8bfda1f
doc
D3Hunter Mar 9, 2023
fcef7d8
add toc
D3Hunter Mar 9, 2023
f882326
change
D3Hunter Mar 10, 2023
861487f
change
D3Hunter Mar 10, 2023
f696313
change
D3Hunter Mar 10, 2023
1de051c
Update sql-statement-load-data.md
lance6716 Mar 16, 2023
1af9bc9
Update sql-statement-load-data.md
lance6716 Mar 16, 2023
2a5d19d
Update sql-statement-load-data.md
lance6716 Mar 16, 2023
ee2a5af
Update sql-statement-show-load-data.md
lance6716 Mar 16, 2023
f7b5a31
doc
D3Hunter Mar 17, 2023
23a48c3
change
D3Hunter Mar 17, 2023
069b415
Update sql-statements/sql-statement-show-load-data.md
D3Hunter Mar 17, 2023
1a0e5da
Update sql-statements/sql-statement-show-load-data.md
D3Hunter Mar 17, 2023
b3cbee0
Update sql-statements/sql-statement-load-data.md
D3Hunter Mar 17, 2023
6bd3981
Update sql-statements/sql-statement-show-load-data.md
D3Hunter Mar 17, 2023
a170424
Update error-codes.md
D3Hunter Mar 17, 2023
bf7fd0c
Update error-codes.md
D3Hunter Mar 17, 2023
19bb7b7
Update error-codes.md
D3Hunter Mar 17, 2023
440ab1d
Update error-codes.md
D3Hunter Mar 17, 2023
901e593
Update error-codes.md
D3Hunter Mar 17, 2023
4cd3880
Update error-codes.md
D3Hunter Mar 17, 2023
f95cbbd
Update error-codes.md
D3Hunter Mar 17, 2023
24b4abe
Update error-codes.md
D3Hunter Mar 17, 2023
c7bbc6a
Update error-codes.md
D3Hunter Mar 17, 2023
f2bd158
Update error-codes.md
D3Hunter Mar 17, 2023
93673d2
Update sql-statements/sql-statement-load-data.md
D3Hunter Mar 17, 2023
2070831
Update sql-statements/sql-statement-load-data.md
D3Hunter Mar 17, 2023
20acf3b
Update sql-statements/sql-statement-show-load-data.md
D3Hunter Mar 17, 2023
d0304dd
Update sql-statements/sql-statement-show-load-data.md
D3Hunter Mar 17, 2023
db232f4
Update sql-statements/sql-statement-load-data.md
D3Hunter Mar 17, 2023
17107b3
Update error-codes.md
D3Hunter Mar 17, 2023
1b4b480
Update error-codes.md
D3Hunter Mar 17, 2023
19cbebd
Update error-codes.md
D3Hunter Mar 17, 2023
2ddebd4
Update error-codes.md
D3Hunter Mar 17, 2023
6573e2f
Update sql-statements/sql-statement-load-data.md
D3Hunter Mar 17, 2023
463d084
Update sql-statements/sql-statement-load-data.md
D3Hunter Mar 17, 2023
1675692
Update sql-statements/sql-statement-load-data.md
D3Hunter Mar 17, 2023
85960e0
Update sql-statements/sql-statement-load-data.md
D3Hunter Mar 17, 2023
b07b421
Update sql-statements/sql-statement-load-data.md
D3Hunter Mar 17, 2023
6ba6f1c
Update sql-statements/sql-statement-load-data.md
D3Hunter Mar 17, 2023
09ad646
refined
hfxsd Mar 18, 2023
9fb5a36
Update sql-statements/sql-statement-load-data.md
D3Hunter Mar 18, 2023
1da1622
Update sql-statement-load-data.md
hfxsd Mar 19, 2023
dd2d922
Update sql-statements/sql-statement-show-load-data.md
D3Hunter Mar 20, 2023
baeb9e3
Update sql-statements/sql-statement-show-load-data.md
D3Hunter Mar 20, 2023
2680306
Update sql-statements/sql-statement-load-data.md
D3Hunter Mar 20, 2023
2d27069
Apply suggestions from code review
hfxsd Mar 20, 2023
ff1037b
Update sql-statement-load-data.md
hfxsd Mar 20, 2023
f176f41
Merge branch 'load-data-doc' of https://github.com/pingcap/docs-cn in…
hfxsd Mar 20, 2023
b58f3af
Update sql-statement-load-data.md
hfxsd Mar 20, 2023
dcfa5fa
gcs
D3Hunter Mar 20, 2023
3bc6eff
Update sql-statements/sql-statement-load-data.md
D3Hunter Mar 20, 2023
336bee5
Update sql-statements/sql-statement-load-data.md
D3Hunter Mar 20, 2023
6c4593a
Apply suggestions from code review
hfxsd Mar 22, 2023
9480ea9
Update sql-statement-load-data.md
hfxsd Mar 22, 2023
b27c6c3
Apply suggestions from code review
hfxsd Mar 23, 2023
1fceec1
Update sql-statements/sql-statement-load-data.md
D3Hunter Mar 24, 2023
1e6a09e
Update sql-statements/sql-statement-show-load-data.md
D3Hunter Mar 24, 2023
a1bb8ab
Update sql-statements/sql-statement-operate-load-data-job.md
D3Hunter Mar 24, 2023
76421b0
Update error-codes.md
D3Hunter Mar 24, 2023
eb7102b
Update error-codes.md
D3Hunter Mar 24, 2023
2419ee0
Update sql-statements/sql-statement-load-data.md
D3Hunter Mar 24, 2023
d4a5685
Update sql-statements/sql-statement-load-data.md
D3Hunter Mar 24, 2023
fa1af17
Update error-codes.md
D3Hunter Mar 24, 2023
86ccafa
updated title of [CANCEL|DROP] LOAD DATA
hfxsd Mar 24, 2023
3ae8aec
Apply suggestions from code review
hfxsd Mar 24, 2023
3be0815
Apply suggestions from code review
hfxsd Mar 24, 2023
fcb1fb0
Merge branch 'master' into load-data-doc
D3Hunter Mar 27, 2023
da8a777
Apply suggestions from code review
hfxsd Mar 27, 2023
f834eda
Update sql-statements/sql-statement-load-data.md
hfxsd Mar 27, 2023
dcc940a
Apply suggestions from code review
hfxsd Mar 27, 2023
f76ccd4
Merge remote-tracking branch 'upstream/master' into load-data-doc
hfxsd Mar 27, 2023
19cf43b
Update sql-statement-load-data.md
hfxsd Mar 27, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions TOC.md
Original file line number Diff line number Diff line change
Expand Up @@ -698,6 +698,7 @@
- [`BACKUP`](/sql-statements/sql-statement-backup.md)
- [`BATCH`](/sql-statements/sql-statement-batch.md)
- [`BEGIN`](/sql-statements/sql-statement-begin.md)
- [`CANCEL LOAD DATA 和 DROP LOAD DATA`](/sql-statements/sql-statement-operate-load-data-job.md)
- [`CALIBRATE RESOURCE`](/sql-statements/sql-statement-calibrate-resource.md)
- [`CHANGE COLUMN`](/sql-statements/sql-statement-change-column.md)
- [`CHANGE DRAINER`](/sql-statements/sql-statement-change-drainer.md)
Expand Down Expand Up @@ -791,6 +792,7 @@
- [`SHOW INDEX [FROM|IN]`](/sql-statements/sql-statement-show-index.md)
- [`SHOW INDEXES [FROM|IN]`](/sql-statements/sql-statement-show-indexes.md)
- [`SHOW KEYS [FROM|IN]`](/sql-statements/sql-statement-show-keys.md)
- [`SHOW LOAD DATA`](/sql-statements/sql-statement-show-load-data.md)
- [`SHOW MASTER STATUS`](/sql-statements/sql-statement-show-master-status.md)
- [`SHOW PLACEMENT`](/sql-statements/sql-statement-show-placement.md)
- [`SHOW PLACEMENT FOR`](/sql-statements/sql-statement-show-placement-for.md)
Expand Down
60 changes: 60 additions & 0 deletions error-codes.md
Original file line number Diff line number Diff line change
Expand Up @@ -293,6 +293,66 @@ TiDB 兼容 MySQL 的错误码,在大多数情况下,返回和 MySQL 一样

当 [`tidb_constraint_check_in_place_pessimistic`](/system-variables.md#tidb_constraint_check_in_place_pessimistic-从-v630-版本开始引入) 设置为 `OFF` 时,为保证事务的正确性,SQL 语句执行时产生的任何错误都可能导致 TiDB 返回 `8147` 报错并中止当前事务。具体的错误原因,请参考对应的报错信息。详见[约束](/constraints.md#悲观事务)。

* Error Number: 8154

目前 `LOAD DATA` 不支持从 TiDB 服务器本地导入数据,可以指定 `LOCAL` 从客户端导入,或者将数据上传到 S3/GCS 再进行导入。请参考 [`LOAD DATA`](/sql-statements/sql-statement-load-data.md)。

* Error Number: 8155

目前 `LOAD DATA` 不支持从 local 导入 Parquet 格式的数据文件,只支持从 S3/GCS 导入 Parquet 格式的数据文件。你可以将数据上传到 S3/GCS 后再导入。请参考 [`LOAD DATA`](/sql-statements/sql-statement-load-data.md)。

* Error Number: 8156

`LOAD DATA` 语句的文件路径不能为空。需要设置正确的路径再进行导入。请参考 [`LOAD DATA`](/sql-statements/sql-statement-load-data.md)。

* Error Number: 8157

不支持的数据格式。请参考 [`LOAD DATA`](/sql-statements/sql-statement-load-data.md) 查看支持的数据格式。

* Error Number: 8158

传入的 S3/GCS 路径无效。请参考[外部存储](/br/backup-and-restore-storages.md)设置有效的路径。

* Error Number: 8159

TiDB 无法访问 `LOAD DATA` 语句中传入的 S3/GCS 路径。请确保填入的 S3/GCS bucket 存在,且你输入了正确的 access key 和 secret access key 以让 TiDB 服务器有权限访问 S3/GCS 对应的 bucket。

* Error Number: 8160

`LOAD DATA` 读取数据文件失败。请根据具体的错误提示进行处理。

* Error Number: 8162

`LOAD DATA` 语句存在错误。请参考 [`LOAD DATA`](/sql-statements/sql-statement-load-data.md) 查看已支持的功能。

* Error Number: 8163

未知的 `LOAD DATA ... WITH ...` 选项。请参考 [`LOAD DATA`](/sql-statements/sql-statement-load-data.md) 查看支持的选项。

* Error Number: 8164

`LOAD DATA ... WITH ...` 选项取值无效。请参考 [`LOAD DATA`](/sql-statements/sql-statement-load-data.md) 查看有效的取值。

* Error Number: 8165

重复指定了 `LOAD DATA ... WITH ...` 选项,每个选项只能指定一次。

* Error Number: 8166

某些 `LOAD DATA ... WITH ...` 选项只能在特定的导入模式下才可以使用。请参考 [`LOAD DATA`](/sql-statements/sql-statement-load-data.md) 查看支持的选项。

* Error Number: 8170

指定的 `LOAD DATA` job 不存在或不是由当前用户创建。目前用户只能查看自己创建的 job。

* Error Number: 8171

对不支持的 `LOAD DATA` 任务状态不能进行运维操作。请根据具体的错误提示进行处理。

* Error Number: 8172

指定 `LOCAL` 的 `LOAD DATA` 不能在后台运行,只有使用 S3/GCS 路径的 `LOAD DATA` 可以在后台运行。请参考 [`LOAD DATA`](/sql-statements/sql-statement-load-data.md) 更改 SQL 语句。

* Error Number: 8200

尚不支持的 DDL 语法。请参考[与 MySQL DDL 的兼容性](/mysql-compatibility.md#ddl-的限制)。
Expand Down
1 change: 1 addition & 0 deletions mysql-schema.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ aliases: ['/docs-cn/dev/system-tables/system-table-overview/','/docs-cn/dev/refe
* `column_stats_usage` 列统计信息的使用情况
* `schema_index_usage` 索引的使用情况
* `analyze_jobs` 正在执行的统计信息收集任务以及过去 7 天内的历史任务记录
* `load_data_jobs` 正在执行或历史执行的 `LOAD DATA` 任务

## 执行计划相关系统表

Expand Down
129 changes: 97 additions & 32 deletions sql-statements/sql-statement-load-data.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,65 @@ aliases: ['/docs-cn/dev/sql-statements/sql-statement-load-data/','/docs-cn/dev/r

```ebnf+diagram
LoadDataStmt ::=
'LOAD' 'DATA' LocalOpt 'INFILE' stringLit DuplicateOpt 'INTO' 'TABLE' TableName CharsetOpt Fields Lines IgnoreLines ColumnNameOrUserVarListOptWithBrackets LoadDataSetSpecOpt
'LOAD' 'DATA' LocalOpt 'INFILE' stringLit FormatOpt DuplicateOpt 'INTO' 'TABLE' TableName CharsetOpt Fields Lines IgnoreLines ColumnNameOrUserVarListOptWithBrackets LoadDataSetSpecOpt LoadDataOptionListOpt

LocalOpt ::= ('LOCAL')?

FormatOpt ::=
('FORMAT' ('DELIMITED DATA' | 'SQL FILE' | 'PARQUET'))?

Fields ::=
('TERMINATED' 'BY' stringLit
| ('OPTIONALLY')? 'ENCLOSED' 'BY' stringLit
| 'ESCAPED' 'BY' stringLit
| 'DEFINED' 'NULL' 'BY' stringLit ('OPTIONALLY' 'ENCLOSED')?)?

LoadDataOptionListOpt ::=
('WITH' (LoadDataOption (',' LoadDataOption)*))?

LoadDataOption ::=
detached | batch_size '=' numberLiteral
```

## 参数说明

用户可以使用 `LocalOpt` 参数来指定导入的数据文件位于客户端或者服务端。目前 TiDB 只支持从客户端进行数据导入,因此在导入数据时 `LocalOpt` 应设置成 `Local`。
### `LOCAL`

你可以使用 `LOCAL` 来指定导入位于客户端的数据文件,此时传入文件参数必须为客户端文件系统路径。

### S3/GCS 路径

如果你不指定 `LOCAL`,则文件参数必须是有效的 S3/GCS URI 路径,详见[外部存储](/br/backup-and-restore-storages.md)。

当数据文件存储在 S3/GCS 上时,你可以导入单个文件,也可使用通配符 `*` 来匹配需要导入的多个文件。注意通配符不会递归处理子目录下相关的文件。以数据存储在 S3 为例,示例如下:

- 导入单个文件:`s3://<bucket-name>/path/to/data/foo.csv`
- 导入指定路径下的所有文件:`s3://<bucket-name>/path/to/data/*`
- 导入指定路径下的所有以 `.csv` 结尾的文件:`s3://<bucket-name>/path/to/data/*.csv`
- 导入指定路径下所有以 `foo` 为前缀的文件:`s3://<bucket-name>/path/to/data/foo*`
- 导入指定路径下以 `foo` 为前缀、以 `.csv` 结尾的文件:`s3://<bucket-name>/path/to/data/foo*.csv`

### `FORMAT`

你可以通过 `FORMAT` 参数来指定数据文件的格式。如果不指定该参数,需要使用的格式为 `DELIMITED DATA`,该格式即 MySQL `LOAD DATA` 支持的数据格式。

### `Fields`、`Lines`、`Ignore Lines`

只有数据格式是 `DELIMITED DATA` 时,才能指定 `Fields`、`Lines`、`Ignore Lines` 等语句。

你可以使用 `Fields` 和 `Lines` 参数来指定如何处理数据格式:

- 使用 `FIELDS TERMINATED BY` 来指定数据的分隔符号。
- 使用 `FIELDS ENCLOSED BY` 来指定数据的包围符号。
- 如果你希望以某个字符为结尾来切分行数据,可以使用 `LINES TERMINATED BY` 来指定行的终止符。

可以使用 `DEFINED NULL BY` 来指定数据文件中如何表示 NULL 值。

用户可以使用 `Fields` 和 `Lines` 参数来指定如何处理数据格式,使用 `FIELDS TERMINATED BY` 来指定每个数据的分隔符号,使用 `FIELDS ENCLOSED BY` 来指定消除数据的包围符号。如果用户希望以某个字符为结尾切分每行数据,可以使用 `LINES TERMINATED BY` 来指定行的终止符。
- 与 MySQL 行为一致,如果 `ESCAPED BY` 不为空时,例如是默认值 `\`,那么 `\N` 会被认为是 NULL 值。
- 如果使用 `DEFINED NULL BY`,例如 `DEFINED NULL BY 'my-null'`,`my-null` 会被认为是 NULL 值。
- 如果使用 `DEFINED NULL BY ... OPTIONALLY ENCLOSED`,例如 `DEFINED NULL BY 'my-null' OPTIONALLY ENCLOSED`,`my-null` 和 `"my-null"`(假设 `ENCLOSED BY '"'`)会被认为是 NULL 值。
- 如果没有使用 `DEFINED NULL BY` 或者 `DEFINED NULL BY ... OPTIONALLY ENCLOSED`,但使用了 `ENCLOSED BY`,例如 `ENCLOSED BY '"'`,那么 `NULL` 会被认为是 NULL 值。这个行为与 MySQL 一致。
- 其他情况不会被认为是 NULL 值。

例如对于以下格式的数据:

Expand All @@ -34,59 +85,70 @@ LoadDataStmt ::=
FIELDS TERMINATED BY ',' ENCLOSED BY '\"' LINES TERMINATED BY '\r\n'
```

如果不指定处理数据的参数,将会按以下参数处理
当数据格式为 `DELIMITED DATA` 且不指定处理数据的参数时,将按以下参数处理:

```sql
FIELDS TERMINATED BY '\t' ENCLOSED BY ''
LINES TERMINATED BY '\n'
FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\'
LINES TERMINATED BY '\n' STARTING BY ''
```

用户可以通过 `IGNORE number LINES` 参数来忽略文件开始的 `number` 行,例如可以使用 `IGNORE 1 LINES` 来忽略文件的首行。
你可以通过 `IGNORE <number> LINES` 参数来忽略文件开始的 `<number>` 行。例如,可以使用 `IGNORE 1 LINES` 来忽略文件的第一行。

### `WITH detached`

如果你指定了 S3/GCS 路径(且未指定 `LOCAL` 参数),可以通过 `WITH detached` 来让 `LOAD DATA` 任务在后台运行。此时 `LOAD DATA` 会返回 job ID。

可以通过 [`SHOW LOAD DATA`](/sql-statements/sql-statement-show-load-data.md) 查看创建的 job,也可以使用 [`[CANCEL|DROP] LOAD DATA`](/sql-statements/sql-statement-operate-load-data-job.md) 取消或删除创建的 job。

### `WITH batch_size=<number>`

可以通过 `WITH batch_size=<number>` 来指定批量写入 TiDB 时的行数,默认值为 `1000`。如果不希望分批写入,可以指定为 `0`。

## 示例

{{< copyable "sql" >}}
后台运行 job,执行后会输出对应的 job id:

```sql
CREATE TABLE trips (
trip_id bigint NOT NULL PRIMARY KEY AUTO_INCREMENT,
duration integer not null,
start_date datetime,
end_date datetime,
start_station_number integer,
start_station varchar(255),
end_station_number integer,
end_station varchar(255),
bike_number varchar(255),
member_type varchar(255)
);
LOAD DATA INFILE 's3://bucket-name/test.csv?access_key=XXX&secret_access_key=XXX' INTO TABLE my_db.my_table FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '' LINES TERMINATED BY '\n' WITH detached;
```

```
Query OK, 0 rows affected (0.14 sec)
```sql
+--------+
| Job_ID |
+--------+
| 150063 |
+--------+
1 row in set (3.14 sec)
```

通过 `LOAD DATA` 导入数据,指定数据的分隔符为逗号,忽略包围数据的引号,并且忽略文件的第一行数据。
```sql
SHOW LOAD DATA JOB 1;
```

如果此时遇到 `ERROR 1148 (42000): the used command is not allowed with this TiDB version` 报错信息。可以参考以下文档解决:
```sql
+--------+----------------------------+----------------------------+---------------------+---------------------------+--------------------+-------------+------------+-----------+------------+------------------+------------------+-------------+----------------+
| Job_ID | Create_Time | Start_Time | End_Time | Data_Source | Target_Table | Import_Mode | Created_By | Job_State | Job_Status | Source_File_Size | Loaded_File_Size | Result_Code | Result_Message |
+--------+----------------------------+----------------------------+---------------------+---------------------------+-------------------+-------------+------------+-----------+------------+------------------+------------------+-------------+----------------+
| 1 | 2023-03-16 22:29:12.990576 | 2023-03-16 22:29:12.991951 | 0000-00-00 00:00:00 | s3://bucket-name/test.csv | `my_db`.`my_table` | logical | root@% | loading | running | 52.43MB | 43.58MB | | |
+--------+----------------------------+----------------------------+---------------------+---------------------------+--------------------+-------------+------------+-----------+------------+------------------+------------------+-------------+----------------+
1 row in set (0.01 sec)
```

[ERROR 1148 (42000): the used command is not allowed with this TiDB version 问题的处理方法](/error-codes.md#mysql-原生报错汇总)
通过 `LOAD DATA` 导入数据,指定数据的分隔符为逗号,忽略包围数据的引号,并且忽略文件的第一行数据。

{{< copyable "sql" >}}
如果此时遇到 `ERROR 1148 (42000): the used command is not allowed with this TiDB version` 报错信息。可以参考文档解决:[ERROR 1148 (42000): the used command is not allowed with this TiDB version 问题的处理方法](/error-codes.md#mysql-原生报错汇总)

```sql
LOAD DATA LOCAL INFILE '/mnt/evo970/data-sets/bikeshare-data/2017Q4-capitalbikeshare-tripdata.csv' INTO TABLE trips FIELDS TERMINATED BY ',' ENCLOSED BY '\"' LINES TERMINATED BY '\r\n' IGNORE 1 LINES (duration, start_date, end_date, start_station_number, start_station, end_station_number, end_station, bike_number, member_type);
```

```
```sql
Query OK, 815264 rows affected (39.63 sec)
Records: 815264 Deleted: 0 Skipped: 0 Warnings: 0
```

`LOAD DATA` 也支持使用十六进制 ASCII 字符表达式或二进制 ASCII 字符表达式作为 `FIELDS ENCLOSED BY` 和 `FIELDS TERMINATED BY` 的参数。示例如下:

{{< copyable "sql" >}}

```sql
LOAD DATA LOCAL INFILE '/mnt/evo970/data-sets/bikeshare-data/2017Q4-capitalbikeshare-tripdata.csv' INTO TABLE trips FIELDS TERMINATED BY x'2c' ENCLOSED BY b'100010' LINES TERMINATED BY '\r\n' IGNORE 1 LINES (duration, start_date, end_date, start_station_number, start_station, end_station_number, end_station, bike_number, member_type);
```
Expand All @@ -99,12 +161,15 @@ TiDB 中的 `LOAD DATA` 语句应该完全兼容 MySQL(除字符集选项被

> **注意:**
>
> 在 TiDB 的早期版本中,`LOAD DATA` 语句每 20000 行进行一次提交。新版本的 TiDB 默认在一个事务中提交所有行。从 TiDB 4.0 及以前版本升级后,可能出现 `ERROR 8004 (HY000) at line 1: Transaction is too large, size: 100000058` 错误。
>
> 要解决该问题,建议调大 `tidb.toml` 文件中的 `txn-total-size-limit` 值。如果无法增加此限制,还可以将 [`tidb_dml_batch_size`](/system-variables.md#tidb_dml_batch_size) 的值设置为 `20000` 来恢复升级前的行为。
> - 在 TiDB v4.0.0 之前的版本中,`LOAD DATA` 语句每 20000 行进行一次提交。
> - 从 TiDB v4.0.0 开始一直到 TiDB v6.6.0 的版本,TiDB 默认在一个事务中提交所有行。
> - 从 TiDB v7.0.0 开始,批量提交的行数由 `LOAD DATA` 语句的 `WITH batch_size=<number>` 参数控制,默认 1000 行提交一次。
> - 从 TiDB v4.0.0 及以前版本升级后,可能出现 `ERROR 8004 (HY000) at line 1: Transaction is too large, size: 100000058` 错误。要解决该问题,建议调大 `tidb.toml` 文件中的 [`txn-total-size-limit`](/tidb-configuration-file.md#txn-total-size-limit) 值。如果无法增加此限制,还可以将 [`tidb_dml_batch_size`](/system-variables.md#tidb_dml_batch_size) 的值设置为 `20000` 来恢复升级前的行为。

## 另请参阅

* [INSERT](/sql-statements/sql-statement-insert.md)
* [乐观事务模型](/optimistic-transaction.md)
* [TiDB Lightning](/tidb-lightning/tidb-lightning-overview.md)
* [`SHOW LOAD DATA`](/sql-statements/sql-statement-show-load-data.md)
* [`CANCEL LOAD DATA 和 DROP LOAD DATA`](/sql-statements/sql-statement-operate-load-data-job.md)
47 changes: 47 additions & 0 deletions sql-statements/sql-statement-operate-load-data-job.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
---
title: CANCEL LOAD DATA 和 DROP LOAD DATA
summary: TiDB 数据库中 CANCEL LOAD DATA 和 DROP LOAD DATA 的使用概况。
---

# CANCEL LOAD DATA and DROP LOAD DATA

`CANCEL LOAD DATA` 语句用于取消系统中创建的 LOAD DATA 任务。

`DROP LOAD DATA` 语句用于删除系统中创建的 LOAD DATA 任务。

## 语法图

```ebnf+diagram
CancelLoadDataJobsStmt ::=
'CANCEL' 'LAOD' 'DATA' 'JOB' JobID

DropLoadDataJobsStmt ::=
'DROP' 'LAOD' 'DATA' 'JOB' JobID
```

## 示例

```sql
CANCEL LOAD DATA JOB 1;
```

```
Query OK, 0 rows affected (0.01 sec)
```

```sql
DROP LOAD DATA JOB 1;
```

```
Query OK, 1 row affected (0.01 sec)
```

## MySQL 兼容性

该语句是 TiDB 对 MySQL 语法的扩展。

## 另请参阅

* [LOAD DATA](/sql-statements/sql-statement-load-data.md)
* [SHOW LOAD DATA](/sql-statements/sql-statement-show-load-data.md)
Loading