首批通过分布式安全可靠测评,为关键业务系统打造
LOAD DATA
更新时间:2026-06-25 18:40:38
描述
OceanBase 数据库
LOAD DATA语句支持加载以下输入文件:服务器端(OBServer 节点)文件:文件位于 OceanBase 数据库的 OBServer 节点上。可以使用
LOAD DATA INFILE语句或LOAD DATA FROM URL语句,将服务器端文件中加载数据到数据库表中。客户端(本地)文件:文件位于客户端本地文件系统中。可以使用
LOAD DATA LOCAL INFILE语句或LOAD DATA FROM URL语句,将客户端本地文件中的数据加载到数据库表中。说明
OceanBase 数据库在执行
LOAD DATA LOCAL INFILE命令时,系统会自动添加IGNORE选项。OSS 文件:文件位于 OSS 文件系统。可以使用
LOAD DATA REMOTE_OSS INFILE语句,将 OSS 文件中的数据加载到数据库表中。
LOAD DATA 目前可以对 CSV 格式的文本文件进行导入,整个导入的过程可以分为以下的流程:
解析文件:OceanBase 数据库会根据用户输入的文件名,读取文件中的数据,并且根据指定的并行度来决定并行或者串行解析输入文件中的数据。
分发数据:由于 OceanBase 是分布式数据库,各个分区的数据可能分布在各个不同的 OBServer 节点,
LOAD DATA会对解析出来的数据进行计算,决定数据需要被发送到哪个 OBServer 节点。插入数据:当目标 OBServer 节点收到数据后,在本地执行
INSERT操作将数据插入到对应的分区当中。
注意事项
带有触发器(Trigger)的表禁止使用
LOAD DATA语句。要从外部文件导入数据,您需要具有
FILE权限及以下设置:- 加载服务器端文件时,需要提前设置系统变量 secure_file_priv,配置导入或导出文件时可以访问的路径。
- 加载客户端本地文件时,需要在启动 MySQL/OBClient 客户端时添加
--local-infile[=1]选项来启用从本地文件系统加载数据的功能。
使用指定分区旁路导入时需要注意,目标表不能是复制表,且不能含有自增列、标识列、Global Index。
要从外部文件导入数据,您需要具有 FILE 权限。您可以使用 GRANT FILE ON *.* TO $user_name; 语句进行授权,其中,$user_name 是需要执行 LOAD DATA 命令的用户。
语法
-- 导入普通文件
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
[INTO 'logfile_string']
[REJECT LIMIT {integer | UNLIMITED}]
[BADFILE 'badfile_string']]
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 启用旁路导入功能。
注意在执行旁路导入任务的过程中,不建议同时进行 OceanBase 数据库的升级操作,因为这可能导致旁路导入任务失败。
LOAD DATA 旁路导入的信息,参见 使用 LOAD DATA 语句旁路导入数据/文件。 |
| REMOTE_OSS | LOCAL | 可选项,
|
| file_name | 指定输入文件的路径和文件名。 file_name 有以下格式:
说明在导入 OSS 上的文件时,需要确保以下信息:
|
| 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 | 可选项,用于开启导入 URL 外表过程中的错误诊断。详细介绍,可参见下文 log_errors。 |
FILES
FILES 关键字由 LOCATION 子句、 FORMAT 子句和 PATTERN 子句构成。
LOCATION子句用于指定外表文件存放的路径。通常外表的数据文件存放于单独一个目录中,文件夹中可以包含子目录,在创建表时,外表会自动收集该目录中的所有文件。本地 LOCATION 格式为
LOCATION = '[file://] local_file_path',其中local_file_path可以为相对路径,也可以为绝对路径。如果填写的是相对路径,则当前目录必须为 OceanBase 数据库的安装目录;secure_file_priv用于配置 OBServer 节点有权限访问的文件路径。local_file_path只能是secure_file_priv路径的子路径。远程 Location 格式如下:
LOCATION = '{oss|S3}://$ACCESS_ID:$ACCESS_KEY@$HOST:s3_region/remote_file_path',其中$ACCESS_ID、$ACCESS_KEY和$HOST为访问 OSS 和 S3 所需配置的访问信息,s3_region为使用 S3 时选择的区域信息,这些敏感的访问信息会以加密的方式存放在数据库的系统表中LOCATION = 'hdfs://${hdfs_namenode_address}:${port}/PATH.localhost'而port指的是 HDFS 的端口号,PATH指 HDFS 中的目录路径。- 带 kerberos 认证:
LOCATION = 'hdfs://localhost:port/user?principal=xxx&keytab=xxx&krb5conf=xxx&configs=xxx'。 其中:principal: 指登录认证用户。keytab:指定用户认证的密钥文件路径。krb5conf:指定用户使用 kerberos 环境的描述文件路径。configs: 指定额外的 HDFS 配置项,默认为空,但是如果是 kerberos 环境,则通常该配置项有值,需要进行配置,例如:dfs.data.transfer.protection=authentication,privacy,指定数据传输保护级别为authentication和privacy。
- 带 kerberos 认证:
注意
使用对象存储路径时,对象存储路径的各项参数由
&符号进行分隔,请确保您输入的参数值中仅包含英文字母大小写、数字、\/-_$+=以及通配符。如果您输入了上述以外的其他字符,可能会导致设置失败。
FORMAT子句用于指定读取文件格式相关的属性,支持 CSV/PARQUET/ORC 三种文件格式。当 TYPE = 'CSV' 时,包含以下字段:
LINE_DELIMITER:指定 CSV 文件的行分隔符,默认为LINE_DELIMITER='\n'。FIELD_DELIMITER:可选项,指定 CSV 文件的列分隔符,默认为FIELD_DELIMITER='\t'。PARSE_HEADER:可选项,指定 CSV 文件的第一行是否为每列的列名。默认为FALSE,表示不指定 CSV 文件的第一行为每列的列名。ESCAPE:指定 CSV 文件的转义符号,只能为 1 个字节,默认为ESCAPE ='\'。FIELD_OPTIONALLY_ENCLOSED_BY:可选项,指定 CSV 文件中包裹字段值的符号,默认为空。使用此选项表示只对部分类型的字段(如 CHAR, VARCHAR, TEXT, JSON 等)加包裹符。ENCODING:指定文件的字符集编码格式,如果不指定,默认值为UTF8MB4。NULL_IF:指定被当作NULL处理的字符串。默认值为空。SKIP_HEADER:跳过文件头,并指定跳过的行数。SKIP_BLANK_LINES:指定是否跳过空白行。默认值为FALSE,表示不跳过空白的行。TRIM_SPACE:指定是否删除文件中字段的头部和尾部空格。默认值为FALSE,表示不删除文件中字段头尾的空格。EMPTY_FIELD_AS_NULL:指定是否将空字符串当作NULL处理。默认值为FALSE,表示不将空字符串当做NULL处理。
当 TYPE = 'PARQUET/ORC' 时,无其他额外字段。
PATTERN子句指定一个正则模式串,用于过滤LOCATION目录下的文件。对于每个 LOCATION 目录下的文件路径,如果能够匹配该模式串,外表会访问这个文件,否则外表会跳过这个文件。如果不指定该参数,则默认可以访问LOCATION目录下的所有文件。
SOURCE
SOURCE 关键字不包含其他子句,此时 TYPE = 'ODPS' 且有以下字段:
ACCESSID:指定 ODPS 用户的 ID。ACCESSKEY:指定 ODPS 用户的密码。ENDPOINT:指定 ODPS 服务的连接地址。TUNNEL_ENDPOINT:指定 Tunnel 数据传输服务的连接地址。PROJECT_NAME:指定需要查询的表所在的 Project。SCHEMA_NAME:可选项,指定需要查询表的 SCHEMA。TABLE_NAME:指定需要查询的表名。QUOTA_NAME:可选项,选择是否使用指定的 Quota。COMPRESSION_CODE:可选项,指定数据源的压缩格式,支持ZLIB、ZSTD、LZ4、ODPS_LZ4四种压缩格式,不设置表示不开启压缩。
log_errors
LOG ERRORS:表示开启导入过程中的错误诊断,允许将失败的行记录下来,而不是让整个操作因第一个错误而终止。配合REJECT LIMIT子句,可以控制允许的错误行数。INTO 'logfile_string':可选项,用于设置错误信息还会被写入目标目录中的文件。当不指定INTO 'logfile_string'时,错误信息只记录于warning buffer中,可以通过show warnings查看。logfile_string表示存放错误信息的目录,格式如下:说明
INTO 'logfile_string'参数从 V4.4.0 版本开始支持。当错误信息存放在本地时,
logfile_string格式为[file://] local_file_path,其中local_file_path可以为相对路径,也可以为绝对路径。如果填写的是相对路径,则当前目录必须为 OceanBase 数据库的安装目录;secure_file_priv用于配置 OBServer 节点有权限访问的文件路径。local_file_path只能是secure_file_priv路径的子路径。当错误信息存放在远端时(参考创建外表语法中 Location 的部分),
logfile_string格式如下:{oss\|s3}://$ACCESS_ID:$ACCESS_KEY@$HOST:s3_region/remote_file_path,其中$ACCESS_ID、$ACCESS_KEY和$HOST为访问阿里云 OSS、AWS S3 以及兼容 S3 协议的对象存储所需配置的访问信息,s3_region为使用 S3 时选择的区域信息,这些敏感的访问信息会以加密的方式存放在数据库的系统表中。hdfs://localhost:port/PATH,其中localhost指的是 HDFS 的地址,port指的是 HDFS 的端口号,PATH 指 HDFS 中的目录路径。带 kerberos 认证的地址为:hdfs://localhost:port/user?principal=xxx&keytab=xxx&krb5conf=xxx&configs=xxx。
OceanBase 数据库支持设置租户配置项设置诊断日志的压缩算法和单个诊断日志文件的大小,详细介绍参见 load_data_diagnosis_log_compression 和 load_data_diagnosis_log_max_size。
REJECT LIMIT: 可选项,用于设置允许的最大错误行数:- 默认值为 0:表示不允许任何错误行,遇到第一个错误时操作失败。
integer:单机允许的最大错误行数。例如,10 表示一台机器上遇到的错误最多为 10 行。UNLIMITED: 允许无限数量的错误行。
BADFILE 'badfile_string':指定错误数据文件存放的路径。badfile_string取值格式同logfile_string的格式。说明
BADFILE 'badfile_string'参数从 V4.4.0 版本开始支持。
注意
- 不指定
LOG ERRORS子句行为为正常导入行为,即遇到第一个错误就直接报错。 - 指定了
LOG ERRORS子句但是没有指定REJECT LIMIT子句,相当于指定了LIMIT为 0 的诊断,会在遇到第一个错误时操作失败,但是会记录遇到的第一个错误,并且错误码也是诊断相关错误,即 "reject limit reached"。查看错误日志
OceanBase 数据库支持如下 SQL 语句查看导出的错误日志信息:
SELECT * FROM READ_ERROR_LOG('diagnosis_log_path');其中
diagnosis_log_path表示错误日志的路径。该 SQL 语句在执行时等价于如下的读取 URL 外表语句:SELECT * FROM FILES ( LOCATION = 'diagnosis_log_path/' FORMAT( TYPE = 'csv' FIELD_DELIMITER = ',' FIELD_OPTIONALLY_ENCLOSED_BY = '\', PARSE_HEADER = true ) [, PATTERN = 'filename'] );示例如下:
指定的 log 路径结果为文件名时(不以
/结尾)。SELECT * FROM READ_ERROR_LOG('diagnosis/log/path/filename');该 SQL 语句对应的 URL 外表语句如下(文件名会被作为 pattern 来过滤文件):
SELECT * FROM FILES ( LOCATION = 'diagnosis/log/path/', FORMAT ( TYPE = 'csv' FIELD_DELIMITER = ',' FIELD_OPTIONALLY_ENCLOSED_BY = '\', PARSE_HEADER = true ), PATTERN = 'filename' );指定的 log 路径结果为文件夹时(以
/结尾)。SELECT * FROM READ_ERROR_LOG('diagnosis/log/path/');该 SQL 语句对应的 URL 外表语句如下(不会使用 pattern):
SELECT * FROM FILES ( LOCATION = 'diagnosis/log/path/', FORMAT ( TYPE = 'csv' FIELD_DELIMITER = ',' FIELD_OPTIONALLY_ENCLOSED_BY = '\', PARSE_HEADER = true ) );
多文件旁路导入时通配符的规则
为便于多文件导入,引入文件通配符功能,适用于服务器端和 OSS 文件导入,不适用于客户端文件导入。
服务器端通配符使用
匹配规则:
匹配文件名:
load data /*+ parallel(20) direct(true, 0) */ infile '/xxx/test.*.csv' replace into table t1 fields terminated by '|';匹配目录:
load data /*+ parallel(20) direct(true, 0) */ infile '/aaa*bb/test.1.csv' replace into table t1 fields terminated by '|';同时匹配目录和文件名:
load data /*+ parallel(20) direct(true, 0) */ infile '/aaa*bb/test.*.csv' replace into table t1 fields terminated by '|';
注意事项:
必须存在至少一个匹配的文件,否则返回错误码 4027。
对
load data /*+ parallel(20) direct(true, 0) */ infile '/xxx/test.1*.csv,/xxx/test.6*.csv' replace into table t1 fields terminated by '|';的输入,/xxx/test.1*.csv,/xxx/test.6*.csv会被认为是整体匹配,若无匹配则报错 4027。只支持 POSIX 的 GLOB 函数能支持的通配符,例如
test.6*(6|0).csv和test.6*({0.csv,6.csv}|.csv)尽管可通过ls命令查找,但 GLOB 函数无法匹配,会报错 4027。
云对象存储服务(
OSS)中通配符使用匹配规则:
匹配文件名:
load data /*+ parallel(20) direct(true, 0) */ remote_oss infile 'oss://xxx/test.*.csv?host=xxx&access_id=xxx&access_key=xxx' replace into table t1 fields terminated by '|';注意事项:
不支持目录匹配。例如:
load data /*+ parallel(20) direct(true, 0) */ remote_oss infile 'oss://aa*bb/test.*.csv?host=xxx&access_id=xxx&access_key=xxx' replace into table t1 fields terminated by '|';会返回OB_NOT_SUPPORTED。文件名通配符只支持
*和?。其他通配符虽然允许输入,但无法匹配任何结果。
示例
从服务器端(OBServer 节点)文件导入数据
示例 1:服务器端文件导入数据。
设置全局安全路径。
注意
由于安全原因,设置系统变量
secure_file_priv时,只能通过本地 Socket 连接数据库执行修改该全局变量的 SQL 语句。更多信息,请参见 secure_file_priv。obclient> SET GLOBAL secure_file_priv = "/";退出登录。
说明
由于
secure_file_priv是GLOBAL变量,所以需要执行\q退出使之生效。obclinet> \q返回结果如下:
Bye重连数据库后,使用
LOAD DATA语句导入数据。普通导入。
obclient> LOAD DATA INFILE '/home/admin/test.csv' INTO TABLE t1;使用
APPENDHint 启用旁路导入。LOAD DATA /*+ PARALLEL(4) APPEND */ INFILE '/home/admin/test.csv' INTO TABLE t1;
示例 2:使用
APPENDHint 启用旁路导入功能。LOAD DATA /*+ PARALLEL(4) APPEND */ INFILE '/home/admin/a.csv' INTO TABLE t;示例 3:导入 CSV 格式文件。
导入
test1.csv文件的全部列。load data /*+ direct(true,0) parallel(2)*/ from files( location = "data/csv", format = ( type = 'csv', field_delimiter = ',', parse_header = true, skip_blank_lines = true ), pattern = 'test1.csv') into table t1;读取
data/csv路径下的test1.csv文件的c1、c2列,并将它们导入到表t1的col1、col2列中。load data /*+ direct(true,0) parallel(2)*/ from ( select c1, c2 from files( location = 'data/csv' format = ( type = 'csv', field_delimiter = ',', parse_header = true, skip_blank_lines = true ), pattern = 'test1.csv')) into table t1 (col1, col2);
示例 4:导入 PARQUET 格式文件。
load data /*+ direct(true,0) parallel(2)*/ from files( location = "data/parquet", format = ( type = 'PARQUET'), pattern = 'test1.parquet') into table t1;示例 5:导入 ORC 格式文件。
load data /*+ direct(true,0) parallel(2)*/ from files( location = "data/orc", format = ( type = 'ORC'), pattern = 'test1.orc') into table t1;示例 6:导入 ODPS 格式文件。
load data /*+ direct(true,0) parallel(2)*/ from source ( type = 'ODPS', accessid = '$ODPS_ACCESSID', accesskey = '******', endpoint= '$ODPS_ENDPOINT', project_name = 'example_project', schema_name = '', table_name = 'example_table', quota_name = '', compression_code = '') into table t1;从客户端(本地)文件导入数据
示例 1:从本地文件导入数据至 OceanBase 数据库表中。
打开终端或命令提示符窗口,并输入以下命令来启动客户端。
obclient --local-infile -hxxx.xxx.xxx.xxx -P2881 -usys@oracle001 -p******返回结果如下:
Welcome to the OceanBase. Commands end with ; or \g. Your OceanBase connection id is 3221548006 Server version: OceanBase 4.2.2.0 (r100000032024010510-75c47d4be18a399e13c5309de1a81da5caf4e7c0) (Built Jan 5 2024 10:17:55) Copyright (c) 2000, 2018, OceanBase and/or its affiliates. All rights reserved. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. obclient [SYS]>注意
为了使用
LOAD DATA LOCAL INFILE功能,请使用 V2.2.4 或之后的版本的 OBClient 客户端。在客户端中,执行
LOAD DATA LOCAL INFILE语句来加载本地数据文件。obclient [SYS]> LOAD DATA LOCAL INFILE '/home/admin/test_data/tbl1.csv' INTO TABLE tbl1 FIELDS TERMINATED BY ',';返回结果如下:
Query OK, 3 rows affected Records: 3 Deleted: 0 Skipped: 0 Warnings: 0
示例 2:通过设置 COMPRESSION 直接导入压缩文件。
LOAD DATA LOCAL INFILE '/your/file/lineitem.tbl.gz' INTO TABLE lineitem COMPRESSION GZIP FIELDS TERMINATED BY '|';示例 3:通过 PARTITION 指定分区旁路导入。
- 指定一级分区旁路导入
load data /*+ direct(true,0) parallel(2) load_batch_size(100) */ infile "$FILE_PATH" into table t1 partition(p0, p1) fields terminated by '|' enclosed by '' lines starting by '' terminated by '\n';- 指定二级分区旁路导入
load data /*+ direct(true,0) parallel(2) load_batch_size(100) */ infile "$FILE_PATH" into table t1 partition(p0sp0, p1sp1) fields terminated by '|' enclosed by '' lines starting by '' terminated by '\n';从 OSS 文件导入数据
示例 1:使用
direct(bool, int)Hint 启用旁路导入功能,旁路导入文件可在 OSS 上。LOAD DATA /*+ direct(true,1024) parallel(16) */ REMOTE_OSS INFILE 'oss://antsys-oceanbasebackup/backup_rd/xiaotao.ht/lineitem2.tbl?host=***.oss-cdn.***&access_id=***&access_key=***' INTO TABLE tbl1 FIELDS TERMINATED BY ',';从服务器端文件以 URL 外表方式导入数据
注意
示例中涉及 IP 的命令做了脱敏处理,在验证时应根据自己机器真实 IP 填写。
以下将以外部文件的位置在服务器(OBServer 节点)和在 OceanBase 数据库 Oracle 模式中创建外表为例,步骤如下:
在 OBServer 节点中创建目录,其中
/home/admin/test_csv目录下存放外部数据,/home/admin/test_into目录下存放错误信息,/home/admin/test_badfile目录下存放错误数据文件。[admin@xxx /home/admin]# mkdir -p /home/admin/{test_csv,test_into,test_badfile}准备外部文件,在
/home/admin/test_csv目录下,创建文件type_cast.csv。[admin@xxx /home/admin/test_csv]# vi type_cast.csv文件的内容如下:
1,2,3 2,4,af 3,4,5 ds,6,32 4,5,6 5,2,3 6,v4,af 7,4,5 kj,a6,32 8,5,6设置导入的文件路径。
注意
由于安全原因,设置系统变量
secure_file_priv时,只能通过本地 Socket 连接数据库执行修改该全局变量的 SQL 语句。更多信息,请参见 secure_file_priv。执行以下命令,登录到 OBServer 节点所在的机器。
ssh admin@10.10.10.1执行以下命令,通过本地 Unix Socket 连接方式连接租户
oracle001。obclient -S /home/admin/oceanbase/run/sql.sock -usys@oracle001 -p******执行以下 SQL 命令,设置导入导出为无限制。
SET GLOBAL secure_file_priv = "/";
重新连接租户
oracle001。示例如下:
obclient -h10.10.10.1 -P2881 -usys@oracle001 -p****** -A创建表
test_tbl1。CREATE TABLE test_tbl1(col1 INT, col2 INT, col3 INT);设置诊断日志使用的压缩算法为
AUTO。ALTER SYSTEM SET load_data_diagnosis_log_compression = 'AUTO';更多有关设置诊断日志使用的压缩算法的介绍信息,参见 load_data_diagnosis_log_compression。
设置最大日志文件大小为 1 KB。当导出的日志大小大于 1 KB 时,会自动生成第二个文件并继续导出。
ALTER SYSTEM SET load_data_diagnosis_log_max_size = '1K';更多有关设置单个诊断日志文件大小的介绍信息,参见 load_data_diagnosis_log_max_size。
使用
LOAD DATA语句导入 URL 外表语法向表test_tbl1导入数据,并指定错误诊断,存储错误日志的目录为/home/admin/test_into/,存储错误数据文件存放的目录为/home/admin/test_badfile/。LOAD DATA FROM FILES( LOCATION = '/home/admin/test_csv/', FORMAT = ( TYPE = 'csv', FIELD_DELIMITER = ','), PATTERN = 'type_cast.csv') INTO TABLE test_tbl1 LOG ERRORS INTO '/home/admin/test_into/' REJECT LIMIT UNLIMITED BADFILE '/home/admin/test_badfile/';返回结果如下:
Query OK, 6 rows affected, 4 warnings Records: 6 Deleted: 0 Skipped: 0 Warnings: 4通过
read_error_log语句查看报错日志内容。SELECT * FROM READ_ERROR_LOG('/home/admin/test_into');返回结果如下:
+------------+---------------+-------------+-------------------------------------------------------------------------------------------------------+ | ERROR CODE | FILE NAME | LINE NUMBER | ERROR MESSAGE | +------------+---------------+-------------+-------------------------------------------------------------------------------------------------------+ | -5114 | type_cast.csv | 4 | fail to scan file type_cast.csv at line 4 for column "SYS"."TEST_TBL1"."COL1", error: Invalid numeric | | -5114 | type_cast.csv | 9 | fail to scan file type_cast.csv at line 9 for column "SYS"."TEST_TBL1"."COL1", error: Invalid numeric | | -5114 | type_cast.csv | 7 | fail to scan file type_cast.csv at line 7 for column "SYS"."TEST_TBL1"."COL2", error: Invalid numeric | | -5114 | type_cast.csv | 2 | fail to scan file type_cast.csv at line 2 for column "SYS"."TEST_TBL1"."COL3", error: Invalid numeric | +------------+---------------+-------------+-------------------------------------------------------------------------------------------------------+ 4 rows in set查看
test_tbl1的数据。SELECT * FROM test_tbl1;返回结果如下:
+------+------+------+ | COL1 | COL2 | COL3 | +------+------+------+ | 1 | 2 | 3 | | 3 | 4 | 5 | | 4 | 5 | 6 | | 5 | 2 | 3 | | 7 | 4 | 5 | | 8 | 5 | 6 | +------+------+------+ 6 rows in set通过 URL 外表查看 bad 文件内容。
SELECT * FROM FILES ( LOCATION = '/home/admin/test_badfile', FORMAT ( TYPE = 'csv', FIELD_DELIMITER = ','), PATTERN = 'data.bad');返回结果如下:
+------+------+------+ | C1 | C2 | C3 | +------+------+------+ | ds | 6 | 32 | | kj | a6 | 32 | | 6 | v4 | af | | 2 | 4 | af | +------+------+------+ 4 rows in set
相关文档
- 更多有关使用
LOAD DATA语句的示例信息,请参见 使用 LOAD DATA 语句导入数据 - 更多有关使用
LOAD DATA旁路导入的示例信息,请参见 使用 LOAD DATA 语句旁路导入数据