龙空技术网

数据导入——导入本地数据

坐等花开静等春来 9

前言:

今天兄弟们对“电脑本地服务设置”大约比较关心,小伙伴们都想要知道一些“电脑本地服务设置”的相关资讯。那么小编同时在网摘上收集了一些有关“电脑本地服务设置””的相关资讯,希望我们能喜欢,小伙伴们快快来学习一下吧!

MySql Load

mysql-load: 使用MySql客户端导入本地数据导入方式是同步导入。```LOAD DATA[LOCAL]INFILE 'file_name'INTO TABLE tbl_name[PARTITION (partition_name [, partition_name] ...)][COLUMNS TERMINATED BY 'string'][LINES TERMINATED BY 'string'][IGNORE number {LINES | ROWS}][(col_name_or_user_var [, col_name_or_user_var] ...)][SET (col_name={expr | DEFAULT} [, col_name={expr | DEFAULT}] ...)][PROPERTIES (key1 = value1 [, key2=value2]) ]```该语句用于向指定的 table 导入数据,与普通Load区别是,这种导入方式是同步导入。这种导入方式仍然能够保证一批导入任务的原子性,要么全部数据导入成功,要么全部失败。1. MySQL Load以语法`LOAD DATA`开头, 无须指定LABEL2. 指定`LOCAL`表示读取客户端文件.不指定表示读取FE服务端本地文件. 导入FE本地文件的功能默认是关闭的, 需要在FE节点上设置`mysql_load_server_secure_path`来指定安全路径, 才能打开该功能.3. `INFILE`内填写本地文件路径, 可以是相对路径, 也可以是绝对路径.目前只支持单个文件, 不支持多个文件4. `INTO TABLE`的表名可以指定数据库名, 如案例所示. 也可以省略, 则会使用当前用户所在的数据库.5. `PARTITION`语法支持指定分区导入6. `COLUMNS TERMINATED BY`指定列分隔符7. `LINES TERMINATED BY`指定行分隔符8. `IGNORE num LINES`用户跳过CSV的表头, 可以跳过任意行数. 该语法也可以用`IGNORE num ROWS`代替9. 列映射语法, 具体参数详见[导入的数据转换](../../../../data-operate/import/import-way/mysql-load-manual.md) 的列映射章节10. `PROPERTIES`参数配置            max_filter_ratio(0-1):最大容忍可过滤(数据不规范等原因)的数据比例。默认零容忍。            timeout: 指定导入的超时时间。单位秒。默认是 600 秒。可设置范围为 1 秒 ~ 259200 秒。            strict_mode: 用户指定此次导入是否开启严格模式,默认为关闭。            timezone: 指定本次导入所使用的时区。默认为东八区。该参数会影响所有导入涉及的和时区有关的函数结果。            exec_mem_limit: 导入内存限制。默认为 2GB。单位为字节。            trim_double_quotes: 布尔类型,默认值为 false,为 true 时表示裁剪掉导入文件每个字段最外层的双引号。            enclose: 包围符。当csv数据字段中含有行分隔符或列分隔符时,为防止意外截断,可指定单字节字符作为包围符起到保护作用。例如列分隔符为",",包围符为"'",数据为"a,'b,c'",则"b,c"会被解析为一个字段。            escape: 转义符。用于转义在csv字段中出现的与包围符相同的字符。例如数据为"a,'b,'c'",包围符为"'",希望"b,'c被作为一个字段解析,则需要指定单字节转义符,例如"\",然后将数据修改为"a,'b,\'c'"。	

1.1示例

