Обновить схему секционированной таблицы на AWS Glue / Athena - PullRequest
0 голосов
/ 22 января 2020

У меня есть поток событий от Firehose до S3, который затем сканируется Glue для периодического создания новых разделов и обновления схемы таблицы, к которой запрашиваются в Афине.

Внезапно наши запросы начали давать сбой с

HIVE_BAD_DATA: Error parsing field value for field 1: For input string: "11642224428"

Таким образом, мы подозреваем, что одно из полей, которые Glue первоначально определял как INT, теперь должно быть изменено на BIGINT. По какой-то причине сканер не сделал этого автоматически, поэтому нам нужно исправить это.

Очевидная попытка состояла в том, чтобы отредактировать схему таблицы с struct<...,field:int,...> до struct<...,field:bigint,...>, но это привело к следующему:

HIVE_PARTITION_SCHEMA_MISMATCH: существует несоответствие между таблицей и схемами секций. Типы несовместимы и не могут быть принудительными. Столбец 'my_column' в таблице 'my_table' объявлен как тип 'struct <..., поле: bigint, ...>' , но раздел 'partition_0 = 2019 / partition_1 = 12 / partition_2 = 31 / partition_3 = 23 'объявил столбец' my_column 'как тип ' struct <..., field: int, ...> '.

Итак, мы пришли к выводу, что нам также пришлось бы обновлять схему для всех разделов вручную, но мы не могли найти способ сделать это без написания сценариев самостоятельно.

Как мы можем продолжить? Можем ли мы как-то сказать Crawler сделать это для нас, или есть какой-то AWS API, который мог бы помочь нам окончательно sh это чисто?

Если нет, то итерация по всем разделам, выполняющим обновление схемы, решает наша проблема?

1 Ответ

1 голос
/ 23 января 2020

Чтобы устранить эту проблему, необходимо включить « Обновить все новые и существующие разделы с метаданными из таблицы » и перезапустить искатель. Затем он будет применять ту же схему, что и таблица, для всех разделов. Обратитесь к this , чтобы узнать больше об этой настройке.

...