LOAD DATA
描述
该语句用于从外部导入数据。
-
seekdb
LOAD DATA语句支持加载以下输入文件:-
服务器端(seekdb 节点)文件:文件位于 seekdb 的节点上。可以使用
LOAD DATA INFILE语句或LOAD DATA FROM URL语句,将服务器端文件中加载数据到数据库表中。 -
客户端(本地)文件:文件位于客户端本地文件系统中。可以使用
LOAD DATA LOCAL INFILE语句或LOAD DATA FROM URL语句,将客户端本地文件中的数据加载到数据库表中。信息seekdb 在执行
LOAD DATA LOCAL INFILE命令时,系统会自动添加IGNORE选项。 -
OSS 文件:文件位于 OSS 文件系统。可以使用
LOAD DATA REMOTE_OSS INFILE语句,将 OSS 文件中的数据加载到数据库表中。
-
-
LOAD DATA 目前可以对 CSV 格式的文本文件进行导入,整个导入的过程可以分为以下的流程:
-
解析文件:seekdb 会根据用户输入的文件名,读取文件中的数据,并且根据指定的并行度来决定并行或者串行解析输入文件中的数据。
-
插入数据:当 seekdb 收到数据后,在本地执行
INSERT操作将数据插入到对应的分区当中。
-
注意事项
-
带有触发器(Trigger)的表禁止使用
LOAD DATA语句。 -
要从外部文件导入数据,您需要具有
FILE权限及以下设置:- 加载服务器端文件时,需要提前设置系统变量 secure_file_priv,配置导入或导出文件时可以访问的路径。
- 加载客户端本地文件时,需要在启动 MySQL 客户端时添加
--local-infile[=1]选项来启用从本地文件系统加载数据的功能。
-
使用指定分区旁路导入时需要注意,目标表不能是复制表,且不能含有自增列、标识列、Global Index。
语法
-- 导入普通文件
LOAD DATA
[/*+ PARALLEL(N) [load_batch_size(M)] [APPEND | direct(bool, int, [load_mode])] | NO_DIRECT */]
[REMOTE_OSS | LOCAL] INFILE 'file_name'
[REPLACE | IGNORE]
INTO TABLE table_name [PARTITION(PARTITION_OPTION)]
[COMPRESSION [=] {AUTO|NONE|GZIP|DEFLATE|ZSTD}]
[{FIELDS | COLUMNS}
[TERMINATED BY 'string']
[[OPTIONALLY] ENCLOSED BY 'char']
[ESCAPED BY 'char']
]
[LINES
[STARTING BY 'string']
[TERMINATED BY 'string']
]
[IGNORE number {LINES | ROWS}]
[(column_name_var
[, column_name_var] ...)]
load_mode:
'full'
| 'inc_replace'
PARTITION_OPTION:
partition_option_list
| subpartition_option_list
-- 导入 URL 文件
LOAD DATA
[/*+ PARALLEL(N) [load_batch_size(M)] [APPEND | direct(bool, int, [load_mode])] | NO_DIRECT */]
[REPLACE | IGNORE]
FROM { url_table_function_expr |
( SELECT expression_list FROM url_table_function_expr ) }
INTO TABLE table_name
[PARTITION(PARTITION_OPTION)]
[(column_name_var [, column_name_var] ...)]
[LOG ERRORS [REJECT LIMIT {integer | UNLIMITED}]]
load_mode:
'full'
| 'inc_replace'
url_table_function_expr:
FILES (
LOCATION = '<string>',
{
FORMAT = (
TYPE = 'CSV',
LINE_DELIMITER = '<string>' | <expr>,
FIELD_DELIMITER = '<string>' | <expr>,
PARSE_HEADER = { TRUE | FALSE },
ESCAPE = '<character>' | <expr>,
FIELD_OPTIONALLY_ENCLOSED_BY = '<character>' | <expr>,
ENCODING = 'charset',
NULL_IF = ('<string>' | <expr>, '<string>' | <expr> ...),
SKIP_HEADER = <int>,
SKIP_BLANK_LINES = { TRUE | FALSE },
TRIM_SPACE = { TRUE | FALSE },
EMPTY_FIELD_AS_NULL = { TRUE | FALSE }
)
| FORMAT = ( TYPE = 'PARQUET' | 'ORC' )
},
[PATTERN = '<regex_pattern>']
)
| SOURCE (
TYPE = 'ODPS',
ACCESSID = '<string>',
ACCESSKEY = '<string>',
ENDPOINT = '<string>',
TUNNEL_ENDPOINT = '<string>',
PROJECT_NAME = '<string>',
SCHEMA_NAME = '<string>',
TABLE_NAME = '<string>',
QUOTA_NAME = '<string>',
COMPRESSION_CODE = '<string>'
)
PARTITION_OPTION:
partition_option_list
| subpartition_option_list
参数解释
| 参数 | 描述 |
|---|---|
| parallel(N) | 加载数据的并行度,默认为 4。 |
| load_batch_size(M) | 指定每次插入的批量大小,M 默认为 100。推荐取值范围为 [100,1000]。 |
| APPEND | direct() |NO_DIRECT | 使用 Hint 启用旁路导入功能。 注意在执行旁路导入任务的过程中,不建议同时进行 seekdb 的升级操作,因为这可能导致旁路导入任务失败。
LOAD DATA 旁路导入的信息,参见 使用 LOAD DATA 语句旁路导入数据/文件。 |
| REMOTE_OSS | LOCAL | 可选项,
|
| file_name | 指定输入文件的路径和文件名。 file_name 有以下格式:
说明 在导入 OSS 上的文件时,需要确保以下信息:
|
| REPLACE | IGNORE | 如果遇到唯一键冲突,REPLACE 表示覆盖冲突行,IGNORE 表示忽略冲突行。LOAD DATA 通过表的主键来判断数据是否重复,如果表不存在主键,则 REPLACE 与 IGNORE 选项没有区别。缺省时,遇到重复数据的时候,LOAD DATA 会将出现错误的数据记录到日志文件中。 注意
|
| url_table_function_expr | 可选项,通过 FILES 和 SOURCE 两个关键字从文件系统或数据源读取数据。 |
| table_name | 导入数据的表的名称。
|
| PARTITION_OPTION | 指定分区旁路导入时的分区名:
说明 指定分区只支持旁路导入,不支持普通的 LOAD DATA,即如果没添加旁路导入的 Hint 或者没有设置旁路导入的配置项,执行 LOAD DATA 时指定分区是不生效的。 |
| COMPRESSION | 指定压缩文件格式,其中
|
| FIELDS | COLUMNS | 指定字段的格式。
|
| LINES STARTING BY | 指定行起始符。 |
| LINES TERMINATED BY | 指定行结束符。 |
| IGNORE number { LINES | ROWS } | 忽略前几行,LINES 表示文件的前几行,ROWS 表示由字段分隔符指定的前几行数据。缺省时,会将输入文件中的字段逐个与表中的列进行对应。如果输入文件中并没有包含所有的列,那么缺少的列按照以下的规则会被默认填充:
说明多文件导入时,与单文件导入行为同理。 |
| column_name_var | 可选项,指定导入的列名。 |
| LOG ERRORS [REJECT LIMIT {integer | UNLIMITED}] | 可选项,用于开启导入 URL 外表过程中的错误诊断。详细介绍,可参见下文 log_errors。 说明 seekdb 中 LOAD DATA 语句导入 URL 外表语法,支持指定错误诊断。 |