1. 建表        CREATE TABLE IF NOT EXISTS load_local_file_test        (        id INT,        age TINYINT,        name VARCHAR(50)        )        unique key(id)        DISTRIBUTED BY HASH(id) BUCKETS 3;2. 生成测试数据        vim a.txt        1,23,'zs'        2,34,'ww'        ...3. 在 fe 端服务器上执行导入命令mysql --local-infile -h cdh004 -P 9930 -uroot mysql> load data local  infile '/opt/apache-doris-2.0.3-bin-x64/a.txt' into table load_local_file_test COLUMNS TERMINATED BY ',' LINES TERMINATED BY '\n' ;Query OK, 2 rows affected (0.05 sec)Records: 2  Deleted: 0  Skipped: 0  Warnings: 0注意 :	 MySQL 客户端需要添加 '--local-infile' 参数,否则会报 ERROR 2027 (HY000): Malformed packet 错误;	 执行 load data local  命令时文件中字段分隔符不是 '\t' 时需要添加 'COLUMNS TERMINATED BY ','' 否则会报 ERROR 1105 (HY000): errCode = 2, detailMessage = [INTERNAL_ERROR]too many filtered rows 错误;4. 不在 fe 端服务器上执行导入命令修改 fe.conf 配置文件,添加 mysql_load_server_secure_path='在 fe 服务器上文件所在目录' mysql -h cdh003 -u root -p root MySQL [test]> load data   infile '/opt/apache-doris-2.0.3-bin-x64/a.txt' into table load_local_file_test COLUMNS TERMINATED BY ',' LINES TERMINATED BY '\n' ;Query OK, 2 rows affected (3.699 sec)Records: 2  Deleted: 0  Skipped: 0  Warnings: 0注意	:	MySQL 客户端不需要添加 '--local-infile' 参数;	执行 load data 命令时后面添加 local 是导入当前客户端,infile 指定目录下的文件,不添加 local 是导入服务器端 infile 指定目录下的文件;  文件中字段分隔符不是 '\t' 时需要添加 'COLUMNS TERMINATED BY ','';	导入服务端本地文件的语法和导入客户端语法的唯一区别是LOAD DATA关键词后面是否加入LOCAL关键字.FE为多节点部署, 导入服务端文件功能只能够导入客户端连接的FE节点, 无法导入其他FE节点本地的文件.服务端导入默认是关闭, 通过设置FE的配置mysql_load_server_secure_path开启, 导入文件的必须在该目录下.

1.2 配置项

mysql_load_thread_pool 控制单个FE中MySQL Load并发执行线程个数, 默认为4. 线程池的排队队列大小为mysql_load_thread_pool的5倍, 因此默认情况下, 可以并发提交的任务为 4 + 4*5 = 24个. 如果并发个数超过24时, 可以调大该配置项.mysql_load_server_secure_path 服务端导入的安全路径, 默认为空, 即不允许服务端导入. 如需开启这个功能, 建议在DORIS_HOME目录下创建一个local_import_data目录, 用于导入数据.mysql_load_in_memory_record 失败的任务记录个数, 该记录会保留在内存中, 默认只会保留最近的20. 如果有需要可以调大该配置. 在内存中的记录, 有效期为1天, 异步清理线程会固定一天清理一次过期数据.
Stream Load
Stream Load 用于将本地文件导入到 Doris 中。Stream Load 是通过 HTTP 协议与 Doris 进行连接交互的。导入方式是同步导入。curl 命令导入本地文件:		 curl --location-trusted -u root: -H "label:load_local_file_test" -H "column_separator:," -T /opt/apache-doris-2.0.3-bin-x64/a.txt 

参数

说明

label

一次导入的标签,相同标签的数据无法多次导入。用户可以通过指定Label的方式来避免一份数据重复导入的问题。

当前Doris内部保留30分钟内最近成功的label。

column_separator

用于指定导入文件中的列分隔符,默认为\t。如果是不可见字符,则需要加\x作为前缀,使用十六进制来表示分隔符。

如hive文件的分隔符\x01,需要指定为-H "column_separator:\x01"。

可以使用多个字符的组合作为列分隔符。

line_delimiter

用于指定导入文件中的换行符,默认为\n。可以使用做多个字符的组合作为换行符。

columns

用于指定导入文件中的列和 table 中的列的对应关系。如果源文件中的列正好对应表中的内容,那么是不需要指定这个字段的内容的。

如果源文件与表schema不对应,那么需要这个字段进行一些数据转换。这里有两种形式column,一种是直接对应导入文件中的字段,直接使用字段名表示;

一种是衍生列,语法为 column_name = expression。举几个例子帮助理解。

例1: 表中有3个列“c1, c2, c3”,源文件中的三个列一次对应的是"c3,c2,c1"; 那么需要指定-H "columns: c3, c2, c1"

例2: 表中有3个列“c1, c2, c3", 源文件中前三列依次对应,但是有多余1列;那么需要指定-H "columns: c1, c2, c3, xxx";

最后一个列随意指定个名称占位即可

例3: 表中有3个列“year, month, day"三个列,源文件中只有一个时间列,为”2018-06-01 01:02:03“格式;

那么可以指定-H "columns: col, year = year(col), month=month(col), day=day(col)"完成导入

where

用于抽取部分数据。用户如果有需要将不需要的数据过滤掉,那么可以通过设定这个选项来达到。

例1: 只导入大于k1列等于20180601的数据,那么可以在导入时候指定-H "where: k1 = 20180601"

max_filter_ratio

最大容忍可过滤(数据不规范等原因)的数据比例。默认零容忍。数据不规范不包括通过 where 条件过滤掉的行。

partitions

用于指定这次导入所设计的partition。如果用户能够确定数据对应的partition,推荐指定该项。不满足这些分区的数据将被过滤掉。

