MongoDB 存储插件

概述

Drill 支持 MongoDB 3.0,提供一个 MongoDB 存储插件去连接 MongoDB,使用 MongoDB 最新的 Java 驱动。你可以运行查询去读取,但是不能写入。若是尝试写数据到 MongoDB,会返回一个错误。你不需要定义 schema。

提示:在下面的例子中,使用了一个简单的实例。

在分布式模式中,你可以运行 Drill 和 MongoDB 在一起。

开始之前

用 Drill 查询 MongoDB,你需要安装 Drill 和 MongoDB,然后导入数据到 MongoDB 中。

  1. 如果你没有安装 Drill,需要先安装 Drill。
  2. 如果你没有安装 MongoDB,需要先安装 MongoDB。
  3. 导入 MongoDB 示例数据集 。复制 zips.json 的内容到一个文件进行保存。
    • 如果 /data/db 目录不存在,创建它。
    • 确保你有权限访问该目录。
    • 使用 MongoDB 导入 zips.json

配置 MongoDB

Drill 必需正在运行,然后能够进入到 Web 控制台配置存储插件。打开 Drill ,看到 MongoDB 存储插件配置并启用它,具体描述步骤如下所示:

  1. 启动 Drill Shell。 Drill Shell 需要正常运行,并能够访问 Drill Web 控制台。
  2. 在 Drill Web 控制台,进入到 “Storage” 栏。
  3. 在禁止的存储插件中,选择 “Update” 去配置 mongo 存储插件。
  4. 在配置窗口,默认配置信息如下所示:
    {
     "type": "mongo",
     "connection": "mongodb://localhost:27017/",
     "enabled": false
    }
    
    提示:27017 是 MongoDB 初始化时的默认端口。
    
  5. 点击 “Enable” 去启用存储插件。

查询 MongoDB

在 Drill Shell 中,设置 Drill,导入 zips 数据集到 MongoDB 中。

  1. 从 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)
    
  2. 切换到 mongo.text。

    USE mongo.test;
    
    +-------+-----------------------------------------+
    |  ok   |                 summary                 |
    +-------+-----------------------------------------+
    | true  | Default schema changed to [mongo.test]  |
    +-------+-----------------------------------------+
    
  3. 展示表名和验证 zips 数据集:

    SHOW TABLES;
    
    +---------------+-----------------+
    | TABLE_SCHEMA  |   TABLE_NAME    |
    +---------------+-----------------+
    | mongo.test    | system.indexes  |
    | mongo.test    | zips            |
    +---------------+-----------------+
    2 rows selected (0.187 seconds)
    
  4. 设置选择,读取数字时,以 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 数据集

SELECT * FROM zips LIMIT 10;

+---------------+-------------------------+--------+--------+
|     city      |           loc           |  pop   | state  |
+---------------+-------------------------+--------+--------+
| AGAWAM        | [-72.622739,42.070206]  | 15338  | MA     |
| CUSHMAN       | [-72.51565,42.377017]   | 36963  | MA     |
| BELCHERTOWN   | [-72.410953,42.275103]  | 10579  | MA     |
| BLANDFORD     | [-72.936114,42.182949]  | 1240   | MA     |
| BRIMFIELD     | [-72.188455,42.116543]  | 3706   | MA     |
| CHESTERFIELD  | [-72.833309,42.38167]   | 177    | MA     |
| BARRE         | [-72.108354,42.409698]  | 4546   | MA     |
| CHICOPEE      | [-72.607962,42.162046]  | 23396  | MA     |
| CHICOPEE      | [-72.576142,42.176443]  | 31495  | MA     |
| CHESTER       | [-72.988761,42.279421]  | 1688   | MA     |
+---------------+-------------------------+--------+--------+
10 rows selected (0.444 seconds)

示例2:聚合

SELECT city, avg(pop) FROM zips GROUP BY city LIMIT 10;

+---------------+---------------------+
|     city      |       EXPR$1        |
+---------------+---------------------+
| AGAWAM        | 15338.0             |
| CUSHMAN       | 18649.5             |
| BELCHERTOWN   | 10579.0             |
| BLANDFORD     | 1240.0              |
| BRIMFIELD     | 2441.5              |
| CHESTERFIELD  | 9988.857142857143   |
| BARRE         | 9770.0              |
| CHICOPEE      | 27445.5             |
| CHESTER       | 7285.0952380952385  |
| WESTOVER AFB  | 1764.0              |
+---------------+---------------------+
10 rows selected (1.664 seconds)

示例3:列嵌套数组

0: jdbc:drill:zk=local> SELECT loc FROM zips LIMIT 10;
+------------------------+
|    loc                 |
+------------------------+
| [-72.622739,42.070206] |
| [-72.51565,42.377017]  |
| [-72.108354,42.409698] |
| [-72.410953,42.275103] |
| [-72.936114,42.182949] |
| [-72.188455,42.116543] |
| [-72.988761,42.279421] |
| [-72.833309,42.38167]  |
| [-72.607962,42.162046] |
| [-72.576142,42.176443] |
+------------------------+

0: jdbc:drill:zk=local> SELECT loc[0] FROM zips LIMIT 10;
+------------+
|   EXPR$0   |
+------------+
| -72.622739 |
| -72.51565  |
| -72.108354 |
| -72.410953 |
| -72.936114 |
| -72.188455 |
| -72.988761 |
| -72.833309 |
| -72.607962 |
| -72.576142 |
+------------+

使用 ODBC/JDBC 驱动

你可以通过标准的 BI 工具查询 MongoDB,例如 Tableau 和 SQuirreL。

Copyright © smartloli 2016 all right reserved,powered by GitbookModify: 2016-08-26 06:59:28