LOAD DATA INFILE 语句
Contents
LOAD DATA INFILE 语句#
Syntax#
LoadDataInfileStmt
::= 'LOAD' 'DATA' 'INFILE' filePath LoadDataInfileOptionsList
filePath ::= string_literal
LoadDataInfileOptionsList
::= 'OPTIONS' '(' LoadDataInfileOptionItem (',' LoadDataInfileOptionItem)* ')'
LoadDataInfileOptionItem
::= 'DELIMITER' '=' string_literal
|'HEADER' '=' bool_literal
|'NULL_VALUE' '=' string_literal
|'FORMAT' '=' string_literal
LOAD DATA INFILE
语句以非常高的速度将文件中的行读取到 table 中。LOAD DATA INFILE
与 SELECT ... INTO OUTFILE
互补。要将数据从 table 写入文件,请使用SELECT…INTO OUTFILE)。要将文件读回到 table 中,请使用LOAD DATA INFILE
。两条语句的大部分配置项相同,具体包括:
配置项 |
类型 |
默认值 |
描述 |
---|---|---|---|
delimiter |
String |
, |
列分隔符,默认为 |
header |
Boolean |
true |
是否包含表头, 默认为 |
null_value |
String |
null |
NULL值,默认填充 |
format |
String |
csv |
加载文件的格式,默认为 |
quote |
String |
“” |
输入数据的包围字符串。字符串长度<=1。默认为”“,表示解析数据,不特别处理包围字符串。配置包围字符后,被包围字符包围的内容将作为一个整体解析。例如,当配置包围字符串为”#”时, |
mode |
String |
“error_if_exists” |
导入模式: |
deep_copy |
Boolean |
true |
|
Note
在集群版中,LOAD DATA INFILE
语句,根据当前执行模式(execute_mode)决定将数据导入到在线或离线存储。单机版中没有存储区别,同时也不支持deep_copy
选项。
在线导入只能使用append模式。
离线软拷贝导入后,OpenMLDB不应修改软连接中的数据,因此,如果当前离线数据是软连接,就不再支持append导入。并且,当前软连接的情况下,使用overwrite模式的硬拷贝,也不会删除软连接的数据。
Warning
INFILE Path
INFILE
路径的读取是由batchjob来完成的,如果是相对路径,就需要batchjob可以访问到的相对路径。
在生产环境中,batchjob的执行通常是yarn集群调度,并不能确定由谁来执行。在测试环境中,如果也是多机部署,也很难确定batchjob在哪里运行。
所以,请尽量使用绝对路径。单机测试中,本地文件用file://
开头;生产环境中,推荐使用hdfs等文件系统。
SQL语句模版#
LOAD DATA INFILE 'file_name' OPTIONS (key = value, ...)
Examples:#
从data.csv
文件读取数据到表t1
在线存储中。并使用,
作为列分隔符
set @@execute_mode='online';
LOAD DATA INFILE 'data.csv' INTO TABLE t1 ( delimit = ',' );
从data.csv
文件读取数据到表t1
中。并使用,
作为列分隔符, 字符串”NA”将被替换为NULL。
LOAD DATA INFILE 'data.csv' INTO TABLE t1 ( delimit = ',', nullptr_value='NA');
将data_path
软拷贝到表t1
中,作为离线数据。
set @@execute_mode='offline';
LOAD DATA INFILE 'data_path' INTO TABLE t1 ( deep_copy=true );