使用 Apache Drill 查询无扩展文件

Query Extensionless File using Apache Drill

我使用 Sqoop 1.4.6 在 Hadoop 中导入数据。 Sqoop 将数据导入并保存在 HDFS 中的无扩展名文件中,但格式为 csv。我使用 Apache Drill 从该文件中查询数据,但出现 Table not found 错误。在 Storage Plugin 配置中,我什至将 null, blank (""), space (" ") 放在扩展名中,但无法查询文件。当我用扩展名更改文件名时,即使我能够查询文件。将任何扩展名放在配置文件中都可以,但空扩展名除外。我可以查询以 csv 格式保存但扩展名为 'mat' 或任何其他格式的文件。

有没有办法查询无扩展名的文件?

您可以在存储插件配置中使用默认的输入格式来解决这个问题。例如:

select * from dfs.`/Users/khahn/Downloads/csv_line_delimit.csv`;
+-------------------------+
|         columns         |
+-------------------------+
| ["hello","1","2","3!"]  |
 . . .

更改文件名以删除扩展名并修改插件配置 "location" 和 "defaultInputFormat":

{
  "type": "file",
  "enabled": true,
  "connection": "file:///",
  "workspaces": {
    "root": {
      "location": "/Users/khahn/Downloads",
      "writable": false,
      "defaultInputFormat": "csv"
    },

查询没有扩展名的文件

0: jdbc:drill:zk=local> select * from dfs.root.`csv_line_delimit`;
+-------------------------+
|         columns         |
+-------------------------+
| ["hello","1","2","3!"]  |
. . .

我也有同样的经历。首先,我将 1 table 从 oracle 导入到 hadoop 2.7.1,然后通过 drill 进行查询。这是我通过网络设置的插件配置 UI:

{
  "type": "file",
  "enabled": true,
  "connection": "hdfs://192.168.19.128:8020",
  "workspaces": {
    "hdf": {
      "location": "/user/hdf/my_data/",
      "writable": false,
      "defaultInputFormat": "csv"
    },
    "tmp": {
      "location": "/tmp",
      "writable": true,
      "defaultInputFormat": null
    }
  },
  "formats": {
    "csv": {
      "type": "text",
      "extensions": [
        "csv"
      ],
      "delimiter": ","
    }
  }
}

然后,在 drill cli 中,这样查询:

USE hdfs.hdf
SELECT * FROM part-m-00000

此外,在hadoop文件系统中,当我cat 'part-m-00000'的内容时,控制台打印出以下格式:

2015-11-07 17:45:40.0,6,8
2014-10-02 12:25:20.0,10,1