项目场景:

操作内容:mysql数据先以csv格式(,分隔)导出到本地,然后导入到Doris

参考文献:开始使用 - 基础使用指南 - 《Apache Doris 0.12 官方中文文档》 - 书栈网 · BookStack


问题描述

提示:通过Stream load导入数据时报错

例如:

1、本地iTerm先访问到localfile.csv文件所在目录
2、执行以下语句:curl --location-trusted -u root -T localfile.csv -H "label:testdori" -H "column_separator:," -XPUT http://doris_ip:port/api/doris_database/table_name/_stream_load
3、要求我输入密码:Enter host password for user 'root': ---注意因为我的doris,root用户初始化没有密码,所以随便输入一个结果回车即可。
3、现象:
Warning: Binary output can mess up your terminal. Use "--output -" to tell
Warning: curl to output it to your terminal anyway, or consider "--output

虽然只是warning,但数据依然没有从本地导入到doris对应表中。


原因分析:

原因1:我用错port了,应该用8030,但我用了链接数据库的9030

原因2:我是用root权限用户去导入数据的,但根据官方文档提示,root权限:root 用户,允许从任意节点登陆,角色为 operator,所以我猜测意思是没有读写权限。

于是我用root创建了个用户进行测试

过程如下:

1)创建用户:

  1. CREATE USER 'test' IDENTIFIED BY '123456';--test账户创建完成,密码是123456.
  2. 此时执行curl --location-trusted -u test:123456 -T localfile.csv -H "label:testdori" -H "column_separator:," -XPUT http://doris_ip:8030/api/doris_database/table_name/_stream_load
  3. 错误信息就很具体了,如下:
  4. {"status":"FAILED","msg":"Access denied; you need (at least one of) the Admin_priv Load_priv  privilege(s) for this operation"}%

解决方案:

那么基于上述测试,只要将我创建的test授予对应权限即可,具体如何授权又看了一遍官方文档,继续操作如下:

1.登录到doris控制台:

mysql -h FE_HOST(即doris链接的ip) -P9030 -uroot

2.show databases; 展示所有doris下的database名称

3.use xxx;xxx指你建表的database名称。

4.最后执行:GRANT ALL ON database_name(被授权的database名称) TO test(被授权的用户名);

        --意思为:test账户创建完成之后,可以通过 root/admin 账户将 具体某个database 读写权限授权给普通账户 test。授权之后采用 test 账户登录就可以操作 那个database 数据库了。

最后再执行语句即可成功。这下数据量大也可以轻松导入啦!

如下:curl --location-trusted -u test:123456 -T localfile.csv -H "label:testdori" -H "column_separator:," -XPUT http://doris_ip:8030/api/doris_database/table_name/_stream_load

注意

1)-XPUT后的ip是访问doris数据库的ip,但HOST 一般是8030 ,为 fe.conf 中的 http_port。必须注意这个host不是链接数据库时填写的默认端口号9030!再报错可以先查一下配置,确认端口号。判断port对错可以访问下doris网页,如果能访问成功,说明ip是对的。例如:http://ip:8030/Playground

2)提示:{"msg":"Unauthorized","code":401,"data":"Access denied for root@...}

原因:

        1.用导入了权限不足的root账户,解决方案参考上述步骤创建新的用户,授权读写操作即可。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