Таблицы запросов в Apache Drill без добавления расширений к имени таблицы - PullRequest
0 голосов
/ 30 апреля 2019

У меня есть установка Apache Drill со следующим плагином хранилища

{
  "type": "file",
  "connection": "file:///",
  "config": null,
  "workspaces": {
    "tmp": {
      "location": "/tmp",
      "writable": true,
      "defaultInputFormat": null,
      "allowAccessOutsideWorkspace": false
    },
    "csv": {
      "location": "/home/user/data/csv",
      "writable": false,
      "defaultInputFormat": "csv",
      "allowAccessOutsideWorkspace": false
    },
    "parquet": {
      "location": "/home/user/data/parquet",
      "writable": false,
      "defaultInputFormat": "parquet",
      "allowAccessOutsideWorkspace": false
    }
  },
  "formats": {
    "csv": {
      "type": "text",
      "extensions": [
        "csv"
      ],
      "skipFirstLine": true,
      "extractHeader": true,
      "delimiter": ","
    },
    "parquet": {
      "type": "parquet",
      "autoCorrectCorruptDates": false
    }
  },
  "enabled": true
}

Имя было настроено на foo.

Проблема в том, что я хотел написать запрос, гдеимя таблицы не имеет расширения.

Я пробовал следующее,

select * from foo.csv.`agency` limit 100

Я получаю следующий ответ

org.apache.drill.common.exceptions.UserRemoteException: VALIDATION ERROR: From line 1, column 15 to line 1, column 21: Object 'agency' not found within 'foo.csv' [Error Id: 80be4497-b71c-47dd-bc2c-6abfa425d55a on nn-hadoop-1:30112]

Но это работает

select * from foo.csv.`agency.csv` limit 100

Могу ли я не добавлять суффикс имени таблицы (имя файла) к расширению файла при создании запроса?Я включил defaultInputFormat в рабочее пространство

Ответы [ 3 ]

0 голосов
/ 30 апреля 2019

Вы можете запросить таблицу или файл. Для таблицы, пожалуйста, создайте ее:

select * from foo.csv.`agency.csv`

и запрос:

select * from agency;

Во втором случае Drill должен иметь полный путь к файлу или каталогу (включая рабочее пространство, если вы его используете)

0 голосов
/ 03 мая 2019

Другой вариант - использовать вид;сначала используйте доступное для записи рабочее пространство (например, / tmp выше)

use foo.tmp;

Затем создайте представление

create view agency as select * from foo.csv.`agency.csv`;

В отличие от создания таблицы, представление не занимает значительного дискового пространства и будетотражать последние данные в файле (в случае, если файл обновлен). Использование такое же, как

select * from agency limit 100;
0 голосов
/ 30 апреля 2019

Я нашел способ решить эту проблему. Вместо того, чтобы запрашивать файлы напрямую, я помещал файл, который хотел запросить, в каталог и запрашивал каталог.

https://drill.apache.org/docs/querying-directories/

Итак, теперь я создал папку с именем agency и переместил файл agency.csv внутри этой папки. Теперь я могу сделать

select * from foo.csv.`/agency` limit 100

и я получаю результаты, которые я искал.

...