Берем Iceberg REST Catalog в виде Apache Polaris. Коннектим его к Трино как каталог. При этом передаем общие принципала и креды. Все подключается и успешно создаем, удаляем, работаем со схемами и таблицами.
Теперь хотим подцепиться к тому же каталогу через PyIceberg. С теми же кредами. И Ловим 401 на попытке прочитать таблицу? Почему?
Потому что PyIceberg честный и спрашивает креды на значимые действия с таблицей. Подчинаяется ролевой модели поляриса в этом плане. А трино просто взял metadata.json из каталога и пошел сам по S3 расшифровывать айсберговскую дату и метадату, никакого разрешения от каталога ему для этого не нужно. Ну и свою ролевую модель поверх наложил.
Одна и та же таблица, одна схема подключения, но два представления о прекрасном от двух движков данных.
Напоследок - доступные роли в Полярисе, грантов которых PyIceberg от нас ждет. Грантуется это исключительно через CURL.
# Доступные права в поларис
[
CATALOG_MANAGE_ACCESS,
CATALOG_MANAGE_CONTENT,
CATALOG_MANAGE_METADATA,
NAMESPACE_CREATE,
TABLE_CREATE,
VIEW_CREATE,
NAMESPACE_DROP,
TABLE_DROP,
VIEW_DROP,
NAMESPACE_LIST,
TABLE_LIST,
VIEW_LIST,
NAMESPACE_READ_PROPERTIES,
TABLE_READ_PROPERTIES,
VIEW_READ_PROPERTIES,
NAMESPACE_WRITE_PROPERTIES,
TABLE_WRITE_PROPERTIES,
VIEW_WRITE_PROPERTIES,
TABLE_READ_DATA,
TABLE_WRITE_DATA,
NAMESPACE_FULL_METADATA,
TABLE_FULL_METADATA,
VIEW_FULL_METADATA
]В другом каталоге Iceberg REST роли могут быть другие. В JDBC/Hive каталогах - вообще своя атмосфера.