Сканер клея AWS не может извлечь заголовки CSV - PullRequest
0 голосов
/ 26 января 2019

На моем остроумии здесь ...

У меня есть 15 CSV-файлов, которые я генерирую из запроса beeline, например:

beeline -u CONN_STR --outputformat=dsv -e "SELECT ... " > data.csv

Я выбрал dsv, потому что некоторые строковые поля содержат запятые, а они не заключаются в кавычки, что еще больше ломает клей. Кроме того, согласно документам, встроенный классификатор CSV может обрабатывать каналы (и по большей части это делает).

В любом случае, я загружаю эти 15 CSV-файлов в корзину s3 и запускаю свой сканер.

Все отлично работает. Для 14 из них.

Glue может извлечь строку заголовка для каждого отдельного файла, кроме одного, назвав столбцы col_0, col_1 и т. Д., И включив строку заголовка в мои запросы выбора.

Может ли кто-нибудь дать представление о том, что может отличаться в этом файле, который вызывает это?

Если это поможет, у меня есть ощущение, что некоторые поля в этом CSV-файле могут в какой-то момент быть закодированы в UTF-16 или как-то еще. Когда я первоначально открывал его, там было какое-то странное "?" персонажи плавающие вокруг.

Я запустил tr -d '\000', чтобы очистить его, но этого могло быть недостаточно.

Опять же, любые выводы, предложения или эксперименты, которые я могу провести, были бы великолепны. Кстати, я бы предпочел, чтобы сканер мог делать все (т. Е. Не нужно вручную изменять схему и отключать обновления).

Спасибо за чтение.

Edit:

Есть ощущение, что это как-то связано с этим source :

Каждый столбец в потенциальном заголовке анализируется как тип данных STRING.

За исключением последнего столбца, каждый столбец в потенциальном заголовке имеет содержимое, длина которого не превышает 150 символов. Чтобы включить конечный разделитель, последний столбец может быть пустым по всему файлу.

Каждый столбец в потенциальном заголовке должен соответствовать требованиям регулярного выражения клея AWS для имени столбца.

Строка заголовка должна достаточно отличаться от строк данных. Чтобы определить это, одна или несколько строк должны быть проанализированы как отличные от типа STRING. Если все столбцы имеют тип STRING, то первая строка данных недостаточно отличается от последующих строк, которые будут использоваться в качестве заголовка.

1 Ответ

0 голосов
/ 26 января 2019

Да, вы правы в части заголовка, где, если файл CSV содержит все строковые данные, заголовок также будет считаться строкой, а не заголовком.В качестве обходного пути попробуйте добавить свойство 'skip.header.line.count' = '1' в свойствах таблицы.

Относительно "?"Вы должны использовать шестнадцатеричный редактор для просмотра этих недопустимых символов и удаления их из файла.

...