比如指定导入到p1, p2分区,-H "partitions: p1, p2"

timeout

指定导入的超时时间。单位秒。默认是 600 秒。可设置范围为 1 秒 ~ 259200 秒。

strict_mode

用户指定此次导入是否开启严格模式,默认为关闭。开启方式为 -H "strict_mode: true"。

timezone

指定本次导入所使用的时区。默认为东八区。在本次导入事务中,该变量起到了替代session variable time_zone 的作用。详情请见最佳实践中“涉及时区的导入”一节。

exec_mem_limit

导入内存限制。默认为 2GB。单位为字节。

format

指定导入数据格式,支持csv、json、 csv_with_names(支持csv文件行首过滤)、csv_with_names_and_types(支持csv文件前两行过滤)、parquet、orc,默认是csv。

jsonpaths

导入json方式分为:简单模式和匹配模式。

简单模式:没有设置jsonpaths参数即为简单模式,这种模式下要求json数据是对象类型,例如:

{"k1":1, "k2":2, "k3":"hello"},其中k1,k2,k3是列名字。

匹配模式:用于json数据相对复杂,需要通过jsonpaths参数匹配对应的value。

strip_outer_array

布尔类型,为true表示json数据以数组对象开始且将数组对象中进行展平,默认值是false。例如:

    [     {"k1" : 1, "v1" : 2},     {"k1" : 3, "v1" : 4}    ]    当strip_outer_array为true,最后导入到doris中会生成两行数据。

json_root

json_root为合法的jsonpath字符串,用于指定json document的根节点,默认值为""。

merge_type

数据的合并类型,一共支持三种类型APPEND、DELETE、MERGE 其中,APPEND是默认值,表示这批数据全部需要追加到现有数据中,DELETE 表示删除与这批数据key相同的所有行,MERGE 语义 需要与delete 条件联合使用,表示满足delete 条件的数据按照DELETE 语义处理其余的按照APPEND 语义处理, 示例:-H "merge_type: MERGE" -H "delete: flag=1"

delete

仅在 MERGE下有意义,表示数据的删除条件

function_column.sequence_col

只适用于UNIQUE_KEYS,相同key列下,保证value列按照source_sequence列进行REPLACE, source_sequence可以是数据源中的列,也可以是表结构中的一列。

fuzzy_parse

布尔类型,为true表示json将以第一行为schema 进行解析,开启这个选项可以提高 json 导入效率,但是要求所有json 对象的key的顺序和第一行一致, 默认为false,仅用于json 格式

num_as_string

布尔类型,为true表示在解析json数据时会将数字类型转为字符串,然后在确保不会出现精度丢失的情况下进行导入。

read_json_by_line

布尔类型,为true表示支持每行读取一个json对象,默认值为false。

send_batch_parallelism

整型,用于设置发送批处理数据的并行度,如果并行度的值超过 BE 配置中的 max_send_batch_parallelism_per_job,那么作为协调点的 BE 将使用 max_send_batch_parallelism_per_job 的值。

hidden_columns

用于指定导入数据中包含的隐藏列,在Header中不包含columns时生效,多个hidden column用逗号分割。

hidden_columns: __DORIS_DELETE_SIGN__,__DORIS_SEQUENCE_COL__系统会使用用户指定的数据导入数据。在上述用例中,导入数据中最后一列数据为__DORIS_SEQUENCE_COL__。

load_to_single_tablet

布尔类型,为true表示支持一个任务只导入数据到对应分区的一个 tablet,默认值为 false,该参数只允许在对带有 random 分桶的 olap 表导数的时候设置。

compress_type

指定文件的压缩格式。目前只支持 csv 文件的压缩。支持 gz, lzo, bz2, lz4, lzop, deflate 压缩格式。

trim_double_quotes

布尔类型,默认值为 false,为 true 时表示裁剪掉 csv 文件每个字段最外层的双引号。

skip_lines

整数类型, 默认值为0, 含义为跳过csv文件的前几行. 当设置format设置为 csv_with_names 或、csv_with_names_and_types 时, 该参数会失效.

comment

字符串类型, 默认值为空. 给任务增加额外的信息.

enclose

包围符。当csv数据字段中含有行分隔符或列分隔符时,为防止意外截断,可指定单字节字符作为包围符起到保护作用。例如列分隔符为",",包围符为"'",数据为"a,'b,c'",则"b,c"会被解析为一个字段。

escape

转义符。用于转义在字段中出现的与包围符相同的字符。例如数据为"a,'b,'c'",包围符为"'",希望"b,'c被作为一个字段解析,则需要指定单字节转义符,例如"\",然后将数据修改为"a,'b,\'c'"。

标签: #电脑本地服务设置 #从文本导入数据应该注意些啥