Сканирование S3 с помощью Glue, добавление некоторых файлов для игнорирования и сохранение их данных в Athena? - PullRequest
1 голос
/ 04 марта 2020

У меня есть коллекция файлов S3 в следующем формате:

date=10001
   abc.json
   bcd.json
   cdf.json
date=10002
   ...
date=20001
   ...

Эти файлы сканируются Glue для создания таблицы в Афине (с указанием даты раздела). Как только файл S3 создан - он никогда не обновляется и не удаляется, поэтому повторное сканирование является излишним. С этой целью я пытаюсь заставить Glue игнорировать файлы, которые, как я знаю, уже просканированы.

Я делаю это, добавляя 10** в поле шаблонов исключений, которое работает. Glue не выполняет повторный обход этих файлов, а время обновления моей таблицы распределяется по четвертям. Однако, когда я пытаюсь получить доступ к чему-либо из одной из этих игнорируемых дат (например, date = 10001), я получаю следующую ошибку:

SELECT * FROM myAthenaTable WHERE date = '10001'

HIVE_PARTITION_SCHEMA_MISMATCH: There is a mismatch between the table and partition schemas. The types 
are incompatible and cannot be coerced. The column 'col1' in table 'myAthenaTable' is declared as type 
'int', but partition 'date=10001' declared column 'col2' as type 'struct<>'.

Любопытно - если я удаляю шаблон исключения и перестраиваю свою таблицу Glue - это работает просто отлично.

Моя цель состоит в том, чтобы Glue ignore date = 10001 при сканировании, но все еще мог запрашивать его в Афине. Для этого, как мне настроить клей?

Я думаю, что эти текущие настройки вывода для клея могут иметь значение:

When the crawler detects schema changes in the data store, how should AWS Glue handle table updates in the data catalog?
(yes) Update the table definition in the data catalog.

(yes) Update all new and existing partitions with metadata from the table.

How should AWS Glue handle deleted objects in the data store?
(yes) Mark the table as deprecated in the data catalog.
...