初始可通过 root 或 admin 用户创建数据库,命令如下:
CREATE DATABASE example_db;
所有命令都可以使用 HELP command;
查看到详细的语法帮助,例如 HELP CREATE DATABASE;
。
如果不清楚命令的全名,可使用"help 命令某一字段"进行模糊查询。如键入 HELP CREATE
,可以匹配到 CREATE DATABASE
、CREATE TABLE
、CREATE USER
等命令。
数据库创建完成后,可以通过 SHOW DATABASES;
查看数据库信息。
MySQL> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| example_db |
| information_schema |
+--------------------+
2 rows in set (0.00 sec)
information_schema 是为了兼容 MySQL 协议而存在,实际中信息可能不是很准确,所以关于具体数据库的信息建议通过直接查询相应数据库而获得。
example_db 创建完成后,可通过 root/admin 账户将 example_db 读写权限授权给普通账户,例如 test。授权后,即可通过 test 账户登录并操作 example_db 数据库。
GRANT ALL ON example_db TO test;
使用 CREATE TABLE 命令建立一个表(Table) ,更多详细参数可输入 HELP CREATE TABLE;
命令查看。
切换数据库命令如下:
USE example_db;
Doris 支持单分区和复合分区两种建表方式。
在复合分区中:
以下场景推荐使用复合分区:
下面以聚合模型为例,分别演示两种分区的建表语句。
建立一个名字为 table1 的逻辑表。分桶列为 siteid,桶数为10。这个表的 schema 如下:
建表语句如下:
CREATE TABLE table1
(
siteid INT DEFAULT '10',
citycode SMALLINT,
username VARCHAR(32) DEFAULT '',
pv BIGINT SUM DEFAULT '0'
)
AGGREGATE KEY(siteid, citycode, username)
DISTRIBUTED BY HASH(siteid) BUCKETS 10
PROPERTIES("replication_num" = "1");
建立一个名字为 table2 的逻辑表。这个表的 schema 如下:
我们使用 event_day 列作为分区列,建立3个分区 p201706、p201707、p201708。
注意:区间为左闭右开。
每个分区使用 siteid 进行哈希分桶,桶数为10。建表语句如下:
CREATE TABLE table2
(
event_day DATE,
siteid INT DEFAULT '10',
citycode SMALLINT,
username VARCHAR(32) DEFAULT '',
pv BIGINT SUM DEFAULT '0'
)
AGGREGATE KEY(event_day, siteid, citycode, username)
PARTITION BY RANGE(event_day)
(
PARTITION p201706 VALUES LESS THAN ('2017-07-01'),
PARTITION p201707 VALUES LESS THAN ('2017-08-01'),
PARTITION p201708 VALUES LESS THAN ('2017-09-01')
)
DISTRIBUTED BY HASH(siteid) BUCKETS 10
PROPERTIES("replication_num" = "1");
表建完后,可查看 example_db 中表的信息:
MySQL> SHOW TABLES;
+----------------------+
| Tables_in_example_db |
+----------------------+
| table1 |
| table2 |
+----------------------+
2 rows in set (0.01 sec)
MySQL> DESC table1;
+----------+-------------+------+-------+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-------+---------+-------+
| siteid | int(11) | Yes | true | 10 | |
| citycode | smallint(6) | Yes | true | N/A | |
| username | varchar(32) | Yes | true | | |
| pv | bigint(20) | Yes | false | 0 | SUM |
+----------+-------------+------+-------+---------+-------+
4 rows in set (0.00 sec)
MySQL> DESC table2;
+-----------+-------------+------+-------+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-------+---------+-------+
| event_day | date | Yes | true | N/A | |
| siteid | int(11) | Yes | true | 10 | |
| citycode | smallint(6) | Yes | true | N/A | |
| username | varchar(32) | Yes | true | | |
| pv | bigint(20) | Yes | false | 0 | SUM |
+-----------+-------------+------+-------+---------+-------+
5 rows in set (0.00 sec)
说明:Doris 使用中更多语法说明,可参考 数据表的创建与数据导入。
Doris 支持多种数据导入方式,下文以使用流式导入和 Broker 导入为例进行说明。
流式导入通过 HTTP 协议向 Doris 传输数据,可以不依赖其他系统或组件直接导入本地数据。
以 "table1_20170707" 为 Label,使用本地文件 table1_data 导入 table1 表。
curl --location-trusted -u test:test -H "label:table1_20170707" -H "column_separator:," -T table1_data http://FE_HOST:8030/api/example_db/table1/_stream_load
本地文件 table1_data,以英文逗号作为数据之间的分隔,具体内容如下:
1,1,jim,2
2,1,grace,2
3,2,tom,2
4,3,bush,3
5,3,helen,3
以 "table2_20170707" 为 Label,使用本地文件 table2_data 导入 table2 表。
curl --location-trusted -u test:test -H "label:table2_20170707" -H "column_separator:|" -T table2_data http://127.0.0.1:8030/api/example_db/table2/_stream_load
本地文件 table2_data,以 | 作为数据之间的分隔,具体内容如下:
2017-07-03|1|1|jim|2
2017-07-05|2|1|grace|2
2017-07-12|3|2|tom|2
2017-07-15|4|3|bush|3
2017-07-12|5|3|helen|3
Broker 导入通过部署的 Broker 进程,读取外部存储上的数据进行导入。
以 "table1_20170708" 为 Label,将 HDFS 上的文件导入 table1 表。
LOAD LABEL table1_20170708
(
DATA INFILE("hdfs://your.namenode.host:port/dir/table1_data")
INTO TABLE table1
)
WITH BROKER hdfs
(
"username"="hdfs_user",
"password"="hdfs_password"
)
PROPERTIES
(
"timeout"="3600",
"max_filter_ratio"="0.1"
);
Broker 导入是异步命令。以上命令执行成功只表示提交任务成功。导入是否成功需要通过 SHOW LOAD;
,命令如下:
SHOW LOAD WHERE LABEL = "table1_20170708";
返回结果中,State 字段为 FINISHED 则表示导入成功。
异步的导入任务在结束前可以取消,命令如下:
CANCEL LOAD WHERE LABEL = "table1_20170708";
本页内容是否解决了您的问题?