1

我使用 Sqoop 1.4.6 在 Hadoop 中导入数据。Sqoop 将 HDFS 中的数据导入并保存在无扩展名的文件中,但采用 csv 格式。我使用 Apache Drill 从这个文件中查询数据,但是得到了 Table not found 错误。在存储插件配置中,我什至在扩展名中添加了空、空白(“”)、空格(“”),但无法查询文件。当我使用扩展名更改文件名时,即使我能够查询文件。将任何扩展名放入配置文件中都可以使用空扩展名。我可以查询以 csv 格式保存但扩展名为“mat”或其他任何内容的文件。

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

4

2 回答 2

2

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

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!"]  |
. . .
于 2015-07-22T21:31:32.600 回答
0

我有同样的经历。首先,我将 1 个表从 oracle 导入到 hadoop 2.7.1,然后通过钻查询。这是我通过 Web 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": ","
    }
  }
}

然后,在钻 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
于 2015-11-30T20:56:36.720 回答