工作区间

你可以定义一个或多个工作区间在存储插件配置中。工作区间定义在本地文件的子目录或是分布式文件系统中。当你运行查询时,Drill 搜索工作区间在去定位数据。隐藏默认的工作区间,dfs.default,指向文件系统的根目录。

以下 dfs 存储插件配置展示一些示例的工作区间:

  1. {
  2. "type": "file",
  3. "enabled": true,
  4. "connection": "file:///",
  5. "workspaces": {
  6. "root": {
  7. "location": "/",
  8. "writable": false,
  9. "defaultInputFormat": null
  10. },
  11. "tmp": {
  12. "location": "/tmp",
  13. "writable": true,
  14. "defaultInputFormat": null
  15. },
  16. "emp": {
  17. "location": "/Users/user1/emp",
  18. "writable": true,
  19. "defaultInputFormat": null
  20. },
  21. "donuts": {
  22. "location": "/Users/user1/donuts",
  23. "writable": true,
  24. "defaultInputFormat": null
  25. },
  26. "sales": {
  27. "location": "/Users/user1/sales",
  28. "writable": true,
  29. "defaultInputFormat": null
  30. }
  31. },

配置工作区间包含子目录简化查询,这个在查询相同的文件时非常重要。在工作区位置属性中配置一个长路径名后,替代使用数据源的完整路径名,在使用时,你只需在 FROM 语法后面使用点即可。

  1. <workspace name>.`<location>`

这里的 <location> 代表子目录的路径名,例如 /users/max/drill/json

当你没有设置默认的存储插件的 Schema 名称,去查询数据源,需要包含插件名称。下的语法不使用 USE 语法连接存储插件:

  1. <plugin>.<workspace name>.`<location>`

覆盖 dfs.default

你可能想重写隐藏的默认工作区间,而用户又没有访问根目录的权限。增加以下内容到工作区间,进入到 dfs 存储插件,重写默认的工作区间:

  1. "default": {
  2. "location": "</directory/path>",
  3. "writable": true,
  4. "defaultInputFormat": null
  5. }

无工作区间的 Hive 和 HBase

在安装的 Apache Drill 中,工作区间中可能不包含 hivehbase 存储插件,在 Drill 通过 Hive 的数据库展示来作为工作区间。每个 hive 存储插件包含一个 default 工作区间指向 Hive 的元数据。当你在 hive default 工作区间中查询文件和表时,你可以从查询中省略工作区间的名称。

例如,你在 default workspace 查询 Hive 表的时候,使用以下查询得到的结果是一样的:

示例

  1. SELECT * FROM hive.customers LIMIT 10;
  2. SELECT * FROM hive.`default`.customers LIMIT 10;
  1. 注意:默认是保留字。在后面,当用作标识符时,必须使用保留字。

由于 HBase 插件不适用于一个工作区间,你可以使用以下查询:

  1. SELECT * FROM hbase.customers LIMIT 10;