Я копирую всю базу данных снежинок в S3 для просмотра через Athena. Я хотел бы сохранить схему/иерархию, чтобы соответствующие запросы не менялись. Все файлы правильно организованы для этого в S3 следующим образом.
База данных/Схема/Папка/Таблица/{паркетные файлы}
Когда я сканирую с помощью Glue, все они оказываются в одной БД на одном уровне. Возможно ли иметь аналогичную структуру папок в Athena?
Прямо сейчас все запросы в Athena похожи на
Select *
FROM database.table
Я бы хотел
Select *
FROM database.schema.folder.table
Я думаю, вы неправильно понимаете. Я хочу структуру папок в Афине. Я получаю все свои таблицы правильно. Они просто все появляются в одном каталоге.
Что вы подразумеваете под «появляться в том же каталоге»? Вы имеете в виду боковую панель в консоли управления Amazon Athena? В Athena есть концепция «База данных», но нет дополнительных уровней иерархии.
Да, могу ли я получить больше уровней иерархии?
Единственная логическая группа таблиц, доступная в Афина, — это database
, и, как вы указали, в Athena нет понятия иерархии, схем или папок.
База данных и схема составляют пространство имен в Snowflake. Если вы хотите просто иметь похожее пространство имен, вы можете объединить базу данных Snowflake d1
и имя схемы s1
, чтобы создать плоскую логическую группу в Athena d1_s1
. Затем вы можете сделать:
SELECT * FROM d1_s1.table
Кроме того, единственный специальный символ, который вы можете использовать в имени базы данных, — это нижнее подчеркивание, поэтому другого способа сохранить структуру или существующие запросы просто не существует. По крайней мере, таким образом формат достаточно близок, чтобы было достаточно легко программно исправить существующие запросы (например, используя регулярное выражение для замены a.b.c
на a_b.c
).
Однако отличия все же будут. Например, гранты управляются по-разному для баз данных и схем Snowflake. Схемы также имеют понятие managed access
. В Афине это невозможно.
Отличный ответ, @Register Sole. Вы знаете, было ли это дизайнерским решением или технологическим ограничением? Если это возможно, я отправлю запрос функции. Кажется, что многие люди хотели бы.
@Keith Athena основан на PrestoDB. В PrestoDB есть connector
и schema
, поэтому пространство имен выглядит как postgresql.schema1.table2
. Они переводятся непосредственно в Athena data source
и database
. Поэтому наиболее очевидной причиной для меня является наследование от родительского проекта. Что касается того, почему PrestoDB делает это, я предполагаю, что наличие двух уровней логической группировки поверх соединителя (connector1.db3.schema2.table8
) делает ее слишком сложной и противоречит цели логической группировки.
Я бы остановился на 2-х уровнях. На данный момент у меня есть только 1. Я использую базу данных для разных проектов, которые я не хочу смешивать. Я могу отправить запрос функции. Не похоже, что это невозможно решить.
«Чтобы заставить сканер создавать отдельные таблицы, добавьте корневую папку каждой таблицы в качестве отдельного хранилища данных при определении сканера». , Проверьте это: docs.aws.amazon.com/glue/latest/dg/…