Как игнорировать порядок структуры Амазонки Афины - PullRequest
0 голосов
/ 31 мая 2019

Я получаю ошибку HIVE_PARTITION_SCHEMA_MISMATCH, что я не совсем уверен, что делать. Когда я смотрю на две разные схемы, единственное, что отличается, - это порядок ключей в одной из моих структур (созданных сканером клея). Меня действительно не волнует порядок данных, и я получаю данные в виде BLOB-объекта JSON, поэтому я не могу гарантировать порядок ключей.

struct<device_id:string,user_id:string,payload:array<struct<channel:string,sensor_id:string,type:string,unit:string,value:double,name:string>>,topic:string,channel:string,client_id:string,hardware_id:string,timestamp:bigint,application_id:string>
struct<device_id:string,user_id:string,payload:array<struct<channel:string,name:string,sensor_id:string,type:string,unit:string,value:double>>,topic:string,channel:string,client_id:string,hardware_id:string,timestamp:bigint,application_id:string>

1 Ответ

1 голос
/ 04 июня 2019

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

Что делать вместо этого, зависит от того, как новые данные добавляются в S3.

Если вы контролируете код, который создает данные, вы можете добавить код, который добавляет разделы после загрузки данных.Преимущество этого решения заключается в том, что разделы добавляются сразу после создания новых данных, поэтому таблицы всегда обновляются.Однако он может тесно связать код создания данных с Glue (или Athena, если вы предпочитаете добавлять разделы с помощью SQL) нежелательным образом.

Если нет смысла добавлять разделы изкод, который производит данные, вы можете создать функцию лямбда, которая делает это.Вы можете либо настроить его запуск в определенное время каждый день (если вы знаете местоположение новых данных, вам не нужно ждать, пока они существуют, разделы могут указывать на пустые места), либо вы можете запускать их с помощью уведомлений S3(если есть несколько файлов, вы можете найти способ отменить уведомления через SQS или просто создать раздел снова и снова, просто проглотите ошибку, если раздел уже существует).

Возможно, у вас также естьслышал о MSCK REPAIR TABLE ….В некоторых отношениях это лучше, чем склеивание клеев, но в других отношениях это так же плохо.Он только добавит новые разделы, никогда не изменит схему, как правило, то, что вам нужно, но он крайне неэффективен и работает все медленнее и медленнее, чем больше файлов.Вроде как клеевые гусеницы.

...