Доступ к таблицам Glue, отличным от Iceberg, из Spark (задание Glue) с помощью AssumeRolePython

Программы на Python
Anonymous
Доступ к таблицам Glue, отличным от Iceberg, из Spark (задание Glue) с помощью AssumeRole

Сообщение Anonymous »

У меня есть каталог Glue в учетной записи B, содержащий несколько таблиц: некоторые из них — Iceberg, некоторые — стандартные (не Iceberg/Hive/внешние)
Я запускаю задание Glue Spark в учетной записи A с ролью A, и мне нужно получить доступ к этому каталогу с помощью AssumeRole → RoleB (в учетной записи B). IAM настроен правильно:
  • RoleA может принять на себя роль B
  • RoleB имеет доступ Glue + S3
  • установлены политики ресурсов
Из моего задания Spark я хочу запрашивать таблицы, не являющиеся айсбергами, без чтения из С3:

Код: Выделить всё

SELECT * FROM database.table
Я попробовал несколько конфигураций сеанса Spark:

Код: Выделить всё

config_options = {
"spark.sql.extensions": "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions",
"spark.sql.catalog.idt_catalog": "org.apache.iceberg.spark.SparkCatalog",
"spark.sql.catalog.idt_catalog.catalog-impl": "org.apache.iceberg.aws.glue.GlueCatalog",
"spark.sql.catalog.idt_catalog.io-impl": "org.apache.iceberg.aws.s3.S3FileIO",
"spark.sql.catalog.idt_catalog.client.factory": "org.apache.iceberg.aws.AssumeRoleAwsClientFactory",
"spark.sql.catalog.idt_catalog.client.assume-role.arn": ROLE_B_ARN,
}
Это работает только для таблиц айсберга. Для таблиц, не являющихся айсбергами, он только перечисляет их (

Код: Выделить всё

"SHOW TABLES IN idt_catalog.database"
), но когда я пытаюсь их запросить, он возвращает:

Код: Выделить всё

[TABLE_OR_VIEW_NOT_FOUND]
Есть ли способ заставить Spark использовать предполагаемую роль для доступа к каталогу Glue (таблицы, отличные от Iceberg)?

Вернуться в «Python»