Как использовать формат AVRO на AWS Glue / Athena - PullRequest
0 голосов
/ 25 июня 2019

У меня есть несколько тем в Кафке, которые пишут AVRO-файлы в корзины S3, и я хотел бы выполнить некоторые запросы для корзины, используя AWS Athena.

Я пытаюсь создать таблицу, но программа-обходчик AWS Glue запускается и не добавляет свою таблицу (она работает, если я изменяю тип файла на JSON). Я пытался создать таблицу из консоли Athena, но она не показывает поддержку файла AVRO.

Есть идеи, как заставить это работать?

1 Ответ

0 голосов
/ 26 июня 2019

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

Документацию по созданию таблицы Avro можно найти здесь: https://docs.aws.amazon.com/athena/latest/ug/avro.html

Предостережение для AvroТаблицы - это то, что вам нужно указать как столбцы таблицы, так и схему Avro.Это может выглядеть странно и излишне, но так работает Афина / Престо.Ему нужна схема, чтобы знать, как интерпретировать файлы, а затем ему нужно знать, какие из свойств в файлах вы хотите представить как столбцы (и их типы, которые могут соответствовать или не соответствовать типам Avro).

CREATE EXTERNAL TABLE avro_table (
   foo STRING,
   bar INT
)
ROW FORMAT
SERDE 'org.apache.hadoop.hive.serde2.avro.AvroSerDe'
WITH SERDEPROPERTIES ('avro.schema.literal' = '
{
  "type": "record",
  "name": "example",
  "namespace": "default",
  "fields": [
    {
      "name": "foo",
      "type": ["null", "string"],
      "default": null
    },
    {
      "name": "bar",
      "type": ["null", "int"],
      "default": null
    }
  ]
}
')
STORED AS AVRO
LOCATION 's3://some-bucket/data/';

Обратите внимание, как схема Avro отображается в виде документа JSON внутри значения свойства serde (одинарные кавычки) - форматирование не является обязательным, но делает этот пример легче для чтения.

...