MongoDB 存储插件
概述
Drill 支持 MongoDB 3.0,提供一个 MongoDB 存储插件去连接 MongoDB,使用 MongoDB 最新的 Java 驱动。你可以运行查询去读取,但是不能写入。若是尝试写数据到 MongoDB,会返回一个错误。你不需要定义 schema。
1. 提示:在下面的例子中,使用了一个简单的实例。
在分布式模式中,你可以运行 Drill 和 MongoDB 在一起。
开始之前
用 Drill 查询 MongoDB,你需要安装 Drill 和 MongoDB,然后导入数据到 MongoDB 中。
- 如果你没有安装 Drill,需要先安装 Drill。
- 如果你没有安装 MongoDB,需要先安装 MongoDB。
- 导入 MongoDB 示例数据集 。复制
zips.json的内容到一个文件进行保存。 - 如果/data/db目录不存在,创建它。 - 确保你有权限访问该目录。 - 使用 MongoDB 导入zips.json。
配置 MongoDB
Drill 必需正在运行,然后能够进入到 Web 控制台配置存储插件。打开 Drill ,看到 MongoDB 存储插件配置并启用它,具体描述步骤如下所示:
- 启动 Drill Shell。Drill Shell 需要正常运行,并能够访问 Drill Web 控制台。
- 在 Drill Web 控制台,进入到 “Storage” 栏。
- 在禁止的存储插件中,选择 “Update” 去配置
mongo存储插件。 - 在配置窗口,默认配置信息如下所示:
```
- {
- "type": "mongo",
- "connection": "mongodb://localhost:27017/",
- "enabled": false
- } ```
```
- 提示:27017 是 MongoDB 初始化时的默认端口。 ```
- 点击 “Enable” 去启用存储插件。
查询 MongoDB
在 Drill Shell 中,设置 Drill,导入 zips 数据集到 MongoDB 中。
- 从 Drill 数据源中获取 schemas 列表,包含 MongoDB。
```
-
SHOW DATABASES;
-
+---------------------+
- | SCHEMA_NAME |
- +---------------------+
- | INFORMATION_SCHEMA |
- | cp.default |
- | dfs.default |
- | dfs.root |
- | dfs.tmp |
- | mongo.local |
- | mongo.test |
- | sys |
- +---------------------+
- 8 rows selected (1.385 seconds) ```
- 切换到 mongo.text。
```
-
USE mongo.test;
-
+-------+-----------------------------------------+
- | ok | summary |
- +-------+-----------------------------------------+
- | true | Default schema changed to [mongo.test] |
- +-------+-----------------------------------------+ ```
- 展示表名和验证
zips数据集:
```
-
SHOW TABLES;
-
+---------------+-----------------+
- | TABLE_SCHEMA | TABLE_NAME |
- +---------------+-----------------+
- | mongo.test | system.indexes |
- | mongo.test | zips |
- +---------------+-----------------+
- 2 rows selected (0.187 seconds) ```
- 设置选择,读取数字时,以 doubles 的方式替代 text 方式读取;
```
- ALTER SYSTEM SET
store.mongo.read_numbers_as_double= true; - +-------+----------------------------------------------+
- | ok | summary |
- +-------+----------------------------------------------+
- | true | store.mongo.read_numbers_as_double updated. |
- +-------+----------------------------------------------+
- 1 row selected (0.078 seconds) ```
查询示例
示例1:展示 zips 数据集
1. SELECT * FROM zips LIMIT 10;
3. +---------------+-------------------------+--------+--------+
4. | city | loc | pop | state |
5. +---------------+-------------------------+--------+--------+
6. | AGAWAM | [-72.622739,42.070206] | 15338 | MA |
7. | CUSHMAN | [-72.51565,42.377017] | 36963 | MA |
8. | BELCHERTOWN | [-72.410953,42.275103] | 10579 | MA |
9. | BLANDFORD | [-72.936114,42.182949] | 1240 | MA |
10. | BRIMFIELD | [-72.188455,42.116543] | 3706 | MA |
11. | CHESTERFIELD | [-72.833309,42.38167] | 177 | MA |
12. | BARRE | [-72.108354,42.409698] | 4546 | MA |
13. | CHICOPEE | [-72.607962,42.162046] | 23396 | MA |
14. | CHICOPEE | [-72.576142,42.176443] | 31495 | MA |
15. | CHESTER | [-72.988761,42.279421] | 1688 | MA |
16. +---------------+-------------------------+--------+--------+
17. 10 rows selected (0.444 seconds)
示例2:聚合
1. SELECT city, avg(pop) FROM zips GROUP BY city LIMIT 10;
3. +---------------+---------------------+
4. | city | EXPR$1 |
5. +---------------+---------------------+
6. | AGAWAM | 15338.0 |
7. | CUSHMAN | 18649.5 |
8. | BELCHERTOWN | 10579.0 |
9. | BLANDFORD | 1240.0 |
10. | BRIMFIELD | 2441.5 |
11. | CHESTERFIELD | 9988.857142857143 |
12. | BARRE | 9770.0 |
13. | CHICOPEE | 27445.5 |
14. | CHESTER | 7285.0952380952385 |
15. | WESTOVER AFB | 1764.0 |
16. +---------------+---------------------+
17. 10 rows selected (1.664 seconds)
示例3:列嵌套数组
1. 0: jdbc:drill:zk=local> SELECT loc FROM zips LIMIT 10;
2. +------------------------+
3. | loc |
4. +------------------------+
5. | [-72.622739,42.070206] |
6. | [-72.51565,42.377017] |
7. | [-72.108354,42.409698] |
8. | [-72.410953,42.275103] |
9. | [-72.936114,42.182949] |
10. | [-72.188455,42.116543] |
11. | [-72.988761,42.279421] |
12. | [-72.833309,42.38167] |
13. | [-72.607962,42.162046] |
14. | [-72.576142,42.176443] |
15. +------------------------+
17. 0: jdbc:drill:zk=local> SELECT loc[0] FROM zips LIMIT 10;
18. +------------+
19. | EXPR$0 |
20. +------------+
21. | -72.622739 |
22. | -72.51565 |
23. | -72.108354 |
24. | -72.410953 |
25. | -72.936114 |
26. | -72.188455 |
27. | -72.988761 |
28. | -72.833309 |
29. | -72.607962 |
30. | -72.576142 |
31. +------------+
使用 ODBC/JDBC 驱动
你可以通过标准的 BI 工具查询 MongoDB,例如 Tableau 和 SQuirreL。
