文章目录
Apache Doris 简单使用
一、用户创建
二、创建数据库
三、账户赋权
四、创建数据表
1、创建数据表
2、准备数据
3、导入数据
五、查询数据表
Apache Doris 简单使用
下面按照官网给出的示例简单操作Doris,首先创建用户、创建数据库、赋权、创建表等,然后向表中加入数据,通过MySQL客户端进行数据的查询分析。
一、用户创建
Doris采用MySQL协议进行通信,可以通过MySQL client 或者 MySQL JDBC连接到 Doris 集群。Doris集群内置root用户,密码默认为空,root 用户默认拥有集群所有权限,例如:权限变更权限(Grant_priv )、节点变更权限(Node_priv ,包括 FE、BE、BROKER 节点的添加、删除、下线等操作)。
启动完 Doris 程序之后,可以通过 root 或 admin 用户(管理员)连接到 Doris 集群。 使用下面命令即可登录 Doris,登录后进入到Doris对应的Mysql命令行操作界面:
[root@node1 ~]# cd /software/mysql-5.7.22-client/bin/
[root@node1 bin]# ./mysql -u root -P 9030 -h127.0.0.1 -p123456
以上-h 可以指定任意一台FE节点的IP地址,-P是fe.conf中的query_port配置,默认为9030 ,其余参数同MySQL参数。
首次使用用户登录无需密码,可以通过以下命令来修改密码,之前已经操作过,这里不再操作:
mysql> SET PASSWORD FOR 'root' = PASSWORD('your_password');
Query OK, 0 rows affected (0.00 sec)
your_password是为root用户设置的新密码,可以随意设置,建议设置为强密码增加安全性,下次登录就用新密码登录。
我们可以通过下面的命令创建一个普通用户test:
mysql> CREATE USER 'test' IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.02 sec)
创建用户完成后,下次登录Doris就可以使用新用户登录:"mysql -h FE_HOST -P9030 -utest -ptest_passwd",新创建的普通用户默认没有任何权限,需要给用户进行数据库赋权才可使用。
二、创建数据库
初始可以通过 root 或 admin 用户创建数据库,命令如下:
mysql> create database example_db;
Query OK, 0 rows affected (0.02 sec)
在Doris中,所有命令都可以使用 HELP command; 查看到详细的语法帮助,help 命令可以列举非常全的参考信息,非常方便。如果不清楚命令的全名,可以使用 "help 命令某一字段" 进行模糊查询。如键入 'HELP CREATE',可以匹配到 CREATE DATABASE, CREATE TABLE, CREATE USER 等命令。如下:
mysql> help create;
Many help items for your request exist.
To make a more specific request, please type 'help <item>',
where <item> is one of the following
topics:
CREATE CATALOG
CREATE DATABASE
CREATE ENCRYPTKEY
CREATE EXTERNAL TABLE
CREATE FILE
CREATE FUNCTION
CREATE INDEX
CREATE MATERIALIZED VIEW
CREATE POLICY
CREATE REPOSITORY
mysql> help create database;
Name: 'CREATE DATABASE'
Description:
该语句用于新建数据库(database)
语法:
CREATE DATABASE [IF NOT EXISTS] db_name
[PROPERTIES ("key"="value", ...)];
mysql> help create user;
Name: 'CREATE USER'
Description:
CREATE USER 命令用于创建一个 Doris 用户。
```sql
CREATE USER [IF EXISTS] user_identity [IDENTIFIED BY 'password']
[DEFAULT ROLE 'role_name']
[password_policy]
... ...
通过以下命令查看创建的数据库:
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| example_db |
| information_schema |
+--------------------+
2 rows in set (0.00 sec)
information_schema数据库是为了兼容MySQL协议而存在,实际中信息可能不是很准确,所以关于具体数据库的信息建议通过直接查询相应数据库而获得。
三、账户赋权
example_db 创建完成之后,可以通过 root/admin 账户使用GRANT命令将 example_db 读写权限授权给普通账户,如 test。授权之后采用 test 账户登录就可以操作 example_db 数据库了。
#给test用户进行数据库访问授权
mysql> GRANT ALL ON example_db TO test;
Query OK, 0 rows affected (0.08 sec)
退出root用户登录的mysql客户端,使用test登录
mysql> exit
[root@node1 bin]# ./mysql -u test -P 9030 -h127.0.0.1 -p123456
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| example_db |
| information_schema |
+--------------------+
2 rows in set (0.03 sec)
可以看到普通用户test拥有操作example_db的权限,如果不进行赋权查看不到对应的数据库。
四、创建数据表
1、创建数据表
按照如下命令创建表:
mysql> use example_db;
Database changed
#创建 example_db.example_tbl 表
CREATE TABLE IF NOT EXISTS example_db.example_tbl
(
`user_id` LARGEINT NOT NULL COMMENT "用户id",
`date` DATE NOT NULL COMMENT "数据灌入日期时间",
`city` VARCHAR(20) COMMENT "用户所在城市",
`age` SMALLINT COMMENT "用户年龄",
`sex` TINYINT COMMENT "用户性别",
`last_visit_date` DATETIME REPLACE DEFAULT "1970-01-01 00:00:00" COMMENT "用户最后一次访问时间",
`cost` BIGINT SUM DEFAULT "0" COMMENT "用户总消费",
`max_dwell_time` INT MAX DEFAULT "0" COMMENT "用户最大停留时间",
`min_dwell_time` INT MIN DEFAULT "99999" COMMENT "用户最小停留时间"
)
AGGREGATE KEY(`user_id`, `date`, `city`, `age`, `sex`)
DISTRIBUTED BY HASH(`user_id`) BUCKETS 1
PROPERTIES (
"replication_allocation" = "tag.location.default: 1"
);
mysql> show tables;
+----------------------+
| Tables_in_example_db |
+----------------------+
| example_tbl |
+----------------------+
1 row in set (0.01 sec)
注意:通过以上建表语句,认识下Doris中建表的格式。
2、准备数据
在node1节点/root/data目录下准备test.csv,数据内容如下:
[root@node1 ~]# mkdir data
[root@node1 ~]# cd data && vim test.csv
10000,2017-10-01,北京,20,0,2017-10-01 06:00:00,20,10,10
10000,2017-10-01,北京,20,0,2017-10-01 07:00:00,15,2,2
10001,2017-10-01,北京,30,1,2017-10-01 17:05:45,2,22,22
10002,2017-10-02,上海,20,1,2017-10-02 12:59:12,200,5,5
10003,2017-10-02,广州,32,0,2017-10-02 11:20:00,30,11,11
10004,2017-10-01,深圳,35,0,2017-10-01 10:00:15,100,3,3
10004,2017-10-03,深圳,35,0,2017-10-03 10:20:22,11,6,6
3、导入数据
这里我们通过Stream load 方式将上面保存到文件中的数据导入到我们刚才创建的表里,命令如下:
#进入到/root/data目录
[root@node1 ~]# cd /root/data/
#加载数据
[root@node1 data]# curl --location-trusted -u test:123456 -T test.csv -H "column_separator:," http://127.0.0.1:8030/api/example_db/example_tbl/_stream_load
以上命令参数解释如下:
- -T test.csv : 这里使我们刚才保存的数据文件,如果路径不一样,请指定完整路径。
- -u root : 123456这里是用户名密码,我们使用默认用户root,密码默认为空。
- 127.0.0.1:8030 : 分别是 fe 的 ip 和 http_port。
执行成功之后我们可以看到下面返回的信息:
{
"TxnId": 2003,
"Label": "b9c4fc8f-7a66-41ca-9bab-22ec391ede38",
"TwoPhaseCommit": "false",
"Status": "Success",
"Message": "OK",
"NumberTotalRows": 7,
"NumberLoadedRows": 7,
"NumberFilteredRows": 0,
"NumberUnselectedRows": 0,
"LoadBytes": 399,
"LoadTimeMs": 779,
"BeginTxnTimeMs": 53,
"StreamLoadPutTimeMs": 488,
"ReadDataTimeMs": 0,
"WriteDataTimeMs": 145,
"CommitAndPublishTimeMs": 88
}
- NumberLoadedRows: 表示已经导入的数据记录数
- NumberTotalRows: 表示要导入的总数据量
- Status :Success 表示导入成功
到这里我们已经完成的数据导入,下面就可以根据我们自己的需求对数据进行查询分析了
五、查询数据表
上面完成了建表,输数据导入,下面我们就可以体验 Doris 的数据快速查询分析能力。
mysql> select * from example_tbl;
+---------+------------+--------+------+------+---------------------+------+----------------+----------------+
| user_id | date | city | age | sex | last_visit_date | cost | max_dwell_time | min_dwell_time |
+---------+------------+--------+------+------+---------------------+------+----------------+----------------+
| 10000 | 2017-10-01 | 北京 | 20 | 0 | 2017-10-01 07:00:00 | 35 | 10 | 2 |
| 10001 | 2017-10-01 | 北京 | 30 | 1 | 2017-10-01 17:05:45 | 2 | 22 | 22 |
| 10002 | 2017-10-02 | 上海 | 20 | 1 | 2017-10-02 12:59:12 | 200 | 5 | 5 |
| 10003 | 2017-10-02 | 广州 | 32 | 0 | 2017-10-02 11:20:00 | 30 | 11 | 11 |
| 10004 | 2017-10-01 | 深圳 | 35 | 0 | 2017-10-01 10:00:15 | 100 | 3 | 3 |
| 10004 | 2017-10-03 | 深圳 | 35 | 0 | 2017-10-03 10:20:22 | 11 | 6 | 6 |
+---------+------------+--------+------+------+---------------------+------+----------------+----------------+
6 rows in set (0.02 sec)
mysql> select * from example_tbl where city='上海';
+---------+------------+--------+------+------+---------------------+------+----------------+----------------+
| user_id | date | city | age | sex | last_visit_date | cost | max_dwell_time | min_dwell_time |
+---------+------------+--------+------+------+---------------------+------+----------------+----------------+
| 10002 | 2017-10-02 | 上海 | 20 | 1 | 2017-10-02 12:59:12 | 200 | 5 | 5 |
+---------+------------+--------+------+------+---------------------+------+----------------+----------------+
1 row in set (0.05 sec)
mysql> select city, sum(cost) as total_cost from example_tbl group by city;
+--------+------------+
| city | total_cost |
+--------+------------+
| 广州 | 30 |
| 上海 | 200 |
| 北京 | 37 |
| 深圳 | 111 |
+--------+------------+
4 rows in set (0.05 sec)
- 📢博客主页:https://lansonli.blog.csdn.net
- 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
- 📢本文由 Lansonli 原创,首发于 CSDN博客🙉
- 📢停下休息的时候不要忘了别人还在奔跑,希望大家抓紧时间学习,全力奔赴更美好的生活✨