百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

数据导入——导入本地数据(如何数据导入)

toyiye 2024-09-12 20:48 2 浏览 0 评论

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`开头, 无须指定LABEL
2. 指定`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 http://cdh004:8840/api/test/load_local_file_test/_stream_load

参数

说明

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'"。

相关推荐

如何用 coco 数据集训练 Detectron2 模型?

随着最新的Pythorc1.3版本的发布,下一代完全重写了它以前的目标检测框架,新的目标检测框架被称为Detectron2。本教程将通过使用自定义coco数据集训练实例分割模型,帮助你开始使...

CICD联动阿里云容器服务Kubernetes实践之Bamboo篇

本文档以构建一个Java软件项目并部署到阿里云容器服务的Kubernetes集群为例说明如何使用Bamboo在阿里云Kubernetes服务上运行RemoteAgents并在agents上...

Open3D-ML点云语义分割实验【RandLA-Net】

作为点云Open3D-ML实验的一部分,我撰写了文章解释如何使用Tensorflow和PyTorch支持安装此库。为了测试安装,我解释了如何运行一个简单的Python脚本来可视化名为...

清理系统不用第三方工具(系统自带清理软件效果好不?)

清理优化系统一定要借助于优化工具吗?其实,手动优化系统也没有那么神秘,掌握了方法和技巧,系统清理也是一件简单和随心的事。一方面要为每一个可能产生累赘的文件找到清理的方法,另一方面要寻找能够提高工作效率...

【信创】联想开先终端开机不显示grub界面的修改方法

原文链接:【信创】联想开先终端开机不显示grub界面的修改方法...

如意玲珑成熟度再提升,三大发行版支持教程来啦!

前期,我们已分别发布如意玲珑在deepinV23与UOSV20、openEuler24.03发行版的操作指南,本文,我们将为大家详细介绍Ubuntu24.04、Debian12、op...

118种常见的多媒体文件格式(英文简写)

MP4[?mpi?f??]-MPEG-4Part14(MPEG-4第14部分)AVI[e?vi??a?]-AudioVideoInterleave(音视频交错)MOV[m...

密码丢了急上火?码住7种console密码紧急恢复方式!

身为攻城狮的你,...

CSGO丨CS2的cfg指令代码分享(csgo自己的cfg在哪里?config文件位置在哪?)

?...

使用open SSL生成局域网IP地址证书

某些特殊情况下,用户内网访问多可文档管理系统时需要启用SSL传输加密功能,但只有IP,没有域名和证书。这种情况下多可提供了一种免费可行的方式,通过openSSL生成免费证书。此方法生成证书浏览器会提示...

Python中加载配置文件(python怎么加载程序包)

我们在做开发的时候经常要使用配置文件,那么配置文件的加载就需要我们提前考虑,再不使用任何框架的情况下,我们通常会有两种解决办法:完整加载将所有配置信息一次性写入单一配置文件.部分加载将常用配置信息写...

python开发项目,不得不了解的.cfg配置文件

安装软件时,经常会见到后缀为.cfg、.ini的文件,一般我们不用管,只要不删就行。因为这些是程序安装、运行时需要用到的配置文件。但对开发者来说,这种文件是怎么回事就必须搞清了。本文从.cfg文件的创...

瑞芯微RK3568鸿蒙开发板OpenHarmony系统修改cfg文件权限方法

本文适用OpenHarmony开源鸿蒙系统,本次使用的是开源鸿蒙主板,搭载瑞芯微RK3568芯片。深圳触觉智能专注研发生产OpenHarmony开源鸿蒙硬件,包括核心板、开发板、嵌入式主板,工控整机等...

Python9:图像风格迁移-使用阿里的接口

先不多说,直接上结果图。#!/usr/bin/envpython#coding=utf-8importosfromaliyunsdkcore.clientimportAcsClient...

Python带你打造个性化的图片文字识别

我们的目标:从CSV文件读取用户的文件信息,并将文件名称修改为姓名格式的中文名称,进行规范资料整理,从而实现快速对多个文件进行重命名。最终效果:将原来无规律的文件名重命名为以姓名为名称的文件。技术点:...

取消回复欢迎 发表评论:

请填写验证码