Вы можете использовать драйвер Athena JDBC . Этот подход обходит каталог, так как только Афина (а не клей по состоянию на 25 января 2019 года) может напрямую обращаться к представлениям.
- Загрузите драйвер и сохраните банку в ведро S3.
- Укажите путь S3 к драйверу как зависимый jar в определении задания.
- Загрузить данные в динамический фрейм, используя код ниже (используя пользователя IAM
с разрешением на выполнение запросов Athena ).
from awsglue.dynamicframe import DynamicFrame
# ...
athena_view_dataframe = (
glueContext.read.format("jdbc")
.option("user", "[IAM user access key]")
.option("password", "[IAM user secret access key]")
.option("driver", "com.simba.athena.jdbc.Driver")
.option("url", "jdbc:awsathena://athena.us-east-1.amazonaws.com:443")
.option("dbtable", "my_database.my_athena_view")
.option("S3OutputLocation","s3://bucket/temp/folder") # CSVs/metadata dumped here on load
.load()
)
athena_view_datasource = DynamicFrame.fromDF(athena_view_dataframe, glueContext, "athena_view_source")
Документация на драйвер ( pdf ) предоставляет альтернативы аутентификации пользователя IAM (например, SAML, пользовательский поставщик).
Основным побочным эффектом этого подхода является то, что загрузка приводит к выводу результатов запроса в формате CSV в корзину, указанную с помощью клавиши S3OutputLocation
.
Я не верю, что вы можете создать Glue Connection с Афиной через JDBC, потому что вы не можете указать S3-путь к расположению драйвера.
Атрибуция: поддержка AWS полностью помогла мне получить эту работу.