Athena и CloudTrail - сегментирование по ['account', 'year', 'month', 'day'] (без региона)

Я только начинаю работать с Athena с целью запрашивать события управления CloudTrail из нескольких учетных записей.

Я настраиваю первую таблицу, следуя этому руководству:

https://cloudonaut.io/analyzing-cloudtrail-with-athena/

Из-за структуры папок (ключевого префикса) событий CloudTrail он разделен на:

PARTITIONED BY (account string, region string, year string, month string, day, string)

Затем я создаю другую таблицу с CATS, чтобы преобразовать JSON в ORC и сохранить в другом ведре, следуя этому руководству:

https://aws.amazon.com/blogs/big-data/using-ctas-statements-with-amazon-athena-to-reduce-cost-and-improve-performance/

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

Вот что я пытаюсь запустить:

CREATE TABLE cloudtrail_partitioned_bucketed
WITH (
  partitioned_by = ARRAY['account','year','month','day'],
  bucketed_by = ARRAY['eventname'],
  bucket_count = 3,
  format = 'orc',
  external_location = 's3://bucket/athena/out/'
)
AS
SELECT
  *
FROM cloudtrail_logs

Я получаю сообщение об ошибке:

HIVE_COLUMN_ORDER_MISMATCH: Partition keys must be the last columns in the table and in the same order as the table properties

Конечно, если я просто использую значения по порядку, независимо от того, какие значения он работает (учетная запись, регион / год, месяц, день). Я понимаю, что ключи разделов не являются динамическими, но могу ли я просто удалить регион ключа раздела для преобразования орков? У меня есть awsregion из самих событий.

Любые отзывы о том, насколько это плохая идея, будут приветствоваться. У меня в голове есть идея запланировать запуск одного раза в день, конвертирующий дни событий CloudTrail в каждой учетной записи в ORC в другое ведро для использования с запросами Афины. События CloudTrail будут архивироваться раньше, и все запросы, выполняемые пользователями с Athena, будут выполняться с меньшими файлами ORC.

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


person pseudosymbiotic    schedule 28.02.2021    source источник


Ответы (1)


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

вместо того:

PARTITIONED BY (account string, region string, year string, month string, day, string)

Я использовал:

PARTITIONED BY (account string, year string, month string, day, string)

и, похоже, он работает.

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

Спасибо

person pseudosymbiotic    schedule 28.02.2021
comment
В вашем исходном вопросе используется CREATE TABLE ... AS, а в вашем ответе используется стандартный CREATE TABLE оператор. Если вы используете CTAS, вам нужно четко указать столбцы, выбранные из источника (т.е. не SELECT *). - person Parsifal; 28.02.2021
comment
Кроме того, имеет ли смысл вести ведро по имени события? По моему опыту, это поле имеет тенденцию быть очень искаженным, с несколькими именами для большинства событий (например, в лямбда-ориентированном развертывании, как правило, преобладают «принять роль» и «создать поток журнала»). - person Parsifal; 28.02.2021
comment
Спасибо. Я понял, насколько глупым был мой первый вопрос, но не хотел отказываться от него, если у кого-то вроде меня возникнет такая же проблема. Мое рассуждение о пути также было связано с ключами, а не с тем, что я буквально определял, что такое ключи, и указывал путь. насчет явных столбцов на CTAS я понятия не имел. Я просто спотыкаюсь о том, что могу найти с помощью Google, и это не касается основ. Что касается названия события, мне показалось это странным. Есть такие вещи и ORC вместо Parquet, в которых я не уверен. Я верил, что блог AWS знает лучше меня. Спасибо! - person pseudosymbiotic; 01.03.2021