You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@polaris.apache.org by gi...@apache.org on 2026/06/08 16:38:05 UTC
(polaris) branch asf-site updated: deploy: 1c007f4cb6b6ab48ae74f4616892ed5057fd1d9c
This is an automated email from the ASF dual-hosted git repository.
github-actions[bot] pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/polaris.git
The following commit(s) were added to refs/heads/asf-site by this push:
new 7307385430 deploy: 1c007f4cb6b6ab48ae74f4616892ed5057fd1d9c
7307385430 is described below
commit 73073854307133eaaa7d0006af52c731d9aa6fdd
Author: MonkeyCanCode <Mo...@users.noreply.github.com>
AuthorDate: Mon Jun 8 16:37:59 2026 +0000
deploy: 1c007f4cb6b6ab48ae74f4616892ed5057fd1d9c
---
404.html | 2 +-
.../index.html | 2 +-
.../index.html | 342 ++---
.../index.html | 2 +-
.../index.html | 404 ++---
.../index.html | 294 ++--
.../12/24/securing-s3-data-with-aws-kms/index.html | 28 +-
.../index.html | 350 ++---
.../index.html | 2 +-
.../index.html | 154 +-
.../index.html | 2 +-
.../index.html | 68 +-
.../index.html | 606 ++++----
blog/index.html | 2 +-
blog/page/2/index.html | 2 +-
categories/index.html | 2 +-
community/chat-bylaws/index.html | 2 +-
community/community-guidelines/index.html | 2 +-
community/contributing-guidelines/index.html | 26 +-
community/index.html | 2 +-
community/meetings/index.html | 2 +-
community/proposals/index.html | 2 +-
community/release-guides/index.html | 2 +-
.../release-guides/manual-release-guide/index.html | 4 +-
.../release-verification-guide/index.html | 30 +-
.../semi-automated-release-guide/index.html | 2 +-
.../security-advisories/cve-2026-42809/index.html | 2 +-
.../security-advisories/cve-2026-42810/index.html | 2 +-
.../security-advisories/cve-2026-42811/index.html | 2 +-
.../security-advisories/cve-2026-42812/index.html | 2 +-
community/security-report/index.html | 2 +-
docs/index.html | 2 +-
downloads/0.9.0/index.html | 2 +-
downloads/1.0.0/index.html | 2 +-
downloads/1.0.1/index.html | 2 +-
downloads/1.1.0/index.html | 30 +-
downloads/1.2.0/index.html | 2 +-
downloads/1.3.0/index.html | 2 +-
downloads/1.4.0/index.html | 2 +-
downloads/1.4.1/index.html | 2 +-
downloads/1.5.0/index.html | 2 +-
downloads/index.html | 8 +-
downloads/index.xml | 22 +-
downloads/readme/index.html | 32 +-
guides/ceph/index.html | 54 +-
guides/cockroachdb/index.html | 68 +-
guides/flink/index.html | 76 +-
guides/index.html | 66 +-
guides/index.xml | 123 +-
guides/jdbc/index.html | 64 +-
guides/keycloak/index.html | 100 +-
guides/minio/index.html | 52 +-
guides/ozone/index.html | 52 +-
guides/quickstart/index.html | 14 +-
guides/readme/index.html | 2 +-
guides/rustfs/index.html | 52 +-
guides/spark/index.html | 20 +-
guides/telemetry/index.html | 56 +-
in-dev/index.html | 2 +-
in-dev/release_index/index.html | 2 +-
in-dev/unreleased/admin-tool/index.html | 64 +-
.../unreleased/command-line-interface/index.html | 2 +-
.../configuration-reference/index.html | 2 +-
.../index.html | 206 +--
.../index.html | 136 +-
.../index.html | 2 +-
.../configuring-polaris-for-production/index.html | 64 +-
.../configuration/configuring-polaris/index.html | 14 +-
in-dev/unreleased/configuration/index.html | 2 +-
in-dev/unreleased/downstream-build/index.html | 2 +-
in-dev/unreleased/entities/index.html | 2 +-
in-dev/unreleased/evolution/index.html | 2 +-
.../bigquery-metastore-federation/index.html | 70 +-
.../hive-metastore-federation/index.html | 70 +-
.../federation/iceberg-rest-federation/index.html | 46 +-
in-dev/unreleased/federation/index.html | 2 +-
in-dev/unreleased/generic-table/index.html | 90 +-
.../getting-started/binary-distribution/index.html | 26 +-
.../creating-a-catalog/catalog-azure/index.html | 50 +-
.../creating-a-catalog/catalog-gcs/index.html | 38 +-
.../catalog-migration/index.html | 2 +-
.../getting-started/creating-a-catalog/index.html | 34 +-
.../getting-started/creating-a-catalog/index.xml | 72 +-
.../creating-a-catalog/s3/catalog-aws/index.html | 44 +-
.../creating-a-catalog/s3/catalog-minio/index.html | 34 +-
.../creating-a-catalog/s3/catalog-ozone/index.html | 36 +-
.../creating-a-catalog/s3/index.html | 22 +-
.../creating-a-catalog/s3/index.xml | 36 +-
.../cloud-deploy/deploy-aws/index.html | 22 +-
.../cloud-deploy/deploy-azure/index.html | 16 +-
.../cloud-deploy/deploy-gcp/index.html | 22 +-
.../deploying-polaris/cloud-deploy/index.html | 2 +-
.../deploying-polaris/cloud-deploy/index.xml | 20 +-
.../getting-started/deploying-polaris/index.html | 2 +-
.../getting-started/deploying-polaris/index.xml | 14 +-
.../deploying-polaris/local-deploy/index.html | 46 +-
.../deploying-polaris/storage-tls/index.html | 14 +-
in-dev/unreleased/getting-started/index.html | 2 +-
in-dev/unreleased/getting-started/index.xml | 8 +-
.../install-dependencies/index.html | 48 +-
.../getting-started/quick-start/index.html | 2 +-
.../getting-started/setup-tools/index.html | 68 +-
.../getting-started/using-polaris/index.html | 308 ++--
.../getting-started/using-polaris/index.xml | 20 +-
.../using-polaris/keycloak-idp/index.html | 100 +-
.../using-polaris/telemetry-tools/index.html | 50 +-
.../helm-chart/authentication/index.html | 248 +--
in-dev/unreleased/helm-chart/dev/index.html | 138 +-
in-dev/unreleased/helm-chart/index.html | 8 +-
in-dev/unreleased/helm-chart/index.xml | 6 +-
in-dev/unreleased/helm-chart/networking/index.html | 202 +--
.../unreleased/helm-chart/persistence/index.html | 96 +-
in-dev/unreleased/helm-chart/production/index.html | 118 +-
in-dev/unreleased/helm-chart/reference/index.html | 2 +-
in-dev/unreleased/index.html | 2 +-
.../managing-security/access-control/index.html | 2 +-
.../external-idp/idp-dev-notes/index.html | 18 +-
.../managing-security/external-idp/index.html | 132 +-
.../managing-security/external-pdp/index.html | 4 +-
.../managing-security/external-pdp/opa/index.html | 440 +++---
in-dev/unreleased/managing-security/index.html | 2 +-
in-dev/unreleased/metastores/index.html | 2 +-
in-dev/unreleased/metastores/index.xml | 48 +-
.../unreleased/metastores/nosql-mongodb/index.html | 84 +-
.../metastores/relational-jdbc/index.html | 80 +-
in-dev/unreleased/polaris-api-specs/index.html | 2 +-
.../polaris-catalog-api/index.html | 2 +-
.../polaris-management-api/index.html | 2 +-
in-dev/unreleased/polaris-spark-client/index.html | 82 +-
in-dev/unreleased/policy/index.html | 128 +-
in-dev/unreleased/realm/index.html | 2 +-
in-dev/unreleased/telemetry/index.html | 24 +-
index.html | 2 +-
index.xml | 1613 +++++++++++---------
...rch-index.5dae01b570ad47ef0cf356e9a923e8c6.json | 1 +
...rch-index.8a47f346f871e2b182cccce73901599f.json | 1 -
releases/0.9.0/access-control/index.html | 2 +-
releases/0.9.0/command-line-interface/index.html | 2 +-
.../configuring-polaris-for-production/index.html | 16 +-
releases/0.9.0/entities/index.html | 2 +-
releases/0.9.0/index.html | 2 +-
releases/0.9.0/metastores/index.html | 86 +-
releases/0.9.0/overview/index.html | 2 +-
.../0.9.0/polaris-management-service/index.html | 2 +-
releases/0.9.0/quickstart/index.html | 196 +--
releases/0.9.0/rest-catalog-open-api/index.html | 2 +-
releases/1.0.0/access-control/index.html | 2 +-
releases/1.0.0/admin-tool/index.html | 32 +-
releases/1.0.0/command-line-interface/index.html | 2 +-
releases/1.0.0/configuration/index.html | 14 +-
.../configuring-polaris-for-production/index.html | 62 +-
releases/1.0.0/entities/index.html | 2 +-
releases/1.0.0/evolution/index.html | 2 +-
releases/1.0.0/generic-table/index.html | 90 +-
.../getting-started/deploying-polaris/index.html | 2 +-
.../getting-started/deploying-polaris/index.xml | 20 +-
.../quickstart-deploy-aws/index.html | 22 +-
.../quickstart-deploy-azure/index.html | 16 +-
.../quickstart-deploy-gcp/index.html | 22 +-
releases/1.0.0/getting-started/index.html | 2 +-
releases/1.0.0/getting-started/index.xml | 40 +-
.../install-dependencies/index.html | 48 +-
.../1.0.0/getting-started/quickstart/index.html | 46 +-
.../1.0.0/getting-started/using-polaris/index.html | 260 ++--
releases/1.0.0/index.html | 2 +-
releases/1.0.0/index.xml | 8 +-
releases/1.0.0/metastores/index.html | 98 +-
releases/1.0.0/polaris-catalog-service/index.html | 2 +-
.../1.0.0/polaris-management-service/index.html | 2 +-
releases/1.0.0/polaris-spark-client/index.html | 84 +-
releases/1.0.0/policy/index.html | 128 +-
releases/1.0.0/realm/index.html | 2 +-
releases/1.0.0/telemetry/index.html | 24 +-
releases/1.0.1/access-control/index.html | 2 +-
releases/1.0.1/admin-tool/index.html | 32 +-
releases/1.0.1/command-line-interface/index.html | 2 +-
releases/1.0.1/configuration/index.html | 14 +-
.../configuring-polaris-for-production/index.html | 62 +-
releases/1.0.1/entities/index.html | 2 +-
releases/1.0.1/evolution/index.html | 2 +-
releases/1.0.1/generic-table/index.html | 90 +-
.../getting-started/deploying-polaris/index.html | 2 +-
.../getting-started/deploying-polaris/index.xml | 20 +-
.../quickstart-deploy-aws/index.html | 22 +-
.../quickstart-deploy-azure/index.html | 16 +-
.../quickstart-deploy-gcp/index.html | 22 +-
releases/1.0.1/getting-started/index.html | 2 +-
releases/1.0.1/getting-started/index.xml | 40 +-
.../install-dependencies/index.html | 48 +-
.../1.0.1/getting-started/quickstart/index.html | 46 +-
.../1.0.1/getting-started/using-polaris/index.html | 260 ++--
releases/1.0.1/index.html | 2 +-
releases/1.0.1/index.xml | 8 +-
releases/1.0.1/metastores/index.html | 98 +-
releases/1.0.1/polaris-catalog-service/index.html | 2 +-
.../1.0.1/polaris-management-service/index.html | 2 +-
releases/1.0.1/polaris-spark-client/index.html | 84 +-
releases/1.0.1/policy/index.html | 128 +-
releases/1.0.1/realm/index.html | 2 +-
releases/1.0.1/telemetry/index.html | 24 +-
releases/1.1.0/access-control/index.html | 2 +-
releases/1.1.0/admin-tool/index.html | 32 +-
releases/1.1.0/command-line-interface/index.html | 2 +-
releases/1.1.0/configuration/index.html | 14 +-
.../configuring-polaris-for-production/index.html | 62 +-
releases/1.1.0/entities/index.html | 2 +-
releases/1.1.0/evolution/index.html | 2 +-
releases/1.1.0/external-idp/index.html | 150 +-
releases/1.1.0/generic-table/index.html | 90 +-
.../getting-started/deploying-polaris/index.html | 2 +-
.../getting-started/deploying-polaris/index.xml | 20 +-
.../quickstart-deploy-aws/index.html | 22 +-
.../quickstart-deploy-azure/index.html | 16 +-
.../quickstart-deploy-gcp/index.html | 22 +-
releases/1.1.0/getting-started/index.html | 2 +-
releases/1.1.0/getting-started/index.xml | 44 +-
.../install-dependencies/index.html | 48 +-
releases/1.1.0/getting-started/minio/index.html | 86 +-
.../1.1.0/getting-started/quickstart/index.html | 46 +-
.../1.1.0/getting-started/using-polaris/index.html | 326 ++--
releases/1.1.0/helm/index.html | 78 +-
releases/1.1.0/index.html | 2 +-
releases/1.1.0/index.xml | 8 +-
releases/1.1.0/metastores/index.html | 98 +-
releases/1.1.0/polaris-catalog-service/index.html | 2 +-
.../1.1.0/polaris-management-service/index.html | 2 +-
releases/1.1.0/polaris-spark-client/index.html | 82 +-
releases/1.1.0/policy/index.html | 128 +-
releases/1.1.0/realm/index.html | 2 +-
releases/1.1.0/telemetry/index.html | 24 +-
releases/1.2.0/admin-tool/index.html | 32 +-
releases/1.2.0/command-line-interface/index.html | 2 +-
releases/1.2.0/configuration/index.html | 14 +-
.../configuring-polaris-for-production/index.html | 62 +-
releases/1.2.0/entities/index.html | 2 +-
releases/1.2.0/evolution/index.html | 2 +-
.../hive-metastore-federation/index.html | 54 +-
.../federation/iceberg-rest-federation/index.html | 32 +-
releases/1.2.0/federation/index.html | 2 +-
releases/1.2.0/generic-table/index.html | 90 +-
.../creating-a-catalog/catalog-azure/index.html | 50 +-
.../creating-a-catalog/catalog-gcs/index.html | 38 +-
.../getting-started/creating-a-catalog/index.html | 34 +-
.../getting-started/creating-a-catalog/index.xml | 72 +-
.../creating-a-catalog/s3/catalog-aws/index.html | 44 +-
.../creating-a-catalog/s3/catalog-minio/index.html | 34 +-
.../creating-a-catalog/s3/index.html | 16 +-
.../creating-a-catalog/s3/index.xml | 36 +-
.../cloud-deploy/deploy-aws/index.html | 20 +-
.../cloud-deploy/deploy-azure/index.html | 14 +-
.../cloud-deploy/deploy-gcp/index.html | 20 +-
.../deploying-polaris/cloud-deploy/index.html | 2 +-
.../deploying-polaris/cloud-deploy/index.xml | 16 +-
.../getting-started/deploying-polaris/index.html | 2 +-
.../getting-started/deploying-polaris/index.xml | 14 +-
.../deploying-polaris/local-deploy/index.html | 46 +-
releases/1.2.0/getting-started/index.html | 2 +-
.../install-dependencies/index.html | 48 +-
.../1.2.0/getting-started/using-polaris/index.html | 308 ++--
.../1.2.0/getting-started/using-polaris/index.xml | 26 +-
.../using-polaris/keycloak-idp/index.html | 100 +-
.../using-polaris/telemetry-tools/index.html | 56 +-
releases/1.2.0/helm/index.html | 78 +-
releases/1.2.0/index.html | 2 +-
releases/1.2.0/index.xml | 8 +-
.../managing-security/access-control/index.html | 2 +-
.../external-idp/idp-dev-notes/index.html | 18 +-
.../managing-security/external-idp/index.html | 132 +-
releases/1.2.0/managing-security/index.html | 2 +-
releases/1.2.0/metastores/index.html | 98 +-
releases/1.2.0/polaris-api-specs/index.html | 2 +-
.../polaris-catalog-api/index.html | 2 +-
.../polaris-management-api/index.html | 2 +-
releases/1.2.0/polaris-spark-client/index.html | 82 +-
releases/1.2.0/policy/index.html | 128 +-
releases/1.2.0/realm/index.html | 2 +-
releases/1.2.0/telemetry/index.html | 24 +-
releases/1.3.0/admin-tool/index.html | 32 +-
releases/1.3.0/command-line-interface/index.html | 2 +-
releases/1.3.0/configuration/index.html | 14 +-
.../index.html | 2 +-
.../configuring-polaris-for-production/index.html | 64 +-
releases/1.3.0/entities/index.html | 2 +-
releases/1.3.0/evolution/index.html | 2 +-
.../hive-metastore-federation/index.html | 70 +-
.../federation/iceberg-rest-federation/index.html | 32 +-
releases/1.3.0/federation/index.html | 2 +-
releases/1.3.0/generic-table/index.html | 90 +-
.../getting-started/binary-distribution/index.html | 28 +-
.../creating-a-catalog/catalog-azure/index.html | 50 +-
.../creating-a-catalog/catalog-gcs/index.html | 38 +-
.../catalog-migration/index.html | 2 +-
.../getting-started/creating-a-catalog/index.html | 34 +-
.../getting-started/creating-a-catalog/index.xml | 72 +-
.../creating-a-catalog/s3/catalog-aws/index.html | 44 +-
.../creating-a-catalog/s3/catalog-minio/index.html | 34 +-
.../creating-a-catalog/s3/catalog-ozone/index.html | 36 +-
.../creating-a-catalog/s3/index.html | 18 +-
.../creating-a-catalog/s3/index.xml | 36 +-
.../cloud-deploy/deploy-aws/index.html | 20 +-
.../cloud-deploy/deploy-azure/index.html | 14 +-
.../cloud-deploy/deploy-gcp/index.html | 20 +-
.../deploying-polaris/cloud-deploy/index.html | 2 +-
.../deploying-polaris/cloud-deploy/index.xml | 16 +-
.../getting-started/deploying-polaris/index.html | 2 +-
.../getting-started/deploying-polaris/index.xml | 14 +-
.../deploying-polaris/local-deploy/index.html | 46 +-
releases/1.3.0/getting-started/index.html | 2 +-
releases/1.3.0/getting-started/index.xml | 11 +-
.../install-dependencies/index.html | 48 +-
.../1.3.0/getting-started/quick-start/index.html | 12 +-
.../1.3.0/getting-started/using-polaris/index.html | 308 ++--
.../1.3.0/getting-started/using-polaris/index.xml | 26 +-
.../using-polaris/keycloak-idp/index.html | 100 +-
.../using-polaris/telemetry-tools/index.html | 56 +-
releases/1.3.0/helm/index.html | 138 +-
releases/1.3.0/index.html | 2 +-
releases/1.3.0/index.xml | 8 +-
.../managing-security/access-control/index.html | 2 +-
.../external-idp/idp-dev-notes/index.html | 18 +-
.../managing-security/external-idp/index.html | 132 +-
.../managing-security/external-pdp/index.html | 4 +-
.../managing-security/external-pdp/opa/index.html | 472 +++---
releases/1.3.0/managing-security/index.html | 2 +-
releases/1.3.0/metastores/index.html | 2 +-
releases/1.3.0/polaris-api-specs/index.html | 2 +-
.../polaris-catalog-api/index.html | 2 +-
.../polaris-management-api/index.html | 2 +-
releases/1.3.0/polaris-spark-client/index.html | 82 +-
releases/1.3.0/policy/index.html | 128 +-
releases/1.3.0/realm/index.html | 2 +-
releases/1.3.0/telemetry/index.html | 24 +-
releases/1.4.0/admin-tool/index.html | 64 +-
releases/1.4.0/command-line-interface/index.html | 2 +-
.../configuration-reference/index.html | 2 +-
.../index.html | 2 +-
.../configuring-polaris-for-production/index.html | 64 +-
.../configuration/configuring-polaris/index.html | 14 +-
releases/1.4.0/configuration/index.html | 2 +-
releases/1.4.0/downstream-build/index.html | 2 +-
releases/1.4.0/entities/index.html | 2 +-
releases/1.4.0/evolution/index.html | 2 +-
.../hive-metastore-federation/index.html | 70 +-
.../federation/iceberg-rest-federation/index.html | 46 +-
releases/1.4.0/federation/index.html | 2 +-
releases/1.4.0/generic-table/index.html | 90 +-
.../getting-started/binary-distribution/index.html | 28 +-
.../creating-a-catalog/catalog-azure/index.html | 50 +-
.../creating-a-catalog/catalog-gcs/index.html | 38 +-
.../catalog-migration/index.html | 2 +-
.../getting-started/creating-a-catalog/index.html | 34 +-
.../getting-started/creating-a-catalog/index.xml | 72 +-
.../creating-a-catalog/s3/catalog-aws/index.html | 44 +-
.../creating-a-catalog/s3/catalog-minio/index.html | 34 +-
.../creating-a-catalog/s3/catalog-ozone/index.html | 36 +-
.../creating-a-catalog/s3/index.html | 22 +-
.../creating-a-catalog/s3/index.xml | 36 +-
.../cloud-deploy/deploy-aws/index.html | 22 +-
.../cloud-deploy/deploy-azure/index.html | 16 +-
.../cloud-deploy/deploy-gcp/index.html | 22 +-
.../deploying-polaris/cloud-deploy/index.html | 2 +-
.../deploying-polaris/cloud-deploy/index.xml | 20 +-
.../getting-started/deploying-polaris/index.html | 2 +-
.../getting-started/deploying-polaris/index.xml | 14 +-
.../deploying-polaris/local-deploy/index.html | 46 +-
.../deploying-polaris/storage-tls/index.html | 14 +-
releases/1.4.0/getting-started/index.html | 2 +-
releases/1.4.0/getting-started/index.xml | 11 +-
.../install-dependencies/index.html | 48 +-
.../1.4.0/getting-started/quick-start/index.html | 12 +-
.../1.4.0/getting-started/using-polaris/index.html | 308 ++--
.../1.4.0/getting-started/using-polaris/index.xml | 20 +-
.../using-polaris/keycloak-idp/index.html | 100 +-
.../using-polaris/telemetry-tools/index.html | 50 +-
.../1.4.0/helm-chart/authentication/index.html | 248 +--
releases/1.4.0/helm-chart/dev/index.html | 138 +-
releases/1.4.0/helm-chart/index.html | 8 +-
releases/1.4.0/helm-chart/index.xml | 6 +-
releases/1.4.0/helm-chart/networking/index.html | 202 +--
releases/1.4.0/helm-chart/persistence/index.html | 96 +-
releases/1.4.0/helm-chart/production/index.html | 118 +-
releases/1.4.0/helm-chart/reference/index.html | 2 +-
releases/1.4.0/index.html | 2 +-
.../managing-security/access-control/index.html | 2 +-
.../external-idp/idp-dev-notes/index.html | 18 +-
.../managing-security/external-idp/index.html | 132 +-
.../managing-security/external-pdp/index.html | 4 +-
.../managing-security/external-pdp/opa/index.html | 472 +++---
releases/1.4.0/managing-security/index.html | 2 +-
releases/1.4.0/metastores/index.html | 2 +-
releases/1.4.0/metastores/index.xml | 48 +-
releases/1.4.0/metastores/nosql-mongodb/index.html | 84 +-
.../1.4.0/metastores/relational-jdbc/index.html | 80 +-
releases/1.4.0/polaris-api-specs/index.html | 2 +-
.../polaris-catalog-api/index.html | 2 +-
.../polaris-management-api/index.html | 2 +-
releases/1.4.0/polaris-spark-client/index.html | 82 +-
releases/1.4.0/policy/index.html | 128 +-
releases/1.4.0/realm/index.html | 2 +-
releases/1.4.0/telemetry/index.html | 24 +-
releases/1.4.1/admin-tool/index.html | 64 +-
releases/1.4.1/command-line-interface/index.html | 2 +-
.../configuration-reference/index.html | 2 +-
.../index.html | 2 +-
.../configuring-polaris-for-production/index.html | 64 +-
.../configuration/configuring-polaris/index.html | 14 +-
releases/1.4.1/configuration/index.html | 2 +-
releases/1.4.1/downstream-build/index.html | 2 +-
releases/1.4.1/entities/index.html | 2 +-
releases/1.4.1/evolution/index.html | 2 +-
.../hive-metastore-federation/index.html | 70 +-
.../federation/iceberg-rest-federation/index.html | 46 +-
releases/1.4.1/federation/index.html | 2 +-
releases/1.4.1/generic-table/index.html | 90 +-
.../getting-started/binary-distribution/index.html | 28 +-
.../creating-a-catalog/catalog-azure/index.html | 50 +-
.../creating-a-catalog/catalog-gcs/index.html | 38 +-
.../catalog-migration/index.html | 2 +-
.../getting-started/creating-a-catalog/index.html | 34 +-
.../getting-started/creating-a-catalog/index.xml | 72 +-
.../creating-a-catalog/s3/catalog-aws/index.html | 44 +-
.../creating-a-catalog/s3/catalog-minio/index.html | 34 +-
.../creating-a-catalog/s3/catalog-ozone/index.html | 36 +-
.../creating-a-catalog/s3/index.html | 22 +-
.../creating-a-catalog/s3/index.xml | 36 +-
.../cloud-deploy/deploy-aws/index.html | 22 +-
.../cloud-deploy/deploy-azure/index.html | 16 +-
.../cloud-deploy/deploy-gcp/index.html | 22 +-
.../deploying-polaris/cloud-deploy/index.html | 2 +-
.../deploying-polaris/cloud-deploy/index.xml | 20 +-
.../getting-started/deploying-polaris/index.html | 2 +-
.../getting-started/deploying-polaris/index.xml | 14 +-
.../deploying-polaris/local-deploy/index.html | 46 +-
.../deploying-polaris/storage-tls/index.html | 14 +-
releases/1.4.1/getting-started/index.html | 2 +-
releases/1.4.1/getting-started/index.xml | 11 +-
.../install-dependencies/index.html | 48 +-
.../1.4.1/getting-started/quick-start/index.html | 12 +-
.../1.4.1/getting-started/using-polaris/index.html | 308 ++--
.../1.4.1/getting-started/using-polaris/index.xml | 20 +-
.../using-polaris/keycloak-idp/index.html | 100 +-
.../using-polaris/telemetry-tools/index.html | 50 +-
.../1.4.1/helm-chart/authentication/index.html | 248 +--
releases/1.4.1/helm-chart/dev/index.html | 138 +-
releases/1.4.1/helm-chart/index.html | 8 +-
releases/1.4.1/helm-chart/index.xml | 6 +-
releases/1.4.1/helm-chart/networking/index.html | 202 +--
releases/1.4.1/helm-chart/persistence/index.html | 96 +-
releases/1.4.1/helm-chart/production/index.html | 118 +-
releases/1.4.1/helm-chart/reference/index.html | 2 +-
releases/1.4.1/index.html | 2 +-
.../managing-security/access-control/index.html | 2 +-
.../external-idp/idp-dev-notes/index.html | 18 +-
.../managing-security/external-idp/index.html | 132 +-
.../managing-security/external-pdp/index.html | 4 +-
.../managing-security/external-pdp/opa/index.html | 472 +++---
releases/1.4.1/managing-security/index.html | 2 +-
releases/1.4.1/metastores/index.html | 2 +-
releases/1.4.1/metastores/index.xml | 48 +-
releases/1.4.1/metastores/nosql-mongodb/index.html | 84 +-
.../1.4.1/metastores/relational-jdbc/index.html | 80 +-
releases/1.4.1/polaris-api-specs/index.html | 2 +-
.../polaris-catalog-api/index.html | 2 +-
.../polaris-management-api/index.html | 2 +-
releases/1.4.1/polaris-spark-client/index.html | 82 +-
releases/1.4.1/policy/index.html | 128 +-
releases/1.4.1/realm/index.html | 2 +-
releases/1.4.1/telemetry/index.html | 24 +-
releases/1.5.0/admin-tool/index.html | 64 +-
releases/1.5.0/command-line-interface/index.html | 2 +-
.../configuration-reference/index.html | 2 +-
.../index.html | 2 +-
.../configuring-polaris-for-production/index.html | 64 +-
.../configuration/configuring-polaris/index.html | 14 +-
releases/1.5.0/configuration/index.html | 2 +-
releases/1.5.0/downstream-build/index.html | 2 +-
releases/1.5.0/entities/index.html | 2 +-
releases/1.5.0/evolution/index.html | 2 +-
.../hive-metastore-federation/index.html | 70 +-
.../federation/iceberg-rest-federation/index.html | 46 +-
releases/1.5.0/federation/index.html | 2 +-
releases/1.5.0/generic-table/index.html | 90 +-
.../getting-started/binary-distribution/index.html | 28 +-
.../creating-a-catalog/catalog-azure/index.html | 50 +-
.../creating-a-catalog/catalog-gcs/index.html | 38 +-
.../catalog-migration/index.html | 2 +-
.../getting-started/creating-a-catalog/index.html | 34 +-
.../getting-started/creating-a-catalog/index.xml | 72 +-
.../creating-a-catalog/s3/catalog-aws/index.html | 44 +-
.../creating-a-catalog/s3/catalog-minio/index.html | 34 +-
.../creating-a-catalog/s3/catalog-ozone/index.html | 36 +-
.../creating-a-catalog/s3/index.html | 22 +-
.../creating-a-catalog/s3/index.xml | 36 +-
.../cloud-deploy/deploy-aws/index.html | 22 +-
.../cloud-deploy/deploy-azure/index.html | 16 +-
.../cloud-deploy/deploy-gcp/index.html | 22 +-
.../deploying-polaris/cloud-deploy/index.html | 2 +-
.../deploying-polaris/cloud-deploy/index.xml | 20 +-
.../getting-started/deploying-polaris/index.html | 2 +-
.../getting-started/deploying-polaris/index.xml | 14 +-
.../deploying-polaris/local-deploy/index.html | 46 +-
.../deploying-polaris/storage-tls/index.html | 14 +-
releases/1.5.0/getting-started/index.html | 2 +-
releases/1.5.0/getting-started/index.xml | 11 +-
.../install-dependencies/index.html | 48 +-
.../1.5.0/getting-started/quick-start/index.html | 12 +-
.../1.5.0/getting-started/setup-tools/index.html | 68 +-
.../1.5.0/getting-started/using-polaris/index.html | 308 ++--
.../1.5.0/getting-started/using-polaris/index.xml | 20 +-
.../using-polaris/keycloak-idp/index.html | 100 +-
.../using-polaris/telemetry-tools/index.html | 50 +-
.../1.5.0/helm-chart/authentication/index.html | 248 +--
releases/1.5.0/helm-chart/dev/index.html | 138 +-
releases/1.5.0/helm-chart/index.html | 8 +-
releases/1.5.0/helm-chart/index.xml | 6 +-
releases/1.5.0/helm-chart/networking/index.html | 202 +--
releases/1.5.0/helm-chart/persistence/index.html | 96 +-
releases/1.5.0/helm-chart/production/index.html | 118 +-
releases/1.5.0/helm-chart/reference/index.html | 2 +-
releases/1.5.0/index.html | 2 +-
.../managing-security/access-control/index.html | 2 +-
.../external-idp/idp-dev-notes/index.html | 18 +-
.../managing-security/external-idp/index.html | 132 +-
.../managing-security/external-pdp/index.html | 4 +-
.../managing-security/external-pdp/opa/index.html | 440 +++---
releases/1.5.0/managing-security/index.html | 2 +-
releases/1.5.0/metastores/index.html | 2 +-
releases/1.5.0/metastores/index.xml | 48 +-
releases/1.5.0/metastores/nosql-mongodb/index.html | 84 +-
.../1.5.0/metastores/relational-jdbc/index.html | 80 +-
releases/1.5.0/polaris-api-specs/index.html | 2 +-
.../polaris-catalog-api/index.html | 2 +-
.../polaris-management-api/index.html | 2 +-
releases/1.5.0/polaris-spark-client/index.html | 82 +-
releases/1.5.0/policy/index.html | 128 +-
releases/1.5.0/realm/index.html | 2 +-
releases/1.5.0/telemetry/index.html | 24 +-
releases/index.html | 2 +-
tags/authorization/index.html | 2 +-
tags/backend/index.html | 2 +-
tags/backend/index.xml | 63 +-
tags/ceph/index.html | 2 +-
tags/cockroachdb/index.html | 2 +-
tags/cockroachdb/index.xml | 32 +-
tags/flink/index.html | 2 +-
tags/flink/index.xml | 22 +-
tags/idp/index.html | 2 +-
tags/index.html | 2 +-
tags/jaeger/index.html | 2 +-
tags/jaeger/index.xml | 26 +-
tags/jdbc/index.html | 2 +-
tags/jdbc/index.xml | 63 +-
tags/keycloak/index.html | 2 +-
tags/minio/index.html | 2 +-
tags/object-storage/index.html | 2 +-
tags/object-storage/index.xml | 2 +-
tags/ozone/index.html | 2 +-
tags/ozone/index.xml | 2 +-
tags/postgres/index.html | 2 +-
tags/postgres/index.xml | 31 +-
tags/prometheus/index.html | 2 +-
tags/prometheus/index.xml | 26 +-
tags/rustfs/index.html | 2 +-
tags/spark/index.html | 2 +-
tags/spark/index.xml | 8 +-
tags/telemetry/index.html | 2 +-
tags/telemetry/index.xml | 26 +-
tools/iceberg-catalog-migrator/index.html | 2 +-
tools/index.html | 2 +-
tools/polaris-benchmarks/index.html | 2 +-
tools/polaris-console/index.html | 2 +-
tools/polaris-mcp-server/index.html | 2 +-
tools/polaris-synchronizer/index.html | 2 +-
573 files changed, 13949 insertions(+), 13338 deletions(-)
diff --git a/404.html b/404.html
index 033afc420a..c410c5808e 100644
--- a/404.html
+++ b/404.html
@@ -1 +1 @@
-<!doctype html><html itemscope itemtype=http://schema.org/WebPage lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon.png sizes=100x100><link rel=icon type=image/png href=/favicons/android-ch [...]
\ No newline at end of file
+<!doctype html><html itemscope itemtype=http://schema.org/WebPage lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon.png sizes=100x100><link rel=icon type=image/png href=/favicons/android-ch [...]
\ No newline at end of file
diff --git a/blog/2025/08/20/apache-polaris-1.0.1-incubating-has-been-released/index.html b/blog/2025/08/20/apache-polaris-1.0.1-incubating-has-been-released/index.html
index d774aa0d4e..cef9030b34 100644
--- a/blog/2025/08/20/apache-polaris-1.0.1-incubating-has-been-released/index.html
+++ b/blog/2025/08/20/apache-polaris-1.0.1-incubating-has-been-released/index.html
@@ -22,7 +22,7 @@ remove db-kind in Helm Chart add relational-jdbc to Helm Chart This release can
https://polaris.apache.org/downloads/ The artifacts are available on Maven Central.
The Docker images are available on Docker Hub:
https://hub.docker.com/r/apache/polaris/tags https://hub.docker.com/r/apache/polaris-admin-tool/tags Enjoy !
-The Apache Polaris team."><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css rel=stylesheet integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><script src=/jquery-3.7.1.min_1232160679860847782.js integrity="sha5 [...]
+The Apache Polaris team."><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css rel=stylesheet integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><script src=/jquery-3.7.1.min_1232160679860847782.js integrity="sha5 [...]
<label for=m-blog20260404build-a-local-open-data-lakehouse-with-k3d-apache-ozone-apache-polaris-and-trino-check><a href=/blog/2026/04/04/build-a-local-open-data-lakehouse-with-k3d-apache-ozone-apache-polaris-and-trino/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-blog20260404build-a-local-open-data-lakehouse-with-k3d-apache-ozone-apache-polaris-and-trino><span>Build a Local Open Data Lakehouse with k3d, Apache Ozone, Apache Polaris and Trino</span></a></label></li>< [...]
<label for=m-blog20260329introducing-the-setup-command-in-apache-polaris-check><a href=/blog/2026/03/29/introducing-the-setup-command-in-apache-polaris/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-blog20260329introducing-the-setup-command-in-apache-polaris><span>Introducing the setup Command in Apache Polaris</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-blog20260219apache-polaris-graduates-to-top-level- [...]
<label for=m-blog20260219apache-polaris-graduates-to-top-level-project-check><a href=/blog/2026/02/19/apache-polaris-graduates-to-top-level-project/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-blog20260219apache-polaris-graduates-to-top-level-project><span>Apache Polaris Graduates to Top Level Project!</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-blog20260204floe-and-apache-polaris-policy-driven-table-m [...]
diff --git a/blog/2025/09/15/doris-x-polaris-building-unified-data-lakehouse-with-iceberg-rest-catalog-a-practical-guide/index.html b/blog/2025/09/15/doris-x-polaris-building-unified-data-lakehouse-with-iceberg-rest-catalog-a-practical-guide/index.html
index 3bb11834cf..388b644436 100644
--- a/blog/2025/09/15/doris-x-polaris-building-unified-data-lakehouse-with-iceberg-rest-catalog-a-practical-guide/index.html
+++ b/blog/2025/09/15/doris-x-polaris-building-unified-data-lakehouse-with-iceberg-rest-catalog-a-practical-guide/index.html
@@ -1,4 +1,4 @@
-<!doctype html><html itemscope itemtype=http://schema.org/WebPage lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon.png sizes=100x100><link rel=icon type=image/png href=/favicons/android-ch [...]
+<!doctype html><html itemscope itemtype=http://schema.org/WebPage lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon.png sizes=100x100><link rel=icon type=image/png href=/favicons/android-ch [...]
<label for=m-blog20260404build-a-local-open-data-lakehouse-with-k3d-apache-ozone-apache-polaris-and-trino-check><a href=/blog/2026/04/04/build-a-local-open-data-lakehouse-with-k3d-apache-ozone-apache-polaris-and-trino/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-blog20260404build-a-local-open-data-lakehouse-with-k3d-apache-ozone-apache-polaris-and-trino><span>Build a Local Open Data Lakehouse with k3d, Apache Ozone, Apache Polaris and Trino</span></a></label></li>< [...]
<label for=m-blog20260329introducing-the-setup-command-in-apache-polaris-check><a href=/blog/2026/03/29/introducing-the-setup-command-in-apache-polaris/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-blog20260329introducing-the-setup-command-in-apache-polaris><span>Introducing the setup Command in Apache Polaris</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-blog20260219apache-polaris-graduates-to-top-level- [...]
<label for=m-blog20260219apache-polaris-graduates-to-top-level-project-check><a href=/blog/2026/02/19/apache-polaris-graduates-to-top-level-project/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-blog20260219apache-polaris-graduates-to-top-level-project><span>Apache Polaris Graduates to Top Level Project!</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-blog20260204floe-and-apache-polaris-policy-driven-table-m [...]
@@ -11,174 +11,174 @@
<label for=m-blog20250919apache-polaris-110-incubating-has-been-released-check><a href=/blog/2025/09/19/apache-polaris-1.1.0-incubating-has-been-released/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-blog20250919apache-polaris-110-incubating-has-been-released><span>Apache Polaris 1.1.0-incubating has been released!</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child active-path" id=m-blog20250915doris-x-polaris-build [...]
<label for=m-blog20250915doris-x-polaris-building-unified-data-lakehouse-with-iceberg-rest-catalog-a-practical-guide-check><a href=/blog/2025/09/15/doris-x-polaris-building-unified-data-lakehouse-with-iceberg-rest-catalog-a-practical-guide/ class="align-left ps-0 active td-sidebar-link td-sidebar-link__page" id=m-blog20250915doris-x-polaris-building-unified-data-lakehouse-with-iceberg-rest-catalog-a-practical-guide><span class=td-sidebar-nav-active-item>Doris X Polaris: Building Unified [...]
<label for=m-blog20250820apache-polaris-101-incubating-has-been-released-check><a href=/blog/2025/08/20/apache-polaris-1.0.1-incubating-has-been-released/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-blog20250820apache-polaris-101-incubating-has-been-released><span>Apache Polaris 1.0.1-incubating has been released!</span></a></label></li></ul></li></ul></nav></div></aside><main class="col-12 col-md-9 col-xl-10 ps-md-5 pe-md-4" role=main><a class=td-rss-button title= [...]
-<time datetime=2025-09-15 class=text-body-secondary>Monday, September 15, 2025</time></div><header class=article-meta></header><p>With the continuous evolution of data lake technologies, efficiently and securely managing massive datasets stored on object storage (such as AWS S3) while providing unified access endpoints for upstream analytics engines (like <a href=https://doris.apache.org>Apache Doris</a>) has become a core challenge in modern data architectures. <a href=https://polaris.a [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span>aws s3 mb s3://polaris-doris-test --region us-west-2
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span><span style=color:#8f5902;font-style:italic># Verify that the bucket was created successfully</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span>aws s3 ls <span style=color:#000;font-weight:700>|</span> grep polaris-doris-test
-</span></span></code></pre></div><h4 id=12-create-iam-role-for-object-storage-access id=12-create-iam-role-for-object-storage-access>1.2 Create IAM Role for Object Storage Access<a class=heading-anchor href=#12-create-iam-role-for-object-storage-access aria-label=Anchor>🔗</a></h4><p>To implement secure credential management, we need to create an IAM role for Polaris to use through the STS AssumeRole mechanism. This design follows the security best practices of the least privileged princi [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span><span style=color:#4e9a06>{
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span><span style=color:#4e9a06> "Version": "2012-10-17",
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span><span style=color:#4e9a06> "Statement": [
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span><span style=color:#4e9a06> {
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span><span style=color:#4e9a06> "Effect": "Allow",
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span><span style=color:#4e9a06> "Principal": {
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span><span style=color:#4e9a06> "AWS": "arn:aws:iam::YOUR_ACCOUNT_ID:root"
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span><span style=color:#4e9a06> },
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">10</span><span><span style=color:#4e9a06> "Action": "sts:AssumeRole",
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">11</span><span><span style=color:#4e9a06> "Condition": {
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">12</span><span><span style=color:#4e9a06> "StringEquals": {
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">13</span><span><span style=color:#4e9a06> "sts:ExternalId": "polaris-doris-demo"
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">14</span><span><span style=color:#4e9a06> }
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">15</span><span><span style=color:#4e9a06> }
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">16</span><span><span style=color:#4e9a06> }
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">17</span><span><span style=color:#4e9a06> ]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">18</span><span><span style=color:#4e9a06>}
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">19</span><span><span style=color:#4e9a06>EOF</span>
-</span></span></code></pre></div></li><li><p>Create an IAM Role</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span>aws iam create-role <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> --role-name polaris-doris-demo <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> --assume-role-policy-document file:///path/to/polaris-trust-policy.json <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> --description <span style=color:#4e9a06>"IAM Role for Polaris to access S3 storage"</span>
-</span></span></code></pre></div></li><li><p>Attach S3 access permission policy</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span><span style=color:#8f5902;font-style:italic># Attach the AmazonS3FullAc [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span>aws iam attach-role-policy <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> --role-name polaris-doris-demo <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> --policy-arn arn:aws:iam::aws:policy/AmazonS3FullAccess
-</span></span></code></pre></div></li></ol><h4 id=13-bind-iam-role-to-ec2-instance-optional id=13-bind-iam-role-to-ec2-instance-optional>1.3 Bind IAM Role to EC2 Instance (Optional)<a class=heading-anchor href=#13-bind-iam-role-to-ec2-instance-optional aria-label=Anchor>🔗</a></h4><blockquote><p>If you do not perform this step, you need to export <code>AWS_ACCESS_KEY_ID</code> and <code>AWS_SECRET_ACCESS_KEY</code> before starting polaris</p></blockquote><p>If your Polaris service will ru [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span><span style=color:#000;font-weight:700>{</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span> <span style=color:#204a87;font-weight:700>"Version"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"2012-10-17"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span> <span style=color:#204a87;font-weight:700>"Statement"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span> <span style=color:#000;font-weight:700>{</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span> <span style=color:#204a87;font-weight:700>"Effect"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"Allow"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span> <span style=color:#204a87;font-weight:700>"Principal"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span> <span style=color:#204a87;font-weight:700>"Service"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"ec2.amazonaws.com"</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span> <span style=color:#000;font-weight:700>},</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">10</span><span> <span style=color:#204a87;font-weight:700>"Action"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"sts:AssumeRole"</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">11</span><span> <span style=color:#000;font-weight:700>}</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">12</span><span> <span style=color:#000;font-weight:700>]</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">13</span><span><span style=color:#000;font-weight:700>}</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">14</span><span><span style=color:#a40000>EOF</span>
-</span></span></code></pre></div></li><li><p>Create EC2 Instance Role</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span>aws iam create-role <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> --role-name polaris-ec2-role <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> --assume-role-policy-document file:///path/to/ec2-trust-policy.json <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> --description <span style=color:#4e9a06>"IAM Role for EC2 instance running Polaris service"</span>
-</span></span></code></pre></div></li><li><p>Attach S3 access permission policy</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span><span style=color:#8f5902;font-style:italic># Attach the AmazonS3FullAc [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span>aws iam attach-role-policy <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> --role-name polaris-ec2-role <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> --policy-arn arn:aws:iam::aws:policy/AmazonS3FullAccess
-</span></span></code></pre></div></li><li><p>Create an instance configuration file</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span><span style=color:#8f5902;font-style:italic># Create an instance pro [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span>aws iam create-instance-profile <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> --instance-profile-name polaris-ec2-instance-profile
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span><span style=color:#8f5902;font-style:italic># Add a role to an instance profile</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">6</span><span>aws iam add-role-to-instance-profile <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">7</span><span> --instance-profile-name polaris-ec2-instance-profile <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">8</span><span> --role-name polaris-ec2-role
-</span></span></code></pre></div></li><li><p>Attach the instance profile to the EC2 instance</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 1</span><span><span style=color:#8f5902;font-style:italic># If it is a [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span>aws ec2 run-instances <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span> --image-id ami-xxxxxxxxx <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span> --instance-type t3.medium <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span> --iam-instance-profile <span style=color:#000>Name</span><span style=color:#ce5c00;font-weight:700>=</span>polaris-ec2-instance-profile <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span> --other-parameters...
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span><span style=color:#8f5902;font-style:italic># If it is an existing EC2 instance, you need to associate the instance profile</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span>aws ec2 associate-iam-instance-profile <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">10</span><span> --instance-id i-xxxxxxxxx <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">11</span><span> --iam-instance-profile <span style=color:#000>Name</span><span style=color:#ce5c00;font-weight:700>=</span>polaris-ec2-instance-profile
-</span></span></code></pre></div></li></ol><h3 id=2-polaris-deployment-and-catalog-creation id=2-polaris-deployment-and-catalog-creation>2. Polaris Deployment and Catalog Creation<a class=heading-anchor href=#2-polaris-deployment-and-catalog-creation aria-label=Anchor>🔗</a></h3><p>With the environment ready, we’ll now deploy the Polaris service and configure the Iceberg Catalog.</p><blockquote><p>This document uses the source code quick start method. For more deployment methods, pl [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#204a87>export</span> <span style=color:#000>AWS_SECRET_ACCESS_KEY</span><span style=color:#ce5c00;font-weight:700>=</span>YOUR_AWS_SECRET_ACCESS_KEY
-</span></span></code></pre></div></li><li><p>Clone Polaris Repository and Switch to Specific Version</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span>git clone https://github.com/apache/polaris.git
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#204a87>cd</span> polaris
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span><span style=color:#8f5902;font-style:italic># Recommend using a released stable version</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span>git checkout apache-polaris-1.0.1-incubating
-</span></span></code></pre></div></li><li><p>Run Polaris</p><p>Ensure you have Java 21+ and Docker 27+ installed.</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span>./gradlew run -Dpolaris.bootstrap.cre [...]
-</span></span></code></pre></div><ul><li><p><code>POLARIS</code> is the realm</p></li><li><p><code>root</code> is the <code>CLIENT_ID</code></p></li><li><p><code>secret</code> is the <code>CLIENT_SECRET</code></p></li><li><p>If credentials are not set, it will use preset credentials <code>POLARIS,root,s3cr3t</code></p></li></ul><p>This command will compile and start the Polaris service, which listens on port 8181 by default.</p><blockquote><p>You can also use binary distribution, see: <a [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#204a87>export</span> <span style=color:#000>CLIENT_SECRET</span><span style=color:#ce5c00;font-weight:700>=</span>secret
-</span></span></code></pre></div></li><li><p>Create Catalog (Pointing to S3 Storage)</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span>./polaris catalogs create <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> --storage-type s3 <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> --default-base-location s3://polaris-doris-test/polaris1 <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> --role-arn arn:aws:iam::<account_id>:role/polaris-doris-demo <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span> --external-id polaris-doris-demo <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">6</span><span> doris_catalog
-</span></span></code></pre></div><ul><li><p><code>--storage-type</code>: Specifies the underlying storage as S3.</p></li><li><p><code>--default-base-location</code>: Default root path for Iceberg table data.</p></li><li><p><code>--role-arn</code>: IAM Role that Polaris service uses to assume for S3 access.</p></li><li><p><code>--external-id</code>: External ID used when assuming the role, must match the configuration in the IAM Role trust policy.</p></li></ul></li><li><p>Create Namespace [...]
-</span></span></code></pre></div><p>This creates a namespace (database) named <code>doris_demo</code> under <code>doris_catalog</code>.</p></li></ol><h4 id=23-polaris-security-roles-and-permission-configuration id=23-polaris-security-roles-and-permission-configuration>2.3 Polaris Security Roles and Permission Configuration<a class=heading-anchor href=#23-polaris-security-roles-and-permission-configuration aria-label=Anchor>🔗</a></h4><p>To allow Doris to access as a <code>non-root</code> [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span>./polaris principal-roles create doris_pr_role
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span><span style=color:#8f5902;font-style:italic># Create a Catalog Role under doris_catalog</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span>./polaris catalog-roles create --catalog doris_catalog doris_catalog_role
-</span></span></code></pre></div></li><li><p>Grant Permissions to Catalog Role</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span><span style=color:#8f5902;font-style:italic># Grant doris_catalog_role p [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span>./polaris privileges catalog grant <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> --catalog doris_catalog <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> --catalog-role doris_catalog_role <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span> CATALOG_MANAGE_CONTENT
-</span></span></code></pre></div></li><li><p>Associate Principal Role and Catalog Role</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span><span style=color:#8f5902;font-style:italic># Assign doris_catal [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span>./polaris catalog-roles grant <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> --catalog doris_catalog <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> --principal-role doris_pr_role <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span> doris_catalog_role
-</span></span></code></pre></div></li><li><p>Create New Principal (User) and Bind Role</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span><span style=color:#8f5902;font-style:italic># Create a new user [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span>./polaris principals create doris_user
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span><span style=color:#8f5902;font-style:italic># Example output: {"clientId": "6e155b128dc06c13", "clientSecret": "ce9fbb4cc91c43ff2955f2c6545239d7"}</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span><span style=color:#8f5902;font-style:italic># Please note down this new client_id and client_secret pair, as Doris will use them for connection.</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">6</span><span><span style=color:#8f5902;font-style:italic># Bind doris_user to doris_pr_role</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">7</span><span>./polaris principal-roles grant <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">8</span><span> doris_pr_role <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">9</span><span> --principal doris_user
-</span></span></code></pre></div><p>With this, all Polaris-side configuration is complete. We’ve created a user named <code>doris_user</code> that obtains permission to manage <code>doris_catalog</code> through <code>doris_pr_role</code>.</p></li></ol><h3 id=3-doris-polaris-integration id=3-doris-polaris-integration>3. Doris-Polaris Integration<a class=heading-anchor href=#3-doris-polaris-integration aria-label=Anchor>🔗</a></h3><p>Now, we’ll create an Iceberg Catalog in Doris [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'type'</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'iceberg'</span><span style=color:#000;font-weight:700>,</span><span style=c [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span><span style=color:#f8f8f8> </span><span style=color:#8f5902;font-style:italic>-- Catalog name in Polaris
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'warehouse'</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'doris_catalog'</span><span style=color:#000;font-weight:700>,</span><s [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'iceberg.catalog.type'</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'rest'</span><span style=color:#000;font-weight:700>,</span> [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span><span style=color:#f8f8f8> </span><span style=color:#8f5902;font-style:italic>-- Polaris service address
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'iceberg.rest.uri'</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'http://YOUR_POLARIS_HOST:8181/api/catalog'</span><span style=co [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span><span style=color:#f8f8f8> </span><span style=color:#8f5902;font-style:italic>-- Metadata authentication method
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'iceberg.rest.security.type'</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'oauth2'</span><span style=color:#000;font-weight:700> [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">10</span><span><span style=color:#f8f8f8> </span><span style=color:#8f5902;font-style:italic>-- Replace with doris_user's client_id:client_secret
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">11</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'iceberg.rest.oauth2.credential'</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'client_id:client_secret'</span><span style=color: [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">12</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'iceberg.rest.oauth2.server-uri'</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'http://YOUR_POLARIS_HOST:8181/api/catalog/v1/oauth/to [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">13</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'iceberg.rest.oauth2.scope'</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'PRINCIPAL_ROLE:doris_pr_role'</span><span style=color: [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">14</span><span><span style=color:#f8f8f8> </span><span style=color:#8f5902;font-style:italic>-- Enable credential vending
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">15</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'iceberg.rest.vended-credentials-enabled'</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'true'</span><span style=color:#000;font- [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">16</span><span><span style=color:#f8f8f8> </span><span style=color:#8f5902;font-style:italic>-- S3 basic configuration (no keys required)
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">17</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'s3.endpoint'</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'https://s3.us-west-2.amazonaws.com'</span><span style=color:#000;fon [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">18</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'s3.region'</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'us-west-2'</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">19</span><span><span style=color:#000;font-weight:700>);</span><span style=color:#f8f8f8>
-</span></span></span></code></pre></div><h4 id=method-2-oauth2--static-storage-credentials-aksk id=method-2-oauth2--static-storage-credentials-aksk>Method 2: OAuth2 + Static Storage Credentials (AK/SK)<a class=heading-anchor href=#method-2-oauth2--static-storage-credentials-aksk aria-label=Anchor>🔗</a></h4><p>In this approach, Doris still uses OAuth2 to access Polaris metadata, but when accessing S3 data, it uses static AK/SK hardcoded in the Doris Catalog configuration. This method is s [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'type'</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'iceberg'</span><span style=color:#000;font-weight:700>,</span><span style=c [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'warehouse'</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'doris_catalog'</span><span style=color:#000;font-weight:700>,</span><s [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'iceberg.catalog.type'</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'rest'</span><span style=color:#000;font-weight:700>,</span> [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'iceberg.rest.uri'</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'http://YOUR_POLARIS_HOST:8181/api/catalog'</span><span style=co [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'iceberg.rest.security.type'</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'oauth2'</span><span style=color:#000;font-weight:700> [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'iceberg.rest.oauth2.credential'</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'client_id:client_secret'</span><span style=color: [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'iceberg.rest.oauth2.server-uri'</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'http://YOUR_POLARIS_HOST:8181/api/catalog/v1/oauth/to [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'iceberg.rest.oauth2.scope'</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'PRINCIPAL_ROLE:doris_pr_role'</span><span style=color: [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">10</span><span><span style=color:#f8f8f8> </span><span style=color:#8f5902;font-style:italic>-- Directly provide S3 access keys
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">11</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'s3.access_key'</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'YOUR_S3_ACCESS_KEY'</span><span style=color:#000;font-weight:700>, [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">12</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'s3.secret_key'</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'YOUR_S3_SECRET_KEY'</span><span style=color:#000;font-weight:700>, [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">13</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'s3.endpoint'</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'https://s3.us-west-2.amazonaws.com'</span><span style=color:#000;fon [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">14</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'s3.region'</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'us-west-2'</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">15</span><span><span style=color:#000;font-weight:700>);</span><span style=color:#f8f8f8>
-</span></span></span></code></pre></div><h3 id=4-managing-iceberg-table-in-doris-with-polaris id=4-managing-iceberg-table-in-doris-with-polaris>4. Managing Iceberg Table in Doris with Polaris<a class=heading-anchor href=#4-managing-iceberg-table-in-doris-with-polaris aria-label=Anchor>🔗</a></h3><p>Regardless of which method you use to create the Catalog, you can manage the Iceberg table with following SQL statements.</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8; [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span><span style=color:#000>USE</span><span style=color:#f8f8f8> </span><span style=color:#000>polaris_vended</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>doris_demo</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span><span style=color:#8f5902;font-style:italic>-- Create an Iceberg table
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span><span style=color:#204a87;font-weight:700>CREATE</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>TABLE</span><span style=color:#f8f8f8> </span><span style=color:#000>my_iceberg_table</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>(</span><span st [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span><span style=color:#f8f8f8> </span><span style=color:#000>id</span><span style=color:#f8f8f8> </span><span style=color:#204a87>INT</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span><span style=color:#f8f8f8> </span><span style=color:#000>name</span><span style=color:#f8f8f8> </span><span style=color:#000>STRING</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span><span style=color:#000;font-weight:700>)</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span><span style=color:#000>PROPERTIES</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>(</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">10</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'write-format'</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>'parquet'</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">11</span><span><span style=color:#000;font-weight:700>);</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">12</span><span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">13</span><span><span style=color:#8f5902;font-style:italic>-- Insert data
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">14</span><span><span style=color:#204a87;font-weight:700>INSERT</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>INTO</span><span style=color:#f8f8f8> </span><span style=color:#000>my_iceberg_table</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>VALUES</span>< [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">15</span><span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">16</span><span><span style=color:#8f5902;font-style:italic>-- Query data
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">17</span><span><span style=color:#204a87;font-weight:700>SELECT</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>*</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>FROM</span><span style=color:#f8f8f8> </span><span style=color:#000>my_iceberg_table</span><span [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">18</span><span><span style=color:#8f5902;font-style:italic>-- Expected result:
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">19</span><span><span style=color:#8f5902;font-style:italic>-- +------+---------+
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">20</span><span><span style=color:#8f5902;font-style:italic>-- | id | name |
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">21</span><span><span style=color:#8f5902;font-style:italic>-- +------+---------+
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">22</span><span><span style=color:#8f5902;font-style:italic>-- | 1 | Doris |
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">23</span><span><span style=color:#8f5902;font-style:italic>-- | 2 | Polaris |
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">24</span><span><span style=color:#8f5902;font-style:italic>-- +------+---------+
+<time datetime=2025-09-15 class=text-body-secondary>Monday, September 15, 2025</time></div><header class=article-meta></header><p>With the continuous evolution of data lake technologies, efficiently and securely managing massive datasets stored on object storage (such as AWS S3) while providing unified access endpoints for upstream analytics engines (like <a href=https://doris.apache.org>Apache Doris</a>) has become a core challenge in modern data architectures. <a href=https://polaris.a [...]
+</span></span><span style=display:flex><span>aws s3 mb s3://polaris-doris-test --region us-west-2
+</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># Verify that the bucket was created successfully</span>
+</span></span><span style=display:flex><span>aws s3 ls <span style=color:#000;font-weight:700>|</span> grep polaris-doris-test
+</span></span></code></pre></div><h4 id=12-create-iam-role-for-object-storage-access id=12-create-iam-role-for-object-storage-access>1.2 Create IAM Role for Object Storage Access<a class=heading-anchor href=#12-create-iam-role-for-object-storage-access aria-label=Anchor>🔗</a></h4><p>To implement secure credential management, we need to create an IAM role for Polaris to use through the STS AssumeRole mechanism. This design follows the security best practices of the least privileged princi [...]
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06>{
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "Version": "2012-10-17",
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "Statement": [
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> {
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "Effect": "Allow",
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "Principal": {
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "AWS": "arn:aws:iam::YOUR_ACCOUNT_ID:root"
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> },
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "Action": "sts:AssumeRole",
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "Condition": {
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "StringEquals": {
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "sts:ExternalId": "polaris-doris-demo"
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> }
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> }
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> }
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> ]
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06>}
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06>EOF</span>
+</span></span></code></pre></div></li><li><p>Create an IAM Role</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span>aws iam create-role <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --role-name polaris-doris-demo <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --assume-role-policy-document file:///path/to/polaris-trust-policy.json <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --description <span style=color:#4e9a06>"IAM Role for Polaris to access S3 storage"</span>
+</span></span></code></pre></div></li><li><p>Attach S3 access permission policy</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span><span style=color:#8f5902;font-style:italic># Attach the AmazonS3FullAccess managed policy (for testing only, use fine-grained permissions for production environments)</span>
+</span></span><span style=display:flex><span>aws iam attach-role-policy <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --role-name polaris-doris-demo <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --policy-arn arn:aws:iam::aws:policy/AmazonS3FullAccess
+</span></span></code></pre></div></li></ol><h4 id=13-bind-iam-role-to-ec2-instance-optional id=13-bind-iam-role-to-ec2-instance-optional>1.3 Bind IAM Role to EC2 Instance (Optional)<a class=heading-anchor href=#13-bind-iam-role-to-ec2-instance-optional aria-label=Anchor>🔗</a></h4><blockquote><p>If you do not perform this step, you need to export <code>AWS_ACCESS_KEY_ID</code> and <code>AWS_SECRET_ACCESS_KEY</code> before starting polaris</p></blockquote><p>If your Polaris service will ru [...]
+</span></span><span style=display:flex><span><span style=color:#000;font-weight:700>{</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"Version"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"2012-10-17"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"Statement"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>{</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"Effect"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"Allow"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"Principal"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"Service"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"ec2.amazonaws.com"</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>},</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"Action"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"sts:AssumeRole"</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>}</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>]</span>
+</span></span><span style=display:flex><span><span style=color:#000;font-weight:700>}</span>
+</span></span><span style=display:flex><span><span style=color:#a40000>EOF</span>
+</span></span></code></pre></div></li><li><p>Create EC2 Instance Role</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span>aws iam create-role <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --role-name polaris-ec2-role <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --assume-role-policy-document file:///path/to/ec2-trust-policy.json <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --description <span style=color:#4e9a06>"IAM Role for EC2 instance running Polaris service"</span>
+</span></span></code></pre></div></li><li><p>Attach S3 access permission policy</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span><span style=color:#8f5902;font-style:italic># Attach the AmazonS3FullAccess managed policy</span>
+</span></span><span style=display:flex><span>aws iam attach-role-policy <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --role-name polaris-ec2-role <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --policy-arn arn:aws:iam::aws:policy/AmazonS3FullAccess
+</span></span></code></pre></div></li><li><p>Create an instance configuration file</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span><span style=color:#8f5902;font-style:italic># Create an instance profile</span>
+</span></span><span style=display:flex><span>aws iam create-instance-profile <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --instance-profile-name polaris-ec2-instance-profile
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># Add a role to an instance profile</span>
+</span></span><span style=display:flex><span>aws iam add-role-to-instance-profile <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --instance-profile-name polaris-ec2-instance-profile <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --role-name polaris-ec2-role
+</span></span></code></pre></div></li><li><p>Attach the instance profile to the EC2 instance</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span><span style=color:#8f5902;font-style:italic># If it is a newly created EC2 instance, specify it at startup</span>
+</span></span><span style=display:flex><span>aws ec2 run-instances <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --image-id ami-xxxxxxxxx <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --instance-type t3.medium <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --iam-instance-profile <span style=color:#000>Name</span><span style=color:#ce5c00;font-weight:700>=</span>polaris-ec2-instance-profile <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --other-parameters...
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># If it is an existing EC2 instance, you need to associate the instance profile</span>
+</span></span><span style=display:flex><span>aws ec2 associate-iam-instance-profile <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --instance-id i-xxxxxxxxx <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --iam-instance-profile <span style=color:#000>Name</span><span style=color:#ce5c00;font-weight:700>=</span>polaris-ec2-instance-profile
+</span></span></code></pre></div></li></ol><h3 id=2-polaris-deployment-and-catalog-creation id=2-polaris-deployment-and-catalog-creation>2. Polaris Deployment and Catalog Creation<a class=heading-anchor href=#2-polaris-deployment-and-catalog-creation aria-label=Anchor>🔗</a></h3><p>With the environment ready, we’ll now deploy the Polaris service and configure the Iceberg Catalog.</p><blockquote><p>This document uses the source code quick start method. For more deployment methods, pl [...]
+</span></span><span style=display:flex><span><span style=color:#204a87>export</span> <span style=color:#000>AWS_SECRET_ACCESS_KEY</span><span style=color:#ce5c00;font-weight:700>=</span>YOUR_AWS_SECRET_ACCESS_KEY
+</span></span></code></pre></div></li><li><p>Clone Polaris Repository and Switch to Specific Version</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span>git clone https://github.com/apache/polaris.git
+</span></span><span style=display:flex><span><span style=color:#204a87>cd</span> polaris
+</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># Recommend using a released stable version</span>
+</span></span><span style=display:flex><span>git checkout apache-polaris-1.0.1-incubating
+</span></span></code></pre></div></li><li><p>Run Polaris</p><p>Ensure you have Java 21+ and Docker 27+ installed.</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span>./gradlew run -Dpolaris.bootstrap.credentials<span style=color:#ce5c00;font-weight:700>=</span>POLARIS,root,secret
+</span></span></code></pre></div><ul><li><p><code>POLARIS</code> is the realm</p></li><li><p><code>root</code> is the <code>CLIENT_ID</code></p></li><li><p><code>secret</code> is the <code>CLIENT_SECRET</code></p></li><li><p>If credentials are not set, it will use preset credentials <code>POLARIS,root,s3cr3t</code></p></li></ul><p>This command will compile and start the Polaris service, which listens on port 8181 by default.</p><blockquote><p>You can also use binary distribution, see: <a [...]
+</span></span><span style=display:flex><span><span style=color:#204a87>export</span> <span style=color:#000>CLIENT_SECRET</span><span style=color:#ce5c00;font-weight:700>=</span>secret
+</span></span></code></pre></div></li><li><p>Create Catalog (Pointing to S3 Storage)</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span>./polaris catalogs create <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --storage-type s3 <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --default-base-location s3://polaris-doris-test/polaris1 <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --role-arn arn:aws:iam::<account_id>:role/polaris-doris-demo <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --external-id polaris-doris-demo <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> doris_catalog
+</span></span></code></pre></div><ul><li><p><code>--storage-type</code>: Specifies the underlying storage as S3.</p></li><li><p><code>--default-base-location</code>: Default root path for Iceberg table data.</p></li><li><p><code>--role-arn</code>: IAM Role that Polaris service uses to assume for S3 access.</p></li><li><p><code>--external-id</code>: External ID used when assuming the role, must match the configuration in the IAM Role trust policy.</p></li></ul></li><li><p>Create Namespace [...]
+</span></span></code></pre></div><p>This creates a namespace (database) named <code>doris_demo</code> under <code>doris_catalog</code>.</p></li></ol><h4 id=23-polaris-security-roles-and-permission-configuration id=23-polaris-security-roles-and-permission-configuration>2.3 Polaris Security Roles and Permission Configuration<a class=heading-anchor href=#23-polaris-security-roles-and-permission-configuration aria-label=Anchor>🔗</a></h4><p>To allow Doris to access as a <code>non-root</code> [...]
+</span></span><span style=display:flex><span>./polaris principal-roles create doris_pr_role
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># Create a Catalog Role under doris_catalog</span>
+</span></span><span style=display:flex><span>./polaris catalog-roles create --catalog doris_catalog doris_catalog_role
+</span></span></code></pre></div></li><li><p>Grant Permissions to Catalog Role</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span><span style=color:#8f5902;font-style:italic># Grant doris_catalog_role permission to manage content within the Catalog</span>
+</span></span><span style=display:flex><span>./polaris privileges catalog grant <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --catalog doris_catalog <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --catalog-role doris_catalog_role <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> CATALOG_MANAGE_CONTENT
+</span></span></code></pre></div></li><li><p>Associate Principal Role and Catalog Role</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span><span style=color:#8f5902;font-style:italic># Assign doris_catalog_role to doris_pr_role</span>
+</span></span><span style=display:flex><span>./polaris catalog-roles grant <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --catalog doris_catalog <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --principal-role doris_pr_role <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> doris_catalog_role
+</span></span></code></pre></div></li><li><p>Create New Principal (User) and Bind Role</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span><span style=color:#8f5902;font-style:italic># Create a new user (Principal) named doris_user</span>
+</span></span><span style=display:flex><span>./polaris principals create doris_user
+</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># Example output: {"clientId": "6e155b128dc06c13", "clientSecret": "ce9fbb4cc91c43ff2955f2c6545239d7"}</span>
+</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># Please note down this new client_id and client_secret pair, as Doris will use them for connection.</span>
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># Bind doris_user to doris_pr_role</span>
+</span></span><span style=display:flex><span>./polaris principal-roles grant <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> doris_pr_role <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --principal doris_user
+</span></span></code></pre></div><p>With this, all Polaris-side configuration is complete. We’ve created a user named <code>doris_user</code> that obtains permission to manage <code>doris_catalog</code> through <code>doris_pr_role</code>.</p></li></ol><h3 id=3-doris-polaris-integration id=3-doris-polaris-integration>3. Doris-Polaris Integration<a class=heading-anchor href=#3-doris-polaris-integration aria-label=Anchor>🔗</a></h3><p>Now, we’ll create an Iceberg Catalog in Doris [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'type'</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'iceberg'</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#8f5902;font-style:italic>-- Catalog name in Polaris
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'warehouse'</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'doris_catalog'</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'iceberg.catalog.type'</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'rest'</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#8f5902;font-style:italic>-- Polaris service address
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'iceberg.rest.uri'</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'http://YOUR_POLARIS_HOST:8181/api/catalog'</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#8f5902;font-style:italic>-- Metadata authentication method
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'iceberg.rest.security.type'</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'oauth2'</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#8f5902;font-style:italic>-- Replace with doris_user's client_id:client_secret
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'iceberg.rest.oauth2.credential'</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'client_id:client_secret'</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'iceberg.rest.oauth2.server-uri'</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'http://YOUR_POLARIS_HOST:8181/api/catalog/v1/oauth/tokens'</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'iceberg.rest.oauth2.scope'</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'PRINCIPAL_ROLE:doris_pr_role'</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#8f5902;font-style:italic>-- Enable credential vending
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'iceberg.rest.vended-credentials-enabled'</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'true'</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#8f5902;font-style:italic>-- S3 basic configuration (no keys required)
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'s3.endpoint'</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'https://s3.us-west-2.amazonaws.com'</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'s3.region'</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'us-west-2'</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#000;font-weight:700>);</span><span style=color:#f8f8f8>
+</span></span></span></code></pre></div><h4 id=method-2-oauth2--static-storage-credentials-aksk id=method-2-oauth2--static-storage-credentials-aksk>Method 2: OAuth2 + Static Storage Credentials (AK/SK)<a class=heading-anchor href=#method-2-oauth2--static-storage-credentials-aksk aria-label=Anchor>🔗</a></h4><p>In this approach, Doris still uses OAuth2 to access Polaris metadata, but when accessing S3 data, it uses static AK/SK hardcoded in the Doris Catalog configuration. This method is s [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'type'</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'iceberg'</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'warehouse'</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'doris_catalog'</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'iceberg.catalog.type'</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'rest'</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'iceberg.rest.uri'</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'http://YOUR_POLARIS_HOST:8181/api/catalog'</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'iceberg.rest.security.type'</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'oauth2'</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'iceberg.rest.oauth2.credential'</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'client_id:client_secret'</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'iceberg.rest.oauth2.server-uri'</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'http://YOUR_POLARIS_HOST:8181/api/catalog/v1/oauth/tokens'</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'iceberg.rest.oauth2.scope'</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'PRINCIPAL_ROLE:doris_pr_role'</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#8f5902;font-style:italic>-- Directly provide S3 access keys
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'s3.access_key'</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'YOUR_S3_ACCESS_KEY'</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'s3.secret_key'</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'YOUR_S3_SECRET_KEY'</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'s3.endpoint'</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'https://s3.us-west-2.amazonaws.com'</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'s3.region'</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'us-west-2'</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#000;font-weight:700>);</span><span style=color:#f8f8f8>
+</span></span></span></code></pre></div><h3 id=4-managing-iceberg-table-in-doris-with-polaris id=4-managing-iceberg-table-in-doris-with-polaris>4. Managing Iceberg Table in Doris with Polaris<a class=heading-anchor href=#4-managing-iceberg-table-in-doris-with-polaris aria-label=Anchor>🔗</a></h3><p>Regardless of which method you use to create the Catalog, you can manage the Iceberg table with following SQL statements.</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8; [...]
+</span></span></span><span style=display:flex><span><span style=color:#000>USE</span><span style=color:#f8f8f8> </span><span style=color:#000>polaris_vended</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>doris_demo</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic>-- Create an Iceberg table
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>CREATE</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>TABLE</span><span style=color:#f8f8f8> </span><span style=color:#000>my_iceberg_table</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>(</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#000>id</span><span style=color:#f8f8f8> </span><span style=color:#204a87>INT</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#000>name</span><span style=color:#f8f8f8> </span><span style=color:#000>STRING</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#000;font-weight:700>)</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#000>PROPERTIES</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>(</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'write-format'</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>'parquet'</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#000;font-weight:700>);</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic>-- Insert data
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>INSERT</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>INTO</span><span style=color:#f8f8f8> </span><span style=color:#000>my_iceberg_table</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>VALUES</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>(</span><span style=color:#0000cf;font-weight:700>1</spa [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic>-- Query data
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>SELECT</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>*</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>FROM</span><span style=color:#f8f8f8> </span><span style=color:#000>my_iceberg_table</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic>-- Expected result:
+</span></span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic>-- +------+---------+
+</span></span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic>-- | id | name |
+</span></span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic>-- +------+---------+
+</span></span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic>-- | 1 | Doris |
+</span></span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic>-- | 2 | Polaris |
+</span></span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic>-- +------+---------+
</span></span></span></code></pre></div><p>If all the above operations succeed, congratulations! You have successfully established the complete data lake pipeline from Doris -> Polaris -> Iceberg on S3.</p><p>For more information about managing Iceberg table with Doris, please visit:</p><p><a href=https://doris.apache.org/docs/lakehouse/catalogs/iceberg-catalog>https://doris.apache.org/docs/lakehouse/catalogs/iceberg-catalog</a></p><ul class="list-unstyled d-flex justify-content-between [...]
\ No newline at end of file
diff --git a/blog/2025/09/19/apache-polaris-1.1.0-incubating-has-been-released/index.html b/blog/2025/09/19/apache-polaris-1.1.0-incubating-has-been-released/index.html
index 8f119b5ebb..bf956cc2da 100644
--- a/blog/2025/09/19/apache-polaris-1.1.0-incubating-has-been-released/index.html
+++ b/blog/2025/09/19/apache-polaris-1.1.0-incubating-has-been-released/index.html
@@ -6,7 +6,7 @@ New features & enhancements ** HMS support ** IMPLICIT authentication type ** Su
This release includes:
New features & enhancements ** HMS support ** IMPLICIT authentication type ** Support for non-AWS S3 compatible storage with STS: MinIO, s3a scheme support ** Use of Realm instead of RealmId ** Modularized Federation Architecture ** Federated Catalog Support in Polaris CLI ** Expanded External Identity Provider support ** Python package (official) ** Documentation improvements (release process, multi-realms configuration) Bug fixes ** Fix drop view with default server configuration ** Fi [...]
This release includes:
-New features & enhancements ** HMS support ** IMPLICIT authentication type ** Support for non-AWS S3 compatible storage with STS: MinIO, s3a scheme support ** Use of Realm instead of RealmId ** Modularized Federation Architecture ** Federated Catalog Support in Polaris CLI ** Expanded External Identity Provider support ** Python package (official) ** Documentation improvements (release process, multi-realms configuration) Bug fixes ** Fix drop view with default server configuration ** Fi [...]
+New features & enhancements ** HMS support ** IMPLICIT authentication type ** Support for non-AWS S3 compatible storage with STS: MinIO, s3a scheme support ** Use of Realm instead of RealmId ** Modularized Federation Architecture ** Federated Catalog Support in Polaris CLI ** Expanded External Identity Provider support ** Python package (official) ** Documentation improvements (release process, multi-realms configuration) Bug fixes ** Fix drop view with default server configuration ** Fi [...]
<label for=m-blog20260404build-a-local-open-data-lakehouse-with-k3d-apache-ozone-apache-polaris-and-trino-check><a href=/blog/2026/04/04/build-a-local-open-data-lakehouse-with-k3d-apache-ozone-apache-polaris-and-trino/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-blog20260404build-a-local-open-data-lakehouse-with-k3d-apache-ozone-apache-polaris-and-trino><span>Build a Local Open Data Lakehouse with k3d, Apache Ozone, Apache Polaris and Trino</span></a></label></li>< [...]
<label for=m-blog20260329introducing-the-setup-command-in-apache-polaris-check><a href=/blog/2026/03/29/introducing-the-setup-command-in-apache-polaris/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-blog20260329introducing-the-setup-command-in-apache-polaris><span>Introducing the setup Command in Apache Polaris</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-blog20260219apache-polaris-graduates-to-top-level- [...]
<label for=m-blog20260219apache-polaris-graduates-to-top-level-project-check><a href=/blog/2026/02/19/apache-polaris-graduates-to-top-level-project/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-blog20260219apache-polaris-graduates-to-top-level-project><span>Apache Polaris Graduates to Top Level Project!</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-blog20260204floe-and-apache-polaris-policy-driven-table-m [...]
diff --git a/blog/2025/10/02/integrating-apache-polaris-with-puppygraph-for-real-time-graph-analysis/index.html b/blog/2025/10/02/integrating-apache-polaris-with-puppygraph-for-real-time-graph-analysis/index.html
index a255a148b7..6fd6a59e84 100644
--- a/blog/2025/10/02/integrating-apache-polaris-with-puppygraph-for-real-time-graph-analysis/index.html
+++ b/blog/2025/10/02/integrating-apache-polaris-with-puppygraph-for-real-time-graph-analysis/index.html
@@ -1,4 +1,4 @@
-<!doctype html><html itemscope itemtype=http://schema.org/WebPage lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon.png sizes=100x100><link rel=icon type=image/png href=/favicons/android-ch [...]
+<!doctype html><html itemscope itemtype=http://schema.org/WebPage lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon.png sizes=100x100><link rel=icon type=image/png href=/favicons/android-ch [...]
<label for=m-blog20260404build-a-local-open-data-lakehouse-with-k3d-apache-ozone-apache-polaris-and-trino-check><a href=/blog/2026/04/04/build-a-local-open-data-lakehouse-with-k3d-apache-ozone-apache-polaris-and-trino/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-blog20260404build-a-local-open-data-lakehouse-with-k3d-apache-ozone-apache-polaris-and-trino><span>Build a Local Open Data Lakehouse with k3d, Apache Ozone, Apache Polaris and Trino</span></a></label></li>< [...]
<label for=m-blog20260329introducing-the-setup-command-in-apache-polaris-check><a href=/blog/2026/03/29/introducing-the-setup-command-in-apache-polaris/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-blog20260329introducing-the-setup-command-in-apache-polaris><span>Introducing the setup Command in Apache Polaris</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-blog20260219apache-polaris-graduates-to-top-level- [...]
<label for=m-blog20260219apache-polaris-graduates-to-top-level-project-check><a href=/blog/2026/02/19/apache-polaris-graduates-to-top-level-project/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-blog20260219apache-polaris-graduates-to-top-level-project><span>Apache Polaris Graduates to Top Level Project!</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-blog20260204floe-and-apache-polaris-policy-driven-table-m [...]
@@ -11,206 +11,206 @@
<label for=m-blog20250919apache-polaris-110-incubating-has-been-released-check><a href=/blog/2025/09/19/apache-polaris-1.1.0-incubating-has-been-released/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-blog20250919apache-polaris-110-incubating-has-been-released><span>Apache Polaris 1.1.0-incubating has been released!</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-blog20250915doris-x-polaris-building-unified- [...]
<label for=m-blog20250915doris-x-polaris-building-unified-data-lakehouse-with-iceberg-rest-catalog-a-practical-guide-check><a href=/blog/2025/09/15/doris-x-polaris-building-unified-data-lakehouse-with-iceberg-rest-catalog-a-practical-guide/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-blog20250915doris-x-polaris-building-unified-data-lakehouse-with-iceberg-rest-catalog-a-practical-guide><span>Doris X Polaris: Building Unified Data Lakehouse with Iceberg REST Catalog [...]
<label for=m-blog20250820apache-polaris-101-incubating-has-been-released-check><a href=/blog/2025/08/20/apache-polaris-1.0.1-incubating-has-been-released/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-blog20250820apache-polaris-101-incubating-has-been-released><span>Apache Polaris 1.0.1-incubating has been released!</span></a></label></li></ul></li></ul></nav></div></aside><main class="col-12 col-md-9 col-xl-10 ps-md-5 pe-md-4" role=main><a class=td-rss-button title= [...]
-<time datetime=2025-10-02 class=text-body-secondary>Thursday, October 02, 2025</time></div><header class=article-meta></header><p>Unified data governance has become a hot topic over the last few years. As AI and other data-hungry use cases infiltrate the market, the need for a comprehensive data catalog solution with governance in mind has become critical. <a href=https://github.com/apache/polaris>Apache Polaris</a> has found its calling as an open-source solution, specifically built to [...]
-</span></span></code></pre></div><p>Build and run an Apache Polaris server. Note that JDK 21 is required to build and run the Apache Polaris.</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span><span s [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span>./gradlew run
-</span></span></code></pre></div><p>Then use the provided spark shell to create a data catalog and prepare data. Start a different shell and run the following command in the polaris directory:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em; [...]
-</span></span></code></pre></div><p>The command will download Spark and start a Spark SQL shell. Run the following command to generate a new database and several tables in this newly created catalog.</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-sql data-lang=sql><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4 [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span><span style=color:#204a87;font-weight:700>CREATE</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>TABLE</span><span style=color:#f8f8f8> </span><span style=color:#000>modern</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>person</span><span style=colo [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span><span style=color:#204a87;font-weight:700>INSERT</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>INTO</span><span style=color:#f8f8f8> </span><span style=color:#000>modern</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>person</span><span style=color [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>'v1'</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'marko'</span><span style=color:#000;font- [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>'v2'</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'vadas'</span><span style=color:#000;font- [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>'v4'</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'josh'</span><span style=color:#000;font-w [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>'v6'</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'peter'</span><span style=color:#000;font- [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">10</span><span><span style=color:#204a87;font-weight:700>CREATE</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>TABLE</span><span style=color:#f8f8f8> </span><span style=color:#000>modern</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>software</span><span style=co [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">11</span><span><span style=color:#204a87;font-weight:700>INSERT</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>INTO</span><span style=color:#f8f8f8> </span><span style=color:#000>modern</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>software</span><span style=col [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">12</span><span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>'v3'</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'lop'</span><span style=color:#000;font- [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">13</span><span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>'v5'</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'ripple'</span><span style=color:#000;fo [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">14</span><span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">15</span><span><span style=color:#204a87;font-weight:700>CREATE</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>TABLE</span><span style=color:#f8f8f8> </span><span style=color:#000>modern</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>created</span><span style=col [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">16</span><span><span style=color:#204a87;font-weight:700>INSERT</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>INTO</span><span style=color:#f8f8f8> </span><span style=color:#000>modern</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>created</span><span style=colo [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">17</span><span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>'e9'</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'v1'</span><span style=color:#000;font-we [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">18</span><span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>'e10'</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'v4'</span><span style=color:#000;font-w [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">19</span><span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>'e11'</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'v4'</span><span style=color:#000;font-w [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">20</span><span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>'e12'</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'v6'</span><span style=color:#000;font-w [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">21</span><span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">22</span><span><span style=color:#204a87;font-weight:700>CREATE</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>TABLE</span><span style=color:#f8f8f8> </span><span style=color:#000>modern</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>knows</span><span style=color [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">23</span><span><span style=color:#204a87;font-weight:700>INSERT</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>INTO</span><span style=color:#f8f8f8> </span><span style=color:#000>modern</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>knows</span><span style=color: [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">24</span><span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>'e7'</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'v1'</span><span style=color:#000;font-weig [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">25</span><span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>'e8'</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'v1'</span><span style=color:#000;font-weig [...]
-</span></span></span></code></pre></div><h3 id=deploy-puppygraph id=deploy-puppygraph>Deploy PuppyGraph<a class=heading-anchor href=#deploy-puppygraph aria-label=Anchor>🔗</a></h3><p>Then you’ll need to deploy PuppyGraph. Luckily, this is easy and can currently be done through Docker (see <a href=https://docs.puppygraph.com/getting-started>Docs</a>) or an <a href=https://aws.amazon.com/marketplace/pp/prodview-dgmn5jnwnfacu>AWS AMI</a> through AWS Marketplace. The AMI approach requires a f [...]
-</span></span></code></pre></div><p>This will spin up a PuppyGraph instance on your local machine (or on a cloud or bare metal server if that’s where you want to deploy it). Next, you can go to <strong>localhost:8081</strong> or the URL on which you launched the instance. This will show you the PuppyGraph login screen:</p><p><img src=/img/blog/2025/10/02/fig4-puppygraph-login-page.png alt></p><p>After logging in with the default credentials (username: “<code>puppygraph”</code> and [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span> <span style=color:#204a87;font-weight:700>"catalogs"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span> <span style=color:#000;font-weight:700>{</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span> <span style=color:#204a87;font-weight:700>"name"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"test"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span> <span style=color:#204a87;font-weight:700>"type"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"iceberg"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span> <span style=color:#204a87;font-weight:700>"metastore"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span> <span style=color:#204a87;font-weight:700>"type"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"rest"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span> <span style=color:#204a87;font-weight:700>"uri"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"http://172.17.0.1:8181/api/catalog"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span> <span style=color:#204a87;font-weight:700>"warehouse"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"manual_spark"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 10</span><span> <span style=color:#204a87;font-weight:700>"credential"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"root:s3cr3t"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 11</span><span> <span style=color:#204a87;font-weight:700>"scope"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"PRINCIPAL_ROLE:ALL"</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 12</span><span> <span style=color:#000;font-weight:700>}</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 13</span><span> <span style=color:#000;font-weight:700>}</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 14</span><span> <span style=color:#000;font-weight:700>],</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 15</span><span> <span style=color:#204a87;font-weight:700>"graph"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 16</span><span> <span style=color:#204a87;font-weight:700>"vertices"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 17</span><span> <span style=color:#000;font-weight:700>{</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 18</span><span> <span style=color:#204a87;font-weight:700>"label"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"person"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 19</span><span> <span style=color:#204a87;font-weight:700>"oneToOne"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 20</span><span> <span style=color:#204a87;font-weight:700>"tableSource"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 21</span><span> <span style=color:#204a87;font-weight:700>"catalog"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"test"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 22</span><span> <span style=color:#204a87;font-weight:700>"schema"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"modern"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 23</span><span> <span style=color:#204a87;font-weight:700>"table"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"person"</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 24</span><span> <span style=color:#000;font-weight:700>},</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 25</span><span> <span style=color:#204a87;font-weight:700>"id"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 26</span><span> <span style=color:#204a87;font-weight:700>"fields"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 27</span><span> <span style=color:#000;font-weight:700>{</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 28</span><span> <span style=color:#204a87;font-weight:700>"type"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"String"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 29</span><span> <span style=color:#204a87;font-weight:700>"field"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"id"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 30</span><span> <span style=color:#204a87;font-weight:700>"alias"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"id"</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 31</span><span> <span style=color:#000;font-weight:700>}</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 32</span><span> <span style=color:#000;font-weight:700>]</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 33</span><span> <span style=color:#000;font-weight:700>},</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 34</span><span> <span style=color:#204a87;font-weight:700>"attributes"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 35</span><span> <span style=color:#000;font-weight:700>{</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 36</span><span> <span style=color:#204a87;font-weight:700>"type"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"String"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 37</span><span> <span style=color:#204a87;font-weight:700>"field"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"name"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 38</span><span> <span style=color:#204a87;font-weight:700>"alias"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"name"</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 39</span><span> <span style=color:#000;font-weight:700>},</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 40</span><span> <span style=color:#000;font-weight:700>{</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 41</span><span> <span style=color:#204a87;font-weight:700>"type"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"Int"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 42</span><span> <span style=color:#204a87;font-weight:700>"field"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"age"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 43</span><span> <span style=color:#204a87;font-weight:700>"alias"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"age"</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 44</span><span> <span style=color:#000;font-weight:700>}</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 45</span><span> <span style=color:#000;font-weight:700>]</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 46</span><span> <span style=color:#000;font-weight:700>}</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 47</span><span> <span style=color:#000;font-weight:700>},</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 48</span><span> <span style=color:#000;font-weight:700>{</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 49</span><span> <span style=color:#204a87;font-weight:700>"label"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"software"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 50</span><span> <span style=color:#204a87;font-weight:700>"oneToOne"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 51</span><span> <span style=color:#204a87;font-weight:700>"tableSource"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 52</span><span> <span style=color:#204a87;font-weight:700>"catalog"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"test"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 53</span><span> <span style=color:#204a87;font-weight:700>"schema"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"modern"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 54</span><span> <span style=color:#204a87;font-weight:700>"table"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"software"</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 55</span><span> <span style=color:#000;font-weight:700>},</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 56</span><span> <span style=color:#204a87;font-weight:700>"id"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 57</span><span> <span style=color:#204a87;font-weight:700>"fields"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 58</span><span> <span style=color:#000;font-weight:700>{</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 59</span><span> <span style=color:#204a87;font-weight:700>"type"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"String"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 60</span><span> <span style=color:#204a87;font-weight:700>"field"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"id"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 61</span><span> <span style=color:#204a87;font-weight:700>"alias"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"id"</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 62</span><span> <span style=color:#000;font-weight:700>}</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 63</span><span> <span style=color:#000;font-weight:700>]</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 64</span><span> <span style=color:#000;font-weight:700>},</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 65</span><span> <span style=color:#204a87;font-weight:700>"attributes"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 66</span><span> <span style=color:#000;font-weight:700>{</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 67</span><span> <span style=color:#204a87;font-weight:700>"type"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"String"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 68</span><span> <span style=color:#204a87;font-weight:700>"field"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"name"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 69</span><span> <span style=color:#204a87;font-weight:700>"alias"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"name"</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 70</span><span> <span style=color:#000;font-weight:700>},</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 71</span><span> <span style=color:#000;font-weight:700>{</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 72</span><span> <span style=color:#204a87;font-weight:700>"type"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"String"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 73</span><span> <span style=color:#204a87;font-weight:700>"field"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"lang"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 74</span><span> <span style=color:#204a87;font-weight:700>"alias"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"lang"</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 75</span><span> <span style=color:#000;font-weight:700>}</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 76</span><span> <span style=color:#000;font-weight:700>]</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 77</span><span> <span style=color:#000;font-weight:700>}</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 78</span><span> <span style=color:#000;font-weight:700>}</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 79</span><span> <span style=color:#000;font-weight:700>],</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 80</span><span> <span style=color:#204a87;font-weight:700>"edges"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 81</span><span> <span style=color:#000;font-weight:700>{</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 82</span><span> <span style=color:#204a87;font-weight:700>"label"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"created"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 83</span><span> <span style=color:#204a87;font-weight:700>"fromVertex"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"person"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 84</span><span> <span style=color:#204a87;font-weight:700>"toVertex"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"software"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 85</span><span> <span style=color:#204a87;font-weight:700>"tableSource"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 86</span><span> <span style=color:#204a87;font-weight:700>"catalog"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"test"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 87</span><span> <span style=color:#204a87;font-weight:700>"schema"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"modern"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 88</span><span> <span style=color:#204a87;font-weight:700>"table"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"created"</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 89</span><span> <span style=color:#000;font-weight:700>},</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 90</span><span> <span style=color:#204a87;font-weight:700>"id"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 91</span><span> <span style=color:#204a87;font-weight:700>"fields"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 92</span><span> <span style=color:#000;font-weight:700>{</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 93</span><span> <span style=color:#204a87;font-weight:700>"type"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"String"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 94</span><span> <span style=color:#204a87;font-weight:700>"field"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"id"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 95</span><span> <span style=color:#204a87;font-weight:700>"alias"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"id"</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 96</span><span> <span style=color:#000;font-weight:700>}</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 97</span><span> <span style=color:#000;font-weight:700>]</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 98</span><span> <span style=color:#000;font-weight:700>},</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 99</span><span> <span style=color:#204a87;font-weight:700>"fromId"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">100</span><span> <span style=color:#204a87;font-weight:700>"fields"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">101</span><span> <span style=color:#000;font-weight:700>{</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">102</span><span> <span style=color:#204a87;font-weight:700>"type"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"String"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">103</span><span> <span style=color:#204a87;font-weight:700>"field"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"from_id"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">104</span><span> <span style=color:#204a87;font-weight:700>"alias"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"from_id"</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">105</span><span> <span style=color:#000;font-weight:700>}</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">106</span><span> <span style=color:#000;font-weight:700>]</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">107</span><span> <span style=color:#000;font-weight:700>},</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">108</span><span> <span style=color:#204a87;font-weight:700>"toId"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">109</span><span> <span style=color:#204a87;font-weight:700>"fields"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">110</span><span> <span style=color:#000;font-weight:700>{</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">111</span><span> <span style=color:#204a87;font-weight:700>"type"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"String"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">112</span><span> <span style=color:#204a87;font-weight:700>"field"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"to_id"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">113</span><span> <span style=color:#204a87;font-weight:700>"alias"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"to_id"</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">114</span><span> <span style=color:#000;font-weight:700>}</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">115</span><span> <span style=color:#000;font-weight:700>]</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">116</span><span> <span style=color:#000;font-weight:700>},</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">117</span><span> <span style=color:#204a87;font-weight:700>"attributes"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">118</span><span> <span style=color:#000;font-weight:700>{</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">119</span><span> <span style=color:#204a87;font-weight:700>"type"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"Double"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">120</span><span> <span style=color:#204a87;font-weight:700>"field"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"weight"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">121</span><span> <span style=color:#204a87;font-weight:700>"alias"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"weight"</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">122</span><span> <span style=color:#000;font-weight:700>}</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">123</span><span> <span style=color:#000;font-weight:700>]</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">124</span><span> <span style=color:#000;font-weight:700>},</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">125</span><span> <span style=color:#000;font-weight:700>{</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">126</span><span> <span style=color:#204a87;font-weight:700>"label"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"knows"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">127</span><span> <span style=color:#204a87;font-weight:700>"fromVertex"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"person"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">128</span><span> <span style=color:#204a87;font-weight:700>"toVertex"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"person"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">129</span><span> <span style=color:#204a87;font-weight:700>"tableSource"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">130</span><span> <span style=color:#204a87;font-weight:700>"catalog"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"test"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">131</span><span> <span style=color:#204a87;font-weight:700>"schema"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"modern"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">132</span><span> <span style=color:#204a87;font-weight:700>"table"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"knows"</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">133</span><span> <span style=color:#000;font-weight:700>},</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">134</span><span> <span style=color:#204a87;font-weight:700>"id"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">135</span><span> <span style=color:#204a87;font-weight:700>"fields"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">136</span><span> <span style=color:#000;font-weight:700>{</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">137</span><span> <span style=color:#204a87;font-weight:700>"type"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"String"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">138</span><span> <span style=color:#204a87;font-weight:700>"field"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"id"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">139</span><span> <span style=color:#204a87;font-weight:700>"alias"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"id"</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">140</span><span> <span style=color:#000;font-weight:700>}</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">141</span><span> <span style=color:#000;font-weight:700>]</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">142</span><span> <span style=color:#000;font-weight:700>},</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">143</span><span> <span style=color:#204a87;font-weight:700>"fromId"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">144</span><span> <span style=color:#204a87;font-weight:700>"fields"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">145</span><span> <span style=color:#000;font-weight:700>{</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">146</span><span> <span style=color:#204a87;font-weight:700>"type"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"String"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">147</span><span> <span style=color:#204a87;font-weight:700>"field"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"from_id"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">148</span><span> <span style=color:#204a87;font-weight:700>"alias"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"from_id"</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">149</span><span> <span style=color:#000;font-weight:700>}</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">150</span><span> <span style=color:#000;font-weight:700>]</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">151</span><span> <span style=color:#000;font-weight:700>},</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">152</span><span> <span style=color:#204a87;font-weight:700>"toId"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">153</span><span> <span style=color:#204a87;font-weight:700>"fields"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">154</span><span> <span style=color:#000;font-weight:700>{</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">155</span><span> <span style=color:#204a87;font-weight:700>"type"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"String"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">156</span><span> <span style=color:#204a87;font-weight:700>"field"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"to_id"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">157</span><span> <span style=color:#204a87;font-weight:700>"alias"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"to_id"</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">158</span><span> <span style=color:#000;font-weight:700>}</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">159</span><span> <span style=color:#000;font-weight:700>]</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">160</span><span> <span style=color:#000;font-weight:700>},</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">161</span><span> <span style=color:#204a87;font-weight:700>"attributes"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">162</span><span> <span style=color:#000;font-weight:700>{</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">163</span><span> <span style=color:#204a87;font-weight:700>"type"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"Double"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">164</span><span> <span style=color:#204a87;font-weight:700>"field"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"weight"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">165</span><span> <span style=color:#204a87;font-weight:700>"alias"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"weight"</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">166</span><span> <span style=color:#000;font-weight:700>}</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">167</span><span> <span style=color:#000;font-weight:700>]</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">168</span><span> <span style=color:#000;font-weight:700>}</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">169</span><span> <span style=color:#000;font-weight:700>]</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">170</span><span> <span style=color:#000;font-weight:700>}</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">171</span><span><span style=color:#000;font-weight:700>}</span>
+<time datetime=2025-10-02 class=text-body-secondary>Thursday, October 02, 2025</time></div><header class=article-meta></header><p>Unified data governance has become a hot topic over the last few years. As AI and other data-hungry use cases infiltrate the market, the need for a comprehensive data catalog solution with governance in mind has become critical. <a href=https://github.com/apache/polaris>Apache Polaris</a> has found its calling as an open-source solution, specifically built to [...]
+</span></span></code></pre></div><p>Build and run an Apache Polaris server. Note that JDK 21 is required to build and run the Apache Polaris.</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span><span style=color:#204a87>cd</span> polaris
+</span></span><span style=display:flex><span>./gradlew run
+</span></span></code></pre></div><p>Then use the provided spark shell to create a data catalog and prepare data. Start a different shell and run the following command in the polaris directory:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span>./regtests/run_spark_sql.sh
+</span></span></code></pre></div><p>The command will download Spark and start a Spark SQL shell. Run the following command to generate a new database and several tables in this newly created catalog.</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-sql data-lang=sql><span style=display:flex><span><span style=color:#204a87;font-weight:700>CREATE</span><span style=color:#f8f8f8 [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>CREATE</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>TABLE</span><span style=color:#f8f8f8> </span><span style=color:#000>modern</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>person</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>(</span><span style=color:#000>id</span><span style=color:#f8f8f8> </sp [...]
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>INSERT</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>INTO</span><span style=color:#f8f8f8> </span><span style=color:#000>modern</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>person</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>VALUES</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>'v1'</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'marko'</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8> </span><span style=color:#0000cf;font-weight:700>29</span><span style=color:#000;f [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>'v2'</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'vadas'</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8> </span><span style=color:#0000cf;font-weight:700>27</span><span style=color:#000;f [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>'v4'</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'josh'</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8> </span><span style=color:#0000cf;font-weight:700>32</span><span style=color:#000;fo [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>'v6'</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'peter'</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8> </span><span style=color:#0000cf;font-weight:700>35</span><span style=color:#000;f [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>CREATE</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>TABLE</span><span style=color:#f8f8f8> </span><span style=color:#000>modern</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>software</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>(</span><span style=color:#000>id</span><span style=color:#f8f8f8> </ [...]
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>INSERT</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>INTO</span><span style=color:#f8f8f8> </span><span style=color:#000>modern</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>software</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>VALUES</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>'v3'</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'lop'</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'java'</span><span style=color:#000;font- [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>'v5'</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'ripple'</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'java'</span><span style=color:#000;fo [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>CREATE</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>TABLE</span><span style=color:#f8f8f8> </span><span style=color:#000>modern</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>created</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>(</span><span style=color:#000>id</span><span style=color:#f8f8f8> </s [...]
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>INSERT</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>INTO</span><span style=color:#f8f8f8> </span><span style=color:#000>modern</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>created</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>VALUES</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>'e9'</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'v1'</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'v3'</span><span style=color:#000;font-weig [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>'e10'</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'v4'</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'v5'</span><span style=color:#000;font-wei [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>'e11'</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'v4'</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'v3'</span><span style=color:#000;font-wei [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>'e12'</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'v6'</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'v3'</span><span style=color:#000;font-wei [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>CREATE</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>TABLE</span><span style=color:#f8f8f8> </span><span style=color:#000>modern</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>knows</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>(</span><span style=color:#000>id</span><span style=color:#f8f8f8> </spa [...]
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>INSERT</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>INTO</span><span style=color:#f8f8f8> </span><span style=color:#000>modern</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>knows</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>VALUES</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>'e7'</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'v1'</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'v2'</span><span style=color:#000;font-weight [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>'e8'</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'v1'</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'v4'</span><span style=color:#000;font-weight [...]
+</span></span></span></code></pre></div><h3 id=deploy-puppygraph id=deploy-puppygraph>Deploy PuppyGraph<a class=heading-anchor href=#deploy-puppygraph aria-label=Anchor>🔗</a></h3><p>Then you’ll need to deploy PuppyGraph. Luckily, this is easy and can currently be done through Docker (see <a href=https://docs.puppygraph.com/getting-started>Docs</a>) or an <a href=https://aws.amazon.com/marketplace/pp/prodview-dgmn5jnwnfacu>AWS AMI</a> through AWS Marketplace. The AMI approach requires a f [...]
+</span></span></code></pre></div><p>This will spin up a PuppyGraph instance on your local machine (or on a cloud or bare metal server if that’s where you want to deploy it). Next, you can go to <strong>localhost:8081</strong> or the URL on which you launched the instance. This will show you the PuppyGraph login screen:</p><p><img src=/img/blog/2025/10/02/fig4-puppygraph-login-page.png alt></p><p>After logging in with the default credentials (username: “<code>puppygraph”</code> and [...]
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"catalogs"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>{</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"name"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"test"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"type"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"iceberg"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"metastore"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"type"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"rest"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"uri"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"http://172.17.0.1:8181/api/catalog"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"warehouse"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"manual_spark"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"credential"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"root:s3cr3t"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"scope"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"PRINCIPAL_ROLE:ALL"</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>}</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>}</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>],</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"graph"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"vertices"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>{</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"label"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"person"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"oneToOne"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"tableSource"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"catalog"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"test"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"schema"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"modern"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"table"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"person"</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>},</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"id"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"fields"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>{</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"type"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"String"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"field"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"id"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"alias"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"id"</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>}</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>]</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>},</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"attributes"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>{</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"type"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"String"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"field"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"name"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"alias"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"name"</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>},</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>{</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"type"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"Int"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"field"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"age"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"alias"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"age"</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>}</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>]</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>}</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>},</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>{</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"label"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"software"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"oneToOne"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"tableSource"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"catalog"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"test"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"schema"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"modern"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"table"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"software"</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>},</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"id"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"fields"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>{</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"type"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"String"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"field"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"id"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"alias"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"id"</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>}</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>]</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>},</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"attributes"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>{</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"type"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"String"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"field"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"name"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"alias"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"name"</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>},</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>{</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"type"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"String"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"field"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"lang"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"alias"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"lang"</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>}</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>]</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>}</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>}</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>],</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"edges"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>{</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"label"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"created"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"fromVertex"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"person"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"toVertex"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"software"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"tableSource"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"catalog"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"test"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"schema"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"modern"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"table"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"created"</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>},</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"id"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"fields"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>{</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"type"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"String"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"field"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"id"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"alias"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"id"</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>}</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>]</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>},</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"fromId"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"fields"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>{</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"type"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"String"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"field"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"from_id"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"alias"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"from_id"</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>}</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>]</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>},</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"toId"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"fields"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>{</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"type"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"String"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"field"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"to_id"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"alias"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"to_id"</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>}</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>]</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>},</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"attributes"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>{</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"type"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"Double"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"field"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"weight"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"alias"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"weight"</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>}</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>]</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>},</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>{</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"label"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"knows"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"fromVertex"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"person"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"toVertex"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"person"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"tableSource"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"catalog"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"test"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"schema"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"modern"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"table"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"knows"</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>},</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"id"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"fields"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>{</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"type"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"String"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"field"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"id"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"alias"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"id"</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>}</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>]</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>},</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"fromId"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"fields"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>{</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"type"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"String"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"field"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"from_id"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"alias"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"from_id"</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>}</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>]</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>},</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"toId"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"fields"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>{</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"type"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"String"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"field"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"to_id"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"alias"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"to_id"</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>}</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>]</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>},</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"attributes"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>{</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"type"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"Double"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"field"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"weight"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"alias"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"weight"</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>}</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>]</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>}</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>]</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>}</span>
+</span></span><span style=display:flex><span><span style=color:#000;font-weight:700>}</span>
</span></span></code></pre></div><p>In the example, you can see the data store details under the <strong>catalogs</strong> section. This is all that is needed to connect to the Apache Polaris instance. Underneath the <strong>catalogs</strong> section, you’ll notice that we have defined the nodes and edges and where the data comes from. This tells PuppyGraph how to map the SQL data into the graph hosted within PuppyGraph. This can then be uploaded to PuppyGraph, and you’ll be ready to que [...]
To create the schema in this way, just save the schema to a JSON file, modify the uri and credential to reflect the actual Polaris uri and credential, and select “Upload Graph Schema JSON” to upload the JSON file. The graph will then be created.</p><p>Alternatively, for those who want a more UI-based approach, PuppyGraph also offers a schema builder that allows users to use a drag-and-drop editor to build their schema. In an example similar to the one above, here is what the UI flow look [...]
\ No newline at end of file
diff --git a/blog/2025/10/21/starrocks-and-apache-polaris-integration-building-a-unified-high-performance-data-lakehouse/index.html b/blog/2025/10/21/starrocks-and-apache-polaris-integration-building-a-unified-high-performance-data-lakehouse/index.html
index 97591c2b2e..6bf8e1a66f 100644
--- a/blog/2025/10/21/starrocks-and-apache-polaris-integration-building-a-unified-high-performance-data-lakehouse/index.html
+++ b/blog/2025/10/21/starrocks-and-apache-polaris-integration-building-a-unified-high-performance-data-lakehouse/index.html
@@ -4,9 +4,9 @@ Engine lock-in : every OLAP engine optimises for its own metadata layer and file
Data silos : transactional data sits in RDBMS, click-streams in an S3 data lake, CRM data in a SaaS vault, etc. Cross-domain analysis requires expensive ETL and still arrives stale.
Engine lock-in : every OLAP engine optimises for its own metadata layer and file layout. Migrating to a faster or cheaper engine means re-formatting, re-writing and re-governing years of data."><meta property="og:locale" content="en_us"><meta property="og:type" content="article"><meta property="article:section" content="blog"><meta property="article:published_time" content="2025-10-21T00:00:00+00:00"><meta property="article:modified_time" content="2025-10-21T00:00:00+00:00"><meta itempro [...]
Data silos : transactional data sits in RDBMS, click-streams in an S3 data lake, CRM data in a SaaS vault, etc. Cross-domain analysis requires expensive ETL and still arrives stale.
-Engine lock-in : every OLAP engine optimises for its own metadata layer and file layout. Migrating to a faster or cheaper engine means re-formatting, re-writing and re-governing years of data."><meta itemprop=datePublished content="2025-10-21T00:00:00+00:00"><meta itemprop=dateModified content="2025-10-21T00:00:00+00:00"><meta itemprop=wordCount content="1327"><meta name=twitter:card content="summary"><meta name=twitter:title content="StarRocks and Apache Polaris Integration: Building a [...]
+Engine lock-in : every OLAP engine optimises for its own metadata layer and file layout. Migrating to a faster or cheaper engine means re-formatting, re-writing and re-governing years of data."><meta itemprop=datePublished content="2025-10-21T00:00:00+00:00"><meta itemprop=dateModified content="2025-10-21T00:00:00+00:00"><meta itemprop=wordCount content="1235"><meta name=twitter:card content="summary"><meta name=twitter:title content="StarRocks and Apache Polaris Integration: Building a [...]
Data silos : transactional data sits in RDBMS, click-streams in an S3 data lake, CRM data in a SaaS vault, etc. Cross-domain analysis requires expensive ETL and still arrives stale.
-Engine lock-in : every OLAP engine optimises for its own metadata layer and file layout. Migrating to a faster or cheaper engine means re-formatting, re-writing and re-governing years of data."><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css r [...]
+Engine lock-in : every OLAP engine optimises for its own metadata layer and file layout. Migrating to a faster or cheaper engine means re-formatting, re-writing and re-governing years of data."><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css r [...]
<label for=m-blog20260404build-a-local-open-data-lakehouse-with-k3d-apache-ozone-apache-polaris-and-trino-check><a href=/blog/2026/04/04/build-a-local-open-data-lakehouse-with-k3d-apache-ozone-apache-polaris-and-trino/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-blog20260404build-a-local-open-data-lakehouse-with-k3d-apache-ozone-apache-polaris-and-trino><span>Build a Local Open Data Lakehouse with k3d, Apache Ozone, Apache Polaris and Trino</span></a></label></li>< [...]
<label for=m-blog20260329introducing-the-setup-command-in-apache-polaris-check><a href=/blog/2026/03/29/introducing-the-setup-command-in-apache-polaris/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-blog20260329introducing-the-setup-command-in-apache-polaris><span>Introducing the setup Command in Apache Polaris</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-blog20260219apache-polaris-graduates-to-top-level- [...]
<label for=m-blog20260219apache-polaris-graduates-to-top-level-project-check><a href=/blog/2026/02/19/apache-polaris-graduates-to-top-level-project/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-blog20260219apache-polaris-graduates-to-top-level-project><span>Apache Polaris Graduates to Top Level Project!</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-blog20260204floe-and-apache-polaris-policy-driven-table-m [...]
@@ -20,151 +20,151 @@ Engine lock-in : every OLAP engine optimises for its own metadata layer and file
<label for=m-blog20250915doris-x-polaris-building-unified-data-lakehouse-with-iceberg-rest-catalog-a-practical-guide-check><a href=/blog/2025/09/15/doris-x-polaris-building-unified-data-lakehouse-with-iceberg-rest-catalog-a-practical-guide/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-blog20250915doris-x-polaris-building-unified-data-lakehouse-with-iceberg-rest-catalog-a-practical-guide><span>Doris X Polaris: Building Unified Data Lakehouse with Iceberg REST Catalog [...]
<label for=m-blog20250820apache-polaris-101-incubating-has-been-released-check><a href=/blog/2025/08/20/apache-polaris-1.0.1-incubating-has-been-released/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-blog20250820apache-polaris-101-incubating-has-been-released><span>Apache Polaris 1.0.1-incubating has been released!</span></a></label></li></ul></li></ul></nav></div></aside><main class="col-12 col-md-9 col-xl-10 ps-md-5 pe-md-4" role=main><a class=td-rss-button title= [...]
<time datetime=2025-10-21 class=text-body-secondary>Tuesday, October 21, 2025</time></div><header class=article-meta></header><h2 id=introduction-why-starrocks--apache-polaris id=introduction-why-starrocks--apache-polaris>Introduction: Why StarRocks + Apache Polaris?<a class=heading-anchor href=#introduction-why-starrocks--apache-polaris aria-label=Anchor>🔗</a></h2><h3 id=modern-data-architecture-pain-points-silos--engine-lock-in id=modern-data-architecture-pain-points-silos--engine-lock [...]
-Here we will compile from source code and deploy Polaris via a standalone process.</p><h3 id=clone-source-code-and-start-polaris id=clone-source-code-and-start-polaris>Clone Source Code and Start Polaris<a class=heading-anchor href=#clone-source-code-and-start-polaris aria-label=Anchor>🔗</a></h3><ol><li>Clone source code and checkout to released version</li></ol><p>User can get the latest released version from <a href=https://github.com/apache/polaris/releases>https://github.com/apache/p [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span>wget https://dlcdn.apache.org/incubator/polaris/1.1.0-incubating/apache-polaris-1.1.0-incubating.tar.gz
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span>tar -xvzf apache-polaris-1.1.0-incubating.tar.gz
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span><span style=color:#204a87>cd</span> apache-polaris-1.1.0-incubating
-</span></span></code></pre></div><ol start=2><li>Build Polaris</li></ol><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span>./gradlew <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> :polaris-server:assemble <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> :polaris-server:quarkusAppPartsBuild --rerun <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> :polaris-admin:assemble <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span> :polaris-admin:quarkusAppPartsBuild --rerun
-</span></span></code></pre></div><ol start=3><li>Run Polaris</li></ol><p>Ensure you have Java 21+, and export aws access key and secret key first.</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span><spa [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#204a87>export</span> <span style=color:#000>AWS_SECRET_ACCESS_KEY</span><span style=color:#ce5c00;font-weight:700>=</span><secret_key>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span>./gradlew run
-</span></span></code></pre></div><p>When Polaris is run using the./gradlew run command, the root principal credentials are <strong>root</strong> and <strong>s3cr3t</strong> for the <strong>CLIENT_ID</strong> and <strong>CLIENT_SECRET</strong>, respectively.</p><p>When using a Gradle-launched Polaris instance, it’ll launch an instance of Polaris that stores entities only <strong>in-memory</strong>. This means that any entities that you define will be destroyed when Polaris is shut down.</ [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#204a87>export</span> <span style=color:#000>QUARKUS_DATASOURCE_USERNAME</span><span style=color:#ce5c00;font-weight:700>=</span><your-username>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span><span style=color:#204a87>export</span> <span style=color:#000>QUARKUS_DATASOURCE_PASSWORD</span><span style=color:#ce5c00;font-weight:700>=</span><your-password>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span><span style=color:#204a87>export</span> <span style=color:#000>QUARKUS_DATASOURCE_JDBC_URL</span><span style=color:#ce5c00;font-weight:700>=</span><jdbc-url-of-postgres>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">6</span><span><span style=color:#204a87>export</span> <span style=color:#000>AWS_ACCESS_KEY_ID</span><span style=color:#ce5c00;font-weight:700>=</span><access_key>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">7</span><span><span style=color:#204a87>export</span> <span style=color:#000>AWS_SECRET_ACCESS_KEY</span><span style=color:#ce5c00;font-weight:700>=</span><secret_key>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">8</span><span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">9</span><span>./gradlew run
-</span></span></code></pre></div><p>Using <strong>Admin Tool</strong> (<a href=https://polaris.apache.org/releases/1.1.0/admin-tool/>https://polaris.apache.org/releases/1.1.0/admin-tool/</a>) to bootstrap realms and create the necessary principal credentials for the Polaris server.</p><p>For example, to bootstrap the POLARIS realm and create its root principal credential with the client ID <strong>root</strong> and client secret <strong>root_secret</strong>, you can run the following com [...]
-</span></span></code></pre></div><h3 id=creating-a-principal-and-assigning-it-privileges id=creating-a-principal-and-assigning-it-privileges>Creating a Principal and Assigning it Privileges<a class=heading-anchor href=#creating-a-principal-and-assigning-it-privileges aria-label=Anchor>🔗</a></h3><p>Use the <strong>Polaris CLI</strong> (already built in the same folder):</p><ol><li>Export CLIENT_ID and CLIENT_SECRET</li></ol><div class=highlight><pre tabindex=0 style=background-color:#f8f8 [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#204a87>export</span> <span style=color:#000>CLIENT_SECRET</span><span style=color:#ce5c00;font-weight:700>=</span>root_secret
-</span></span></code></pre></div><ol start=2><li>Create catalog</li></ol><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span>./polaris
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> --client-id <span style=color:#4e9a06>${</span><span style=color:#000>CLIENT_ID</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> --client-secret <span style=color:#4e9a06>${</span><span style=color:#000>CLIENT_SECRET</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> catalogs create <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span> --storage-type s3 <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">6</span><span> --default-base-location <span style=color:#4e9a06>${</span><span style=color:#000>DEFAULT_BASE_LOCATION</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">7</span><span> --role-arn <span style=color:#4e9a06>${</span><span style=color:#000>ROLE_ARN</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">8</span><span> polaris_catalog
+Here we will compile from source code and deploy Polaris via a standalone process.</p><h3 id=clone-source-code-and-start-polaris id=clone-source-code-and-start-polaris>Clone Source Code and Start Polaris<a class=heading-anchor href=#clone-source-code-and-start-polaris aria-label=Anchor>🔗</a></h3><ol><li>Clone source code and checkout to released version</li></ol><p>User can get the latest released version from <a href=https://github.com/apache/polaris/releases>https://github.com/apache/p [...]
+</span></span><span style=display:flex><span>wget https://dlcdn.apache.org/incubator/polaris/1.1.0-incubating/apache-polaris-1.1.0-incubating.tar.gz
+</span></span><span style=display:flex><span>tar -xvzf apache-polaris-1.1.0-incubating.tar.gz
+</span></span><span style=display:flex><span><span style=color:#204a87>cd</span> apache-polaris-1.1.0-incubating
+</span></span></code></pre></div><ol start=2><li>Build Polaris</li></ol><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span>./gradlew <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> :polaris-server:assemble <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> :polaris-server:quarkusAppPartsBuild --rerun <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> :polaris-admin:assemble <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> :polaris-admin:quarkusAppPartsBuild --rerun
+</span></span></code></pre></div><ol start=3><li>Run Polaris</li></ol><p>Ensure you have Java 21+, and export aws access key and secret key first.</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span><span style=color:#204a87>export</span> <span style=color:#000>AWS_ACCESS_KEY_ID</span><span style=color:#ce5c00;font-weight:700>=< [...]
+</span></span><span style=display:flex><span><span style=color:#204a87>export</span> <span style=color:#000>AWS_SECRET_ACCESS_KEY</span><span style=color:#ce5c00;font-weight:700>=</span><secret_key>
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span>./gradlew run
+</span></span></code></pre></div><p>When Polaris is run using the./gradlew run command, the root principal credentials are <strong>root</strong> and <strong>s3cr3t</strong> for the <strong>CLIENT_ID</strong> and <strong>CLIENT_SECRET</strong>, respectively.</p><p>When using a Gradle-launched Polaris instance, it’ll launch an instance of Polaris that stores entities only <strong>in-memory</strong>. This means that any entities that you define will be destroyed when Polaris is shut down.</ [...]
+</span></span><span style=display:flex><span><span style=color:#204a87>export</span> <span style=color:#000>QUARKUS_DATASOURCE_USERNAME</span><span style=color:#ce5c00;font-weight:700>=</span><your-username>
+</span></span><span style=display:flex><span><span style=color:#204a87>export</span> <span style=color:#000>QUARKUS_DATASOURCE_PASSWORD</span><span style=color:#ce5c00;font-weight:700>=</span><your-password>
+</span></span><span style=display:flex><span><span style=color:#204a87>export</span> <span style=color:#000>QUARKUS_DATASOURCE_JDBC_URL</span><span style=color:#ce5c00;font-weight:700>=</span><jdbc-url-of-postgres>
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span><span style=color:#204a87>export</span> <span style=color:#000>AWS_ACCESS_KEY_ID</span><span style=color:#ce5c00;font-weight:700>=</span><access_key>
+</span></span><span style=display:flex><span><span style=color:#204a87>export</span> <span style=color:#000>AWS_SECRET_ACCESS_KEY</span><span style=color:#ce5c00;font-weight:700>=</span><secret_key>
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span>./gradlew run
+</span></span></code></pre></div><p>Using <strong>Admin Tool</strong> (<a href=https://polaris.apache.org/releases/1.1.0/admin-tool/>https://polaris.apache.org/releases/1.1.0/admin-tool/</a>) to bootstrap realms and create the necessary principal credentials for the Polaris server.</p><p>For example, to bootstrap the POLARIS realm and create its root principal credential with the client ID <strong>root</strong> and client secret <strong>root_secret</strong>, you can run the following com [...]
+</span></span></code></pre></div><h3 id=creating-a-principal-and-assigning-it-privileges id=creating-a-principal-and-assigning-it-privileges>Creating a Principal and Assigning it Privileges<a class=heading-anchor href=#creating-a-principal-and-assigning-it-privileges aria-label=Anchor>🔗</a></h3><p>Use the <strong>Polaris CLI</strong> (already built in the same folder):</p><ol><li>Export CLIENT_ID and CLIENT_SECRET</li></ol><div class=highlight><pre tabindex=0 style=background-color:#f8f8 [...]
+</span></span><span style=display:flex><span><span style=color:#204a87>export</span> <span style=color:#000>CLIENT_SECRET</span><span style=color:#ce5c00;font-weight:700>=</span>root_secret
+</span></span></code></pre></div><ol start=2><li>Create catalog</li></ol><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span>./polaris
+</span></span><span style=display:flex><span> --client-id <span style=color:#4e9a06>${</span><span style=color:#000>CLIENT_ID</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --client-secret <span style=color:#4e9a06>${</span><span style=color:#000>CLIENT_SECRET</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> catalogs create <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --storage-type s3 <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --default-base-location <span style=color:#4e9a06>${</span><span style=color:#000>DEFAULT_BASE_LOCATION</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --role-arn <span style=color:#4e9a06>${</span><span style=color:#000>ROLE_ARN</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> polaris_catalog
</span></span></code></pre></div><p>The DEFAULT_BASE_LOCATION you provide will be the default location that objects in this catalog should be stored in, and the ROLE_ARN you provide should be a Role ARN with access to read and write data in that location.
-These credentials will be provided to engines reading data from the catalog once they have authenticated with Polaris using credentials that have access to those resources.</p><ol start=3><li>Creating a Principal and Assigning it Privileges</li></ol><p>Use below commands to create principal, principal role and catalog role</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span> --client-id <span style=color:#4e9a06>${</span><span style=color:#000>CLIENT_ID</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span> --client-secret <span style=color:#4e9a06>${</span><span style=color:#000>CLIENT_SECRET</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span> principals <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span> create <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span> jack
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span>./polaris <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span> --client-id <span style=color:#4e9a06>${</span><span style=color:#000>CLIENT_ID</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">10</span><span> --client-secret <span style=color:#4e9a06>${</span><span style=color:#000>CLIENT_SECRET</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">11</span><span> principal-roles <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">12</span><span> create <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">13</span><span> test_user_role
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">14</span><span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">15</span><span>./polaris <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">16</span><span> --client-id <span style=color:#4e9a06>${</span><span style=color:#000>CLIENT_ID</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">17</span><span> --client-secret <span style=color:#4e9a06>${</span><span style=color:#000>CLIENT_SECRET</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">18</span><span> catalog-roles <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">19</span><span> create <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">20</span><span> --catalog polaris_catalog <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">21</span><span> test_catalog_role
-</span></span></code></pre></div><p>When the <strong>principals create</strong> commands successfully, it will return the credentials for this new principal,save it.</p><p>Use below command to grant privileges</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;mar [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span> --client-id <span style=color:#4e9a06>${</span><span style=color:#000>CLIENT_ID</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span> --client-secret <span style=color:#4e9a06>${</span><span style=color:#000>CLIENT_SECRET</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span> principal-roles <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span> grant <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span> --principal jack <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span> test_user_role
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span>./polaris <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">10</span><span> --client-id <span style=color:#4e9a06>${</span><span style=color:#000>CLIENT_ID</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">11</span><span> --client-secret <span style=color:#4e9a06>${</span><span style=color:#000>CLIENT_SECRET</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">12</span><span> catalog-roles <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">13</span><span> grant <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">14</span><span> --catalog polaris_catalog <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">15</span><span> --principal-role test_user_role <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">16</span><span> test_catalog_role
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">17</span><span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">18</span><span> ./polaris <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">19</span><span> --client-id <span style=color:#4e9a06>${</span><span style=color:#000>CLIENT_ID</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">20</span><span> --client-secret <span style=color:#4e9a06>${</span><span style=color:#000>CLIENT_SECRET</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">21</span><span> privileges <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">22</span><span> catalog <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">23</span><span> grant <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">24</span><span> --catalog polaris_catalog <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">25</span><span> --catalog-role test_catalog_role <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">26</span><span> CATALOG_MANAGE_CONTENT
+These credentials will be provided to engines reading data from the catalog once they have authenticated with Polaris using credentials that have access to those resources.</p><ol start=3><li>Creating a Principal and Assigning it Privileges</li></ol><p>Use below commands to create principal, principal role and catalog role</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash [...]
+</span></span></span><span style=display:flex><span> --client-id <span style=color:#4e9a06>${</span><span style=color:#000>CLIENT_ID</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --client-secret <span style=color:#4e9a06>${</span><span style=color:#000>CLIENT_SECRET</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> principals <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> create <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> jack
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span>./polaris <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --client-id <span style=color:#4e9a06>${</span><span style=color:#000>CLIENT_ID</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --client-secret <span style=color:#4e9a06>${</span><span style=color:#000>CLIENT_SECRET</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> principal-roles <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> create <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> test_user_role
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span>./polaris <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --client-id <span style=color:#4e9a06>${</span><span style=color:#000>CLIENT_ID</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --client-secret <span style=color:#4e9a06>${</span><span style=color:#000>CLIENT_SECRET</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> catalog-roles <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> create <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --catalog polaris_catalog <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> test_catalog_role
+</span></span></code></pre></div><p>When the <strong>principals create</strong> commands successfully, it will return the credentials for this new principal,save it.</p><p>Use below command to grant privileges</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span>./polaris <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --client-id <span style=color:#4e9a06>${</span><span style=color:#000>CLIENT_ID</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --client-secret <span style=color:#4e9a06>${</span><span style=color:#000>CLIENT_SECRET</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> principal-roles <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> grant <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --principal jack <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> test_user_role
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span>./polaris <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --client-id <span style=color:#4e9a06>${</span><span style=color:#000>CLIENT_ID</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --client-secret <span style=color:#4e9a06>${</span><span style=color:#000>CLIENT_SECRET</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> catalog-roles <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> grant <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --catalog polaris_catalog <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --principal-role test_user_role <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> test_catalog_role
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span> ./polaris <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --client-id <span style=color:#4e9a06>${</span><span style=color:#000>CLIENT_ID</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --client-secret <span style=color:#4e9a06>${</span><span style=color:#000>CLIENT_SECRET</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> privileges <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> catalog <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> grant <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --catalog polaris_catalog <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --catalog-role test_catalog_role <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> CATALOG_MANAGE_CONTENT
</span></span></code></pre></div><p>We grant <strong>CATALOG_MANAGE_CONTENT</strong> privilege to the catalog role <code>test_catalog_role</code>, and assign the principal role <code>test_user_role</code> to principal <code>jack</code>, then assign the catalog role <code>test_catalog_role</code> to principal role <code>test_user_role</code>.</p><h2 id=configure-starrocks-iceberg-catalog id=configure-starrocks-iceberg-catalog>Configure StarRocks Iceberg Catalog<a class=heading-anchor href [...]
-Then you can create an external Iceberg catalog in StarRocks that connects to Polaris.</p><h3 id=create-external-catalog id=create-external-catalog>Create External Catalog<a class=heading-anchor href=#create-external-catalog aria-label=Anchor>🔗</a></h3><ol><li>Use credentials vending</li></ol><p>It’s recommended to use Polaris’s credential vending feature to enhance security by avoiding long-lived static credentials.</p><p>Here is an example of creating an external catalog in [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span><span style=color:#000>PROPERTIES</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>(</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"iceberg.catalog.uri"</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"http://<POLARIS_HOST>:<POLARIS_PORT>/api/catalog [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"type"</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"iceberg"</span><span style=color:#000;font-weight:700>,</span><span style [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"iceberg.catalog.type"</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"rest"</span><span style=color:#000;font-weight:700>,</spa [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"iceberg.catalog.warehouse"</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"polaris_catalog"</span><span style=color:#000;font-wei [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"iceberg.catalog.security"</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"oauth2"</span><span style=color:#000;font-weight:700>,< [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"iceberg.catalog.oauth2.credential"</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"<jack_client_id>:<jack_client_secret>& [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"iceberg.catalog.oauth2.scope"</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>'PRINCIPAL_ROLE:ALL'</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">10</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"aws.s3.region"</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"us-west-2"</span><span style=color:#000;font-weight:700>,</span><s [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">11</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"iceberg.catalog.vended-credentials-enabled"</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"true"</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">12</span><span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>);</span><span style=color:#f8f8f8>
-</span></span></span></code></pre></div><p>We use jack’s credential(client_id and client_secret) created above to access polaris_catalog.</p><p>Users will have the permissions of user jack when accessing Iceberg tables in polaris_catalog.</p><ol start=2><li>Use S3 storage credentials</li></ol><p>If you prefer to use static S3 credentials instead of credential vending, you can create the external catalog in StarRocks as follows:</p><div class=highlight><pre tabindex=0 style=backgrou [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span><span style=color:#000>PROPERTIES</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>(</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"iceberg.catalog.uri"</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"http://<POLARIS_HOST>:<POLARIS_PORT>/api/catalog [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"type"</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"iceberg"</span><span style=color:#000;font-weight:700>,</span><span style [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"iceberg.catalog.type"</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"rest"</span><span style=color:#000;font-weight:700>,</spa [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"iceberg.catalog.warehouse"</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"polaris_catalog"</span><span style=color:#000;font-wei [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"iceberg.catalog.security"</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"oauth2"</span><span style=color:#000;font-weight:700>,< [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"iceberg.catalog.oauth2.credential"</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"<jack_client_id>:<jack_client_secret>& [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"iceberg.catalog.oauth2.scope"</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>'PRINCIPAL_ROLE:ALL'</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">10</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"aws.s3.region"</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"us-west-2"</span><span style=color:#000;font-weight:700>,</span><s [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">11</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"aws.s3.access_key"</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"<access_key>"</span><span style=color:#000;font-weight:7 [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">12</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"aws.s3.secret_key"</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"<secret_key>"</span><span style=color:#000;font-weight:7 [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">13</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"iceberg.catalog.vended-credentials-enabled"</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"false"</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">14</span><span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>);</span><span style=color:#f8f8f8>
-</span></span></span></code></pre></div><h3 id=manage-iceberg-tables-through-starrocks id=manage-iceberg-tables-through-starrocks>Manage iceberg tables through StarRocks<a class=heading-anchor href=#manage-iceberg-tables-through-starrocks aria-label=Anchor>🔗</a></h3><p>Connect to StarRocks and run the following commands to create and query an Iceberg table through the Polaris catalog:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span><span style=color:#000>StarRocks</span><span style=color:#ce5c00;font-weight:700>></span><span style=color:#204a87;font-weight:700>set</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>catalog</span><span style=color:#f8f8f8> </span><span style=color:#000>polaris_catalog</span [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span><span style=color:#000>Query</span><span style=color:#f8f8f8> </span><span style=color:#000>OK</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8> </span><span style=color:#0000cf;font-weight:700>0</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>rows [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span><span style=color:#8f5902;font-style:italic>-- create database
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span><span style=color:#000>StarRocks</span><span style=color:#ce5c00;font-weight:700>></span><span style=color:#204a87;font-weight:700>create</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>database</span><span style=color:#f8f8f8> </span><span style=color:#000>polaris_db</span> [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span><span style=color:#000>Query</span><span style=color:#f8f8f8> </span><span style=color:#000>OK</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8> </span><span style=color:#0000cf;font-weight:700>0</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>rows [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span><span style=color:#000>StarRocks</span><span style=color:#ce5c00;font-weight:700>></span><span style=color:#000>use</span><span style=color:#f8f8f8> </span><span style=color:#000>polaris_db</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">10</span><span><span style=color:#204a87;font-weight:700>Database</span><span style=color:#f8f8f8> </span><span style=color:#000>changed</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">11</span><span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">12</span><span><span style=color:#8f5902;font-style:italic>-- create iceberg table taxis
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">13</span><span><span style=color:#000>StarRocks</span><span style=color:#ce5c00;font-weight:700>></span><span style=color:#204a87;font-weight:700>CREATE</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>TABLE</span><span style=color:#f8f8f8> </span><span style=color:#000>taxis</span><span st [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">14</span><span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>-></span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>(</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">15</span><span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>-></span><span style=color:#f8f8f8> </span><span style=color:#000>trip_id</span><span style=color:#f8f8f8> </span><span style=color:#204a87>bigint</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">16</span><span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>-></span><span style=color:#f8f8f8> </span><span style=color:#000>trip_distance</span><span style=color:#f8f8f8> </span><span style=color:#204a87>float</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">17</span><span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>-></span><span style=color:#f8f8f8> </span><span style=color:#000>fare_amount</span><span style=color:#f8f8f8> </span><span style=color:#000>double</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">18</span><span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>-></span><span style=color:#f8f8f8> </span><span style=color:#000>store_and_fwd_flag</span><span style=color:#f8f8f8> </span><span style=color:#000>string</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">19</span><span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>-></span><span style=color:#f8f8f8> </span><span style=color:#000>vendor_id</span><span style=color:#f8f8f8> </span><span style=color:#204a87>bigint</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">20</span><span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>-></span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>)</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">21</span><span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>-></span><span style=color:#f8f8f8> </span><span style=color:#000>PARTITION</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>BY</span><span style=color:#f8f8f8> </span><span style=color:#000;font-w [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">22</span><span><span style=color:#000>Query</span><span style=color:#f8f8f8> </span><span style=color:#000>OK</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8> </span><span style=color:#0000cf;font-weight:700>0</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>rows [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">23</span><span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">24</span><span><span style=color:#8f5902;font-style:italic>-- insert data
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">25</span><span><span style=color:#000>StarRocks</span><span style=color:#ce5c00;font-weight:700>></span><span style=color:#204a87;font-weight:700>INSERT</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>INTO</span><span style=color:#f8f8f8> </span><span style=color:#000>taxis</span><span sty [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">26</span><span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>-></span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>VALUES</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>(</span><span style=color:#0000cf;font-weight:700>1000371</ [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">27</span><span><span style=color:#000>Query</span><span style=color:#f8f8f8> </span><span style=color:#000>OK</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8> </span><span style=color:#0000cf;font-weight:700>4</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>rows [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">28</span><span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">29</span><span><span style=color:#8f5902;font-style:italic>-- query iceberg table
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">30</span><span><span style=color:#000>StarRocks</span><span style=color:#ce5c00;font-weight:700>></span><span style=color:#204a87;font-weight:700>select</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>*</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>from< [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">31</span><span><span style=color:#ce5c00;font-weight:700>+</span><span style=color:#8f5902;font-style:italic>---------+---------------+-------------+--------------------+-----------+
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">32</span><span><span style=color:#ce5c00;font-weight:700>|</span><span style=color:#f8f8f8> </span><span style=color:#000>trip_id</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>|</span><span style=color:#f8f8f8> </span><span style=color:#000>trip_distance</span><span style=color:#f8f8f8> </s [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">33</span><span><span style=color:#ce5c00;font-weight:700>+</span><span style=color:#8f5902;font-style:italic>---------+---------------+-------------+--------------------+-----------+
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">34</span><span><span style=color:#ce5c00;font-weight:700>|</span><span style=color:#f8f8f8> </span><span style=color:#0000cf;font-weight:700>1000372</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>|</span><span style=color:#f8f8f8> </span><span style=color:#0000cf;font-weight:700>2< [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">35</span><span><span style=color:#ce5c00;font-weight:700>|</span><span style=color:#f8f8f8> </span><span style=color:#0000cf;font-weight:700>1000373</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>|</span><span style=color:#f8f8f8> </span><span style=color:#0000cf;font-weight:700>0< [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">36</span><span><span style=color:#ce5c00;font-weight:700>|</span><span style=color:#f8f8f8> </span><span style=color:#0000cf;font-weight:700>1000371</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>|</span><span style=color:#f8f8f8> </span><span style=color:#0000cf;font-weight:700>1< [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">37</span><span><span style=color:#ce5c00;font-weight:700>|</span><span style=color:#f8f8f8> </span><span style=color:#0000cf;font-weight:700>1000374</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>|</span><span style=color:#f8f8f8> </span><span style=color:#0000cf;font-weight:700>8< [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">38</span><span><span style=color:#ce5c00;font-weight:700>+</span><span style=color:#8f5902;font-style:italic>---------+---------------+-------------+--------------------+-----------+
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">39</span><span><span style=color:#0000cf;font-weight:700>4</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>rows</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>in</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>set</span><spa [...]
+Then you can create an external Iceberg catalog in StarRocks that connects to Polaris.</p><h3 id=create-external-catalog id=create-external-catalog>Create External Catalog<a class=heading-anchor href=#create-external-catalog aria-label=Anchor>🔗</a></h3><ol><li>Use credentials vending</li></ol><p>It’s recommended to use Polaris’s credential vending feature to enhance security by avoiding long-lived static credentials.</p><p>Here is an example of creating an external catalog in [...]
+</span></span></span><span style=display:flex><span><span style=color:#000>PROPERTIES</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>(</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"iceberg.catalog.uri"</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"http://<POLARIS_HOST>:<POLARIS_PORT>/api/catalog"</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"type"</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"iceberg"</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"iceberg.catalog.type"</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"rest"</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"iceberg.catalog.warehouse"</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"polaris_catalog"</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"iceberg.catalog.security"</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"oauth2"</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"iceberg.catalog.oauth2.credential"</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"<jack_client_id>:<jack_client_secret>"</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"iceberg.catalog.oauth2.scope"</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>'PRINCIPAL_ROLE:ALL'</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"aws.s3.region"</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"us-west-2"</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"iceberg.catalog.vended-credentials-enabled"</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"true"</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>);</span><span style=color:#f8f8f8>
+</span></span></span></code></pre></div><p>We use jack’s credential(client_id and client_secret) created above to access polaris_catalog.</p><p>Users will have the permissions of user jack when accessing Iceberg tables in polaris_catalog.</p><ol start=2><li>Use S3 storage credentials</li></ol><p>If you prefer to use static S3 credentials instead of credential vending, you can create the external catalog in StarRocks as follows:</p><div class=highlight><pre tabindex=0 style=backgrou [...]
+</span></span></span><span style=display:flex><span><span style=color:#000>PROPERTIES</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>(</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"iceberg.catalog.uri"</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"http://<POLARIS_HOST>:<POLARIS_PORT>/api/catalog"</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"type"</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"iceberg"</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"iceberg.catalog.type"</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"rest"</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"iceberg.catalog.warehouse"</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"polaris_catalog"</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"iceberg.catalog.security"</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"oauth2"</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"iceberg.catalog.oauth2.credential"</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"<jack_client_id>:<jack_client_secret>"</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"iceberg.catalog.oauth2.scope"</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>'PRINCIPAL_ROLE:ALL'</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"aws.s3.region"</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"us-west-2"</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"aws.s3.access_key"</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"<access_key>"</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"aws.s3.secret_key"</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"<secret_key>"</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"iceberg.catalog.vended-credentials-enabled"</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"false"</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>);</span><span style=color:#f8f8f8>
+</span></span></span></code></pre></div><h3 id=manage-iceberg-tables-through-starrocks id=manage-iceberg-tables-through-starrocks>Manage iceberg tables through StarRocks<a class=heading-anchor href=#manage-iceberg-tables-through-starrocks aria-label=Anchor>🔗</a></h3><p>Connect to StarRocks and run the following commands to create and query an Iceberg table through the Polaris catalog:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab [...]
+</span></span></span><span style=display:flex><span><span style=color:#000>StarRocks</span><span style=color:#ce5c00;font-weight:700>></span><span style=color:#204a87;font-weight:700>set</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>catalog</span><span style=color:#f8f8f8> </span><span style=color:#000>polaris_catalog</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#000>Query</span><span style=color:#f8f8f8> </span><span style=color:#000>OK</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8> </span><span style=color:#0000cf;font-weight:700>0</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>rows</span><span style=color:#f8f8f8> </span><span style=color:#000>affected</span><span style=color:#f8f8f8> </span><span style=col [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic>-- create database
+</span></span></span><span style=display:flex><span><span style=color:#000>StarRocks</span><span style=color:#ce5c00;font-weight:700>></span><span style=color:#204a87;font-weight:700>create</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>database</span><span style=color:#f8f8f8> </span><span style=color:#000>polaris_db</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#000>Query</span><span style=color:#f8f8f8> </span><span style=color:#000>OK</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8> </span><span style=color:#0000cf;font-weight:700>0</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>rows</span><span style=color:#f8f8f8> </span><span style=color:#000>affected</span><span style=color:#f8f8f8> </span><span style=col [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#000>StarRocks</span><span style=color:#ce5c00;font-weight:700>></span><span style=color:#000>use</span><span style=color:#f8f8f8> </span><span style=color:#000>polaris_db</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>Database</span><span style=color:#f8f8f8> </span><span style=color:#000>changed</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic>-- create iceberg table taxis
+</span></span></span><span style=display:flex><span><span style=color:#000>StarRocks</span><span style=color:#ce5c00;font-weight:700>></span><span style=color:#204a87;font-weight:700>CREATE</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>TABLE</span><span style=color:#f8f8f8> </span><span style=color:#000>taxis</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>-></span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>(</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>-></span><span style=color:#f8f8f8> </span><span style=color:#000>trip_id</span><span style=color:#f8f8f8> </span><span style=color:#204a87>bigint</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>-></span><span style=color:#f8f8f8> </span><span style=color:#000>trip_distance</span><span style=color:#f8f8f8> </span><span style=color:#204a87>float</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>-></span><span style=color:#f8f8f8> </span><span style=color:#000>fare_amount</span><span style=color:#f8f8f8> </span><span style=color:#000>double</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>-></span><span style=color:#f8f8f8> </span><span style=color:#000>store_and_fwd_flag</span><span style=color:#f8f8f8> </span><span style=color:#000>string</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>-></span><span style=color:#f8f8f8> </span><span style=color:#000>vendor_id</span><span style=color:#f8f8f8> </span><span style=color:#204a87>bigint</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>-></span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>)</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>-></span><span style=color:#f8f8f8> </span><span style=color:#000>PARTITION</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>BY</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>(</span><span style=color:#000>vendor_id</span><span style=color:#000;font-weight:700>);</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#000>Query</span><span style=color:#f8f8f8> </span><span style=color:#000>OK</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8> </span><span style=color:#0000cf;font-weight:700>0</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>rows</span><span style=color:#f8f8f8> </span><span style=color:#000>affected</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic>-- insert data
+</span></span></span><span style=display:flex><span><span style=color:#000>StarRocks</span><span style=color:#ce5c00;font-weight:700>></span><span style=color:#204a87;font-weight:700>INSERT</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>INTO</span><span style=color:#f8f8f8> </span><span style=color:#000>taxis</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>-></span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>VALUES</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>(</span><span style=color:#0000cf;font-weight:700>1000371</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8> </span><span style=color:#0000cf;font-weight:700> [...]
+</span></span></span><span style=display:flex><span><span style=color:#000>Query</span><span style=color:#f8f8f8> </span><span style=color:#000>OK</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8> </span><span style=color:#0000cf;font-weight:700>4</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>rows</span><span style=color:#f8f8f8> </span><span style=color:#000>affected</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic>-- query iceberg table
+</span></span></span><span style=display:flex><span><span style=color:#000>StarRocks</span><span style=color:#ce5c00;font-weight:700>></span><span style=color:#204a87;font-weight:700>select</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>*</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>from</span><span style=color:#f8f8f8> </span><span style=color:#000>taxis</span><span style=color:#000;font-weight:700>;</span><span [...]
+</span></span></span><span style=display:flex><span><span style=color:#ce5c00;font-weight:700>+</span><span style=color:#8f5902;font-style:italic>---------+---------------+-------------+--------------------+-----------+
+</span></span></span><span style=display:flex><span><span style=color:#ce5c00;font-weight:700>|</span><span style=color:#f8f8f8> </span><span style=color:#000>trip_id</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>|</span><span style=color:#f8f8f8> </span><span style=color:#000>trip_distance</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>|</span><span style=color:#f8f8f8> </span><span style=color:#000>fare_amount</span [...]
+</span></span></span><span style=display:flex><span><span style=color:#ce5c00;font-weight:700>+</span><span style=color:#8f5902;font-style:italic>---------+---------------+-------------+--------------------+-----------+
+</span></span></span><span style=display:flex><span><span style=color:#ce5c00;font-weight:700>|</span><span style=color:#f8f8f8> </span><span style=color:#0000cf;font-weight:700>1000372</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>|</span><span style=color:#f8f8f8> </span><span style=color:#0000cf;font-weight:700>2</span><span style=color:#000;font-weight:700>.</span><span style=color:#0000cf;font-weight:700>5</span><span style=color:#f8f8f8 [...]
+</span></span></span><span style=display:flex><span><span style=color:#ce5c00;font-weight:700>|</span><span style=color:#f8f8f8> </span><span style=color:#0000cf;font-weight:700>1000373</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>|</span><span style=color:#f8f8f8> </span><span style=color:#0000cf;font-weight:700>0</span><span style=color:#000;font-weight:700>.</span><span style=color:#0000cf;font-weight:700>9</span><span style=color:#f8f8f8 [...]
+</span></span></span><span style=display:flex><span><span style=color:#ce5c00;font-weight:700>|</span><span style=color:#f8f8f8> </span><span style=color:#0000cf;font-weight:700>1000371</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>|</span><span style=color:#f8f8f8> </span><span style=color:#0000cf;font-weight:700>1</span><span style=color:#000;font-weight:700>.</span><span style=color:#0000cf;font-weight:700>8</span><span style=color:#f8f8f8 [...]
+</span></span></span><span style=display:flex><span><span style=color:#ce5c00;font-weight:700>|</span><span style=color:#f8f8f8> </span><span style=color:#0000cf;font-weight:700>1000374</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>|</span><span style=color:#f8f8f8> </span><span style=color:#0000cf;font-weight:700>8</span><span style=color:#000;font-weight:700>.</span><span style=color:#0000cf;font-weight:700>4</span><span style=color:#f8f8f8 [...]
+</span></span></span><span style=display:flex><span><span style=color:#ce5c00;font-weight:700>+</span><span style=color:#8f5902;font-style:italic>---------+---------------+-------------+--------------------+-----------+
+</span></span></span><span style=display:flex><span><span style=color:#0000cf;font-weight:700>4</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>rows</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>in</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>set</span><span style=color:#f8f8f8>
</span></span></span></code></pre></div><p>For more information about using Iceberg table with StarRocks, please refer to:</p><p><a href=https://docs.starrocks.io/docs/data_source/catalog/iceberg/iceberg_catalog>https://docs.starrocks.io/docs/data_source/catalog/iceberg/iceberg_catalog</a></p><ul class="list-unstyled d-flex justify-content-between align-items-center mb-0 pt-5"><li><a href=/blog/2025/10/02/integrating-apache-polaris-with-puppygraph-for-real-time-graph-analysis/ aria-label [...]
\ No newline at end of file
diff --git a/blog/2025/12/24/securing-s3-data-with-aws-kms/index.html b/blog/2025/12/24/securing-s3-data-with-aws-kms/index.html
index 14074d919e..896ff1bfe2 100644
--- a/blog/2025/12/24/securing-s3-data-with-aws-kms/index.html
+++ b/blog/2025/12/24/securing-s3-data-with-aws-kms/index.html
@@ -7,10 +7,10 @@ This functionality will be available in the next release after 1.3.0-incubating.
Configuring Polaris Catalog🔗 KMS settings in Polaris are relevant to S3 buckets that have been configure to use KMS on the AWS side (e.g. using SSE-KMS)."><meta property="og:locale" content="en_us"><meta property="og:type" content="article"><meta property="article:section" content="blog"><meta property="article:published_time" content="2025-12-24T00:00:00+00:00"><meta property="article:modified_time" content="2025-12-24T00:00:00+00:00"><meta itemprop=name content="Securing S3 data with A [...]
Apache Polaris supports using KMS in its catalogs backed by AWS S3 storage.
This functionality will be available in the next release after 1.3.0-incubating.
-Configuring Polaris Catalog🔗 KMS settings in Polaris are relevant to S3 buckets that have been configure to use KMS on the AWS side (e.g. using SSE-KMS)."><meta itemprop=datePublished content="2025-12-24T00:00:00+00:00"><meta itemprop=dateModified content="2025-12-24T00:00:00+00:00"><meta itemprop=wordCount content="497"><meta name=twitter:card content="summary"><meta name=twitter:title content="Securing S3 data with AWS KMS"><meta name=twitter:description content="Introduction🔗 AWS Key [...]
+Configuring Polaris Catalog🔗 KMS settings in Polaris are relevant to S3 buckets that have been configure to use KMS on the AWS side (e.g. using SSE-KMS)."><meta itemprop=datePublished content="2025-12-24T00:00:00+00:00"><meta itemprop=dateModified content="2025-12-24T00:00:00+00:00"><meta itemprop=wordCount content="486"><meta name=twitter:card content="summary"><meta name=twitter:title content="Securing S3 data with AWS KMS"><meta name=twitter:description content="Introduction🔗 AWS Key [...]
Apache Polaris supports using KMS in its catalogs backed by AWS S3 storage.
This functionality will be available in the next release after 1.3.0-incubating.
-Configuring Polaris Catalog🔗 KMS settings in Polaris are relevant to S3 buckets that have been configure to use KMS on the AWS side (e.g. using SSE-KMS)."><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css rel=stylesheet integrity="sha256-PXPPJ8E [...]
+Configuring Polaris Catalog🔗 KMS settings in Polaris are relevant to S3 buckets that have been configure to use KMS on the AWS side (e.g. using SSE-KMS)."><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css rel=stylesheet integrity="sha256-PXPPJ8E [...]
<label for=m-blog20260404build-a-local-open-data-lakehouse-with-k3d-apache-ozone-apache-polaris-and-trino-check><a href=/blog/2026/04/04/build-a-local-open-data-lakehouse-with-k3d-apache-ozone-apache-polaris-and-trino/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-blog20260404build-a-local-open-data-lakehouse-with-k3d-apache-ozone-apache-polaris-and-trino><span>Build a Local Open Data Lakehouse with k3d, Apache Ozone, Apache Polaris and Trino</span></a></label></li>< [...]
<label for=m-blog20260329introducing-the-setup-command-in-apache-polaris-check><a href=/blog/2026/03/29/introducing-the-setup-command-in-apache-polaris/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-blog20260329introducing-the-setup-command-in-apache-polaris><span>Introducing the setup Command in Apache Polaris</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-blog20260219apache-polaris-graduates-to-top-level- [...]
<label for=m-blog20260219apache-polaris-graduates-to-top-level-project-check><a href=/blog/2026/02/19/apache-polaris-graduates-to-top-level-project/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-blog20260219apache-polaris-graduates-to-top-level-project><span>Apache Polaris Graduates to Top Level Project!</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-blog20260204floe-and-apache-polaris-policy-driven-table-m [...]
@@ -26,18 +26,18 @@ Configuring Polaris Catalog🔗 KMS settings in Polaris are relevant to S3 bucke
<time datetime=2025-12-24 class=text-body-secondary>Wednesday, December 24, 2025</time></div><header class=article-meta></header><h2 id=introduction id=introduction>Introduction<a class=heading-anchor href=#introduction aria-label=Anchor>🔗</a></h2><p>AWS <a href=https://docs.aws.amazon.com/kms/latest/developerguide/overview.html>Key Management Service</a> (KMS) provides
a way to encrypt S3 data in AWS without exposing raw key material outside AWS services.</p><p>Apache Polaris supports using KMS in its catalogs backed by AWS S3 storage.</p><p>This functionality will be available in the next release <em>after</em> <code>1.3.0-incubating</code>.</p><h2 id=configuring-polaris-catalog id=configuring-polaris-catalog>Configuring Polaris Catalog<a class=heading-anchor href=#configuring-polaris-catalog aria-label=Anchor>🔗</a></h2><p>KMS settings in Polaris are [...]
(e.g. using SSE-KMS).</p><p>Make a note of the KMS keys ARN that the bucket uses and pass it to the <code>--current-kms-key</code> CLI option
-when creating the corresponding Polaris Catalog.</p><p>For example:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 1</span><span>./polaris <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span> --client-id <span style=color:#4e9a06>${</span><span style=color:#000>POLARIS_CLIENT_ID</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span> --client-secret <span style=color:#4e9a06>${</span><span style=color:#000>POLARIS_CLIENT_SECRET</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span> catalogs <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span> create <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span> --storage-type s3 <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span> --default-base-location <span style=color:#4e9a06>${</span><span style=color:#000>S3_LOCATION_URI</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span> --role-arn <span style=color:#4e9a06>${</span><span style=color:#000>ROLE_ARN</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span> --region <span style=color:#4e9a06>${</span><span style=color:#000>REGION</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">10</span><span> --external-id <span style=color:#4e9a06>${</span><span style=color:#000>EXTERNAL_ID</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">11</span><span> --current-kms-key <span style=color:#4e9a06>${</span><span style=color:#000>KMS_ARN</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">12</span><span> quickstart_catalog
+when creating the corresponding Polaris Catalog.</p><p>For example:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span>./polaris <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --client-id <span style=color:#4e9a06>${</span><span style=color:#000>POLARIS_CLIENT_ID</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --client-secret <span style=color:#4e9a06>${</span><span style=color:#000>POLARIS_CLIENT_SECRET</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> catalogs <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> create <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --storage-type s3 <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --default-base-location <span style=color:#4e9a06>${</span><span style=color:#000>S3_LOCATION_URI</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --role-arn <span style=color:#4e9a06>${</span><span style=color:#000>ROLE_ARN</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --region <span style=color:#4e9a06>${</span><span style=color:#000>REGION</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --external-id <span style=color:#4e9a06>${</span><span style=color:#000>EXTERNAL_ID</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --current-kms-key <span style=color:#4e9a06>${</span><span style=color:#000>KMS_ARN</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> quickstart_catalog
</span></span></code></pre></div><p>Once the KMS key is configured in the catalog, Polaris will automatically add appropriate access
policy entries to vended credentials. Clients do not need to take any extra actions to benefit
from KMS-based server-side data encryption and decryption. This applies to engines (like Spark)
diff --git a/blog/2026/01/06/apache-polaris-and-lance-bringing-ai-native-storage-to-the-open-multimodal-lakehouse/index.html b/blog/2026/01/06/apache-polaris-and-lance-bringing-ai-native-storage-to-the-open-multimodal-lakehouse/index.html
index dd3e32496c..11000afd67 100644
--- a/blog/2026/01/06/apache-polaris-and-lance-bringing-ai-native-storage-to-the-open-multimodal-lakehouse/index.html
+++ b/blog/2026/01/06/apache-polaris-and-lance-bringing-ai-native-storage-to-the-open-multimodal-lakehouse/index.html
@@ -1,8 +1,8 @@
<!doctype html><html itemscope itemtype=http://schema.org/WebPage lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon.png sizes=100x100><link rel=icon type=image/png href=/favicons/android-ch [...]
What is Lance?🔗 Lance is an open lakehouse format designed for multimodal AI workloads. It contains a file format, table format, and catalog spec that allows you to build a complete multimodal lakehouse on top of object storage to power your AI workflows. The key features of Lance include:"><meta property="og:url" content="https://polaris.apache.org/blog/2026/01/06/apache-polaris-and-lance-bringing-ai-native-storage-to-the-open-multimodal-lakehouse/"><meta property="og:site_name" content [...]
What is Lance?🔗 Lance is an open lakehouse format designed for multimodal AI workloads. It contains a file format, table format, and catalog spec that allows you to build a complete multimodal lakehouse on top of object storage to power your AI workflows. The key features of Lance include:"><meta property="og:locale" content="en_us"><meta property="og:type" content="article"><meta property="article:section" content="blog"><meta property="article:published_time" content="2026-01-06T00:00: [...]
-What is Lance?🔗 Lance is an open lakehouse format designed for multimodal AI workloads. It contains a file format, table format, and catalog spec that allows you to build a complete multimodal lakehouse on top of object storage to power your AI workflows. The key features of Lance include:"><meta itemprop=datePublished content="2026-01-06T00:00:00+00:00"><meta itemprop=dateModified content="2026-01-06T00:00:00+00:00"><meta itemprop=wordCount content="1889"><meta name=twitter:card content [...]
-What is Lance?🔗 Lance is an open lakehouse format designed for multimodal AI workloads. It contains a file format, table format, and catalog spec that allows you to build a complete multimodal lakehouse on top of object storage to power your AI workflows. The key features of Lance include:"><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymou [...]
+What is Lance?🔗 Lance is an open lakehouse format designed for multimodal AI workloads. It contains a file format, table format, and catalog spec that allows you to build a complete multimodal lakehouse on top of object storage to power your AI workflows. The key features of Lance include:"><meta itemprop=datePublished content="2026-01-06T00:00:00+00:00"><meta itemprop=dateModified content="2026-01-06T00:00:00+00:00"><meta itemprop=wordCount content="1804"><meta name=twitter:card content [...]
+What is Lance?🔗 Lance is an open lakehouse format designed for multimodal AI workloads. It contains a file format, table format, and catalog spec that allows you to build a complete multimodal lakehouse on top of object storage to power your AI workflows. The key features of Lance include:"><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymou [...]
<label for=m-blog20260404build-a-local-open-data-lakehouse-with-k3d-apache-ozone-apache-polaris-and-trino-check><a href=/blog/2026/04/04/build-a-local-open-data-lakehouse-with-k3d-apache-ozone-apache-polaris-and-trino/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-blog20260404build-a-local-open-data-lakehouse-with-k3d-apache-ozone-apache-polaris-and-trino><span>Build a Local Open Data Lakehouse with k3d, Apache Ozone, Apache Polaris and Trino</span></a></label></li>< [...]
<label for=m-blog20260329introducing-the-setup-command-in-apache-polaris-check><a href=/blog/2026/03/29/introducing-the-setup-command-in-apache-polaris/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-blog20260329introducing-the-setup-command-in-apache-polaris><span>Introducing the setup Command in Apache Polaris</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-blog20260219apache-polaris-graduates-to-top-level- [...]
<label for=m-blog20260219apache-polaris-graduates-to-top-level-project-check><a href=/blog/2026/02/19/apache-polaris-graduates-to-top-level-project/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-blog20260219apache-polaris-graduates-to-top-level-project><span>Apache Polaris Graduates to Top Level Project!</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-blog20260204floe-and-apache-polaris-policy-driven-table-m [...]
@@ -47,181 +47,181 @@ all these engines can work with the same Lance tables managed through Apache Pol
For more information on getting started with Apache Polaris, see the <a href=https://polaris.apache.org/releases/latest/getting-started/>Apache Polaris Getting Started Guide</a>.</p><p>Let’s walk through a complete end-to-end workflow using the <a href=https://huggingface.co/datasets/BeIR/quora>BeIR/quora</a>
dataset from Hugging Face to build a question-answering system.
The examples below work against a locally deployed Apache Polaris instance with the endpoint set to <code>http://localhost:8181</code>.
-You can update the endpoint to match your deployed Apache Polaris service.</p><h3 id=step-1-ingest-data-with-apache-spark id=step-1-ingest-data-with-apache-spark>Step 1: Ingest Data with Apache Spark<a class=heading-anchor href=#step-1-ingest-data-with-apache-spark aria-label=Anchor>🔗</a></h3><p>First, use Spark to load the Quora dataset and write it to a Lance table in Apache Polaris:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;ta [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span><span style=color:#204a87;font-weight:700>from</span> <span style=color:#000>datasets</span> <span style=color:#204a87;font-weight:700>import</span> <span style=color:#000>load_dataset</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span><span style=color:#8f5902;font-style:italic># Create Spark session with Apache Polaris catalog</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span><span style=color:#000>spark</span> <span style=color:#ce5c00;font-weight:700>=</span> <span style=color:#000>SparkSession</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>builder</span> \
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span> <span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>appName</span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>"lance-polaris-ingest"</span><span style=color:#000;font-weight:700>)</span> \
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span> <span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>config</span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>"spark.jars.packages"</span><span style=color:#000;font-weight:700>,</span> <span style=color:#4e9a06>"org.lance:lance-spark-bundle-3.5_2.12:0.0 [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span> <span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>config</span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>"spark.sql.catalog.lance"</span><span style=color:#000;font-weight:700>,</span> <span style=color:#4e9a06>"org.lance.spark.LanceNamespaceSparkCa [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span> <span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>config</span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>"spark.sql.catalog.lance.impl"</span><span style=color:#000;font-weight:700>,</span> <span style=color:#4e9a06>"polaris"</span><span style=c [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">10</span><span> <span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>config</span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>"spark.sql.catalog.lance.endpoint"</span><span style=color:#000;font-weight:700>,</span> <span style=color:#4e9a06>"http://localhost:8181"</ [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">11</span><span> <span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>config</span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>"spark.sql.catalog.lance.auth_token"</span><span style=color:#000;font-weight:700>,</span> <span style=color:#4e9a06>"<your-token>"</s [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">12</span><span> <span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>getOrCreate</span><span style=color:#000;font-weight:700>()</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">13</span><span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">14</span><span><span style=color:#8f5902;font-style:italic># Create namespace for ML workloads</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">15</span><span><span style=color:#000>spark</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>sql</span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>"CREATE NAMESPACE IF NOT EXISTS lance.my_catalog.ml"</span><span style=color:#000;font-weight:700>)</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">16</span><span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">17</span><span><span style=color:#8f5902;font-style:italic># Load Quora dataset from Hugging Face</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">18</span><span><span style=color:#000>dataset</span> <span style=color:#ce5c00;font-weight:700>=</span> <span style=color:#000>load_dataset</span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>"BeIR/quora"</span><span style=color:#000;font-weight:700>,</span> <span style=color:#4e9a06>"corpus [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">19</span><span><span style=color:#000>pdf</span> <span style=color:#ce5c00;font-weight:700>=</span> <span style=color:#000>dataset</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>to_pandas</span><span style=color:#000;font-weight:700>()</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">20</span><span><span style=color:#000>pdf</span> <span style=color:#ce5c00;font-weight:700>=</span> <span style=color:#000>pdf</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>rename</span><span style=color:#000;font-weight:700>(</span><span style=color:#000>columns</span><span style=color:#ce5c00;font- [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">21</span><span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">22</span><span><span style=color:#8f5902;font-style:italic># Convert to Spark DataFrame and write to Lance table</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">23</span><span><span style=color:#000>df</span> <span style=color:#ce5c00;font-weight:700>=</span> <span style=color:#000>spark</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>createDataFrame</span><span style=color:#000;font-weight:700>(</span><span style=color:#000>pdf</span><span style=color:#000;fo [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">24</span><span><span style=color:#000>df</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>writeTo</span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>"lance.my_catalog.ml.quora_questions"</span><span style=color:#000;font-weight:700>)</span><span style=color:#ce5c00;fo [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">25</span><span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">26</span><span><span style=color:#8f5902;font-style:italic># Verify the data</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">27</span><span><span style=color:#000>spark</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>sql</span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>"SELECT COUNT(*) FROM lance.my_catalog.ml.quora_questions"</span><span style=color:#000;font-weight:700>)</span><span st [...]
-</span></span></code></pre></div><h3 id=step-2-feature-engineering-with-ray id=step-2-feature-engineering-with-ray>Step 2: Feature Engineering with Ray<a class=heading-anchor href=#step-2-feature-engineering-with-ray aria-label=Anchor>🔗</a></h3><p>Next, use Ray’s distributed computing to generate embeddings for all documents:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=lang [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span><span style=color:#204a87;font-weight:700>import</span> <span style=color:#000>pyarrow</span> <span style=color:#204a87;font-weight:700>as</span> <span style=color:#000>pa</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span><span style=color:#204a87;font-weight:700>import</span> <span style=color:#000>lance_namespace</span> <span style=color:#204a87;font-weight:700>as</span> <span style=color:#000>ln</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span><span style=color:#204a87;font-weight:700>from</span> <span style=color:#000>lance_ray</span> <span style=color:#204a87;font-weight:700>import</span> <span style=color:#000>add_columns</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span><span style=color:#000>ray</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>init</span><span style=color:#000;font-weight:700>()</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span><span style=color:#8f5902;font-style:italic># Connect to Apache Polaris</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span><span style=color:#000>namespace</span> <span style=color:#ce5c00;font-weight:700>=</span> <span style=color:#000>ln</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>connect</span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>"polaris"</span><span style= [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">10</span><span> <span style=color:#4e9a06>"endpoint"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"http://localhost:8181"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">11</span><span> <span style=color:#4e9a06>"auth_token"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"<your-token>"</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">12</span><span><span style=color:#000;font-weight:700>})</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">13</span><span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">14</span><span><span style=color:#204a87;font-weight:700>def</span> <span style=color:#000>generate_embeddings</span><span style=color:#000;font-weight:700>(</span><span style=color:#000>batch</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000>pa</span><span style=color:#ce5c00;font-weight:700>.</span><span [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">15</span><span> <span style=color:#4e9a06>"""Generate embeddings using sentence-transformers."""</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">16</span><span> <span style=color:#204a87;font-weight:700>from</span> <span style=color:#000>sentence_transformers</span> <span style=color:#204a87;font-weight:700>import</span> <span style=color:#000>SentenceTransformer</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">17</span><span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">18</span><span> <span style=color:#000>model</span> <span style=color:#ce5c00;font-weight:700>=</span> <span style=color:#000>SentenceTransformer</span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>'BAAI/bge-small-en-v1.5'</span><span style=color:#000;font-weight:700>)</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">19</span><span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">20</span><span> <span style=color:#000>texts</span> <span style=color:#ce5c00;font-weight:700>=</span> <span style=color:#000;font-weight:700>[]</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">21</span><span> <span style=color:#204a87;font-weight:700>for</span> <span style=color:#000>i</span> <span style=color:#204a87;font-weight:700>in</span> <span style=color:#204a87>range</span><span style=color:#000;font-weight:700>(</span><span style=color:#204a87>len</span><span style=color:#000;font-weight:700>(</span><span styl [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">22</span><span> <span style=color:#000>title</span> <span style=color:#ce5c00;font-weight:700>=</span> <span style=color:#000>batch</span><span style=color:#000;font-weight:700>[</span><span style=color:#4e9a06>"title"</span><span style=color:#000;font-weight:700>][</span><span style=color:#000>i</span><span style=col [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">23</span><span> <span style=color:#000>text</span> <span style=color:#ce5c00;font-weight:700>=</span> <span style=color:#000>batch</span><span style=color:#000;font-weight:700>[</span><span style=color:#4e9a06>"text"</span><span style=color:#000;font-weight:700>][</span><span style=color:#000>i</span><span style=color [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">24</span><span> <span style=color:#000>texts</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>append</span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>f</span><span style=color:#4e9a06>"</span><span style=color:#4e9a06>{</span><span style=color:#000>title</span><s [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">25</span><span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">26</span><span> <span style=color:#000>embeddings</span> <span style=color:#ce5c00;font-weight:700>=</span> <span style=color:#000>model</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>encode</span><span style=color:#000;font-weight:700>(</span><span style=color:#000>texts</span><span style=color:#0 [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">27</span><span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">28</span><span> <span style=color:#204a87;font-weight:700>return</span> <span style=color:#000>pa</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>RecordBatch</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>from_arrays</span><span style=color:#000;font-weight:700>(</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">29</span><span> <span style=color:#000;font-weight:700>[</span><span style=color:#000>pa</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>array</span><span style=color:#000;font-weight:700>(</span><span style=color:#000>embeddings</span><span style=color:#ce5c00;font-weight:700>.</span><span styl [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">30</span><span> <span style=color:#000>names</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#000;font-weight:700>[</span><span style=color:#4e9a06>"vector"</span><span style=color:#000;font-weight:700>]</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">31</span><span> <span style=color:#000;font-weight:700>)</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">32</span><span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">33</span><span><span style=color:#8f5902;font-style:italic># Add embeddings column using distributed processing</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">34</span><span><span style=color:#000>add_columns</span><span style=color:#000;font-weight:700>(</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">35</span><span> <span style=color:#000>uri</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#204a87;font-weight:700>None</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">36</span><span> <span style=color:#000>namespace</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#000>namespace</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">37</span><span> <span style=color:#000>table_id</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#000;font-weight:700>[</span><span style=color:#4e9a06>"my_catalog"</span><span style=color:#000;font-weight:700>,</span> <span style=color:#4e9a06>"ml"</span><span style=color:#000;font-weight [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">38</span><span> <span style=color:#000>transform</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#000>generate_embeddings</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">39</span><span> <span style=color:#000>read_columns</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#000;font-weight:700>[</span><span style=color:#4e9a06>"title"</span><span style=color:#000;font-weight:700>,</span> <span style=color:#4e9a06>"text"</span><span style=color:#000;font-weigh [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">40</span><span> <span style=color:#000>batch_size</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#0000cf;font-weight:700>100</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">41</span><span> <span style=color:#000>concurrency</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#0000cf;font-weight:700>4</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">42</span><span><span style=color:#000;font-weight:700>)</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">43</span><span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">44</span><span><span style=color:#204a87>print</span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>"Embeddings generated successfully!"</span><span style=color:#000;font-weight:700>)</span>
-</span></span></code></pre></div><h3 id=step-3-sql-analytics-with-trino id=step-3-sql-analytics-with-trino>Step 3: SQL Analytics with Trino<a class=heading-anchor href=#step-3-sql-analytics-with-trino aria-label=Anchor>🔗</a></h3><p>Use Trino for SQL analytics on the same dataset:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-properties data-lang=properties><span style=disp [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#c4a000>connector.name</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>lance</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span><span style=color:#c4a000>lance.impl</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>polaris</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span><span style=color:#c4a000>lance.endpoint</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>http://localhost:8181</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span><span style=color:#c4a000>lance.auth_token</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06><your-token></span>
-</span></span></code></pre></div><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-sql data-lang=sql><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 1</span><span><span style=color:#8f5902;font-style:italic>-- Explore the dataset
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span><span style=color:#204a87;font-weight:700>SHOW</span><span style=color:#f8f8f8> </span><span style=color:#000>SCHEMAS</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>FROM</span><span style=color:#f8f8f8> </span><span style=color:#000>lance</span><span style=color:#000;font-weig [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span><span style=color:#204a87;font-weight:700>SHOW</span><span style=color:#f8f8f8> </span><span style=color:#000>TABLES</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>FROM</span><span style=color:#f8f8f8> </span><span style=color:#000>lance</span><span style=color:#000;font-weigh [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span><span style=color:#204a87;font-weight:700>DESCRIBE</span><span style=color:#f8f8f8> </span><span style=color:#000>lance</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>my_catalog</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>ml</span><span style=color:#0 [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span><span style=color:#8f5902;font-style:italic>-- Basic analytics
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span><span style=color:#204a87;font-weight:700>SELECT</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>COUNT</span><span style=color:#000;font-weight:700>(</span><span style=color:#ce5c00;font-weight:700>*</span><span style=color:#000;font-weight:700>)</span><span style=color:#f8f8f8 [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span><span style=color:#204a87;font-weight:700>FROM</span><span style=color:#f8f8f8> </span><span style=color:#000>lance</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>my_catalog</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>ml</span><span style=color:#000;f [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">10</span><span><span style=color:#8f5902;font-style:italic>-- Find questions by keyword
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">11</span><span><span style=color:#204a87;font-weight:700>SELECT</span><span style=color:#f8f8f8> </span><span style=color:#000>id</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8> </span><span style=color:#000>title</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8> < [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">12</span><span><span style=color:#204a87;font-weight:700>FROM</span><span style=color:#f8f8f8> </span><span style=color:#000>lance</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>my_catalog</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>ml</span><span style=color:#000;f [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">13</span><span><span style=color:#204a87;font-weight:700>WHERE</span><span style=color:#f8f8f8> </span><span style=color:#204a87>text</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>LIKE</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'%machine learning%'</span><span [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">14</span><span><span style=color:#204a87;font-weight:700>LIMIT</span><span style=color:#f8f8f8> </span><span style=color:#0000cf;font-weight:700>10</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">15</span><span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">16</span><span><span style=color:#8f5902;font-style:italic>-- Aggregate statistics
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">17</span><span><span style=color:#204a87;font-weight:700>SELECT</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">18</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>LENGTH</span><span style=color:#000;font-weight:700>(</span><span style=color:#204a87>text</span><span style=color:#000;font-weight:700>)</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>as</span><spa [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">19</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>COUNT</span><span style=color:#000;font-weight:700>(</span><span style=color:#ce5c00;font-weight:700>*</span><span style=color:#000;font-weight:700>)</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>a [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">20</span><span><span style=color:#204a87;font-weight:700>FROM</span><span style=color:#f8f8f8> </span><span style=color:#000>lance</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>my_catalog</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>ml</span><span style=color:#000;f [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">21</span><span><span style=color:#204a87;font-weight:700>GROUP</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>BY</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>LENGTH</span><span style=color:#000;font-weight:700>(</span><span style=color:#204a87>text</span> [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">22</span><span><span style=color:#204a87;font-weight:700>ORDER</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>BY</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>count</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>DESC</spa [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">23</span><span><span style=color:#204a87;font-weight:700>LIMIT</span><span style=color:#f8f8f8> </span><span style=color:#0000cf;font-weight:700>10</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8>
-</span></span></span></code></pre></div><h3 id=step-4-agentic-search-with-lancedb id=step-4-agentic-search-with-lancedb>Step 4: Agentic Search with LanceDB<a class=heading-anchor href=#step-4-agentic-search-with-lancedb aria-label=Anchor>🔗</a></h3><p>Finally, use LanceDB for AI-native semantic search and full-text search on the enriched dataset:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><c [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span><span style=color:#204a87;font-weight:700>from</span> <span style=color:#000>sentence_transformers</span> <span style=color:#204a87;font-weight:700>import</span> <span style=color:#000>SentenceTransformer</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span><span style=color:#8f5902;font-style:italic># Connect to Apache Polaris via LanceDB</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span><span style=color:#000>db</span> <span style=color:#ce5c00;font-weight:700>=</span> <span style=color:#000>lancedb</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>connect_namespace</span><span style=color:#000;font-weight:700>(</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span> <span style=color:#4e9a06>"polaris"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span> <span style=color:#000;font-weight:700>{</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span> <span style=color:#4e9a06>"endpoint"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"http://localhost:8181"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span> <span style=color:#4e9a06>"auth_token"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"<your-token>"</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">10</span><span> <span style=color:#000;font-weight:700>}</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">11</span><span><span style=color:#000;font-weight:700>)</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">12</span><span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">13</span><span><span style=color:#8f5902;font-style:italic># Open the table with embeddings</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">14</span><span><span style=color:#000>table</span> <span style=color:#ce5c00;font-weight:700>=</span> <span style=color:#000>db</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>open_table</span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>"quora_questions"</span><span [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">15</span><span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">16</span><span><span style=color:#8f5902;font-style:italic># Create vector index for fast similarity search</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">17</span><span><span style=color:#000>table</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>create_index</span><span style=color:#000;font-weight:700>(</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">18</span><span> <span style=color:#000>metric</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"cosine"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">19</span><span> <span style=color:#000>vector_column_name</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"vector"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">20</span><span> <span style=color:#000>index_type</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"IVF_PQ"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">21</span><span> <span style=color:#000>num_partitions</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#0000cf;font-weight:700>32</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">22</span><span> <span style=color:#000>num_sub_vectors</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#0000cf;font-weight:700>48</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">23</span><span><span style=color:#000;font-weight:700>)</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">24</span><span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">25</span><span><span style=color:#8f5902;font-style:italic># Create full-text search index</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">26</span><span><span style=color:#000>table</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>create_fts_index</span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>"text"</span><span style=color:#000;font-weight:700>)</span>
-</span></span></code></pre></div><h4 id=vector-search id=vector-search>Vector Search<a class=heading-anchor href=#vector-search aria-label=Anchor>🔗</a></h4><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-python data-lang=python><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 1</span [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span><span style=color:#000>query_text</span> <span style=color:#ce5c00;font-weight:700>=</span> <span style=color:#4e9a06>"How do I learn machine learning?"</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span><span style=color:#000>query_embedding</span> <span style=color:#ce5c00;font-weight:700>=</span> <span style=color:#000>model</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>encode</span><span style=color:#000;font-weight:700>([</span><span style=color:#000>query_text</span><span style=c [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span><span style=color:#000>results</span> <span style=color:#ce5c00;font-weight:700>=</span> <span style=color:#000;font-weight:700>(</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span> <span style=color:#000>table</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>search</span><span style=color:#000;font-weight:700>(</span><span style=color:#000>query_embedding</span><span style=color:#000;font-weight:700>,</span> <span style=color:#000>vector_column_name</span><span [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span> <span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>limit</span><span style=color:#000;font-weight:700>(</span><span style=color:#0000cf;font-weight:700>5</span><span style=color:#000;font-weight:700>)</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span> <span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>to_pandas</span><span style=color:#000;font-weight:700>()</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span><span style=color:#000;font-weight:700>)</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">10</span><span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">11</span><span><span style=color:#204a87>print</span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>"=== Vector Search Results ==="</span><span style=color:#000;font-weight:700>)</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">12</span><span><span style=color:#204a87;font-weight:700>for</span> <span style=color:#000>idx</span><span style=color:#000;font-weight:700>,</span> <span style=color:#000>row</span> <span style=color:#204a87;font-weight:700>in</span> <span style=color:#000>results</span><span style=color:#ce5c00;font-weight:700>.</span><span style= [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">13</span><span> <span style=color:#204a87>print</span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>f</span><span style=color:#4e9a06>"</span><span style=color:#4e9a06>{</span><span style=color:#000>idx</span> <span style=color:#ce5c00;font-weight:700>+</span> <span style=color:#0000cf;font-weight:7 [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">14</span><span> <span style=color:#204a87>print</span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>f</span><span style=color:#4e9a06>" </span><span style=color:#4e9a06>{</span><span style=color:#000>row</span><span style=color:#000;font-weight:700>[</span><span style=color:#4e9a06>'text'< [...]
-</span></span></code></pre></div><h4 id=full-text-search id=full-text-search>Full-Text Search<a class=heading-anchor href=#full-text-search aria-label=Anchor>🔗</a></h4><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-python data-lang=python><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span> <span style=color:#000>table</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>search</span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>"machine learning algorithms"</span><span style=color:#000;font-weight:700>,</span> <span style=color:#000>query_ [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span> <span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>limit</span><span style=color:#000;font-weight:700>(</span><span style=color:#0000cf;font-weight:700>5</span><span style=color:#000;font-weight:700>)</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span> <span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>to_pandas</span><span style=color:#000;font-weight:700>()</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span><span style=color:#000;font-weight:700>)</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span><span style=color:#204a87>print</span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>"=== Full-Text Search Results ==="</span><span style=color:#000;font-weight:700>)</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span><span style=color:#204a87;font-weight:700>for</span> <span style=color:#000>idx</span><span style=color:#000;font-weight:700>,</span> <span style=color:#000>row</span> <span style=color:#204a87;font-weight:700>in</span> <span style=color:#000>results</span><span style=color:#ce5c00;font-weight:700>.</span><span style= [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span> <span style=color:#204a87>print</span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>f</span><span style=color:#4e9a06>"</span><span style=color:#4e9a06>{</span><span style=color:#000>idx</span> <span style=color:#ce5c00;font-weight:700>+</span> <span style=color:#0000cf;font-weight:7 [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">10</span><span> <span style=color:#204a87>print</span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>f</span><span style=color:#4e9a06>" </span><span style=color:#4e9a06>{</span><span style=color:#000>row</span><span style=color:#000;font-weight:700>[</span><span style=color:#4e9a06>'text'< [...]
-</span></span></code></pre></div><h4 id=hybrid-search id=hybrid-search>Hybrid Search<a class=heading-anchor href=#hybrid-search aria-label=Anchor>🔗</a></h4><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-python data-lang=python><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span> [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> <span style=color:#000>table</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>search</span><span style=color:#000;font-weight:700>(</span><span style=color:#000>query_embedding</span><span style=color:#000;font-weight:700>,</span> <span style=color:#000>vector_column_name</span><span s [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> <span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>where</span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>"text LIKE '%python%'"</span><span style=color:#000;font-weight:700>,</span> <span style=color:#000>prefilter</span><span style=color:#ce5c00; [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> <span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>limit</span><span style=color:#000;font-weight:700>(</span><span style=color:#0000cf;font-weight:700>5</span><span style=color:#000;font-weight:700>)</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span> <span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>to_pandas</span><span style=color:#000;font-weight:700>()</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">6</span><span><span style=color:#000;font-weight:700>)</span>
+You can update the endpoint to match your deployed Apache Polaris service.</p><h3 id=step-1-ingest-data-with-apache-spark id=step-1-ingest-data-with-apache-spark>Step 1: Ingest Data with Apache Spark<a class=heading-anchor href=#step-1-ingest-data-with-apache-spark aria-label=Anchor>🔗</a></h3><p>First, use Spark to load the Quora dataset and write it to a Lance table in Apache Polaris:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;ta [...]
+</span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>from</span> <span style=color:#000>datasets</span> <span style=color:#204a87;font-weight:700>import</span> <span style=color:#000>load_dataset</span>
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># Create Spark session with Apache Polaris catalog</span>
+</span></span><span style=display:flex><span><span style=color:#000>spark</span> <span style=color:#ce5c00;font-weight:700>=</span> <span style=color:#000>SparkSession</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>builder</span> \
+</span></span><span style=display:flex><span> <span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>appName</span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>"lance-polaris-ingest"</span><span style=color:#000;font-weight:700>)</span> \
+</span></span><span style=display:flex><span> <span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>config</span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>"spark.jars.packages"</span><span style=color:#000;font-weight:700>,</span> <span style=color:#4e9a06>"org.lance:lance-spark-bundle-3.5_2.12:0.0.7"</span><span style=color:#000;font-weight:700>)</span> \
+</span></span><span style=display:flex><span> <span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>config</span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>"spark.sql.catalog.lance"</span><span style=color:#000;font-weight:700>,</span> <span style=color:#4e9a06>"org.lance.spark.LanceNamespaceSparkCatalog"</span><span style=color:#000;font-weight:700>)</span> \
+</span></span><span style=display:flex><span> <span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>config</span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>"spark.sql.catalog.lance.impl"</span><span style=color:#000;font-weight:700>,</span> <span style=color:#4e9a06>"polaris"</span><span style=color:#000;font-weight:700>)</span> \
+</span></span><span style=display:flex><span> <span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>config</span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>"spark.sql.catalog.lance.endpoint"</span><span style=color:#000;font-weight:700>,</span> <span style=color:#4e9a06>"http://localhost:8181"</span><span style=color:#000;font-weight:700>)</span> \
+</span></span><span style=display:flex><span> <span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>config</span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>"spark.sql.catalog.lance.auth_token"</span><span style=color:#000;font-weight:700>,</span> <span style=color:#4e9a06>"<your-token>"</span><span style=color:#000;font-weight:700>)</span> \
+</span></span><span style=display:flex><span> <span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>getOrCreate</span><span style=color:#000;font-weight:700>()</span>
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># Create namespace for ML workloads</span>
+</span></span><span style=display:flex><span><span style=color:#000>spark</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>sql</span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>"CREATE NAMESPACE IF NOT EXISTS lance.my_catalog.ml"</span><span style=color:#000;font-weight:700>)</span>
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># Load Quora dataset from Hugging Face</span>
+</span></span><span style=display:flex><span><span style=color:#000>dataset</span> <span style=color:#ce5c00;font-weight:700>=</span> <span style=color:#000>load_dataset</span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>"BeIR/quora"</span><span style=color:#000;font-weight:700>,</span> <span style=color:#4e9a06>"corpus"</span><span style=color:#000;font-weight:700>,</span> <span style=color:#000>split</span><span style=color:#ce5c00;font-weigh [...]
+</span></span><span style=display:flex><span><span style=color:#000>pdf</span> <span style=color:#ce5c00;font-weight:700>=</span> <span style=color:#000>dataset</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>to_pandas</span><span style=color:#000;font-weight:700>()</span>
+</span></span><span style=display:flex><span><span style=color:#000>pdf</span> <span style=color:#ce5c00;font-weight:700>=</span> <span style=color:#000>pdf</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>rename</span><span style=color:#000;font-weight:700>(</span><span style=color:#000>columns</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#000;font-weight:700>{</span><span style=color:#4e9a06>"_id"</span><span style=colo [...]
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># Convert to Spark DataFrame and write to Lance table</span>
+</span></span><span style=display:flex><span><span style=color:#000>df</span> <span style=color:#ce5c00;font-weight:700>=</span> <span style=color:#000>spark</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>createDataFrame</span><span style=color:#000;font-weight:700>(</span><span style=color:#000>pdf</span><span style=color:#000;font-weight:700>)</span>
+</span></span><span style=display:flex><span><span style=color:#000>df</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>writeTo</span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>"lance.my_catalog.ml.quora_questions"</span><span style=color:#000;font-weight:700>)</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>create</span><span style=color:#000;font-weight:700>()</span>
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># Verify the data</span>
+</span></span><span style=display:flex><span><span style=color:#000>spark</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>sql</span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>"SELECT COUNT(*) FROM lance.my_catalog.ml.quora_questions"</span><span style=color:#000;font-weight:700>)</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>show</span><span style=color:#000;font-weight:700>()</span>
+</span></span></code></pre></div><h3 id=step-2-feature-engineering-with-ray id=step-2-feature-engineering-with-ray>Step 2: Feature Engineering with Ray<a class=heading-anchor href=#step-2-feature-engineering-with-ray aria-label=Anchor>🔗</a></h3><p>Next, use Ray’s distributed computing to generate embeddings for all documents:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=lang [...]
+</span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>import</span> <span style=color:#000>pyarrow</span> <span style=color:#204a87;font-weight:700>as</span> <span style=color:#000>pa</span>
+</span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>import</span> <span style=color:#000>lance_namespace</span> <span style=color:#204a87;font-weight:700>as</span> <span style=color:#000>ln</span>
+</span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>from</span> <span style=color:#000>lance_ray</span> <span style=color:#204a87;font-weight:700>import</span> <span style=color:#000>add_columns</span>
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span><span style=color:#000>ray</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>init</span><span style=color:#000;font-weight:700>()</span>
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># Connect to Apache Polaris</span>
+</span></span><span style=display:flex><span><span style=color:#000>namespace</span> <span style=color:#ce5c00;font-weight:700>=</span> <span style=color:#000>ln</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>connect</span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>"polaris"</span><span style=color:#000;font-weight:700>,</span> <span style=color:#000;font-weight:700>{</span>
+</span></span><span style=display:flex><span> <span style=color:#4e9a06>"endpoint"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"http://localhost:8181"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#4e9a06>"auth_token"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"<your-token>"</span>
+</span></span><span style=display:flex><span><span style=color:#000;font-weight:700>})</span>
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>def</span> <span style=color:#000>generate_embeddings</span><span style=color:#000;font-weight:700>(</span><span style=color:#000>batch</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000>pa</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>RecordBatch</span><span style=color:#000;font-weight:700>)</span> <span style=color:#ce5c00;font-weight:700>-& [...]
+</span></span><span style=display:flex><span> <span style=color:#4e9a06>"""Generate embeddings using sentence-transformers."""</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>from</span> <span style=color:#000>sentence_transformers</span> <span style=color:#204a87;font-weight:700>import</span> <span style=color:#000>SentenceTransformer</span>
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span> <span style=color:#000>model</span> <span style=color:#ce5c00;font-weight:700>=</span> <span style=color:#000>SentenceTransformer</span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>'BAAI/bge-small-en-v1.5'</span><span style=color:#000;font-weight:700>)</span>
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span> <span style=color:#000>texts</span> <span style=color:#ce5c00;font-weight:700>=</span> <span style=color:#000;font-weight:700>[]</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>for</span> <span style=color:#000>i</span> <span style=color:#204a87;font-weight:700>in</span> <span style=color:#204a87>range</span><span style=color:#000;font-weight:700>(</span><span style=color:#204a87>len</span><span style=color:#000;font-weight:700>(</span><span style=color:#000>batch</span><span style=color:#000;font-weight:700>)):</span>
+</span></span><span style=display:flex><span> <span style=color:#000>title</span> <span style=color:#ce5c00;font-weight:700>=</span> <span style=color:#000>batch</span><span style=color:#000;font-weight:700>[</span><span style=color:#4e9a06>"title"</span><span style=color:#000;font-weight:700>][</span><span style=color:#000>i</span><span style=color:#000;font-weight:700>]</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>as_py</span><span style [...]
+</span></span><span style=display:flex><span> <span style=color:#000>text</span> <span style=color:#ce5c00;font-weight:700>=</span> <span style=color:#000>batch</span><span style=color:#000;font-weight:700>[</span><span style=color:#4e9a06>"text"</span><span style=color:#000;font-weight:700>][</span><span style=color:#000>i</span><span style=color:#000;font-weight:700>]</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>as_py</span><span style=c [...]
+</span></span><span style=display:flex><span> <span style=color:#000>texts</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>append</span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>f</span><span style=color:#4e9a06>"</span><span style=color:#4e9a06>{</span><span style=color:#000>title</span><span style=color:#4e9a06>}</span><span style=color:#4e9a06>. </span><span style=color:#4e9a06>{</span><span style=color:#000>text [...]
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span> <span style=color:#000>embeddings</span> <span style=color:#ce5c00;font-weight:700>=</span> <span style=color:#000>model</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>encode</span><span style=color:#000;font-weight:700>(</span><span style=color:#000>texts</span><span style=color:#000;font-weight:700>,</span> <span style=color:#000>normalize_embeddings</span><span style=color:#ce5c00;font-weight:700>=</span> [...]
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>return</span> <span style=color:#000>pa</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>RecordBatch</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>from_arrays</span><span style=color:#000;font-weight:700>(</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>[</span><span style=color:#000>pa</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>array</span><span style=color:#000;font-weight:700>(</span><span style=color:#000>embeddings</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>tolist</span><span style=color:#000;font-weight:700>(),</span> <span style=color:#204a87>type</span><span style=col [...]
+</span></span><span style=display:flex><span> <span style=color:#000>names</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#000;font-weight:700>[</span><span style=color:#4e9a06>"vector"</span><span style=color:#000;font-weight:700>]</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>)</span>
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># Add embeddings column using distributed processing</span>
+</span></span><span style=display:flex><span><span style=color:#000>add_columns</span><span style=color:#000;font-weight:700>(</span>
+</span></span><span style=display:flex><span> <span style=color:#000>uri</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#204a87;font-weight:700>None</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#000>namespace</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#000>namespace</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#000>table_id</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#000;font-weight:700>[</span><span style=color:#4e9a06>"my_catalog"</span><span style=color:#000;font-weight:700>,</span> <span style=color:#4e9a06>"ml"</span><span style=color:#000;font-weight:700>,</span> <span style=color:#4e9a06>"quora_questions"</span><span style=color:#000;font-weight:700>],</span>
+</span></span><span style=display:flex><span> <span style=color:#000>transform</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#000>generate_embeddings</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#000>read_columns</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#000;font-weight:700>[</span><span style=color:#4e9a06>"title"</span><span style=color:#000;font-weight:700>,</span> <span style=color:#4e9a06>"text"</span><span style=color:#000;font-weight:700>],</span>
+</span></span><span style=display:flex><span> <span style=color:#000>batch_size</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#0000cf;font-weight:700>100</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#000>concurrency</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#0000cf;font-weight:700>4</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span><span style=color:#000;font-weight:700>)</span>
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span><span style=color:#204a87>print</span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>"Embeddings generated successfully!"</span><span style=color:#000;font-weight:700>)</span>
+</span></span></code></pre></div><h3 id=step-3-sql-analytics-with-trino id=step-3-sql-analytics-with-trino>Step 3: SQL Analytics with Trino<a class=heading-anchor href=#step-3-sql-analytics-with-trino aria-label=Anchor>🔗</a></h3><p>Use Trino for SQL analytics on the same dataset:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-properties data-lang=properties><span style=disp [...]
+</span></span><span style=display:flex><span><span style=color:#c4a000>connector.name</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>lance</span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>lance.impl</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>polaris</span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>lance.endpoint</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>http://localhost:8181</span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>lance.auth_token</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06><your-token></span>
+</span></span></code></pre></div><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-sql data-lang=sql><span style=display:flex><span><span style=color:#8f5902;font-style:italic>-- Explore the dataset
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>SHOW</span><span style=color:#f8f8f8> </span><span style=color:#000>SCHEMAS</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>FROM</span><span style=color:#f8f8f8> </span><span style=color:#000>lance</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>SHOW</span><span style=color:#f8f8f8> </span><span style=color:#000>TABLES</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>FROM</span><span style=color:#f8f8f8> </span><span style=color:#000>lance</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>my_catalog</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>ml</ [...]
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>DESCRIBE</span><span style=color:#f8f8f8> </span><span style=color:#000>lance</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>my_catalog</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>ml</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>quora_questions</span><span style=color:#000;font-weight:700>;</span><span sty [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic>-- Basic analytics
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>SELECT</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>COUNT</span><span style=color:#000;font-weight:700>(</span><span style=color:#ce5c00;font-weight:700>*</span><span style=color:#000;font-weight:700>)</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>as</span><span style=color:#f8f8f8> </span><span style=color:#000>total_quest [...]
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>FROM</span><span style=color:#f8f8f8> </span><span style=color:#000>lance</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>my_catalog</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>ml</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>quora_questions</span><span style=color:#000;font-weight:700>;</span><span style=c [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic>-- Find questions by keyword
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>SELECT</span><span style=color:#f8f8f8> </span><span style=color:#000>id</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8> </span><span style=color:#000>title</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8> </span><span style=color:#204a87>text</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>FROM</span><span style=color:#f8f8f8> </span><span style=color:#000>lance</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>my_catalog</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>ml</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>quora_questions</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>WHERE</span><span style=color:#f8f8f8> </span><span style=color:#204a87>text</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>LIKE</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'%machine learning%'</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>LIMIT</span><span style=color:#f8f8f8> </span><span style=color:#0000cf;font-weight:700>10</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic>-- Aggregate statistics
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>SELECT</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>LENGTH</span><span style=color:#000;font-weight:700>(</span><span style=color:#204a87>text</span><span style=color:#000;font-weight:700>)</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>as</span><span style=color:#f8f8f8> </span><span style=color:#000>text_length</span><span style=color:#000;font-weight:700>,</span><span styl [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>COUNT</span><span style=color:#000;font-weight:700>(</span><span style=color:#ce5c00;font-weight:700>*</span><span style=color:#000;font-weight:700>)</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>as</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>count</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>FROM</span><span style=color:#f8f8f8> </span><span style=color:#000>lance</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>my_catalog</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>ml</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>quora_questions</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>GROUP</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>BY</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>LENGTH</span><span style=color:#000;font-weight:700>(</span><span style=color:#204a87>text</span><span style=color:#000;font-weight:700>)</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>ORDER</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>BY</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>count</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>DESC</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>LIMIT</span><span style=color:#f8f8f8> </span><span style=color:#0000cf;font-weight:700>10</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8>
+</span></span></span></code></pre></div><h3 id=step-4-agentic-search-with-lancedb id=step-4-agentic-search-with-lancedb>Step 4: Agentic Search with LanceDB<a class=heading-anchor href=#step-4-agentic-search-with-lancedb aria-label=Anchor>🔗</a></h3><p>Finally, use LanceDB for AI-native semantic search and full-text search on the enriched dataset:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><c [...]
+</span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>from</span> <span style=color:#000>sentence_transformers</span> <span style=color:#204a87;font-weight:700>import</span> <span style=color:#000>SentenceTransformer</span>
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># Connect to Apache Polaris via LanceDB</span>
+</span></span><span style=display:flex><span><span style=color:#000>db</span> <span style=color:#ce5c00;font-weight:700>=</span> <span style=color:#000>lancedb</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>connect_namespace</span><span style=color:#000;font-weight:700>(</span>
+</span></span><span style=display:flex><span> <span style=color:#4e9a06>"polaris"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>{</span>
+</span></span><span style=display:flex><span> <span style=color:#4e9a06>"endpoint"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"http://localhost:8181"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#4e9a06>"auth_token"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"<your-token>"</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>}</span>
+</span></span><span style=display:flex><span><span style=color:#000;font-weight:700>)</span>
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># Open the table with embeddings</span>
+</span></span><span style=display:flex><span><span style=color:#000>table</span> <span style=color:#ce5c00;font-weight:700>=</span> <span style=color:#000>db</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>open_table</span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>"quora_questions"</span><span style=color:#000;font-weight:700>,</span> <span style=color:#000>namespace</span><span style=color:#ce5c00;font-weight:700>=</s [...]
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># Create vector index for fast similarity search</span>
+</span></span><span style=display:flex><span><span style=color:#000>table</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>create_index</span><span style=color:#000;font-weight:700>(</span>
+</span></span><span style=display:flex><span> <span style=color:#000>metric</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"cosine"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#000>vector_column_name</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"vector"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#000>index_type</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"IVF_PQ"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#000>num_partitions</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#0000cf;font-weight:700>32</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#000>num_sub_vectors</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#0000cf;font-weight:700>48</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span><span style=color:#000;font-weight:700>)</span>
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># Create full-text search index</span>
+</span></span><span style=display:flex><span><span style=color:#000>table</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>create_fts_index</span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>"text"</span><span style=color:#000;font-weight:700>)</span>
+</span></span></code></pre></div><h4 id=vector-search id=vector-search>Vector Search<a class=heading-anchor href=#vector-search aria-label=Anchor>🔗</a></h4><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-python data-lang=python><span style=display:flex><span><span style=color:#000>model</span> <span style=color:#ce5c00;font-weight:700>=</span> <span style=color:#000>SentenceTra [...]
+</span></span><span style=display:flex><span><span style=color:#000>query_text</span> <span style=color:#ce5c00;font-weight:700>=</span> <span style=color:#4e9a06>"How do I learn machine learning?"</span>
+</span></span><span style=display:flex><span><span style=color:#000>query_embedding</span> <span style=color:#ce5c00;font-weight:700>=</span> <span style=color:#000>model</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>encode</span><span style=color:#000;font-weight:700>([</span><span style=color:#000>query_text</span><span style=color:#000;font-weight:700>],</span> <span style=color:#000>normalize_embeddings</span><span style=color:#ce5c00;font-weight:700> [...]
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span><span style=color:#000>results</span> <span style=color:#ce5c00;font-weight:700>=</span> <span style=color:#000;font-weight:700>(</span>
+</span></span><span style=display:flex><span> <span style=color:#000>table</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>search</span><span style=color:#000;font-weight:700>(</span><span style=color:#000>query_embedding</span><span style=color:#000;font-weight:700>,</span> <span style=color:#000>vector_column_name</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"vector"</span><span style=color:#000;font-weight: [...]
+</span></span><span style=display:flex><span> <span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>limit</span><span style=color:#000;font-weight:700>(</span><span style=color:#0000cf;font-weight:700>5</span><span style=color:#000;font-weight:700>)</span>
+</span></span><span style=display:flex><span> <span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>to_pandas</span><span style=color:#000;font-weight:700>()</span>
+</span></span><span style=display:flex><span><span style=color:#000;font-weight:700>)</span>
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span><span style=color:#204a87>print</span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>"=== Vector Search Results ==="</span><span style=color:#000;font-weight:700>)</span>
+</span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>for</span> <span style=color:#000>idx</span><span style=color:#000;font-weight:700>,</span> <span style=color:#000>row</span> <span style=color:#204a87;font-weight:700>in</span> <span style=color:#000>results</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>iterrows</span><span style=color:#000;font-weight:700>():</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87>print</span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>f</span><span style=color:#4e9a06>"</span><span style=color:#4e9a06>{</span><span style=color:#000>idx</span> <span style=color:#ce5c00;font-weight:700>+</span> <span style=color:#0000cf;font-weight:700>1</span><span style=color:#4e9a06>}</span><span style=color:#4e9a06>. </span><span style=color:#4e9a06>{</span><span style=co [...]
+</span></span><span style=display:flex><span> <span style=color:#204a87>print</span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>f</span><span style=color:#4e9a06>" </span><span style=color:#4e9a06>{</span><span style=color:#000>row</span><span style=color:#000;font-weight:700>[</span><span style=color:#4e9a06>'text'</span><span style=color:#000;font-weight:700>][:</span><span style=color:#0000cf;font-weight:700>150</span><span style=color:#00 [...]
+</span></span></code></pre></div><h4 id=full-text-search id=full-text-search>Full-Text Search<a class=heading-anchor href=#full-text-search aria-label=Anchor>🔗</a></h4><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-python data-lang=python><span style=display:flex><span><span style=color:#000>results</span> <span style=color:#ce5c00;font-weight:700>=</span> <span style=color:#0 [...]
+</span></span><span style=display:flex><span> <span style=color:#000>table</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>search</span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>"machine learning algorithms"</span><span style=color:#000;font-weight:700>,</span> <span style=color:#000>query_type</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"fts"</span><span style=color:#00 [...]
+</span></span><span style=display:flex><span> <span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>limit</span><span style=color:#000;font-weight:700>(</span><span style=color:#0000cf;font-weight:700>5</span><span style=color:#000;font-weight:700>)</span>
+</span></span><span style=display:flex><span> <span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>to_pandas</span><span style=color:#000;font-weight:700>()</span>
+</span></span><span style=display:flex><span><span style=color:#000;font-weight:700>)</span>
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span><span style=color:#204a87>print</span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>"=== Full-Text Search Results ==="</span><span style=color:#000;font-weight:700>)</span>
+</span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>for</span> <span style=color:#000>idx</span><span style=color:#000;font-weight:700>,</span> <span style=color:#000>row</span> <span style=color:#204a87;font-weight:700>in</span> <span style=color:#000>results</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>iterrows</span><span style=color:#000;font-weight:700>():</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87>print</span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>f</span><span style=color:#4e9a06>"</span><span style=color:#4e9a06>{</span><span style=color:#000>idx</span> <span style=color:#ce5c00;font-weight:700>+</span> <span style=color:#0000cf;font-weight:700>1</span><span style=color:#4e9a06>}</span><span style=color:#4e9a06>. </span><span style=color:#4e9a06>{</span><span style=co [...]
+</span></span><span style=display:flex><span> <span style=color:#204a87>print</span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>f</span><span style=color:#4e9a06>" </span><span style=color:#4e9a06>{</span><span style=color:#000>row</span><span style=color:#000;font-weight:700>[</span><span style=color:#4e9a06>'text'</span><span style=color:#000;font-weight:700>][:</span><span style=color:#0000cf;font-weight:700>150</span><span style=color:#00 [...]
+</span></span></code></pre></div><h4 id=hybrid-search id=hybrid-search>Hybrid Search<a class=heading-anchor href=#hybrid-search aria-label=Anchor>🔗</a></h4><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-python data-lang=python><span style=display:flex><span><span style=color:#000>results</span> <span style=color:#ce5c00;font-weight:700>=</span> <span style=color:#000;font-weig [...]
+</span></span><span style=display:flex><span> <span style=color:#000>table</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>search</span><span style=color:#000;font-weight:700>(</span><span style=color:#000>query_embedding</span><span style=color:#000;font-weight:700>,</span> <span style=color:#000>vector_column_name</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"vector"</span><span style=color:#000;font-weight: [...]
+</span></span><span style=display:flex><span> <span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>where</span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>"text LIKE '%python%'"</span><span style=color:#000;font-weight:700>,</span> <span style=color:#000>prefilter</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#204a87;font-weight:700>True</span><span style=color:#000;font-weight:700>)</span>
+</span></span><span style=display:flex><span> <span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>limit</span><span style=color:#000;font-weight:700>(</span><span style=color:#0000cf;font-weight:700>5</span><span style=color:#000;font-weight:700>)</span>
+</span></span><span style=display:flex><span> <span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>to_pandas</span><span style=color:#000;font-weight:700>()</span>
+</span></span><span style=display:flex><span><span style=color:#000;font-weight:700>)</span>
</span></span></code></pre></div><h2 id=try-it-yourself id=try-it-yourself>Try It Yourself<a class=heading-anchor href=#try-it-yourself aria-label=Anchor>🔗</a></h2><p>The <a href=https://github.com/lance-format/lance-namespace-impls>lance-namespace-impls</a> repository provides a
<a href=https://github.com/lance-format/lance-namespace-impls/tree/main/docker/polaris>Docker Compose setup</a>
-that makes it easy to try out the Apache Polaris integration locally.</p><h3 id=quick-start id=quick-start>Quick Start<a class=heading-anchor href=#quick-start aria-label=Anchor>🔗</a></h3><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span><span style=color:#204a87>cd</span> lance-namespace-impls/docker
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span><span style=color:#8f5902;font-style:italic># Start Apache Polaris</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span>make setup
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span>make up-polaris
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span><span style=color:#8f5902;font-style:italic># Get authentication token</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span>make polaris-token
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">10</span><span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">11</span><span><span style=color:#8f5902;font-style:italic># Create a test catalog</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">12</span><span>make polaris-create-catalog
-</span></span></code></pre></div><p>The setup includes:</p><ul><li><strong>Apache Polaris API</strong> on port 8181</li><li><strong>Apache Polaris Management</strong> on port 8182</li><li>PostgreSQL backend for metadata storage</li></ul><h3 id=configuration id=configuration>Configuration<a class=heading-anchor href=#configuration aria-label=Anchor>🔗</a></h3><p>Once Apache Polaris is running, configure your Lance Namespace client:</p><div class=highlight><pre tabindex=0 style=background-c [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span><span style=color:#000>ns</span> <span style=color:#ce5c00;font-weight:700>=</span> <span style=color:#000>PolarisNamespace</span><span style=color:#000;font-weight:700>({</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> <span style=color:#4e9a06>"endpoint"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"http://localhost:8181"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span> <span style=color:#4e9a06>"auth_token"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"<token-from-make-polaris-token>"</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">6</span><span><span style=color:#000;font-weight:700>})</span>
+that makes it easy to try out the Apache Polaris integration locally.</p><h3 id=quick-start id=quick-start>Quick Start<a class=heading-anchor href=#quick-start aria-label=Anchor>🔗</a></h3><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span>git clone https://github.com/lance-format/lance-namespace-impls.git
+</span></span><span style=display:flex><span><span style=color:#204a87>cd</span> lance-namespace-impls/docker
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># Start Apache Polaris</span>
+</span></span><span style=display:flex><span>make setup
+</span></span><span style=display:flex><span>make up-polaris
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># Get authentication token</span>
+</span></span><span style=display:flex><span>make polaris-token
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># Create a test catalog</span>
+</span></span><span style=display:flex><span>make polaris-create-catalog
+</span></span></code></pre></div><p>The setup includes:</p><ul><li><strong>Apache Polaris API</strong> on port 8181</li><li><strong>Apache Polaris Management</strong> on port 8182</li><li>PostgreSQL backend for metadata storage</li></ul><h3 id=configuration id=configuration>Configuration<a class=heading-anchor href=#configuration aria-label=Anchor>🔗</a></h3><p>Once Apache Polaris is running, configure your Lance Namespace client:</p><div class=highlight><pre tabindex=0 style=background-c [...]
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span><span style=color:#000>ns</span> <span style=color:#ce5c00;font-weight:700>=</span> <span style=color:#000>PolarisNamespace</span><span style=color:#000;font-weight:700>({</span>
+</span></span><span style=display:flex><span> <span style=color:#4e9a06>"endpoint"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"http://localhost:8181"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#4e9a06>"auth_token"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"<token-from-make-polaris-token>"</span>
+</span></span><span style=display:flex><span><span style=color:#000;font-weight:700>})</span>
</span></span></code></pre></div><h2 id=next-steps id=next-steps>Next Steps<a class=heading-anchor href=#next-steps aria-label=Anchor>🔗</a></h2><p>We are excited about this collaboration between the Lance and Apache Polaris communities.
Our integration with the Generic Table API opens up new possibilities for managing AI-native workloads in the open multimodal lakehouse.</p><p>Looking ahead, we plan to continue improving the Generic Table API based on our learnings from the Lance Namespace specification:</p><ul><li><p><strong>Credentials Vending:</strong> Lance Namespace already supports credentials vending end-to-end and is
integrated with any engine that uses the Lance Rust/Python/Java SDKs,
diff --git a/blog/2026/01/12/mapping-legacy-and-heterogeneous-datalakes-in-apache-polaris/index.html b/blog/2026/01/12/mapping-legacy-and-heterogeneous-datalakes-in-apache-polaris/index.html
index e18c9af9bb..19b6410aef 100644
--- a/blog/2026/01/12/mapping-legacy-and-heterogeneous-datalakes-in-apache-polaris/index.html
+++ b/blog/2026/01/12/mapping-legacy-and-heterogeneous-datalakes-in-apache-polaris/index.html
@@ -1,4 +1,4 @@
-<!doctype html><html itemscope itemtype=http://schema.org/WebPage lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon.png sizes=100x100><link rel=icon type=image/png href=/favicons/android-ch [...]
+<!doctype html><html itemscope itemtype=http://schema.org/WebPage lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon.png sizes=100x100><link rel=icon type=image/png href=/favicons/android-ch [...]
<label for=m-blog20260404build-a-local-open-data-lakehouse-with-k3d-apache-ozone-apache-polaris-and-trino-check><a href=/blog/2026/04/04/build-a-local-open-data-lakehouse-with-k3d-apache-ozone-apache-polaris-and-trino/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-blog20260404build-a-local-open-data-lakehouse-with-k3d-apache-ozone-apache-polaris-and-trino><span>Build a Local Open Data Lakehouse with k3d, Apache Ozone, Apache Polaris and Trino</span></a></label></li>< [...]
<label for=m-blog20260329introducing-the-setup-command-in-apache-polaris-check><a href=/blog/2026/03/29/introducing-the-setup-command-in-apache-polaris/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-blog20260329introducing-the-setup-command-in-apache-polaris><span>Introducing the setup Command in Apache Polaris</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-blog20260219apache-polaris-graduates-to-top-level- [...]
<label for=m-blog20260219apache-polaris-graduates-to-top-level-project-check><a href=/blog/2026/02/19/apache-polaris-graduates-to-top-level-project/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-blog20260219apache-polaris-graduates-to-top-level-project><span>Apache Polaris Graduates to Top Level Project!</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-blog20260204floe-and-apache-polaris-policy-driven-table-m [...]
diff --git a/blog/2026/02/04/floe-and-apache-polaris-policy-driven-table-maintenance-for-apache-iceberg/index.html b/blog/2026/02/04/floe-and-apache-polaris-policy-driven-table-maintenance-for-apache-iceberg/index.html
index 72720ec501..a2a68060c7 100644
--- a/blog/2026/02/04/floe-and-apache-polaris-policy-driven-table-maintenance-for-apache-iceberg/index.html
+++ b/blog/2026/02/04/floe-and-apache-polaris-policy-driven-table-maintenance-for-apache-iceberg/index.html
@@ -1,8 +1,8 @@
<!doctype html><html itemscope itemtype=http://schema.org/WebPage lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon.png sizes=100x100><link rel=icon type=image/png href=/favicons/android-ch [...]
Apache Polaris provides a vendor-neutral Iceberg catalog with governance and access control, but it does not execute maintenance operations. The catalog manages metadata and enforces permissions. Compaction, snapshot expiration, orphan cleanup, and manifest optimization remain the user’s responsibility."><meta property="og:url" content="https://polaris.apache.org/blog/2026/02/04/floe-and-apache-polaris-policy-driven-table-maintenance-for-apache-iceberg/"><meta property="og:site_name" con [...]
Apache Polaris provides a vendor-neutral Iceberg catalog with governance and access control, but it does not execute maintenance operations. The catalog manages metadata and enforces permissions. Compaction, snapshot expiration, orphan cleanup, and manifest optimization remain the user’s responsibility."><meta property="og:locale" content="en_us"><meta property="og:type" content="article"><meta property="article:section" content="blog"><meta property="article:published_time" content="202 [...]
-Apache Polaris provides a vendor-neutral Iceberg catalog with governance and access control, but it does not execute maintenance operations. The catalog manages metadata and enforces permissions. Compaction, snapshot expiration, orphan cleanup, and manifest optimization remain the user’s responsibility."><meta itemprop=datePublished content="2026-02-04T00:00:00+00:00"><meta itemprop=dateModified content="2026-02-04T00:00:00+00:00"><meta itemprop=wordCount content="817"><meta name=twitter [...]
-Apache Polaris provides a vendor-neutral Iceberg catalog with governance and access control, but it does not execute maintenance operations. The catalog manages metadata and enforces permissions. Compaction, snapshot expiration, orphan cleanup, and manifest optimization remain the user’s responsibility."><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crosso [...]
+Apache Polaris provides a vendor-neutral Iceberg catalog with governance and access control, but it does not execute maintenance operations. The catalog manages metadata and enforces permissions. Compaction, snapshot expiration, orphan cleanup, and manifest optimization remain the user’s responsibility."><meta itemprop=datePublished content="2026-02-04T00:00:00+00:00"><meta itemprop=dateModified content="2026-02-04T00:00:00+00:00"><meta itemprop=wordCount content="774"><meta name=twitter [...]
+Apache Polaris provides a vendor-neutral Iceberg catalog with governance and access control, but it does not execute maintenance operations. The catalog manages metadata and enforces permissions. Compaction, snapshot expiration, orphan cleanup, and manifest optimization remain the user’s responsibility."><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crosso [...]
<label for=m-blog20260404build-a-local-open-data-lakehouse-with-k3d-apache-ozone-apache-polaris-and-trino-check><a href=/blog/2026/04/04/build-a-local-open-data-lakehouse-with-k3d-apache-ozone-apache-polaris-and-trino/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-blog20260404build-a-local-open-data-lakehouse-with-k3d-apache-ozone-apache-polaris-and-trino><span>Build a Local Open Data Lakehouse with k3d, Apache Ozone, Apache Polaris and Trino</span></a></label></li>< [...]
<label for=m-blog20260329introducing-the-setup-command-in-apache-polaris-check><a href=/blog/2026/03/29/introducing-the-setup-command-in-apache-polaris/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-blog20260329introducing-the-setup-command-in-apache-polaris><span>Introducing the setup Command in Apache Polaris</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-blog20260219apache-polaris-graduates-to-top-level- [...]
<label for=m-blog20260219apache-polaris-graduates-to-top-level-project-check><a href=/blog/2026/02/19/apache-polaris-graduates-to-top-level-project/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-blog20260219apache-polaris-graduates-to-top-level-project><span>Apache Polaris Graduates to Top Level Project!</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child active-path" id=m-blog20260204floe-and-apache-polaris-policy-dr [...]
@@ -15,79 +15,79 @@ Apache Polaris provides a vendor-neutral Iceberg catalog with governance and acc
<label for=m-blog20250919apache-polaris-110-incubating-has-been-released-check><a href=/blog/2025/09/19/apache-polaris-1.1.0-incubating-has-been-released/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-blog20250919apache-polaris-110-incubating-has-been-released><span>Apache Polaris 1.1.0-incubating has been released!</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-blog20250915doris-x-polaris-building-unified- [...]
<label for=m-blog20250915doris-x-polaris-building-unified-data-lakehouse-with-iceberg-rest-catalog-a-practical-guide-check><a href=/blog/2025/09/15/doris-x-polaris-building-unified-data-lakehouse-with-iceberg-rest-catalog-a-practical-guide/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-blog20250915doris-x-polaris-building-unified-data-lakehouse-with-iceberg-rest-catalog-a-practical-guide><span>Doris X Polaris: Building Unified Data Lakehouse with Iceberg REST Catalog [...]
<label for=m-blog20250820apache-polaris-101-incubating-has-been-released-check><a href=/blog/2025/08/20/apache-polaris-1.0.1-incubating-has-been-released/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-blog20250820apache-polaris-101-incubating-has-been-released><span>Apache Polaris 1.0.1-incubating has been released!</span></a></label></li></ul></li></ul></nav></div></aside><main class="col-12 col-md-9 col-xl-10 ps-md-5 pe-md-4" role=main><a class=td-rss-button title= [...]
-<time datetime=2026-02-04 class=text-body-secondary>Wednesday, February 04, 2026</time></div><header class=article-meta></header><h2 id=introduction id=introduction>Introduction<a class=heading-anchor href=#introduction aria-label=Anchor>🔗</a></h2><p>Iceberg tables accumulate technical debt over time. Small files multiply as streaming jobs append data in micro-batches. Delete files pile up from CDC workloads. Snapshots grow unbounded, bloating metadata. Without regular maintenance, query [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#204a87>cd</span> floe
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span>make example-polaris
-</span></span></code></pre></div><p>This starts Polaris, MinIO, and Floe with a <code>demo</code> catalog, creates sample Iceberg tables, and configures demo policies.</p><ul><li>Floe UI: http://localhost:9091/ui</li><li>Floe API: http://localhost:9091/api/</li></ul><p>For Trino instead of Spark, run <code>make clean</code> first, then <code>make example-polaris-trino</code>.</p><h2 id=configuration id=configuration>Configuration<a class=heading-anchor href=#configuration aria-label=Anch [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#000>FLOE_CATALOG_NAME</span><span style=color:#ce5c00;font-weight:700>=</span>demo
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span><span style=color:#000>FLOE_CATALOG_POLARIS_URI</span><span style=color:#ce5c00;font-weight:700>=</span>http://polaris:8181/api/catalog
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span><span style=color:#000>FLOE_CATALOG_POLARIS_CLIENT_ID</span><span style=color:#ce5c00;font-weight:700>=</span>root
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span><span style=color:#000>FLOE_CATALOG_POLARIS_CLIENT_SECRET</span><span style=color:#ce5c00;font-weight:700>=</span>secret
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">6</span><span><span style=color:#000>FLOE_CATALOG_WAREHOUSE</span><span style=color:#ce5c00;font-weight:700>=</span>demo
-</span></span></code></pre></div><p>Note: For Polaris, <code>FLOE_CATALOG_WAREHOUSE</code> is the catalog name, not an S3 path.</p><h2 id=defining-policies id=defining-policies>Defining Policies<a class=heading-anchor href=#defining-policies aria-label=Anchor>🔗</a></h2><p>Policies define maintenance operations and target tables via patterns:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span> -H <span style=color:#4e9a06>"Content-Type: application/json"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span> -d <span style=color:#4e9a06>'{
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span><span style=color:#4e9a06> "name": "orders-maintenance",
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span><span style=color:#4e9a06> "tablePattern": "demo.test.*",
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span><span style=color:#4e9a06> "priority": 50,
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span><span style=color:#4e9a06> "rewriteDataFiles": {
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span><span style=color:#4e9a06> "strategy": "BINPACK",
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span><span style=color:#4e9a06> "targetFileSizeBytes": 134217728
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">10</span><span><span style=color:#4e9a06> },
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">11</span><span><span style=color:#4e9a06> "expireSnapshots": {
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">12</span><span><span style=color:#4e9a06> "retainLast": 10,
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">13</span><span><span style=color:#4e9a06> "maxSnapshotAge": "P7D"
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">14</span><span><span style=color:#4e9a06> },
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">15</span><span><span style=color:#4e9a06> "orphanCleanup": {
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">16</span><span><span style=color:#4e9a06> "retentionPeriodInDays": 3
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">17</span><span><span style=color:#4e9a06> },
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">18</span><span><span style=color:#4e9a06> "rewriteManifests": {}
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">19</span><span><span style=color:#4e9a06> }'</span>
-</span></span></code></pre></div><p>Operations: <code>rewriteDataFiles</code>, <code>expireSnapshots</code>, <code>orphanCleanup</code>, <code>rewriteManifests</code>.</p><h2 id=triggering-maintenance id=triggering-maintenance>Triggering Maintenance<a class=heading-anchor href=#triggering-maintenance aria-label=Anchor>🔗</a></h2><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-ba [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> -H <span style=color:#4e9a06>"Content-Type: application/json"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> -d <span style=color:#4e9a06>'{
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span><span style=color:#4e9a06> "catalog": "demo",
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span><span style=color:#4e9a06> "namespace": "test",
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">6</span><span><span style=color:#4e9a06> "table": "orders"
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">7</span><span><span style=color:#4e9a06>}'</span>
-</span></span></code></pre></div><p>Monitor progress via UI at <code>/ui/operations</code> or API at <code>/api/v1/operations</code>.</p><h2 id=floe-ui id=floe-ui>Floe UI<a class=heading-anchor href=#floe-ui aria-label=Anchor>🔗</a></h2><p>Floe includes a web UI for managing policies and monitoring table health. The table view shows metadata alongside health indicators (snapshot count, small file percentage, delete file ratio) so you can see at a glance which tables need attention:</p><p> [...]
-</span></span></code></pre></div><p>Reports include: snapshot count/age, small file percentage, delete file count, partition skew, manifest size.</p><p>Scan modes: <code>metadata</code> (default), <code>scan</code>, <code>sample</code>.</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-properties data-lang=properties><span style=display:flex><span style="white-space:pre;-webki [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#c4a000>floe.health.sample-limit</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>10000</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span><span style=color:#c4a000>floe.health.persistence-enabled</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>true</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span><span style=color:#c4a000>floe.health.max-reports-per-table</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>100</span>
-</span></span></code></pre></div><p>The <code>metadata</code> mode is fast but only sees file-level statistics. Use <code>scan</code> or <code>sample</code> when you need accurate small-file detection based on actual file sizes.</p><h2 id=automated-scheduling id=automated-scheduling>Automated Scheduling<a class=heading-anchor href=#automated-scheduling aria-label=Anchor>🔗</a></h2><p>The scheduler computes a debt score per table based on health issues, time since last maintenance, and fai [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#c4a000>floe.scheduler.max-tables-per-poll</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>10</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span><span style=color:#c4a000>floe.scheduler.max-bytes-per-hour</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>10737418240</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span><span style=color:#c4a000>floe.scheduler.failure-backoff-threshold</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>3</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span><span style=color:#c4a000>floe.scheduler.failure-backoff-hours</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>6</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">6</span><span><span style=color:#c4a000>floe.scheduler.zero-change-threshold</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>5</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">7</span><span><span style=color:#c4a000>floe.scheduler.condition-based-triggering-enabled</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>true</span>
-</span></span></code></pre></div><p>Key tuning parameters:</p><ul><li><code>max-bytes-per-hour</code>: Caps total bytes rewritten to avoid overwhelming storage I/O</li><li><code>failure-backoff-threshold</code> / <code>failure-backoff-hours</code>: Prevents repeatedly retrying failing tables</li><li><code>zero-change-threshold</code>: Reduces frequency for tables that consistently have no work to do</li></ul><h2 id=signal-based-triggering id=signal-based-triggering>Signal-Based Triggerin [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span> -H <span style=color:#4e9a06>"Content-Type: application/json"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span> -d <span style=color:#4e9a06>'{
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span><span style=color:#4e9a06> "name": "smart-compaction",
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span><span style=color:#4e9a06> "tablePattern": "demo.test.*",
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span><span style=color:#4e9a06> "priority": 100,
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span><span style=color:#4e9a06> "rewriteDataFiles": {
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span><span style=color:#4e9a06> "strategy": "BINPACK",
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span><span style=color:#4e9a06> "targetFileSizeBytes": 134217728
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">10</span><span><span style=color:#4e9a06> },
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">11</span><span><span style=color:#4e9a06> "triggerConditions": {
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">12</span><span><span style=color:#4e9a06> "smallFilePercentageAbove": 20,
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">13</span><span><span style=color:#4e9a06> "deleteFileCountAbove": 50,
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">14</span><span><span style=color:#4e9a06> "minIntervalMinutes": 60
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">15</span><span><span style=color:#4e9a06> }
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">16</span><span><span style=color:#4e9a06> }'</span>
-</span></span></code></pre></div><p>Triggers when any condition is met (default OR logic) or when all conditions are met if <code>triggerLogic</code> is set to <code>AND</code>, and the min interval has elapsed.</p><p>For critical tables, force execution when max delay is exceeded:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-json data-lang=json><span style=display:flex>< [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> <span style=color:#204a87;font-weight:700>"triggerConditions"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> <span style=color:#204a87;font-weight:700>"smallFilePercentageAbove"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#0000cf;font-weight:700>30</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> <span style=color:#204a87;font-weight:700>"criticalPipeline"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#204a87;font-weight:700>true</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span> <span style=color:#204a87;font-weight:700>"criticalPipelineMaxDelayMinutes"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#0000cf;font-weight:700>360</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">6</span><span> <span style=color:#000;font-weight:700>}</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">7</span><span><span style=color:#000;font-weight:700>}</span>
-</span></span></code></pre></div><p>Policies without <code>triggerConditions</code> run whenever the scheduler picks them up, preserving the original behavior.</p><h2 id=execution-engines id=execution-engines>Execution Engines<a class=heading-anchor href=#execution-engines aria-label=Anchor>🔗</a></h2><p>Floe supports Spark (via Livy) and Trino as execution engines.</p><p>Spark configuration:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-siz [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#000>FLOE_LIVY_URL</span><span style=color:#ce5c00;font-weight:700>=</span>http://livy:8998
-</span></span></code></pre></div><p>Trino configuration:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span><span style=color:#000>FLOE_ENGINE_TYPE</span><span style=color:#ce5c00;font-weight:700>=</span>TRINO
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#000>FLOE_TRINO_JDBC_URL</span><span style=color:#ce5c00;font-weight:700>=</span>jdbc:trino://trino:8080
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span><span style=color:#000>FLOE_TRINO_CATALOG</span><span style=color:#ce5c00;font-weight:700>=</span>demo
+<time datetime=2026-02-04 class=text-body-secondary>Wednesday, February 04, 2026</time></div><header class=article-meta></header><h2 id=introduction id=introduction>Introduction<a class=heading-anchor href=#introduction aria-label=Anchor>🔗</a></h2><p>Iceberg tables accumulate technical debt over time. Small files multiply as streaming jobs append data in micro-batches. Delete files pile up from CDC workloads. Snapshots grow unbounded, bloating metadata. Without regular maintenance, query [...]
+</span></span><span style=display:flex><span><span style=color:#204a87>cd</span> floe
+</span></span><span style=display:flex><span>make example-polaris
+</span></span></code></pre></div><p>This starts Polaris, MinIO, and Floe with a <code>demo</code> catalog, creates sample Iceberg tables, and configures demo policies.</p><ul><li>Floe UI: http://localhost:9091/ui</li><li>Floe API: http://localhost:9091/api/</li></ul><p>For Trino instead of Spark, run <code>make clean</code> first, then <code>make example-polaris-trino</code>.</p><h2 id=configuration id=configuration>Configuration<a class=heading-anchor href=#configuration aria-label=Anch [...]
+</span></span><span style=display:flex><span><span style=color:#000>FLOE_CATALOG_NAME</span><span style=color:#ce5c00;font-weight:700>=</span>demo
+</span></span><span style=display:flex><span><span style=color:#000>FLOE_CATALOG_POLARIS_URI</span><span style=color:#ce5c00;font-weight:700>=</span>http://polaris:8181/api/catalog
+</span></span><span style=display:flex><span><span style=color:#000>FLOE_CATALOG_POLARIS_CLIENT_ID</span><span style=color:#ce5c00;font-weight:700>=</span>root
+</span></span><span style=display:flex><span><span style=color:#000>FLOE_CATALOG_POLARIS_CLIENT_SECRET</span><span style=color:#ce5c00;font-weight:700>=</span>secret
+</span></span><span style=display:flex><span><span style=color:#000>FLOE_CATALOG_WAREHOUSE</span><span style=color:#ce5c00;font-weight:700>=</span>demo
+</span></span></code></pre></div><p>Note: For Polaris, <code>FLOE_CATALOG_WAREHOUSE</code> is the catalog name, not an S3 path.</p><h2 id=defining-policies id=defining-policies>Defining Policies<a class=heading-anchor href=#defining-policies aria-label=Anchor>🔗</a></h2><p>Policies define maintenance operations and target tables via patterns:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code [...]
+</span></span></span><span style=display:flex><span> -H <span style=color:#4e9a06>"Content-Type: application/json"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -d <span style=color:#4e9a06>'{
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "name": "orders-maintenance",
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "tablePattern": "demo.test.*",
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "priority": 50,
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "rewriteDataFiles": {
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "strategy": "BINPACK",
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "targetFileSizeBytes": 134217728
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> },
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "expireSnapshots": {
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "retainLast": 10,
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "maxSnapshotAge": "P7D"
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> },
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "orphanCleanup": {
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "retentionPeriodInDays": 3
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> },
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "rewriteManifests": {}
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> }'</span>
+</span></span></code></pre></div><p>Operations: <code>rewriteDataFiles</code>, <code>expireSnapshots</code>, <code>orphanCleanup</code>, <code>rewriteManifests</code>.</p><h2 id=triggering-maintenance id=triggering-maintenance>Triggering Maintenance<a class=heading-anchor href=#triggering-maintenance aria-label=Anchor>🔗</a></h2><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-ba [...]
+</span></span></span><span style=display:flex><span> -H <span style=color:#4e9a06>"Content-Type: application/json"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -d <span style=color:#4e9a06>'{
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "catalog": "demo",
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "namespace": "test",
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "table": "orders"
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06>}'</span>
+</span></span></code></pre></div><p>Monitor progress via UI at <code>/ui/operations</code> or API at <code>/api/v1/operations</code>.</p><h2 id=floe-ui id=floe-ui>Floe UI<a class=heading-anchor href=#floe-ui aria-label=Anchor>🔗</a></h2><p>Floe includes a web UI for managing policies and monitoring table health. The table view shows metadata alongside health indicators (snapshot count, small file percentage, delete file ratio) so you can see at a glance which tables need attention:</p><p> [...]
+</span></span></code></pre></div><p>Reports include: snapshot count/age, small file percentage, delete file count, partition skew, manifest size.</p><p>Scan modes: <code>metadata</code> (default), <code>scan</code>, <code>sample</code>.</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-properties data-lang=properties><span style=display:flex><span><span style=color:#c4a000>flo [...]
+</span></span><span style=display:flex><span><span style=color:#c4a000>floe.health.sample-limit</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>10000</span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>floe.health.persistence-enabled</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>true</span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>floe.health.max-reports-per-table</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>100</span>
+</span></span></code></pre></div><p>The <code>metadata</code> mode is fast but only sees file-level statistics. Use <code>scan</code> or <code>sample</code> when you need accurate small-file detection based on actual file sizes.</p><h2 id=automated-scheduling id=automated-scheduling>Automated Scheduling<a class=heading-anchor href=#automated-scheduling aria-label=Anchor>🔗</a></h2><p>The scheduler computes a debt score per table based on health issues, time since last maintenance, and fai [...]
+</span></span><span style=display:flex><span><span style=color:#c4a000>floe.scheduler.max-tables-per-poll</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>10</span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>floe.scheduler.max-bytes-per-hour</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>10737418240</span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>floe.scheduler.failure-backoff-threshold</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>3</span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>floe.scheduler.failure-backoff-hours</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>6</span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>floe.scheduler.zero-change-threshold</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>5</span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>floe.scheduler.condition-based-triggering-enabled</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>true</span>
+</span></span></code></pre></div><p>Key tuning parameters:</p><ul><li><code>max-bytes-per-hour</code>: Caps total bytes rewritten to avoid overwhelming storage I/O</li><li><code>failure-backoff-threshold</code> / <code>failure-backoff-hours</code>: Prevents repeatedly retrying failing tables</li><li><code>zero-change-threshold</code>: Reduces frequency for tables that consistently have no work to do</li></ul><h2 id=signal-based-triggering id=signal-based-triggering>Signal-Based Triggerin [...]
+</span></span></span><span style=display:flex><span> -H <span style=color:#4e9a06>"Content-Type: application/json"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -d <span style=color:#4e9a06>'{
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "name": "smart-compaction",
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "tablePattern": "demo.test.*",
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "priority": 100,
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "rewriteDataFiles": {
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "strategy": "BINPACK",
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "targetFileSizeBytes": 134217728
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> },
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "triggerConditions": {
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "smallFilePercentageAbove": 20,
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "deleteFileCountAbove": 50,
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "minIntervalMinutes": 60
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> }
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> }'</span>
+</span></span></code></pre></div><p>Triggers when any condition is met (default OR logic) or when all conditions are met if <code>triggerLogic</code> is set to <code>AND</code>, and the min interval has elapsed.</p><p>For critical tables, force execution when max delay is exceeded:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-json data-lang=json><span style=display:flex>< [...]
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"triggerConditions"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"smallFilePercentageAbove"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#0000cf;font-weight:700>30</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"criticalPipeline"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#204a87;font-weight:700>true</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"criticalPipelineMaxDelayMinutes"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#0000cf;font-weight:700>360</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>}</span>
+</span></span><span style=display:flex><span><span style=color:#000;font-weight:700>}</span>
+</span></span></code></pre></div><p>Policies without <code>triggerConditions</code> run whenever the scheduler picks them up, preserving the original behavior.</p><h2 id=execution-engines id=execution-engines>Execution Engines<a class=heading-anchor href=#execution-engines aria-label=Anchor>🔗</a></h2><p>Floe supports Spark (via Livy) and Trino as execution engines.</p><p>Spark configuration:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-siz [...]
+</span></span><span style=display:flex><span><span style=color:#000>FLOE_LIVY_URL</span><span style=color:#ce5c00;font-weight:700>=</span>http://livy:8998
+</span></span></code></pre></div><p>Trino configuration:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span><span style=color:#000>FLOE_ENGINE_TYPE</span><span style=color:#ce5c00;font-weight:700>=</span>TRINO
+</span></span><span style=display:flex><span><span style=color:#000>FLOE_TRINO_JDBC_URL</span><span style=color:#ce5c00;font-weight:700>=</span>jdbc:trino://trino:8080
+</span></span><span style=display:flex><span><span style=color:#000>FLOE_TRINO_CATALOG</span><span style=color:#ce5c00;font-weight:700>=</span>demo
</span></span></code></pre></div><h2 id=security id=security>Security<a class=heading-anchor href=#security aria-label=Anchor>🔗</a></h2><ul><li>Enable authentication: <code>FLOE_AUTH_ENABLED=true</code></li><li>Floe uses its own storage credentials; Polaris credentials are only used for catalog access</li><li>Run Floe in the same network as Polaris and engines</li></ul><h2 id=conclusion id=conclusion>Conclusion<a class=heading-anchor href=#conclusion aria-label=Anchor>🔗</a></h2><p>Apache [...]
\ No newline at end of file
diff --git a/blog/2026/02/19/apache-polaris-graduates-to-top-level-project/index.html b/blog/2026/02/19/apache-polaris-graduates-to-top-level-project/index.html
index a4048f4b86..a7807474f7 100644
--- a/blog/2026/02/19/apache-polaris-graduates-to-top-level-project/index.html
+++ b/blog/2026/02/19/apache-polaris-graduates-to-top-level-project/index.html
@@ -6,7 +6,7 @@ What is Apache Polaris?🔗 For those who are new to the project, Polaris is a c
This milestone marks a significant pivotal point for the project, moving from a promising proposal to a mature, community-governed standard for data cataloging and access control in the open data lakehouse.
What is Apache Polaris?🔗 For those who are new to the project, Polaris is a cloud-native, open-source catalog for Apache Iceberg. It provides a centralized service to manage your data across different engines and clouds, ensuring that your Iceberg tables remain interoperable and secure."><meta itemprop=datePublished content="2026-02-19T00:00:00+00:00"><meta itemprop=dateModified content="2026-02-19T00:00:00+00:00"><meta itemprop=wordCount content="458"><meta name=twitter:card content="su [...]
This milestone marks a significant pivotal point for the project, moving from a promising proposal to a mature, community-governed standard for data cataloging and access control in the open data lakehouse.
-What is Apache Polaris?🔗 For those who are new to the project, Polaris is a cloud-native, open-source catalog for Apache Iceberg. It provides a centralized service to manage your data across different engines and clouds, ensuring that your Iceberg tables remain interoperable and secure."><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous>< [...]
+What is Apache Polaris?🔗 For those who are new to the project, Polaris is a cloud-native, open-source catalog for Apache Iceberg. It provides a centralized service to manage your data across different engines and clouds, ensuring that your Iceberg tables remain interoperable and secure."><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous>< [...]
<label for=m-blog20260404build-a-local-open-data-lakehouse-with-k3d-apache-ozone-apache-polaris-and-trino-check><a href=/blog/2026/04/04/build-a-local-open-data-lakehouse-with-k3d-apache-ozone-apache-polaris-and-trino/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-blog20260404build-a-local-open-data-lakehouse-with-k3d-apache-ozone-apache-polaris-and-trino><span>Build a Local Open Data Lakehouse with k3d, Apache Ozone, Apache Polaris and Trino</span></a></label></li>< [...]
<label for=m-blog20260329introducing-the-setup-command-in-apache-polaris-check><a href=/blog/2026/03/29/introducing-the-setup-command-in-apache-polaris/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-blog20260329introducing-the-setup-command-in-apache-polaris><span>Introducing the setup Command in Apache Polaris</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child active-path" id=m-blog20260219apache-polaris-graduates-t [...]
<label for=m-blog20260219apache-polaris-graduates-to-top-level-project-check><a href=/blog/2026/02/19/apache-polaris-graduates-to-top-level-project/ class="align-left ps-0 active td-sidebar-link td-sidebar-link__page" id=m-blog20260219apache-polaris-graduates-to-top-level-project><span class=td-sidebar-nav-active-item>Apache Polaris Graduates to Top Level Project!</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-blog20260204floe- [...]
diff --git a/blog/2026/03/29/introducing-the-setup-command-in-apache-polaris/index.html b/blog/2026/03/29/introducing-the-setup-command-in-apache-polaris/index.html
index 7d2b5e6d75..6c60b3ed2a 100644
--- a/blog/2026/03/29/introducing-the-setup-command-in-apache-polaris/index.html
+++ b/blog/2026/03/29/introducing-the-setup-command-in-apache-polaris/index.html
@@ -1,8 +1,8 @@
<!doctype html><html itemscope itemtype=http://schema.org/WebPage lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon.png sizes=100x100><link rel=icon type=image/png href=/favicons/android-ch [...]
To simplify this workflow, the Apache Polaris Python CLI now includes a setup command. This feature introduces an infrastructure-as-code approach, allowing you to define your Polaris configuration in a single YAML file and apply it with a single command."><meta property="og:url" content="https://polaris.apache.org/blog/2026/03/29/introducing-the-setup-command-in-apache-polaris/"><meta property="og:site_name" content="Apache Polaris"><meta property="og:title" content="Introducing the setu [...]
To simplify this workflow, the Apache Polaris Python CLI now includes a setup command. This feature introduces an infrastructure-as-code approach, allowing you to define your Polaris configuration in a single YAML file and apply it with a single command."><meta property="og:locale" content="en_us"><meta property="og:type" content="article"><meta property="article:section" content="blog"><meta property="article:published_time" content="2026-03-29T00:00:00+00:00"><meta property="article:mo [...]
-To simplify this workflow, the Apache Polaris Python CLI now includes a setup command. This feature introduces an infrastructure-as-code approach, allowing you to define your Polaris configuration in a single YAML file and apply it with a single command."><meta itemprop=datePublished content="2026-03-29T00:00:00+00:00"><meta itemprop=dateModified content="2026-03-29T00:00:00+00:00"><meta itemprop=wordCount content="446"><meta name=twitter:card content="summary"><meta name=twitter:title c [...]
-To simplify this workflow, the Apache Polaris Python CLI now includes a setup command. This feature introduces an infrastructure-as-code approach, allowing you to define your Polaris configuration in a single YAML file and apply it with a single command."><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27 [...]
+To simplify this workflow, the Apache Polaris Python CLI now includes a setup command. This feature introduces an infrastructure-as-code approach, allowing you to define your Polaris configuration in a single YAML file and apply it with a single command."><meta itemprop=datePublished content="2026-03-29T00:00:00+00:00"><meta itemprop=dateModified content="2026-03-29T00:00:00+00:00"><meta itemprop=wordCount content="426"><meta name=twitter:card content="summary"><meta name=twitter:title c [...]
+To simplify this workflow, the Apache Polaris Python CLI now includes a setup command. This feature introduces an infrastructure-as-code approach, allowing you to define your Polaris configuration in a single YAML file and apply it with a single command."><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27 [...]
<label for=m-blog20260404build-a-local-open-data-lakehouse-with-k3d-apache-ozone-apache-polaris-and-trino-check><a href=/blog/2026/04/04/build-a-local-open-data-lakehouse-with-k3d-apache-ozone-apache-polaris-and-trino/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-blog20260404build-a-local-open-data-lakehouse-with-k3d-apache-ozone-apache-polaris-and-trino><span>Build a Local Open Data Lakehouse with k3d, Apache Ozone, Apache Polaris and Trino</span></a></label></li>< [...]
<label for=m-blog20260329introducing-the-setup-command-in-apache-polaris-check><a href=/blog/2026/03/29/introducing-the-setup-command-in-apache-polaris/ class="align-left ps-0 active td-sidebar-link td-sidebar-link__page" id=m-blog20260329introducing-the-setup-command-in-apache-polaris><span class=td-sidebar-nav-active-item>Introducing the setup Command in Apache Polaris</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-blog202602 [...]
<label for=m-blog20260219apache-polaris-graduates-to-top-level-project-check><a href=/blog/2026/02/19/apache-polaris-graduates-to-top-level-project/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-blog20260219apache-polaris-graduates-to-top-level-project><span>Apache Polaris Graduates to Top Level Project!</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-blog20260204floe-and-apache-polaris-policy-driven-table-m [...]
@@ -15,36 +15,36 @@ To simplify this workflow, the Apache Polaris Python CLI now includes a setup co
<label for=m-blog20250919apache-polaris-110-incubating-has-been-released-check><a href=/blog/2025/09/19/apache-polaris-1.1.0-incubating-has-been-released/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-blog20250919apache-polaris-110-incubating-has-been-released><span>Apache Polaris 1.1.0-incubating has been released!</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-blog20250915doris-x-polaris-building-unified- [...]
<label for=m-blog20250915doris-x-polaris-building-unified-data-lakehouse-with-iceberg-rest-catalog-a-practical-guide-check><a href=/blog/2025/09/15/doris-x-polaris-building-unified-data-lakehouse-with-iceberg-rest-catalog-a-practical-guide/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-blog20250915doris-x-polaris-building-unified-data-lakehouse-with-iceberg-rest-catalog-a-practical-guide><span>Doris X Polaris: Building Unified Data Lakehouse with Iceberg REST Catalog [...]
<label for=m-blog20250820apache-polaris-101-incubating-has-been-released-check><a href=/blog/2025/08/20/apache-polaris-1.0.1-incubating-has-been-released/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-blog20250820apache-polaris-101-incubating-has-been-released><span>Apache Polaris 1.0.1-incubating has been released!</span></a></label></li></ul></li></ul></nav></div></aside><main class="col-12 col-md-9 col-xl-10 ps-md-5 pe-md-4" role=main><a class=td-rss-button title= [...]
-<time datetime=2026-03-29 class=text-body-secondary>Sunday, March 29, 2026</time></div><header class=article-meta></header><h2 id=introduction id=introduction>Introduction<a class=heading-anchor href=#introduction aria-label=Anchor>🔗</a></h2><p>As data platforms grow, managing Apache Polaris entities—such as catalogs, principals, and their associated roles—quickly becomes a complex orchestration problem. Traditionally, setting up a new Apache Polaris environment meant executing a series [...]
-</span></span></code></pre></div><p>This generates a readable YAML file containing principals, principal roles, catalogs, and their associated namespaces and catalog roles.</p><h2 id=applying-a-configuration id=applying-a-configuration>Applying a Configuration<a class=heading-anchor href=#applying-a-configuration aria-label=Anchor>🔗</a></h2><p>To bootstrap a new environment or extend an existing one, use the <code>apply</code> subcommand. This command reads your YAML file and performs th [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span><span style=color:#8f5902;font-style:italic># Global Entities</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span><span style=color:#8f5902;font-style:italic># ==================================</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span><span style=color:#204a87;font-weight:700>principals</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>quickstart_user</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>roles</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span><span style=color:#f8f8f8> </span>- <span style=color:#000>quickstart_user_role</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span><span style=color:#204a87;font-weight:700>principal_roles</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">10</span><span><span style=color:#f8f8f8> </span>- <span style=color:#000>quickstart_user_role</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">11</span><span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">12</span><span><span style=color:#8f5902;font-style:italic># ==================================</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">13</span><span><span style=color:#8f5902;font-style:italic># Catalog-Specific Entities</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">14</span><span><span style=color:#8f5902;font-style:italic># ==================================</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">15</span><span><span style=color:#204a87;font-weight:700>catalogs</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">16</span><span><span style=color:#f8f8f8> </span>- <span style=color:#204a87;font-weight:700>name</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"quickstart_catalog"</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">17</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>storage_type</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"file"</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">18</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>default_base_location</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"file:///var/tmp/quickstart_catalog/"</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">19</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>allowed_locations</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">20</span><span><span style=color:#f8f8f8> </span>- <span style=color:#4e9a06>"file:///var/tmp/quickstart_catalog/"</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">21</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>roles</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">22</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>quickstart_catalog_role</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">23</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>assign_to</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">24</span><span><span style=color:#f8f8f8> </span>- <span style=color:#000>quickstart_user_role</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">25</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>privileges</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">26</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>catalog</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">27</span><span><span style=color:#f8f8f8> </span>- <span style=color:#000>CATALOG_MANAGE_CONTENT</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">28</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>namespaces</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">29</span><span><span style=color:#f8f8f8> </span>- <span style=color:#000>dev_namespace</span><span style=color:#f8f8f8>
-</span></span></span></code></pre></div><h3 id=applying-the-setup id=applying-the-setup>Applying the Setup<a class=heading-anchor href=#applying-the-setup aria-label=Anchor>🔗</a></h3><p>Before making any changes, you can preview what will be executed using the <code>--dry-run</code> flag:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display [...]
-</span></span></code></pre></div><p>Once satisfied, run the command to apply the changes:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span>polaris setup apply site/content/guides/assets/polaris/simple [...]
+<time datetime=2026-03-29 class=text-body-secondary>Sunday, March 29, 2026</time></div><header class=article-meta></header><h2 id=introduction id=introduction>Introduction<a class=heading-anchor href=#introduction aria-label=Anchor>🔗</a></h2><p>As data platforms grow, managing Apache Polaris entities—such as catalogs, principals, and their associated roles—quickly becomes a complex orchestration problem. Traditionally, setting up a new Apache Polaris environment meant executing a series [...]
+</span></span></code></pre></div><p>This generates a readable YAML file containing principals, principal roles, catalogs, and their associated namespaces and catalog roles.</p><h2 id=applying-a-configuration id=applying-a-configuration>Applying a Configuration<a class=heading-anchor href=#applying-a-configuration aria-label=Anchor>🔗</a></h2><p>To bootstrap a new environment or extend an existing one, use the <code>apply</code> subcommand. This command reads your YAML file and performs th [...]
+</span></span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># Global Entities</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># ==================================</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>principals</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>quickstart_user</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>roles</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span>- <span style=color:#000>quickstart_user_role</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>principal_roles</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span>- <span style=color:#000>quickstart_user_role</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># ==================================</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># Catalog-Specific Entities</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># ==================================</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>catalogs</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span>- <span style=color:#204a87;font-weight:700>name</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"quickstart_catalog"</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>storage_type</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"file"</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>default_base_location</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"file:///var/tmp/quickstart_catalog/"</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>allowed_locations</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span>- <span style=color:#4e9a06>"file:///var/tmp/quickstart_catalog/"</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>roles</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>quickstart_catalog_role</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>assign_to</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span>- <span style=color:#000>quickstart_user_role</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>privileges</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>catalog</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span>- <span style=color:#000>CATALOG_MANAGE_CONTENT</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>namespaces</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span>- <span style=color:#000>dev_namespace</span><span style=color:#f8f8f8>
+</span></span></span></code></pre></div><h3 id=applying-the-setup id=applying-the-setup>Applying the Setup<a class=heading-anchor href=#applying-the-setup aria-label=Anchor>🔗</a></h3><p>Before making any changes, you can preview what will be executed using the <code>--dry-run</code> flag:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display [...]
+</span></span></code></pre></div><p>Once satisfied, run the command to apply the changes:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span>polaris setup apply site/content/guides/assets/polaris/simple-setup-config.yaml
</span></span></code></pre></div><h2 id=known-limitations id=known-limitations>Known Limitations<a class=heading-anchor href=#known-limitations aria-label=Anchor>🔗</a></h2><p>The current implementation focuses on simplifying initial setup, with a few limitations to be aware of:</p><ul><li><strong>Non-declarative updates</strong>: The command is create-only. If an entity already exists, it will be skipped rather than updated. There is no state reconciliation yet.</li><li><strong>Policy at [...]
\ No newline at end of file
diff --git a/blog/2026/04/04/build-a-local-open-data-lakehouse-with-k3d-apache-ozone-apache-polaris-and-trino/index.html b/blog/2026/04/04/build-a-local-open-data-lakehouse-with-k3d-apache-ozone-apache-polaris-and-trino/index.html
index 81449a18d4..1ec77a5d00 100644
--- a/blog/2026/04/04/build-a-local-open-data-lakehouse-with-k3d-apache-ozone-apache-polaris-and-trino/index.html
+++ b/blog/2026/04/04/build-a-local-open-data-lakehouse-with-k3d-apache-ozone-apache-polaris-and-trino/index.html
@@ -1,8 +1,8 @@
<!doctype html><html itemscope itemtype=http://schema.org/WebPage lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon.png sizes=100x100><link rel=icon type=image/png href=/favicons/android-ch [...]
Why This Stack?🔗 The modern open data lakehouse is built on open standards: Apache Iceberg as the table format, a REST catalog to manage metadata, object storage for the actual files and a decoupled compute engine for queries. This separation lets you swap any layer without rewriting the others."><meta property="og:url" content="https://polaris.apache.org/blog/2026/04/04/build-a-local-open-data-lakehouse-with-k3d-apache-ozone-apache-polaris-and-trino/"><meta property="og:site_name" conte [...]
Why This Stack?🔗 The modern open data lakehouse is built on open standards: Apache Iceberg as the table format, a REST catalog to manage metadata, object storage for the actual files and a decoupled compute engine for queries. This separation lets you swap any layer without rewriting the others."><meta property="og:locale" content="en_us"><meta property="og:type" content="article"><meta property="article:section" content="blog"><meta property="article:published_time" content="2026-04-04T [...]
-Why This Stack?🔗 The modern open data lakehouse is built on open standards: Apache Iceberg as the table format, a REST catalog to manage metadata, object storage for the actual files and a decoupled compute engine for queries. This separation lets you swap any layer without rewriting the others."><meta itemprop=datePublished content="2026-04-04T00:00:00+00:00"><meta itemprop=dateModified content="2026-04-04T00:00:00+00:00"><meta itemprop=wordCount content="2693"><meta name=twitter:card c [...]
-Why This Stack?🔗 The modern open data lakehouse is built on open standards: Apache Iceberg as the table format, a REST catalog to manage metadata, object storage for the actual files and a decoupled compute engine for queries. This separation lets you swap any layer without rewriting the others."><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=an [...]
+Why This Stack?🔗 The modern open data lakehouse is built on open standards: Apache Iceberg as the table format, a REST catalog to manage metadata, object storage for the actual files and a decoupled compute engine for queries. This separation lets you swap any layer without rewriting the others."><meta itemprop=datePublished content="2026-04-04T00:00:00+00:00"><meta itemprop=dateModified content="2026-04-04T00:00:00+00:00"><meta itemprop=wordCount content="2490"><meta name=twitter:card c [...]
+Why This Stack?🔗 The modern open data lakehouse is built on open standards: Apache Iceberg as the table format, a REST catalog to manage metadata, object storage for the actual files and a decoupled compute engine for queries. This separation lets you swap any layer without rewriting the others."><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=an [...]
<label for=m-blog20260404build-a-local-open-data-lakehouse-with-k3d-apache-ozone-apache-polaris-and-trino-check><a href=/blog/2026/04/04/build-a-local-open-data-lakehouse-with-k3d-apache-ozone-apache-polaris-and-trino/ class="align-left ps-0 active td-sidebar-link td-sidebar-link__page" id=m-blog20260404build-a-local-open-data-lakehouse-with-k3d-apache-ozone-apache-polaris-and-trino><span class=td-sidebar-nav-active-item>Build a Local Open Data Lakehouse with k3d, Apache Ozone, Apache Po [...]
<label for=m-blog20260329introducing-the-setup-command-in-apache-polaris-check><a href=/blog/2026/03/29/introducing-the-setup-command-in-apache-polaris/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-blog20260329introducing-the-setup-command-in-apache-polaris><span>Introducing the setup Command in Apache Polaris</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-blog20260219apache-polaris-graduates-to-top-level- [...]
<label for=m-blog20260219apache-polaris-graduates-to-top-level-project-check><a href=/blog/2026/02/19/apache-polaris-graduates-to-top-level-project/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-blog20260219apache-polaris-graduates-to-top-level-project><span>Apache Polaris Graduates to Top Level Project!</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-blog20260204floe-and-apache-polaris-policy-driven-table-m [...]
@@ -41,56 +41,56 @@ credentials to Trino for each table access (credential vending). Trino would the
those temporary credentials to hit S3. However, Ozone has no STS endpoint currently, so credential
vending doesn’t work here. Instead, we configure <code>stsUnavailable: true</code> on the catalog and
give Trino static Ozone credentials directly in <code>trino-values.yaml</code>. The architecture is
-otherwise identical to a production deployment.</p></blockquote><hr><h2 id=prerequisites id=prerequisites>Prerequisites<a class=heading-anchor href=#prerequisites aria-label=Anchor>🔗</a></h2><p>Before starting, make sure you have the following installed:</p><ul><li><strong>Docker Engine</strong> (e.g., via Docker Desktop or Colima) — k3d runs Kubernetes inside Docker</li><li><strong>k3d</strong> ≥ v5.x — <code>brew install k3d</code> / <a href=https://k3d.io>k3d.io</a></li><li><strong>ku [...]
+otherwise identical to a production deployment.</p></blockquote><hr><h2 id=prerequisites id=prerequisites>Prerequisites<a class=heading-anchor href=#prerequisites aria-label=Anchor>🔗</a></h2><p>Before starting, make sure you have the following installed:</p><ul><li><strong>Docker Engine</strong> (e.g., via Docker Desktop or Colima) — k3d runs Kubernetes inside Docker</li><li><strong>k3d</strong> ≥ v5.x — <code>brew install k3d</code> / <a href=https://k3d.io>k3d.io</a></li><li><strong>ku [...]
</span></span></code></pre></div></li></ul><p><strong>Minimum hardware:</strong> 8 GB RAM and 4 CPU cores recommended. Ozone is resource-hungry.</p><hr><h2 id=step-1--create-a-k3d-cluster id=step-1--create-a-k3d-cluster>Step 1 — Create a k3d Cluster<a class=heading-anchor href=#step-1--create-a-k3d-cluster aria-label=Anchor>🔗</a></h2><p>We create a k3d cluster with Traefik (k3d’s built-in ingress controller) enabled and map
host port <strong>8080</strong> to the cluster’s load balancer port 80. This lets us use clean
host-based routing without touching <code>/etc/hosts</code>, thanks to <a href=https://nip.io>nip.io</a> — a
free public wildcard DNS that resolves anything like <code>*.127.0.0.1.nip.io</code> to <code>127.0.0.1</code>
automatically, with zero configuration.</p><blockquote><p><strong>Offline / no internet?</strong> nip.io requires a DNS lookup. If you’re working offline, add
-this to <code>/etc/hosts</code> instead and everything will work identically:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span>sudo tee -a /etc/hosts <span style=color:#4e9a06><<EOF
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#4e9a06>127.0.0.1 polaris.127.0.0.1.nip.io trino.127.0.0.1.nip.io
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span><span style=color:#4e9a06>EOF</span>
-</span></span></code></pre></div></blockquote><p>Our service URLs will be:</p><table><thead><tr><th>Service</th><th>URL</th></tr></thead><tbody><tr><td>Apache Polaris</td><td><code>http://polaris.127.0.0.1.nip.io:8080</code></td></tr><tr><td>Trino Web UI</td><td><code>http://trino.127.0.0.1.nip.io:8080</code></td></tr></tbody></table><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=langu [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> --servers <span style=color:#0000cf;font-weight:700>1</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> --agents <span style=color:#0000cf;font-weight:700>2</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> -p <span style=color:#4e9a06>"8080:80@loadbalancer"</span>
-</span></span></code></pre></div><p>Verify the cluster is up:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span>kubectl cluster-info
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span>kubectl get nodes
+this to <code>/etc/hosts</code> instead and everything will work identically:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span>sudo tee -a /etc/hosts <span style=color:#4e9a06><<EOF
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06>127.0.0.1 polaris.127.0.0.1.nip.io trino.127.0.0.1.nip.io
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06>EOF</span>
+</span></span></code></pre></div></blockquote><p>Our service URLs will be:</p><table><thead><tr><th>Service</th><th>URL</th></tr></thead><tbody><tr><td>Apache Polaris</td><td><code>http://polaris.127.0.0.1.nip.io:8080</code></td></tr><tr><td>Trino Web UI</td><td><code>http://trino.127.0.0.1.nip.io:8080</code></td></tr></tbody></table><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=langu [...]
+</span></span></span><span style=display:flex><span> --servers <span style=color:#0000cf;font-weight:700>1</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --agents <span style=color:#0000cf;font-weight:700>2</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -p <span style=color:#4e9a06>"8080:80@loadbalancer"</span>
+</span></span></code></pre></div><p>Verify the cluster is up:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span>kubectl cluster-info
+</span></span><span style=display:flex><span>kubectl get nodes
</span></span></code></pre></div><hr><h2 id=step-2--install-apache-ozone id=step-2--install-apache-ozone>Step 2 — Install Apache Ozone<a class=heading-anchor href=#step-2--install-apache-ozone aria-label=Anchor>🔗</a></h2><p>Apache Ozone is the storage foundation of our stack. It provides an S3-compatible API
(via its S3 Gateway service) that both Polaris and Trino will use to read/write Iceberg
-table files.</p><h3 id=add-the-helm-repo-and-install id=add-the-helm-repo-and-install>Add the Helm repo and install<a class=heading-anchor href=#add-the-helm-repo-and-install aria-label=Anchor>🔗</a></h3><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right: [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span>helm repo update
+table files.</p><h3 id=add-the-helm-repo-and-install id=add-the-helm-repo-and-install>Add the Helm repo and install<a class=heading-anchor href=#add-the-helm-repo-and-install aria-label=Anchor>🔗</a></h3><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span>helm repo add ozone https://apache.github.io/ozone-helm-charts/
+</span></span><span style=display:flex><span>helm repo update
</span></span></code></pre></div><p>For local development, we use a minimal <code>values.yaml</code> to reduce resource usage and expose
-the S3 Gateway as a ClusterIP service (we’ll use <code>kubectl port-forward</code> to access it locally):</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-yaml data-lang=yaml><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 1</span><span><span style=color:#8f5902;font-style:i [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span><span style=color:#204a87;font-weight:700>scm</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>replicaCount</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#0000cf;font-weight:700>1</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span><span style=color:#204a87;font-weight:700>om</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>replicaCount</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#0000cf;font-weight:700>1</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span><span style=color:#204a87;font-weight:700>datanode</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>replicaCount</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#0000cf;font-weight:700>3</span><span style=color:#f8f8f8> </span><span style=color:#8f5902;font-style:italic># min [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">10</span><span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">11</span><span><span style=color:#204a87;font-weight:700>s3g</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">12</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>replicaCount</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#0000cf;font-weight:700>1</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">13</span><span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">14</span><span><span style=color:#8f5902;font-style:italic># Disable TLS for local dev</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">15</span><span><span style=color:#204a87;font-weight:700>tls</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">16</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>enabled</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>false</span><span style=color:#f8f8f8>
-</span></span></span></code></pre></div><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span>helm install ozone ozone/ozone <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> --namespace ozone <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> --create-namespace <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> --values ozone-values.yaml <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span> --wait --timeout 5m
-</span></span></code></pre></div><p>Watch the pods come up:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span>kubectl get pods -n ozone -w
+the S3 Gateway as a ClusterIP service (we’ll use <code>kubectl port-forward</code> to access it locally):</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-yaml data-lang=yaml><span style=display:flex><span><span style=color:#8f5902;font-style:italic># ozone-values.yaml</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>scm</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>replicaCount</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#0000cf;font-weight:700>1</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>om</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>replicaCount</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#0000cf;font-weight:700>1</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>datanode</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>replicaCount</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#0000cf;font-weight:700>3</span><span style=color:#f8f8f8> </span><span style=color:#8f5902;font-style:italic># minimum for block placement</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>s3g</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>replicaCount</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#0000cf;font-weight:700>1</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># Disable TLS for local dev</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>tls</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>enabled</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>false</span><span style=color:#f8f8f8>
+</span></span></span></code></pre></div><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span>helm install ozone ozone/ozone <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --namespace ozone <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --create-namespace <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --values ozone-values.yaml <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --wait --timeout 5m
+</span></span></code></pre></div><p>Watch the pods come up:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span>kubectl get pods -n ozone -w
</span></span></code></pre></div><p>You should see pods for <code>scm</code> (Storage Container Manager), <code>om</code> (Ozone Manager),
<code>datanode-0/1/2</code>, and <code>s3g</code>.</p><h3 id=create-a-bucket-via-the-s3-api id=create-a-bucket-via-the-s3-api>Create a bucket via the S3 API<a class=heading-anchor href=#create-a-bucket-via-the-s3-api aria-label=Anchor>🔗</a></h3><p>We create the bucket using the AWS CLI against the Ozone S3 Gateway. This ensures the
bucket is owned by <code>testuser</code> — the same credentials Polaris and Trino will use — so
-path resolution is guaranteed to work.</p><p>Make sure the port-forward is running in a separate terminal:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span>kubectl port-forward -n ozone svc/ozone-s3g- [...]
-</span></span></code></pre></div><p>Then create the bucket:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span><span style=color:#000>AWS_ACCESS_KEY_ID</span><span style=color:#ce5c00;font-weight:700>=< [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> aws s3 mb s3://warehouse --endpoint-url http://localhost:9878
-</span></span></code></pre></div><p>Verify it was created:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span><span style=color:#000>AWS_ACCESS_KEY_ID</span><span style=color:#ce5c00;font-weight:700>=</ [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> aws s3 ls --endpoint-url http://localhost:9878
+path resolution is guaranteed to work.</p><p>Make sure the port-forward is running in a separate terminal:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span>kubectl port-forward -n ozone svc/ozone-s3g-rest 9878:9878
+</span></span></code></pre></div><p>Then create the bucket:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span><span style=color:#000>AWS_ACCESS_KEY_ID</span><span style=color:#ce5c00;font-weight:700>=</span>testuser <span style=color:#000>AWS_SECRET_ACCESS_KEY</span><span style=color:#ce5c00;font-weight:700>=</span>testpasswor [...]
+</span></span></span><span style=display:flex><span> aws s3 mb s3://warehouse --endpoint-url http://localhost:9878
+</span></span></code></pre></div><p>Verify it was created:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span><span style=color:#000>AWS_ACCESS_KEY_ID</span><span style=color:#ce5c00;font-weight:700>=</span>testuser <span style=color:#000>AWS_SECRET_ACCESS_KEY</span><span style=color:#ce5c00;font-weight:700>=</span>testpassword [...]
+</span></span></span><span style=display:flex><span> aws s3 ls --endpoint-url http://localhost:9878
</span></span></code></pre></div><p>You should see:</p><pre tabindex=0><code>YYYY-MM-DD HH:MM:SS warehouse
</code></pre><h3 id=s3-credentials-in-non-secure-mode id=s3-credentials-in-non-secure-mode>S3 credentials in non-secure mode<a class=heading-anchor href=#s3-credentials-in-non-secure-mode aria-label=Anchor>🔗</a></h3><p>Because we’re running Ozone without security (<code>ozone.security.enabled=false</code> — the default
for the Helm chart in local dev), the S3 Gateway accepts <strong>any</strong> access key and secret key.
@@ -100,114 +100,114 @@ OZONE_SECRET_KEY=testpassword
generate real per-user credentials backed by Kerberos.</p></blockquote><hr><h2 id=step-3--install-apache-polaris id=step-3--install-apache-polaris>Step 3 — Install Apache Polaris<a class=heading-anchor href=#step-3--install-apache-polaris aria-label=Anchor>🔗</a></h2><p>Apache Polaris is an open-source Iceberg REST catalog and an Apache Top-Level Project. It stores and
serves Iceberg table metadata and acts as the single source of truth for schema, partitioning,
and snapshot history. Trino (and any other Iceberg engine) talks to Polaris using the
-standard Iceberg REST API.</p><h3 id=add-the-helm-repo-and-install-1 id=add-the-helm-repo-and-install-1>Add the Helm repo and install<a class=heading-anchor href=#add-the-helm-repo-and-install-1 aria-label=Anchor>🔗</a></h3><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-selec [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span>helm repo update
-</span></span></code></pre></div><p>For local dev we override a few key values:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-yaml data-lang=yaml><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 1</span><span><span style=color:#8f5902;font-style:italic># polaris-values.yaml</spa [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span><span style=color:#8f5902;font-style:italic># Use in-memory persistence (good enough for local dev; loses state on pod restart)</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span><span style=color:#204a87;font-weight:700>persistence</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>type</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>in-memory</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span><span style=color:#204a87;font-weight:700>extraEnv</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span><span style=color:#f8f8f8> </span>- <span style=color:#204a87;font-weight:700>name</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>POLARIS_BOOTSTRAP_CREDENTIALS</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>value</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"POLARIS,root,polaris-secret"</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">10</span><span><span style=color:#f8f8f8> </span>- <span style=color:#204a87;font-weight:700>name</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>AWS_ACCESS_KEY_ID</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">11</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>valueFrom</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">12</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>secretKeyRef</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">13</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>name</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>polaris-ozone-secret</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">14</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>key</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>access-key</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">15</span><span><span style=color:#f8f8f8> </span>- <span style=color:#204a87;font-weight:700>name</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>AWS_SECRET_ACCESS_KEY</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">16</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>valueFrom</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">17</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>secretKeyRef</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">18</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>name</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>polaris-ozone-secret</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">19</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>key</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>secret-key</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">20</span><span><span style=color:#f8f8f8> </span>- <span style=color:#204a87;font-weight:700>name</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>AWS_REGION</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">21</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>value</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"us-east-1"</span><span style=color:#f8f8f8>
+standard Iceberg REST API.</p><h3 id=add-the-helm-repo-and-install-1 id=add-the-helm-repo-and-install-1>Add the Helm repo and install<a class=heading-anchor href=#add-the-helm-repo-and-install-1 aria-label=Anchor>🔗</a></h3><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span>helm repo add polaris https://downloads.apache.org/polaris [...]
+</span></span><span style=display:flex><span>helm repo update
+</span></span></code></pre></div><p>For local dev we override a few key values:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-yaml data-lang=yaml><span style=display:flex><span><span style=color:#8f5902;font-style:italic># polaris-values.yaml</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># Use in-memory persistence (good enough for local dev; loses state on pod restart)</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>persistence</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>type</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>in-memory</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>extraEnv</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span>- <span style=color:#204a87;font-weight:700>name</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>POLARIS_BOOTSTRAP_CREDENTIALS</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>value</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"POLARIS,root,polaris-secret"</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span>- <span style=color:#204a87;font-weight:700>name</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>AWS_ACCESS_KEY_ID</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>valueFrom</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>secretKeyRef</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>name</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>polaris-ozone-secret</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>key</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>access-key</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span>- <span style=color:#204a87;font-weight:700>name</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>AWS_SECRET_ACCESS_KEY</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>valueFrom</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>secretKeyRef</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>name</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>polaris-ozone-secret</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>key</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>secret-key</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span>- <span style=color:#204a87;font-weight:700>name</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>AWS_REGION</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>value</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"us-east-1"</span><span style=color:#f8f8f8>
</span></span></span></code></pre></div><blockquote><p><strong>How credentials work:</strong> <code>POLARIS_BOOTSTRAP_CREDENTIALS</code> sets the root principal on first boot
(format: <code>realm,clientId,clientSecret</code>). The <code>AWS_*</code> env vars give Polaris the static S3
credentials it uses when writing Iceberg metadata files to Ozone.</p><p>We use <code>stsUnavailable: true</code> in the catalog’s <code>storageConfigInfo</code> (see the next step) to tell Polaris that STS
is not available and to use the static credentials directly — while still propagating the custom S3
-endpoint and path-style settings to the FileIO client.</p></blockquote><p>Create the secret <strong>before</strong> installing Polaris:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span>kubectl create [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span>kubectl create secret generic polaris-ozone-secret <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> --namespace polaris <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> --from-literal<span style=color:#ce5c00;font-weight:700>=</span>access-key<span style=color:#ce5c00;font-weight:700>=</span>testuser <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span> --from-literal<span style=color:#ce5c00;font-weight:700>=</span>secret-key<span style=color:#ce5c00;font-weight:700>=</span>testpassword
-</span></span></code></pre></div><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span>helm upgrade --install polaris polaris/polaris <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> --namespace polaris <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> --create-namespace <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> --values polaris-values.yaml <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span> --wait --timeout 3m
-</span></span></code></pre></div><p>Verify:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span>kubectl get pods -n polaris
-</span></span></code></pre></div><p>Apply an Ingress so Polaris is reachable at <code>http://polaris.127.0.0.1.nip.io:8080</code>:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-yaml data-lang=yaml><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 1</span><span><span style=color:# [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span><span style=color:#204a87;font-weight:700>apiVersion</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>networking.k8s.io/v1</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span><span style=color:#204a87;font-weight:700>kind</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>Ingress</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span><span style=color:#204a87;font-weight:700>metadata</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>name</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>polaris</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>namespace</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>polaris</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>annotations</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>traefik.ingress.kubernetes.io/router.entrypoints</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>web</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span><span style=color:#204a87;font-weight:700>spec</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">10</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>rules</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">11</span><span><span style=color:#f8f8f8> </span>- <span style=color:#204a87;font-weight:700>host</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>polaris.127.0.0.1.nip.io</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">12</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>http</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">13</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>paths</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">14</span><span><span style=color:#f8f8f8> </span>- <span style=color:#204a87;font-weight:700>path</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>/</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">15</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>pathType</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>Prefix</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">16</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>backend</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">17</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>service</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">18</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>name</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>polaris</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">19</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>port</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">20</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>number</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#0000cf;font-weight:700>8181</span><span style=color:#f8f8f8>
-</span></span></span></code></pre></div><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span>kubectl apply -f polaris-ingress.yaml
-</span></span></code></pre></div><p>Verify it’s up:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span>curl http://polaris.127.0.0.1.nip.io:8080/api/catalog/v1/config
-</span></span></code></pre></div><h3 id=configure-polaris-via-the-rest-api id=configure-polaris-via-the-rest-api>Configure Polaris via the REST API<a class=heading-anchor href=#configure-polaris-via-the-rest-api aria-label=Anchor>🔗</a></h3><p>Polaris manages everything through its REST API. We need to:</p><ol><li>Get an access token using the root credentials</li><li>Create a <strong>principal</strong> (service account for Trino)</li><li>Create a <strong>catalog</strong> (backed by Ozone [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> -X POST http://polaris.127.0.0.1.nip.io:8080/api/catalog/v1/oauth/tokens <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> -H <span style=color:#4e9a06>"Content-Type: application/x-www-form-urlencoded"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> -d <span style=color:#4e9a06>"grant_type=client_credentials&client_id=root&client_secret=polaris-secret&scope=PRINCIPAL_ROLE:ALL"</span><span style=color:#204a87;font-weight:700>)</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">6</span><span><span style=color:#204a87>echo</span> <span style=color:#4e9a06>"HTTP </span><span style=color:#000>$TOKEN</span><span style=color:#4e9a06>"</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">7</span><span><span style=color:#000>TOKEN</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#204a87;font-weight:700>$(</span>jq -r <span style=color:#4e9a06>'.access_token'</span> /tmp/token.json<span style=color:#204a87;font-weight:700>)</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">8</span><span><span style=color:#204a87>echo</span> <span style=color:#4e9a06>"Token: </span><span style=color:#000>$TOKEN</span><span style=color:#4e9a06>"</span>
-</span></span></code></pre></div><h4 id=2-create-a-trino-principal-and-credentials id=2-create-a-trino-principal-and-credentials>2. Create a Trino principal and credentials<a class=heading-anchor href=#2-create-a-trino-principal-and-credentials aria-label=Anchor>🔗</a></h4><p>Polaris returns credentials <strong>only once</strong> at creation time — capture them immediately:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-web [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span> -H <span style=color:#4e9a06>"Authorization: Bearer </span><span style=color:#000>$TOKEN</span><span style=color:#4e9a06>"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span> -H <span style=color:#4e9a06>"Content-Type: application/json"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span> -o /tmp/principal.json -w <span style=color:#4e9a06>"%{http_code}"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span> -d <span style=color:#4e9a06>'{
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span><span style=color:#4e9a06> "name": "trino-principal",
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span><span style=color:#4e9a06> "type": "SERVICE"
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span><span style=color:#4e9a06> }'</span><span style=color:#204a87;font-weight:700>)</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">10</span><span><span style=color:#204a87>echo</span> <span style=color:#4e9a06>"HTTP </span><span style=color:#000>$CREDS</span><span style=color:#4e9a06>"</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">11</span><span><span style=color:#8f5902;font-style:italic># $CREDS holds only the status code; the JSON body is in /tmp/principal.json</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">12</span><span><span style=color:#000>TRINO_CLIENT_ID</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#204a87;font-weight:700>$(</span>jq -r <span style=color:#4e9a06>'.credentials.clientId'</span> /tmp/principal.json<span style=color:#204a87;font-weight:700>)</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">13</span><span><span style=color:#000>TRINO_CLIENT_SECRET</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#204a87;font-weight:700>$(</span>jq -r <span style=color:#4e9a06>'.credentials.clientSecret'</span> /tmp/principal.json<span style=color:#204a87;font-weight:700>)</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">14</span><span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">15</span><span><span style=color:#204a87>echo</span> <span style=color:#4e9a06>"Trino Client ID: </span><span style=color:#000>$TRINO_CLIENT_ID</span><span style=color:#4e9a06>"</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">16</span><span><span style=color:#204a87>echo</span> <span style=color:#4e9a06>"Trino Client Secret: </span><span style=color:#000>$TRINO_CLIENT_SECRET</span><span style=color:#4e9a06>"</span>
+endpoint and path-style settings to the FileIO client.</p></blockquote><p>Create the secret <strong>before</strong> installing Polaris:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span>kubectl create namespace polaris --dry-run<span style=color:#ce5c00;font-weight:700>=</span>client -o yaml <span style=color:#000;font-weight: [...]
+</span></span><span style=display:flex><span>kubectl create secret generic polaris-ozone-secret <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --namespace polaris <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --from-literal<span style=color:#ce5c00;font-weight:700>=</span>access-key<span style=color:#ce5c00;font-weight:700>=</span>testuser <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --from-literal<span style=color:#ce5c00;font-weight:700>=</span>secret-key<span style=color:#ce5c00;font-weight:700>=</span>testpassword
+</span></span></code></pre></div><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span>helm upgrade --install polaris polaris/polaris <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --namespace polaris <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --create-namespace <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --values polaris-values.yaml <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --wait --timeout 3m
+</span></span></code></pre></div><p>Verify:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span>kubectl get pods -n polaris
+</span></span></code></pre></div><p>Apply an Ingress so Polaris is reachable at <code>http://polaris.127.0.0.1.nip.io:8080</code>:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-yaml data-lang=yaml><span style=display:flex><span><span style=color:#8f5902;font-style:italic># polaris-ingress.yaml</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>apiVersion</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>networking.k8s.io/v1</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>kind</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>Ingress</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>metadata</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>name</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>polaris</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>namespace</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>polaris</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>annotations</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>traefik.ingress.kubernetes.io/router.entrypoints</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>web</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>spec</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>rules</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span>- <span style=color:#204a87;font-weight:700>host</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>polaris.127.0.0.1.nip.io</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>http</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>paths</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span>- <span style=color:#204a87;font-weight:700>path</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>/</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>pathType</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>Prefix</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>backend</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>service</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>name</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>polaris</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>port</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>number</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#0000cf;font-weight:700>8181</span><span style=color:#f8f8f8>
+</span></span></span></code></pre></div><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span>kubectl apply -f polaris-ingress.yaml
+</span></span></code></pre></div><p>Verify it’s up:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span>curl http://polaris.127.0.0.1.nip.io:8080/api/catalog/v1/config
+</span></span></code></pre></div><h3 id=configure-polaris-via-the-rest-api id=configure-polaris-via-the-rest-api>Configure Polaris via the REST API<a class=heading-anchor href=#configure-polaris-via-the-rest-api aria-label=Anchor>🔗</a></h3><p>Polaris manages everything through its REST API. We need to:</p><ol><li>Get an access token using the root credentials</li><li>Create a <strong>principal</strong> (service account for Trino)</li><li>Create a <strong>catalog</strong> (backed by Ozone [...]
+</span></span></span><span style=display:flex><span> -X POST http://polaris.127.0.0.1.nip.io:8080/api/catalog/v1/oauth/tokens <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -H <span style=color:#4e9a06>"Content-Type: application/x-www-form-urlencoded"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -d <span style=color:#4e9a06>"grant_type=client_credentials&client_id=root&client_secret=polaris-secret&scope=PRINCIPAL_ROLE:ALL"</span><span style=color:#204a87;font-weight:700>)</span>
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span><span style=color:#204a87>echo</span> <span style=color:#4e9a06>"HTTP </span><span style=color:#000>$TOKEN</span><span style=color:#4e9a06>"</span>
+</span></span><span style=display:flex><span><span style=color:#000>TOKEN</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#204a87;font-weight:700>$(</span>jq -r <span style=color:#4e9a06>'.access_token'</span> /tmp/token.json<span style=color:#204a87;font-weight:700>)</span>
+</span></span><span style=display:flex><span><span style=color:#204a87>echo</span> <span style=color:#4e9a06>"Token: </span><span style=color:#000>$TOKEN</span><span style=color:#4e9a06>"</span>
+</span></span></code></pre></div><h4 id=2-create-a-trino-principal-and-credentials id=2-create-a-trino-principal-and-credentials>2. Create a Trino principal and credentials<a class=heading-anchor href=#2-create-a-trino-principal-and-credentials aria-label=Anchor>🔗</a></h4><p>Polaris returns credentials <strong>only once</strong> at creation time — capture them immediately:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-web [...]
+</span></span></span><span style=display:flex><span> -H <span style=color:#4e9a06>"Authorization: Bearer </span><span style=color:#000>$TOKEN</span><span style=color:#4e9a06>"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -H <span style=color:#4e9a06>"Content-Type: application/json"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -o /tmp/principal.json -w <span style=color:#4e9a06>"%{http_code}"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -d <span style=color:#4e9a06>'{
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "name": "trino-principal",
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "type": "SERVICE"
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> }'</span><span style=color:#204a87;font-weight:700>)</span>
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span><span style=color:#204a87>echo</span> <span style=color:#4e9a06>"HTTP </span><span style=color:#000>$CREDS</span><span style=color:#4e9a06>"</span>
+</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># $CREDS holds only the status code; the JSON body is in /tmp/principal.json</span>
+</span></span><span style=display:flex><span><span style=color:#000>TRINO_CLIENT_ID</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#204a87;font-weight:700>$(</span>jq -r <span style=color:#4e9a06>'.credentials.clientId'</span> /tmp/principal.json<span style=color:#204a87;font-weight:700>)</span>
+</span></span><span style=display:flex><span><span style=color:#000>TRINO_CLIENT_SECRET</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#204a87;font-weight:700>$(</span>jq -r <span style=color:#4e9a06>'.credentials.clientSecret'</span> /tmp/principal.json<span style=color:#204a87;font-weight:700>)</span>
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span><span style=color:#204a87>echo</span> <span style=color:#4e9a06>"Trino Client ID: </span><span style=color:#000>$TRINO_CLIENT_ID</span><span style=color:#4e9a06>"</span>
+</span></span><span style=display:flex><span><span style=color:#204a87>echo</span> <span style=color:#4e9a06>"Trino Client Secret: </span><span style=color:#000>$TRINO_CLIENT_SECRET</span><span style=color:#4e9a06>"</span>
</span></span></code></pre></div><blockquote><p><strong>If you see HTTP 409</strong>, the principal already exists (e.g. from a previous attempt) and the
-secret cannot be retrieved again. Delete it and recreate:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span>curl -s -X DELETE http://polaris.127.0.0.1.nip.io:8080/api/management/v1/principals/trino-pri [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> -H <span style=color:#4e9a06>"Authorization: Bearer </span><span style=color:#000>$TOKEN</span><span style=color:#4e9a06>"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> -w <span style=color:#4e9a06>"\nHTTP %{http_code}"</span>
+secret cannot be retrieved again. Delete it and recreate:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span>curl -s -X DELETE http://polaris.127.0.0.1.nip.io:8080/api/management/v1/principals/trino-principal <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -H <span style=color:#4e9a06>"Authorization: Bearer </span><span style=color:#000>$TOKEN</span><span style=color:#4e9a06>"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -w <span style=color:#4e9a06>"\nHTTP %{http_code}"</span>
</span></span></code></pre></div><p>Then re-run the block above.</p></blockquote><p>Save these — you’ll use them in the Trino Helm values.</p><h4 id=3-create-a-catalog-backed-by-ozone id=3-create-a-catalog-backed-by-ozone>3. Create a catalog backed by Ozone<a class=heading-anchor href=#3-create-a-catalog-backed-by-ozone aria-label=Anchor>🔗</a></h4><p>We create an <strong>internal</strong> Polaris catalog and configure its default storage to use our
-Ozone S3 bucket.</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 1</span><span>curl -X POST http://polaris.127.0.0.1.nip.io:8080/api/management/v1/catalogs <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span> -H <span style=color:#4e9a06>"Authorization: Bearer </span><span style=color:#000>$TOKEN</span><span style=color:#4e9a06>"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span> -H <span style=color:#4e9a06>"Content-Type: application/json"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span> -w <span style=color:#4e9a06>"\nHTTP %{http_code}"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span> -d <span style=color:#4e9a06>'{
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span><span style=color:#4e9a06> "name": "ozone_catalog",
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span><span style=color:#4e9a06> "type": "INTERNAL",
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span><span style=color:#4e9a06> "properties": {
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span><span style=color:#4e9a06> "default-base-location": "s3://warehouse/iceberg"
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">10</span><span><span style=color:#4e9a06> },
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">11</span><span><span style=color:#4e9a06> "storageConfigInfo": {
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">12</span><span><span style=color:#4e9a06> "storageType": "S3",
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">13</span><span><span style=color:#4e9a06> "allowedLocations": ["s3://warehouse/"],
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">14</span><span><span style=color:#4e9a06> "endpoint": "http://ozone-s3g-rest.ozone.svc.cluster.local:9878",
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">15</span><span><span style=color:#4e9a06> "endpointInternal": "http://ozone-s3g-rest.ozone.svc.cluster.local:9878",
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">16</span><span><span style=color:#4e9a06> "stsUnavailable": true,
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">17</span><span><span style=color:#4e9a06> "pathStyleAccess": true
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">18</span><span><span style=color:#4e9a06> }
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">19</span><span><span style=color:#4e9a06> }'</span>
+Ozone S3 bucket.</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span>curl -X POST http://polaris.127.0.0.1.nip.io:8080/api/management/v1/catalogs <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -H <span style=color:#4e9a06>"Authorization: Bearer </span><span style=color:#000>$TOKEN</span><span style=color:#4e9a06>"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -H <span style=color:#4e9a06>"Content-Type: application/json"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -w <span style=color:#4e9a06>"\nHTTP %{http_code}"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -d <span style=color:#4e9a06>'{
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "name": "ozone_catalog",
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "type": "INTERNAL",
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "properties": {
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "default-base-location": "s3://warehouse/iceberg"
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> },
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "storageConfigInfo": {
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "storageType": "S3",
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "allowedLocations": ["s3://warehouse/"],
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "endpoint": "http://ozone-s3g-rest.ozone.svc.cluster.local:9878",
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "endpointInternal": "http://ozone-s3g-rest.ozone.svc.cluster.local:9878",
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "stsUnavailable": true,
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "pathStyleAccess": true
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> }
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> }'</span>
</span></span></code></pre></div><blockquote><p><strong>Note:</strong> Use <code>s3://</code> (not <code>s3a://</code>) in Polaris catalog config. Trino uses <code>s3a://</code> when
reading/writing files, but Polaris stores and validates locations using <code>s3://</code> internally.
<code>storageType: S3</code> is the correct type for any S3-compatible storage including Ozone</p><p>The critical fields in <code>storageConfigInfo</code> are:</p><ul><li><code>stsUnavailable: true</code> — tells Polaris not to call the AWS STS service for temporary
@@ -215,174 +215,174 @@ credentials (Ozone has no STS endpoint). Polaris will use the <code>AWS_*</code>
directly instead.</li><li><code>endpoint</code> / <code>endpointInternal</code> — the S3-compatible endpoint for Ozone, injected into the
<code>StorageAccessConfig.extraProperties</code> passed to <code>S3FileIO</code> so file writes go to Ozone.</li><li><code>pathStyleAccess: true</code> — forces path-style requests (<code>host/bucket/key</code>) instead of
virtual-hosted style (<code>bucket.host/key</code>), which Ozone requires.</li></ul></blockquote><h4 id=4-grant-the-principal-access-to-the-catalog id=4-grant-the-principal-access-to-the-catalog>4. Grant the principal access to the catalog<a class=heading-anchor href=#4-grant-the-principal-access-to-the-catalog aria-label=Anchor>🔗</a></h4><p>Polaris uses a three-tier RBAC model: <strong>principal → principal role → catalog role → privileges</strong>.
-We need to wire all of these together:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 1</span><span><span style=color:#8f5902;font-style:italic># 4a. Create a principal role</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span>curl -X POST <span style=color:#4e9a06>"http://polaris.127.0.0.1.nip.io:8080/api/management/v1/principal-roles"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span> -H <span style=color:#4e9a06>"Authorization: Bearer </span><span style=color:#000>$TOKEN</span><span style=color:#4e9a06>"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span> -H <span style=color:#4e9a06>"Content-Type: application/json"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span> -w <span style=color:#4e9a06>"\nHTTP %{http_code}"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span> -d <span style=color:#4e9a06>'{"principalRole": {"name": "trino-role"}}'</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span><span style=color:#8f5902;font-style:italic># 4b. Create a catalog role inside ozone_catalog</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span>curl -X POST <span style=color:#4e9a06>"http://polaris.127.0.0.1.nip.io:8080/api/management/v1/catalogs/ozone_catalog/catalog-roles"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">10</span><span> -H <span style=color:#4e9a06>"Authorization: Bearer </span><span style=color:#000>$TOKEN</span><span style=color:#4e9a06>"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">11</span><span> -H <span style=color:#4e9a06>"Content-Type: application/json"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">12</span><span> -w <span style=color:#4e9a06>"\nHTTP %{http_code}"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">13</span><span> -d <span style=color:#4e9a06>'{"catalogRole": {"name": "trino-catalog-role"}}'</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">14</span><span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">15</span><span><span style=color:#8f5902;font-style:italic># 4c. Grant CATALOG_MANAGE_CONTENT privilege to the catalog role</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">16</span><span>curl -X PUT <span style=color:#4e9a06>"http://polaris.127.0.0.1.nip.io:8080/api/management/v1/catalogs/ozone_catalog/catalog-roles/trino-catalog-role/grants"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">17</span><span> -H <span style=color:#4e9a06>"Authorization: Bearer </span><span style=color:#000>$TOKEN</span><span style=color:#4e9a06>"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">18</span><span> -H <span style=color:#4e9a06>"Content-Type: application/json"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">19</span><span> -w <span style=color:#4e9a06>"\nHTTP %{http_code}"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">20</span><span> -d <span style=color:#4e9a06>'{"grant": {"type": "catalog", "privilege": "CATALOG_MANAGE_CONTENT"}}'</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">21</span><span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">22</span><span><span style=color:#8f5902;font-style:italic># 4d. Assign the catalog role to the principal role</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">23</span><span>curl -X PUT <span style=color:#4e9a06>"http://polaris.127.0.0.1.nip.io:8080/api/management/v1/principal-roles/trino-role/catalog-roles/ozone_catalog"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">24</span><span> -H <span style=color:#4e9a06>"Authorization: Bearer </span><span style=color:#000>$TOKEN</span><span style=color:#4e9a06>"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">25</span><span> -H <span style=color:#4e9a06>"Content-Type: application/json"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">26</span><span> -w <span style=color:#4e9a06>"\nHTTP %{http_code}"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">27</span><span> -d <span style=color:#4e9a06>'{"catalogRole": {"name": "trino-catalog-role"}}'</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">28</span><span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">29</span><span><span style=color:#8f5902;font-style:italic># 4e. Assign the principal role to the trino principal</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">30</span><span>curl -X PUT <span style=color:#4e9a06>"http://polaris.127.0.0.1.nip.io:8080/api/management/v1/principals/trino-principal/principal-roles"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">31</span><span> -H <span style=color:#4e9a06>"Authorization: Bearer </span><span style=color:#000>$TOKEN</span><span style=color:#4e9a06>"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">32</span><span> -H <span style=color:#4e9a06>"Content-Type: application/json"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">33</span><span> -w <span style=color:#4e9a06>"\nHTTP %{http_code}"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">34</span><span> -d <span style=color:#4e9a06>'{"principalRole": {"name": "trino-role"}}'</span>
+We need to wire all of these together:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span><span style=color:#8f5902;font-style:italic># 4a. Create a principal role</span>
+</span></span><span style=display:flex><span>curl -X POST <span style=color:#4e9a06>"http://polaris.127.0.0.1.nip.io:8080/api/management/v1/principal-roles"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -H <span style=color:#4e9a06>"Authorization: Bearer </span><span style=color:#000>$TOKEN</span><span style=color:#4e9a06>"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -H <span style=color:#4e9a06>"Content-Type: application/json"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -w <span style=color:#4e9a06>"\nHTTP %{http_code}"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -d <span style=color:#4e9a06>'{"principalRole": {"name": "trino-role"}}'</span>
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># 4b. Create a catalog role inside ozone_catalog</span>
+</span></span><span style=display:flex><span>curl -X POST <span style=color:#4e9a06>"http://polaris.127.0.0.1.nip.io:8080/api/management/v1/catalogs/ozone_catalog/catalog-roles"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -H <span style=color:#4e9a06>"Authorization: Bearer </span><span style=color:#000>$TOKEN</span><span style=color:#4e9a06>"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -H <span style=color:#4e9a06>"Content-Type: application/json"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -w <span style=color:#4e9a06>"\nHTTP %{http_code}"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -d <span style=color:#4e9a06>'{"catalogRole": {"name": "trino-catalog-role"}}'</span>
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># 4c. Grant CATALOG_MANAGE_CONTENT privilege to the catalog role</span>
+</span></span><span style=display:flex><span>curl -X PUT <span style=color:#4e9a06>"http://polaris.127.0.0.1.nip.io:8080/api/management/v1/catalogs/ozone_catalog/catalog-roles/trino-catalog-role/grants"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -H <span style=color:#4e9a06>"Authorization: Bearer </span><span style=color:#000>$TOKEN</span><span style=color:#4e9a06>"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -H <span style=color:#4e9a06>"Content-Type: application/json"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -w <span style=color:#4e9a06>"\nHTTP %{http_code}"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -d <span style=color:#4e9a06>'{"grant": {"type": "catalog", "privilege": "CATALOG_MANAGE_CONTENT"}}'</span>
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># 4d. Assign the catalog role to the principal role</span>
+</span></span><span style=display:flex><span>curl -X PUT <span style=color:#4e9a06>"http://polaris.127.0.0.1.nip.io:8080/api/management/v1/principal-roles/trino-role/catalog-roles/ozone_catalog"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -H <span style=color:#4e9a06>"Authorization: Bearer </span><span style=color:#000>$TOKEN</span><span style=color:#4e9a06>"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -H <span style=color:#4e9a06>"Content-Type: application/json"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -w <span style=color:#4e9a06>"\nHTTP %{http_code}"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -d <span style=color:#4e9a06>'{"catalogRole": {"name": "trino-catalog-role"}}'</span>
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># 4e. Assign the principal role to the trino principal</span>
+</span></span><span style=display:flex><span>curl -X PUT <span style=color:#4e9a06>"http://polaris.127.0.0.1.nip.io:8080/api/management/v1/principals/trino-principal/principal-roles"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -H <span style=color:#4e9a06>"Authorization: Bearer </span><span style=color:#000>$TOKEN</span><span style=color:#4e9a06>"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -H <span style=color:#4e9a06>"Content-Type: application/json"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -w <span style=color:#4e9a06>"\nHTTP %{http_code}"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -d <span style=color:#4e9a06>'{"principalRole": {"name": "trino-role"}}'</span>
</span></span></code></pre></div><p>Each command should return <code>HTTP 201</code>. A <code>409</code> on steps 4a or 4b means the role already
-exists (e.g. from a previous attempt) — that’s fine, just continue to the next step.</p><h4 id=5-create-a-namespace id=5-create-a-namespace>5. Create a namespace<a class=heading-anchor href=#5-create-a-namespace aria-label=Anchor>🔗</a></h4><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span style="white-space:pre;-webkit-user [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span> -H <span style=color:#4e9a06>"Authorization: Bearer </span><span style=color:#000>$TOKEN</span><span style=color:#4e9a06>"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span> -H <span style=color:#4e9a06>"Content-Type: application/json"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span> -w <span style=color:#4e9a06>"\nHTTP %{http_code}"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span> -d <span style=color:#4e9a06>'{
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span><span style=color:#4e9a06> "namespace": ["demo"],
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span><span style=color:#4e9a06> "properties": {
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span><span style=color:#4e9a06> "location": "s3://warehouse/iceberg/demo"
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span><span style=color:#4e9a06> }
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">10</span><span><span style=color:#4e9a06> }'</span>
-</span></span></code></pre></div><hr><h2 id=step-4--install-trino id=step-4--install-trino>Step 4 — Install Trino<a class=heading-anchor href=#step-4--install-trino aria-label=Anchor>🔗</a></h2><p>Trino is our SQL query engine. We configure it with two things:</p><ol><li>An Iceberg connector catalog that points to Polaris as the REST catalog</li><li>S3 file system settings pointing to Ozone</li></ol><h3 id=prepare-the-helm-values id=prepare-the-helm-values>Prepare the Helm values<a class= [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span><span style=color:#204a87;font-weight:700>image</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>tag</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"480"</span><span style=color:#f8f8f8> </span><span style=color:#8f5902;font-style:italic># latest stable ve [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span><span style=color:#204a87;font-weight:700>server</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>workers</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#0000cf;font-weight:700>1</span><span style=color:#f8f8f8> </span><span style=color:#8f5902;font-style:italic># single w [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span><span style=color:#8f5902;font-style:italic># Allow Traefik's X-Forwarded-For headers (required when running behind an ingress proxy)</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">10</span><span><span style=color:#204a87;font-weight:700>additionalConfigProperties</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">11</span><span><span style=color:#f8f8f8> </span>- <span style=color:#000>http-server.process-forwarded=true</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">12</span><span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">13</span><span><span style=color:#204a87;font-weight:700>coordinator</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">14</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>resources</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">15</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>requests</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">16</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>memory</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"1Gi"</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">17</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>cpu</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"500m"</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">18</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>limits</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">19</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>memory</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"2Gi"</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">20</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>cpu</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"1"</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">21</span><span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">22</span><span><span style=color:#204a87;font-weight:700>worker</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">23</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>resources</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">24</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>requests</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">25</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>memory</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"2Gi"</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">26</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>cpu</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"500m"</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">27</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>limits</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">28</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>memory</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"4Gi"</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">29</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>cpu</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"1"</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">30</span><span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">31</span><span><span style=color:#204a87;font-weight:700>service</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">32</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>type</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>ClusterIP</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">33</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>port</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#0000cf;font-weight:700>8080</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">34</span><span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">35</span><span><span style=color:#8f5902;font-style:italic># Define the Iceberg catalog backed by Polaris</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">36</span><span><span style=color:#204a87;font-weight:700>additionalCatalogs</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">37</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>lakehouse</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>|</span><span style=color:#8f5902;font-style:italic>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">38</span><span><span style=color:#8f5902;font-style:italic> connector.name=iceberg
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">39</span><span><span style=color:#8f5902;font-style:italic> iceberg.catalog.type=rest
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">40</span><span><span style=color:#8f5902;font-style:italic> iceberg.rest-catalog.uri=http://polaris.polaris.svc.cluster.local:8181/api/catalog
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">41</span><span><span style=color:#8f5902;font-style:italic> iceberg.rest-catalog.warehouse=ozone_catalog
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">42</span><span><span style=color:#8f5902;font-style:italic> iceberg.rest-catalog.security=OAUTH2
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">43</span><span><span style=color:#8f5902;font-style:italic> # For local dev: credential shorthand (clientId:clientSecret)
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">44</span><span><span style=color:#8f5902;font-style:italic> iceberg.rest-catalog.oauth2.credential=<TRINO_CLIENT_ID>:<TRINO_CLIENT_SECRET>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">45</span><span><span style=color:#8f5902;font-style:italic> iceberg.rest-catalog.oauth2.server-uri=http://polaris.polaris.svc.cluster.local:8181/api/catalog/v1/oauth/tokens
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">46</span><span><span style=color:#8f5902;font-style:italic> iceberg.rest-catalog.oauth2.scope=PRINCIPAL_ROLE:ALL
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">47</span><span><span style=color:#8f5902;font-style:italic> fs.native-s3.enabled=true
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">48</span><span><span style=color:#8f5902;font-style:italic> s3.endpoint=http://ozone-s3g-rest.ozone.svc.cluster.local:9878
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">49</span><span><span style=color:#8f5902;font-style:italic> s3.path-style-access=true
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">50</span><span><span style=color:#8f5902;font-style:italic> s3.aws-access-key=testuser
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">51</span><span><span style=color:#8f5902;font-style:italic> s3.aws-secret-key=testpassword
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">52</span><span><span style=color:#8f5902;font-style:italic> s3.region=us-east-1</span><span style=color:#f8f8f8>
-</span></span></span></code></pre></div><p>Replace the placeholders:</p><ul><li><code><TRINO_CLIENT_ID></code> / <code><TRINO_CLIENT_SECRET></code> — from Step 3 (Polaris principal credentials)</li></ul><h3 id=add-the-repo-and-install id=add-the-repo-and-install>Add the repo and install<a class=heading-anchor href=#add-the-repo-and-install aria-label=Anchor>🔗</a></h3><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span>helm repo update
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span>helm install trino trino/trino <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span> --namespace trino <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">6</span><span> --create-namespace <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">7</span><span> --values trino-values.yaml <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">8</span><span> --wait --timeout 3m
-</span></span></code></pre></div><p>Verify all pods are running:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span>kubectl get pods -n trino
-</span></span></code></pre></div><p>You should see a <code>trino-coordinator-*</code> and <code>trino-worker-*</code> pod.</p><p>Apply an Ingress so the Trino UI is reachable at <code>http://trino.127.0.0.1.nip.io:8080</code>:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-yaml data-lang=yaml><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;use [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span><span style=color:#204a87;font-weight:700>apiVersion</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>networking.k8s.io/v1</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span><span style=color:#204a87;font-weight:700>kind</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>Ingress</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span><span style=color:#204a87;font-weight:700>metadata</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>name</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>trino</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>namespace</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>trino</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>annotations</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>traefik.ingress.kubernetes.io/router.entrypoints</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>web</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span><span style=color:#204a87;font-weight:700>spec</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">10</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>rules</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">11</span><span><span style=color:#f8f8f8> </span>- <span style=color:#204a87;font-weight:700>host</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>trino.127.0.0.1.nip.io</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">12</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>http</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">13</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>paths</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">14</span><span><span style=color:#f8f8f8> </span>- <span style=color:#204a87;font-weight:700>path</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>/</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">15</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>pathType</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>Prefix</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">16</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>backend</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">17</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>service</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">18</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>name</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>trino</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">19</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>port</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">20</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>number</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#0000cf;font-weight:700>8080</span><span style=color:#f8f8f8>
-</span></span></span></code></pre></div><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span>kubectl apply -f trino-ingress.yaml
+exists (e.g. from a previous attempt) — that’s fine, just continue to the next step.</p><h4 id=5-create-a-namespace id=5-create-a-namespace>5. Create a namespace<a class=heading-anchor href=#5-create-a-namespace aria-label=Anchor>🔗</a></h4><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span>curl -X POST <span style=color:#4e9 [...]
+</span></span></span><span style=display:flex><span> -H <span style=color:#4e9a06>"Authorization: Bearer </span><span style=color:#000>$TOKEN</span><span style=color:#4e9a06>"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -H <span style=color:#4e9a06>"Content-Type: application/json"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -w <span style=color:#4e9a06>"\nHTTP %{http_code}"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -d <span style=color:#4e9a06>'{
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "namespace": ["demo"],
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "properties": {
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "location": "s3://warehouse/iceberg/demo"
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> }
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> }'</span>
+</span></span></code></pre></div><hr><h2 id=step-4--install-trino id=step-4--install-trino>Step 4 — Install Trino<a class=heading-anchor href=#step-4--install-trino aria-label=Anchor>🔗</a></h2><p>Trino is our SQL query engine. We configure it with two things:</p><ol><li>An Iceberg connector catalog that points to Polaris as the REST catalog</li><li>S3 file system settings pointing to Ozone</li></ol><h3 id=prepare-the-helm-values id=prepare-the-helm-values>Prepare the Helm values<a class= [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>image</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>tag</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"480"</span><span style=color:#f8f8f8> </span><span style=color:#8f5902;font-style:italic># latest stable version at time of writing</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>server</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>workers</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#0000cf;font-weight:700>1</span><span style=color:#f8f8f8> </span><span style=color:#8f5902;font-style:italic># single worker is enough for local dev</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># Allow Traefik's X-Forwarded-For headers (required when running behind an ingress proxy)</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>additionalConfigProperties</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span>- <span style=color:#000>http-server.process-forwarded=true</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>coordinator</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>resources</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>requests</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>memory</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"1Gi"</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>cpu</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"500m"</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>limits</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>memory</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"2Gi"</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>cpu</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"1"</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>worker</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>resources</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>requests</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>memory</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"2Gi"</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>cpu</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"500m"</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>limits</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>memory</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"4Gi"</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>cpu</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"1"</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>service</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>type</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>ClusterIP</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>port</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#0000cf;font-weight:700>8080</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># Define the Iceberg catalog backed by Polaris</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>additionalCatalogs</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>lakehouse</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>|</span><span style=color:#8f5902;font-style:italic>
+</span></span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic> connector.name=iceberg
+</span></span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic> iceberg.catalog.type=rest
+</span></span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic> iceberg.rest-catalog.uri=http://polaris.polaris.svc.cluster.local:8181/api/catalog
+</span></span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic> iceberg.rest-catalog.warehouse=ozone_catalog
+</span></span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic> iceberg.rest-catalog.security=OAUTH2
+</span></span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic> # For local dev: credential shorthand (clientId:clientSecret)
+</span></span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic> iceberg.rest-catalog.oauth2.credential=<TRINO_CLIENT_ID>:<TRINO_CLIENT_SECRET>
+</span></span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic> iceberg.rest-catalog.oauth2.server-uri=http://polaris.polaris.svc.cluster.local:8181/api/catalog/v1/oauth/tokens
+</span></span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic> iceberg.rest-catalog.oauth2.scope=PRINCIPAL_ROLE:ALL
+</span></span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic> fs.native-s3.enabled=true
+</span></span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic> s3.endpoint=http://ozone-s3g-rest.ozone.svc.cluster.local:9878
+</span></span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic> s3.path-style-access=true
+</span></span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic> s3.aws-access-key=testuser
+</span></span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic> s3.aws-secret-key=testpassword
+</span></span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic> s3.region=us-east-1</span><span style=color:#f8f8f8>
+</span></span></span></code></pre></div><p>Replace the placeholders:</p><ul><li><code><TRINO_CLIENT_ID></code> / <code><TRINO_CLIENT_SECRET></code> — from Step 3 (Polaris principal credentials)</li></ul><h3 id=add-the-repo-and-install id=add-the-repo-and-install>Add the repo and install<a class=heading-anchor href=#add-the-repo-and-install aria-label=Anchor>🔗</a></h3><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit [...]
+</span></span><span style=display:flex><span>helm repo update
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span>helm install trino trino/trino <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --namespace trino <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --create-namespace <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --values trino-values.yaml <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --wait --timeout 3m
+</span></span></code></pre></div><p>Verify all pods are running:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span>kubectl get pods -n trino
+</span></span></code></pre></div><p>You should see a <code>trino-coordinator-*</code> and <code>trino-worker-*</code> pod.</p><p>Apply an Ingress so the Trino UI is reachable at <code>http://trino.127.0.0.1.nip.io:8080</code>:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-yaml data-lang=yaml><span style=display:flex><span><span style=color:#8f5902;font-style:italic># trino [...]
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>apiVersion</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>networking.k8s.io/v1</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>kind</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>Ingress</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>metadata</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>name</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>trino</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>namespace</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>trino</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>annotations</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>traefik.ingress.kubernetes.io/router.entrypoints</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>web</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>spec</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>rules</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span>- <span style=color:#204a87;font-weight:700>host</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>trino.127.0.0.1.nip.io</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>http</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>paths</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span>- <span style=color:#204a87;font-weight:700>path</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>/</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>pathType</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>Prefix</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>backend</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>service</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>name</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>trino</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>port</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>number</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#0000cf;font-weight:700>8080</span><span style=color:#f8f8f8>
+</span></span></span></code></pre></div><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span>kubectl apply -f trino-ingress.yaml
</span></span></code></pre></div><p>Open <a href=http://trino.127.0.0.1.nip.io:8080>http://trino.127.0.0.1.nip.io:8080</a> in your browser to see the Trino Web UI.</p><hr><h2 id=step-5--end-to-end-test id=step-5--end-to-end-test>Step 5 — End-to-End Test<a class=heading-anchor href=#step-5--end-to-end-test aria-label=Anchor>🔗</a></h2><p>Time to put it all together. We’ll exec into the Trino coordinator pod and use the
-built-in Trino CLI to create an Iceberg table, insert data, and query it back.</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span><span style=color:#000>TRINO_POD</span><span style=color:#ce5c00;font-we [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> -l app.kubernetes.io/name<span style=color:#ce5c00;font-weight:700>=</span>trino,app.kubernetes.io/component<span style=color:#ce5c00;font-weight:700>=</span>coordinator <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> -o <span style=color:#000>jsonpath</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>'{.items[0].metadata.name}'</span><span style=color:#204a87;font-weight:700>)</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span>kubectl <span style=color:#204a87>exec</span> -n trino -it <span style=color:#000>$TRINO_POD</span> -- trino <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">6</span><span> --server http://localhost:8080 <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">7</span><span> --catalog lakehouse <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">8</span><span> --schema demo
-</span></span></code></pre></div><p>Inside the Trino CLI:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-sql data-lang=sql><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 1</span><span><span style=color:#8f5902;font-style:italic>-- Create an Iceberg table in the 'demo' n [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span><span style=color:#204a87;font-weight:700>CREATE</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>TABLE</span><span style=color:#f8f8f8> </span><span style=color:#000>lakehouse</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>demo</span><span style=col [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span><span style=color:#f8f8f8> </span><span style=color:#000>event_id</span><span style=color:#f8f8f8> </span><span style=color:#204a87>BIGINT</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span><span style=color:#f8f8f8> </span><span style=color:#000>event_type</span><span style=color:#f8f8f8> </span><span style=color:#204a87>VARCHAR</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span><span style=color:#f8f8f8> </span><span style=color:#000>user_id</span><span style=color:#f8f8f8> </span><span style=color:#204a87>BIGINT</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span><span style=color:#f8f8f8> </span><span style=color:#000>created_at</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>TIMESTAMP</span><span style=color:#000;font-weight:700>(</span><span style=color:#0000cf;font-weight:700>6</span><span style=color:#000;font-weight:700>)</span [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span><span style=color:#000;font-weight:700>)</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span><span style=color:#204a87;font-weight:700>WITH</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>(</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span><span style=color:#f8f8f8> </span><span style=color:#000>format</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'PARQUET'</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">10</span><span><span style=color:#f8f8f8> </span><span style=color:#000>partitioning</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#204a87>ARRAY</span><span style=color:#000;font-weight:700>[</span><span style=color:#4e9a06>' [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">11</span><span><span style=color:#000;font-weight:700>);</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">12</span><span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">13</span><span><span style=color:#8f5902;font-style:italic>-- Insert some rows
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">14</span><span><span style=color:#204a87;font-weight:700>INSERT</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>INTO</span><span style=color:#f8f8f8> </span><span style=color:#000>lakehouse</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>demo</span><span style=colo [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">15</span><span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>(</span><span style=color:#0000cf;font-weight:700>1</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'page_view'</span><span style=color:#000;font-weight:700>,</spa [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">16</span><span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>(</span><span style=color:#0000cf;font-weight:700>2</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'click'</span><span style=color:#000;font-weight:700>,</span><s [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">17</span><span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>(</span><span style=color:#0000cf;font-weight:700>3</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'purchase'</span><span style=color:#000;font-weight:700>,</span [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">18</span><span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">19</span><span><span style=color:#8f5902;font-style:italic>-- Query the data
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">20</span><span><span style=color:#204a87;font-weight:700>SELECT</span><span style=color:#f8f8f8> </span><span style=color:#000>event_type</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>COUNT</span><span style=color:#000;font-weight:700>(</span>< [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">21</span><span><span style=color:#204a87;font-weight:700>FROM</span><span style=color:#f8f8f8> </span><span style=color:#000>lakehouse</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>demo</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>events</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">22</span><span><span style=color:#204a87;font-weight:700>GROUP</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>BY</span><span style=color:#f8f8f8> </span><span style=color:#000>event_type</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">23</span><span><span style=color:#204a87;font-weight:700>ORDER</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>BY</span><span style=color:#f8f8f8> </span><span style=color:#000>cnt</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>DESC</span><span style=color:# [...]
+built-in Trino CLI to create an Iceberg table, insert data, and query it back.</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span><span style=color:#000>TRINO_POD</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#204a87;font-weight:700>$(</span>kubectl get pod -n trino <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -l app.kubernetes.io/name<span style=color:#ce5c00;font-weight:700>=</span>trino,app.kubernetes.io/component<span style=color:#ce5c00;font-weight:700>=</span>coordinator <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -o <span style=color:#000>jsonpath</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>'{.items[0].metadata.name}'</span><span style=color:#204a87;font-weight:700>)</span>
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span>kubectl <span style=color:#204a87>exec</span> -n trino -it <span style=color:#000>$TRINO_POD</span> -- trino <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --server http://localhost:8080 <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --catalog lakehouse <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --schema demo
+</span></span></code></pre></div><p>Inside the Trino CLI:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-sql data-lang=sql><span style=display:flex><span><span style=color:#8f5902;font-style:italic>-- Create an Iceberg table in the 'demo' namespace
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>CREATE</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>TABLE</span><span style=color:#f8f8f8> </span><span style=color:#000>lakehouse</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>demo</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>events</span><span style=color:#f8f8f8> </span><span style=color:#000;fon [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#000>event_id</span><span style=color:#f8f8f8> </span><span style=color:#204a87>BIGINT</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#000>event_type</span><span style=color:#f8f8f8> </span><span style=color:#204a87>VARCHAR</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#000>user_id</span><span style=color:#f8f8f8> </span><span style=color:#204a87>BIGINT</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#000>created_at</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>TIMESTAMP</span><span style=color:#000;font-weight:700>(</span><span style=color:#0000cf;font-weight:700>6</span><span style=color:#000;font-weight:700>)</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>WITH</span><span style=color:#f8f8f8> </span><span [...]
+</span></span></span><span style=display:flex><span><span style=color:#000;font-weight:700>)</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>WITH</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>(</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#000>format</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'PARQUET'</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#000>partitioning</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#204a87>ARRAY</span><span style=color:#000;font-weight:700>[</span><span style=color:#4e9a06>'day(created_at)'</span><span style=color:#000;font-weight:700>]</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#000;font-weight:700>);</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic>-- Insert some rows
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>INSERT</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>INTO</span><span style=color:#f8f8f8> </span><span style=color:#000>lakehouse</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>demo</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>events</span><span style=color:#f8f8f8> </span><span style=color:#204a87;f [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>(</span><span style=color:#0000cf;font-weight:700>1</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'page_view'</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8> </span><span style=color:#0000cf;font-weight:700>101</span><span style=color:#000;font-weight:700> [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>(</span><span style=color:#0000cf;font-weight:700>2</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'click'</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8> </span><span style=color:#0000cf;font-weight:700>102</span><span style=color:#000;font-weight:700> [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>(</span><span style=color:#0000cf;font-weight:700>3</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'purchase'</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8> </span><span style=color:#0000cf;font-weight:700>101</span><span style=color:#000;font-weight:700> [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic>-- Query the data
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>SELECT</span><span style=color:#f8f8f8> </span><span style=color:#000>event_type</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>COUNT</span><span style=color:#000;font-weight:700>(</span><span style=color:#ce5c00;font-weight:700>*</span><span style=color:#000;font-weight:700>)</span><span style=color:#f8f8f8> </spa [...]
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>FROM</span><span style=color:#f8f8f8> </span><span style=color:#000>lakehouse</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>demo</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>events</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>GROUP</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>BY</span><span style=color:#f8f8f8> </span><span style=color:#000>event_type</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>ORDER</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>BY</span><span style=color:#f8f8f8> </span><span style=color:#000>cnt</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>DESC</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8>
</span></span></span></code></pre></div><p>Expected output:</p><pre tabindex=0><code> event_type | cnt
------------+-----
page_view | 1
click | 1
purchase | 1
-</code></pre><p>You can also verify the files are physically present in Ozone:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span>kubectl <span style=color:#204a87>exec</span> -n ozone ozone-om-0 -- <sp [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> ozone sh key list /s3v/warehouse
+</code></pre><p>You can also verify the files are physically present in Ozone:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span>kubectl <span style=color:#204a87>exec</span> -n ozone ozone-om-0 -- <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> ozone sh key list /s3v/warehouse
</span></span></code></pre></div><p>You’ll see <code>.parquet</code> data files and a <code>metadata/</code> directory with Iceberg JSON metadata —
-exactly what you’d see in S3 with a real cloud deployment.</p><hr><h2 id=tear-down id=tear-down>Tear Down<a class=heading-anchor href=#tear-down aria-label=Anchor>🔗</a></h2><p>When you’re done:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin- [...]
+exactly what you’d see in S3 with a real cloud deployment.</p><hr><h2 id=tear-down id=tear-down>Tear Down<a class=heading-anchor href=#tear-down aria-label=Anchor>🔗</a></h2><p>When you’re done:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span>k3d cluster delete lakehouse
</span></span></code></pre></div><p>This destroys everything — the Kubernetes cluster, all Helm releases, and all data. Since
we used in-memory persistence for Polaris and ephemeral storage for Ozone, nothing leaks
onto your filesystem.</p><hr><h2 id=summary id=summary>Summary<a class=heading-anchor href=#summary aria-label=Anchor>🔗</a></h2><p>In this tutorial we built a complete open data lakehouse locally using:</p><ol><li><strong>k3d</strong> to create a throwaway Kubernetes cluster in Docker</li><li><strong>Apache Ozone</strong> as an S3-compatible object store (installed via Helm)</li><li><strong>Apache Polaris</strong> as the Iceberg REST catalog (installed via Helm)</li><li><strong>Trino</st [...]
diff --git a/blog/index.html b/blog/index.html
index cad0e2a5fe..a270db09df 100644
--- a/blog/index.html
+++ b/blog/index.html
@@ -1,4 +1,4 @@
-<!doctype html><html itemscope itemtype=http://schema.org/WebPage lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><link rel=alternate type=application/rss+xml href=https://polaris.apache.org/blog/index.xml><meta name=robots content="index, follow"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon.png sizes=180x180><link rel=icon type=image/png href [...]
+<!doctype html><html itemscope itemtype=http://schema.org/WebPage lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><link rel=alternate type=application/rss+xml href=https://polaris.apache.org/blog/index.xml><meta name=robots content="index, follow"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon.png sizes=180x180><link rel=icon type=image/png href [...]
<label for=m-blog20260404build-a-local-open-data-lakehouse-with-k3d-apache-ozone-apache-polaris-and-trino-check><a href=/blog/2026/04/04/build-a-local-open-data-lakehouse-with-k3d-apache-ozone-apache-polaris-and-trino/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-blog20260404build-a-local-open-data-lakehouse-with-k3d-apache-ozone-apache-polaris-and-trino><span>Build a Local Open Data Lakehouse with k3d, Apache Ozone, Apache Polaris and Trino</span></a></label></li>< [...]
<label for=m-blog20260329introducing-the-setup-command-in-apache-polaris-check><a href=/blog/2026/03/29/introducing-the-setup-command-in-apache-polaris/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-blog20260329introducing-the-setup-command-in-apache-polaris><span>Introducing the setup Command in Apache Polaris</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-blog20260219apache-polaris-graduates-to-top-level- [...]
<label for=m-blog20260219apache-polaris-graduates-to-top-level-project-check><a href=/blog/2026/02/19/apache-polaris-graduates-to-top-level-project/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-blog20260219apache-polaris-graduates-to-top-level-project><span>Apache Polaris Graduates to Top Level Project!</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-blog20260204floe-and-apache-polaris-policy-driven-table-m [...]
diff --git a/blog/page/2/index.html b/blog/page/2/index.html
index 514a70e3eb..83334a41fa 100644
--- a/blog/page/2/index.html
+++ b/blog/page/2/index.html
@@ -1,4 +1,4 @@
-<!doctype html><html itemscope itemtype=http://schema.org/WebPage lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><link rel=alternate type=application/rss+xml href=https://polaris.apache.org/blog/index.xml><meta name=robots content="index, follow"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon.png sizes=180x180><link rel=icon type=image/png href [...]
+<!doctype html><html itemscope itemtype=http://schema.org/WebPage lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><link rel=alternate type=application/rss+xml href=https://polaris.apache.org/blog/index.xml><meta name=robots content="index, follow"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon.png sizes=180x180><link rel=icon type=image/png href [...]
<label for=m-blog20260404build-a-local-open-data-lakehouse-with-k3d-apache-ozone-apache-polaris-and-trino-check><a href=/blog/2026/04/04/build-a-local-open-data-lakehouse-with-k3d-apache-ozone-apache-polaris-and-trino/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-blog20260404build-a-local-open-data-lakehouse-with-k3d-apache-ozone-apache-polaris-and-trino><span>Build a Local Open Data Lakehouse with k3d, Apache Ozone, Apache Polaris and Trino</span></a></label></li>< [...]
<label for=m-blog20260329introducing-the-setup-command-in-apache-polaris-check><a href=/blog/2026/03/29/introducing-the-setup-command-in-apache-polaris/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-blog20260329introducing-the-setup-command-in-apache-polaris><span>Introducing the setup Command in Apache Polaris</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-blog20260219apache-polaris-graduates-to-top-level- [...]
<label for=m-blog20260219apache-polaris-graduates-to-top-level-project-check><a href=/blog/2026/02/19/apache-polaris-graduates-to-top-level-project/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-blog20260219apache-polaris-graduates-to-top-level-project><span>Apache Polaris Graduates to Top Level Project!</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-blog20260204floe-and-apache-polaris-policy-driven-table-m [...]
diff --git a/categories/index.html b/categories/index.html
index b69656001a..39f1218fd6 100644
--- a/categories/index.html
+++ b/categories/index.html
@@ -1 +1 @@
-<!doctype html><html itemscope itemtype=http://schema.org/WebPage lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><link rel=alternate type=application/rss+xml href=https://polaris.apache.org/categories/index.xml><meta name=robots content="index, follow"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon.png sizes=180x180><link rel=icon type=image/pn [...]
\ No newline at end of file
+<!doctype html><html itemscope itemtype=http://schema.org/WebPage lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><link rel=alternate type=application/rss+xml href=https://polaris.apache.org/categories/index.xml><meta name=robots content="index, follow"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon.png sizes=180x180><link rel=icon type=image/pn [...]
\ No newline at end of file
diff --git a/community/chat-bylaws/index.html b/community/chat-bylaws/index.html
index d759d97f3a..17e6c39b7c 100644
--- a/community/chat-bylaws/index.html
+++ b/community/chat-bylaws/index.html
@@ -1,4 +1,4 @@
-<!doctype html><html itemscope itemtype=http://schema.org/WebPage lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon.png sizes=100x100><link rel=icon type=image/png href=/favicons/android-ch [...]
+<!doctype html><html itemscope itemtype=http://schema.org/WebPage lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon.png sizes=100x100><link rel=icon type=image/png href=/favicons/android-ch [...]
<label for=m-communitymeetings-check><a href=/community/meetings/ title="Apache Polaris Community Meetings" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-communitymeetings><span>Meetings</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-communityproposals-li><input type=checkbox id=m-communityproposals-check>
<label for=m-communityproposals-check><a href=/community/proposals/ title="Apache Polaris Proposals & Roadmap" class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-communityproposals><span>Proposals & Roadmap</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child active-path" id=m-communitychat-bylaws-li><input type=checkbox id=m-communitychat-bylaws-check checked>
<label for=m-communitychat-bylaws-check><a href=/community/chat-bylaws/ title class="align-left ps-0 active td-sidebar-link td-sidebar-link__page" id=m-communitychat-bylaws><span class=td-sidebar-nav-active-item>Chat Bylaws</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-communitycommunity-guidelines-li><input type=checkbox id=m-communitycommunity-guidelines-check>
diff --git a/community/community-guidelines/index.html b/community/community-guidelines/index.html
index 436bf058a1..d367c1a00b 100644
--- a/community/community-guidelines/index.html
+++ b/community/community-guidelines/index.html
@@ -2,7 +2,7 @@
Be respectful and considerate of other community members. Treat everyone with respect and professionalism. Refrain from engaging in offensive, discriminatory, or harassing behavior. Be patient and understanding towards others, especially newcomers who may be learning. Stay constructive and provide helpful feedback. Engage in meaningful and relevant discussions related to the project. Avoid spamming, excessive self-promotion, or advertising unrelated content. Use clear and consise languag [...]
Be respectful and considerate of other community members. Treat everyone with respect and professionalism. Refrain from engaging in offensive, discriminatory, or harassing behavior. Be patient and understanding towards others, especially newcomers who may be learning. Stay constructive and provide helpful feedback. Engage in meaningful and relevant discussions related to the project. Avoid spamming, excessive self-promotion, or advertising unrelated content. Use clear and consise languag [...]
Be respectful and considerate of other community members. Treat everyone with respect and professionalism. Refrain from engaging in offensive, discriminatory, or harassing behavior. Be patient and understanding towards others, especially newcomers who may be learning. Stay constructive and provide helpful feedback. Engage in meaningful and relevant discussions related to the project. Avoid spamming, excessive self-promotion, or advertising unrelated content. Use clear and consise languag [...]
-Be respectful and considerate of other community members. Treat everyone with respect and professionalism. Refrain from engaging in offensive, discriminatory, or harassing behavior. Be patient and understanding towards others, especially newcomers who may be learning. Stay constructive and provide helpful feedback. Engage in meaningful and relevant discussions related to the project. Avoid spamming, excessive self-promotion, or advertising unrelated content. Use clear and consise languag [...]
+Be respectful and considerate of other community members. Treat everyone with respect and professionalism. Refrain from engaging in offensive, discriminatory, or harassing behavior. Be patient and understanding towards others, especially newcomers who may be learning. Stay constructive and provide helpful feedback. Engage in meaningful and relevant discussions related to the project. Avoid spamming, excessive self-promotion, or advertising unrelated content. Use clear and consise languag [...]
<label for=m-communitymeetings-check><a href=/community/meetings/ title="Apache Polaris Community Meetings" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-communitymeetings><span>Meetings</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-communityproposals-li><input type=checkbox id=m-communityproposals-check>
<label for=m-communityproposals-check><a href=/community/proposals/ title="Apache Polaris Proposals & Roadmap" class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-communityproposals><span>Proposals & Roadmap</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-communitychat-bylaws-li><input type=checkbox id=m-communitychat-bylaws-check>
<label for=m-communitychat-bylaws-check><a href=/community/chat-bylaws/ title class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-communitychat-bylaws><span>Chat Bylaws</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child active-path" id=m-communitycommunity-guidelines-li><input type=checkbox id=m-communitycommunity-guidelines-check checked>
diff --git a/community/contributing-guidelines/index.html b/community/contributing-guidelines/index.html
index cf6fe175b3..4791c0d1c3 100644
--- a/community/contributing-guidelines/index.html
+++ b/community/contributing-guidelines/index.html
@@ -1,4 +1,4 @@
-<!doctype html><html itemscope itemtype=http://schema.org/WebPage lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon.png sizes=100x100><link rel=icon type=image/png href=/favicons/android-ch [...]
+<!doctype html><html itemscope itemtype=http://schema.org/WebPage lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon.png sizes=100x100><link rel=icon type=image/png href=/favicons/android-ch [...]
<label for=m-communitymeetings-check><a href=/community/meetings/ title="Apache Polaris Community Meetings" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-communitymeetings><span>Meetings</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-communityproposals-li><input type=checkbox id=m-communityproposals-check>
<label for=m-communityproposals-check><a href=/community/proposals/ title="Apache Polaris Proposals & Roadmap" class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-communityproposals><span>Proposals & Roadmap</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-communitychat-bylaws-li><input type=checkbox id=m-communitychat-bylaws-check>
<label for=m-communitychat-bylaws-check><a href=/community/chat-bylaws/ title class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-communitychat-bylaws><span>Chat Bylaws</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-communitycommunity-guidelines-li><input type=checkbox id=m-communitycommunity-guidelines-check>
@@ -12,18 +12,18 @@
<label for=m-communityrelease-guidessemi-automated-release-guide-check><a href=/community/release-guides/semi-automated-release-guide/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-communityrelease-guidessemi-automated-release-guide><span>Semi-Automated Release Guide</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-communityrelease-guidesmanual-release-guide-li><input type=checkbox id=m-communityrelease-guide [...]
<label for=m-communityrelease-guidesmanual-release-guide-check><a href=/community/release-guides/manual-release-guide/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-communityrelease-guidesmanual-release-guide><span>Manual Release Guide (deprecated)</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-communityrelease-guidesrelease-verification-guide-li><input type=checkbox id=m-communityrelease-guidesrelease-veri [...]
<label for=m-communityrelease-guidesrelease-verification-guide-check><a href=/community/release-guides/release-verification-guide/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-communityrelease-guidesrelease-verification-guide><span>Release Verification Guide</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-communitysecurity-report-li><input type=checkbox id=m-communitysecurity-report-check>
-<label for=m-communitysecurity-report-check><a href=/community/security-report/ title class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-communitysecurity-report><span>Security Report</span></a></label></li></ul></li></ul></nav></div></aside><main class="col-12 col-md-9 col-xl-8 ps-md-5" role=main><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/community/>Community</a></li><li class="breadcrumb-item active" aria-curr [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#204a87>cd</span> polaris
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span>git checkout main
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span>git pull
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span>git checkout -b my-branch
-</span></span></code></pre></div></li><li>Work on the changes of your pull requests locally.</li><li>Recommended checks:<div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span><span style=color:#8f5902;font-sty [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span>./gradlew format compileAll
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span><span style=color:#8f5902;font-style:italic># Ensure the code is passing the checks (including formatting checks & tests):</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span>./gradlew check
-</span></span></code></pre></div></li><li>You may want to push your changes to your personal Polaris fork. Git will emit a URL that you can use to create the Pull Request. Do not create the Pull Request yet.<div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-ri [...]
+<label for=m-communitysecurity-report-check><a href=/community/security-report/ title class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-communitysecurity-report><span>Security Report</span></a></label></li></ul></li></ul></nav></div></aside><main class="col-12 col-md-9 col-xl-8 ps-md-5" role=main><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/community/>Community</a></li><li class="breadcrumb-item active" aria-curr [...]
+</span></span><span style=display:flex><span><span style=color:#204a87>cd</span> polaris
+</span></span><span style=display:flex><span>git checkout main
+</span></span><span style=display:flex><span>git pull
+</span></span><span style=display:flex><span>git checkout -b my-branch
+</span></span></code></pre></div></li><li>Work on the changes of your pull requests locally.</li><li>Recommended checks:<div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span><span style=color:#8f5902;font-style:italic># Ensure the code is properly formatted and compiles:</span>
+</span></span><span style=display:flex><span>./gradlew format compileAll
+</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># Ensure the code is passing the checks (including formatting checks & tests):</span>
+</span></span><span style=display:flex><span>./gradlew check
+</span></span></code></pre></div></li><li>You may want to push your changes to your personal Polaris fork. Git will emit a URL that you can use to create the Pull Request. Do not create the Pull Request yet.<div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span>git push --set-upstream your-github-accout
</span></span></code></pre></div></li></ul><h4 id=opening-a-pull-request id=opening-a-pull-request>Opening a Pull Request<a class=heading-anchor href=#opening-a-pull-request aria-label=Anchor>🔗</a></h4><ul><li>The Pull Request summary should provide a concise summary of the change, get inspired by <a href=https://www.conventionalcommits.org/en/v1.0.0/>Conventional Commits</a>.</li><li>The Pull Request description should provide the background (rationale) of the change and describe the ch [...]
-</code></pre>If the PR does not fully fix the issue, use <code>Related to #123456</code> instead of <code>Fixes #123456</code>.</li></ul><p>Tips:</p><ul><li>If the branch for your Pull Request contains only one (squashed) commit, GitHub will populate the PR summary and description from that single commit.</li><li>When opening a PR consider whether the PR is “draft” or already “ready for review”. “Draft” means work in progress, things will change, but c [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span>git push your-github-accout my-branch --force
+</code></pre>If the PR does not fully fix the issue, use <code>Related to #123456</code> instead of <code>Fixes #123456</code>.</li></ul><p>Tips:</p><ul><li>If the branch for your Pull Request contains only one (squashed) commit, GitHub will populate the PR summary and description from that single commit.</li><li>When opening a PR consider whether the PR is “draft” or already “ready for review”. “Draft” means work in progress, things will change, but c [...]
+</span></span><span style=display:flex><span>git push your-github-accout my-branch --force
</span></span></code></pre></div></li><li>Test that your changes work by adapting or adding tests. Verify the build passes (see <code>README.md</code> for build instructions).</li><li>If your Pull Request has conflicts with the <code>main</code> branch, please rebase and fix the conflicts.</li><li>If your PR requires more work or time or bigger changes, please put the PR to “draft” state to indicate that it is not meant to be “thoroughly” reviewed at this point.</ [...]
The discussion on the dev mailing list should happen before having a “ready-for-review” Pull Request.</li><li><code>git log</code> can help you find the original/relevant authors of the code you are modifying. If you need, feel free to tag the author in your Pull Request comment if you need assistance or review.</li><li>Do not re-create a pull-request for the same change. Use one Pull Request related to the same change(s). The purpose here is to keep the history and all comme [...]
\ No newline at end of file
diff --git a/community/index.html b/community/index.html
index 7ed8805f42..a3ed5c8bac 100644
--- a/community/index.html
+++ b/community/index.html
@@ -42,7 +42,7 @@ Development takes place here!
Chat Bylaws
A few rules around our public chat as a collaboration tool for the project.
Contribution Guidelines
-How to contribute to Apache Polaris"><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css rel=stylesheet integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><script src=/jquery-3.7.1.min_1232160679860847782.js inte [...]
+How to contribute to Apache Polaris"><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css rel=stylesheet integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><script src=/jquery-3.7.1.min_1232160679860847782.js inte [...]
<label for=m-communitymeetings-check><a href=/community/meetings/ title="Apache Polaris Community Meetings" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-communitymeetings><span>Meetings</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-communityproposals-li><input type=checkbox id=m-communityproposals-check>
<label for=m-communityproposals-check><a href=/community/proposals/ title="Apache Polaris Proposals & Roadmap" class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-communityproposals><span>Proposals & Roadmap</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-communitychat-bylaws-li><input type=checkbox id=m-communitychat-bylaws-check>
<label for=m-communitychat-bylaws-check><a href=/community/chat-bylaws/ title class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-communitychat-bylaws><span>Chat Bylaws</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-communitycommunity-guidelines-li><input type=checkbox id=m-communitycommunity-guidelines-check>
diff --git a/community/meetings/index.html b/community/meetings/index.html
index d496febf96..608932263c 100644
--- a/community/meetings/index.html
+++ b/community/meetings/index.html
@@ -62,7 +62,7 @@ Date Time 2026-05-14
09:00 PST, 18:00 CET
2026-07-23
09:00 PST, 18:00 CET
-…"><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css rel=stylesheet integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><script src=/jquery-3.7.1.min_1232160679860847782.js integrity="sha512-v2CJ7UaYy4JwqLDIrZU [...]
+…"><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css rel=stylesheet integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><script src=/jquery-3.7.1.min_1232160679860847782.js integrity="sha512-v2CJ7UaYy4JwqLDIrZU [...]
<label for=m-communitymeetings-check><a href=/community/meetings/ title="Apache Polaris Community Meetings" class="align-left ps-0 active td-sidebar-link td-sidebar-link__section" id=m-communitymeetings><span class=td-sidebar-nav-active-item>Meetings</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-communityproposals-li><input type=checkbox id=m-communityproposals-check>
<label for=m-communityproposals-check><a href=/community/proposals/ title="Apache Polaris Proposals & Roadmap" class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-communityproposals><span>Proposals & Roadmap</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-communitychat-bylaws-li><input type=checkbox id=m-communitychat-bylaws-check>
<label for=m-communitychat-bylaws-check><a href=/community/chat-bylaws/ title class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-communitychat-bylaws><span>Chat Bylaws</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-communitycommunity-guidelines-li><input type=checkbox id=m-communitycommunity-guidelines-check>
diff --git a/community/proposals/index.html b/community/proposals/index.html
index 3381e9545c..196bd295ee 100644
--- a/community/proposals/index.html
+++ b/community/proposals/index.html
@@ -6,7 +6,7 @@ Polaris Roadmap Discussed Roadmap"><meta property="og:locale" content="en_us"><m
Past
Polaris Roadmap Discussed Roadmap"><meta itemprop=wordCount content="7"><meta name=twitter:card content="summary"><meta name=twitter:title content="Apache Polaris Proposals & Roadmap"><meta name=twitter:description content="Proposals Active
Past
-Polaris Roadmap Discussed Roadmap"><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css rel=stylesheet integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><script src=/jquery-3.7.1.min_1232160679860847782.js integr [...]
+Polaris Roadmap Discussed Roadmap"><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css rel=stylesheet integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><script src=/jquery-3.7.1.min_1232160679860847782.js integr [...]
<label for=m-communitymeetings-check><a href=/community/meetings/ title="Apache Polaris Community Meetings" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-communitymeetings><span>Meetings</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child active-path" id=m-communityproposals-li><input type=checkbox id=m-communityproposals-check checked>
<label for=m-communityproposals-check><a href=/community/proposals/ title="Apache Polaris Proposals & Roadmap" class="align-left ps-0 active td-sidebar-link td-sidebar-link__page" id=m-communityproposals><span class=td-sidebar-nav-active-item>Proposals & Roadmap</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-communitychat-bylaws-li><input type=checkbox id=m-communitychat-bylaws-check>
<label for=m-communitychat-bylaws-check><a href=/community/chat-bylaws/ title class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-communitychat-bylaws><span>Chat Bylaws</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-communitycommunity-guidelines-li><input type=checkbox id=m-communitycommunity-guidelines-check>
diff --git a/community/release-guides/index.html b/community/release-guides/index.html
index ad0d90545f..0ca3bfad21 100644
--- a/community/release-guides/index.html
+++ b/community/release-guides/index.html
@@ -6,7 +6,7 @@ Once you are familiar with the manual release process, use the semi-automated gu
If you’re new to releasing Apache Polaris, we recommend reading the manual release guide first to understand the process. Do not perform any actions described in the manual guide, as the semi-automated guide will handle them for you. Simply read through the manual guide to understand the process.
Once you are familiar with the manual release process, use the semi-automated guide to cut the release."><meta itemprop=wordCount content="442"><meta name=twitter:card content="summary"><meta name=twitter:title content="Apache Polaris Release Guides"><meta name=twitter:description content="This section contains documentation related to Apache Polaris releases.
If you’re new to releasing Apache Polaris, we recommend reading the manual release guide first to understand the process. Do not perform any actions described in the manual guide, as the semi-automated guide will handle them for you. Simply read through the manual guide to understand the process.
-Once you are familiar with the manual release process, use the semi-automated guide to cut the release."><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css rel=stylesheet integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin [...]
+Once you are familiar with the manual release process, use the semi-automated guide to cut the release."><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css rel=stylesheet integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin [...]
<label for=m-communitymeetings-check><a href=/community/meetings/ title="Apache Polaris Community Meetings" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-communitymeetings><span>Meetings</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-communityproposals-li><input type=checkbox id=m-communityproposals-check>
<label for=m-communityproposals-check><a href=/community/proposals/ title="Apache Polaris Proposals & Roadmap" class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-communityproposals><span>Proposals & Roadmap</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-communitychat-bylaws-li><input type=checkbox id=m-communitychat-bylaws-check>
<label for=m-communitychat-bylaws-check><a href=/community/chat-bylaws/ title class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-communitychat-bylaws><span>Chat Bylaws</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-communitycommunity-guidelines-li><input type=checkbox id=m-communitycommunity-guidelines-check>
diff --git a/community/release-guides/manual-release-guide/index.html b/community/release-guides/manual-release-guide/index.html
index 1a54aa18d3..b2f920937a 100644
--- a/community/release-guides/manual-release-guide/index.html
+++ b/community/release-guides/manual-release-guide/index.html
@@ -14,7 +14,7 @@ Setup🔗 To create a release candidate, you will need:"><meta itemprop=wordCoun
⚠️ Warning
This guide is deprecated. While it remains functional and comprehensive, we recommend using the Semi-Automated Release Guide for new releases when available. This manual process is maintained for reference and fallback scenarios. This guide walks you through the process of creating a release of the Apache Polaris podling.
Instructions how to verify a release candidate are available here.
-Setup🔗 To create a release candidate, you will need:"><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css rel=stylesheet integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><script src=/jquery-3.7.1.min_1232160679 [...]
+Setup🔗 To create a release candidate, you will need:"><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css rel=stylesheet integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><script src=/jquery-3.7.1.min_1232160679 [...]
<label for=m-communitymeetings-check><a href=/community/meetings/ title="Apache Polaris Community Meetings" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-communitymeetings><span>Meetings</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-communityproposals-li><input type=checkbox id=m-communityproposals-check>
<label for=m-communityproposals-check><a href=/community/proposals/ title="Apache Polaris Proposals & Roadmap" class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-communityproposals><span>Proposals & Roadmap</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-communitychat-bylaws-li><input type=checkbox id=m-communitychat-bylaws-check>
<label for=m-communitychat-bylaws-check><a href=/community/chat-bylaws/ title class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-communitychat-bylaws><span>Chat Bylaws</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-communitycommunity-guidelines-li><input type=checkbox id=m-communitycommunity-guidelines-check>
@@ -47,7 +47,7 @@ git push apache release/x.y.z
echo "x.y.z" > version.txt
</code></pre><p>and update the version in the Helm Chart in:</p><ul><li><code>helm/polaris/Chart.yaml</code><ul><li>update <code>version</code> and <code>appVersion</code> fields</li><li>update the <code>Documentation</code> link in the <code>artifacthub.io/links</code> annotation to point to
<code>https://polaris.apache.org/releases/x.y.z/</code></li></ul></li><li><code>helm/polaris/README.md</code></li><li><code>helm/polaris/values.yaml</code><ul><li>update the <code>image.tag</code> field from <code>"latest"</code> to <code>"x.y.z"</code></li></ul></li></ul><p>and update the documentation URLs in <code>helm/polaris/values.yaml</code> and <code>helm/polaris/values.schema.json</code> to point to the released documentation.
-Replace <code>/in-dev/unreleased/</code> with <code>/releases/x.y.z/</code> in all documentation URLs, for example:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span>sed -i~ <span style=color:#4e9a06>& [...]
+Replace <code>/in-dev/unreleased/</code> with <code>/releases/x.y.z/</code> in all documentation URLs, for example:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span>sed -i~ <span style=color:#4e9a06>'s|/in-dev/unreleased/|/releases/x.y.z/|g'</span> helm/polaris/values.yaml helm/polaris/values.schema.json
</span></span></code></pre></div><p>and commit/push the version bump:</p><pre tabindex=0><code>git commit -m "Bump version to x.y.z" version.txt helm/polaris/Chart.yaml helm/polaris/README.md helm/polaris/values.yaml helm/polaris/values.schema.json
</code></pre><p>Update <code>CHANGELOG.md</code>:</p><pre tabindex=0><code>./gradlew patchChangelog
git commit CHANGELOG.md -m "Update CHANGELOG for x.y.z release"
diff --git a/community/release-guides/release-verification-guide/index.html b/community/release-guides/release-verification-guide/index.html
index 95e145fd1c..1a801c4501 100644
--- a/community/release-guides/release-verification-guide/index.html
+++ b/community/release-guides/release-verification-guide/index.html
@@ -7,10 +7,10 @@ Please keep the ASF Release Policy, especially the section on “Owned and Contr
Verifying a (staged) release of an Apache project has to follow a bunch of tasks, which can be grouped into tasks that can be automated and those that need human intervention. Polaris provides a tool to automate the tasks that can be automated."><meta property="og:locale" content="en_us"><meta property="og:type" content="article"><meta property="article:section" content="community"><meta itemprop=name content="Release Verification Guide"><meta itemprop=description content="Audience: Comm [...]
This guide walks you through the process of verifying a staged Apache Polaris release candidate.
Please keep the ASF Release Policy, especially the section on “Owned and Controlled Hardware,” in mind: Strictly speaking, releases must be verified on hardware owned and controlled by the committer.
-Verifying a (staged) release of an Apache project has to follow a bunch of tasks, which can be grouped into tasks that can be automated and those that need human intervention. Polaris provides a tool to automate the tasks that can be automated."><meta itemprop=wordCount content="1394"><meta name=twitter:card content="summary"><meta name=twitter:title content="Release Verification Guide"><meta name=twitter:description content="Audience: Committers and interested contributors.
+Verifying a (staged) release of an Apache project has to follow a bunch of tasks, which can be grouped into tasks that can be automated and those that need human intervention. Polaris provides a tool to automate the tasks that can be automated."><meta itemprop=wordCount content="1384"><meta name=twitter:card content="summary"><meta name=twitter:title content="Release Verification Guide"><meta name=twitter:description content="Audience: Committers and interested contributors.
This guide walks you through the process of verifying a staged Apache Polaris release candidate.
Please keep the ASF Release Policy, especially the section on “Owned and Controlled Hardware,” in mind: Strictly speaking, releases must be verified on hardware owned and controlled by the committer.
-Verifying a (staged) release of an Apache project has to follow a bunch of tasks, which can be grouped into tasks that can be automated and those that need human intervention. Polaris provides a tool to automate the tasks that can be automated."><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27c1009b1dc9 [...]
+Verifying a (staged) release of an Apache project has to follow a bunch of tasks, which can be grouped into tasks that can be automated and those that need human intervention. Polaris provides a tool to automate the tasks that can be automated."><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27c1009b1dc9 [...]
<label for=m-communitymeetings-check><a href=/community/meetings/ title="Apache Polaris Community Meetings" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-communitymeetings><span>Meetings</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-communityproposals-li><input type=checkbox id=m-communityproposals-check>
<label for=m-communityproposals-check><a href=/community/proposals/ title="Apache Polaris Proposals & Roadmap" class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-communityproposals><span>Proposals & Roadmap</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-communitychat-bylaws-li><input type=checkbox id=m-communitychat-bylaws-check>
<label for=m-communitychat-bylaws-check><a href=/community/chat-bylaws/ title class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-communitychat-bylaws><span>Chat Bylaws</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-communitycommunity-guidelines-li><input type=checkbox id=m-communitycommunity-guidelines-check>
@@ -51,21 +51,21 @@ It is therefore recommended to verify the script before running it on a release
You can inspect it by
<a href=https://github.com/snazy/polaris/blob/main/tools/verify-release/verify-release.sh>looking at the source code</a>
before running it.
-The link to the <code>Raw</code> file must be the same as the one used in the command below to run the script.</p><h2 id=running-the-script id=running-the-script>Running the script<a class=heading-anchor href=#running-the-script aria-label=Anchor>🔗</a></h2><p>Run the most recent version of the script using the following command:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=languag [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> -s https://raw.githubusercontent.com/apache/polaris/refs/heads/main/tools/verify-release/verify-release.sh<span style=color:#ce5c00;font-weight:700>)</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> --help
+The link to the <code>Raw</code> file must be the same as the one used in the command below to run the script.</p><h2 id=running-the-script id=running-the-script>Running the script<a class=heading-anchor href=#running-the-script aria-label=Anchor>🔗</a></h2><p>Run the most recent version of the script using the following command:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=languag [...]
+</span></span></span><span style=display:flex><span> -s https://raw.githubusercontent.com/apache/polaris/refs/heads/main/tools/verify-release/verify-release.sh<span style=color:#ce5c00;font-weight:700>)</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --help
</span></span></code></pre></div><p>The tool is intended for Polaris versions 1.3 and newer.
With <code>--reproducible-builds</code>, the tool may report known reproducible build issues; see <a href=#reproducible-builds>below</a> for details.</p><p>That script requires a couple of tools installed and will check that those are available
-and report those that need to be installed.</p><p>To run the script, you need the following pieces of information from the release-vote email:</p><ul><li>The <em>full</em> Git SHA of the corresponding source commit.</li><li>The version number of the release, something like <code>1.3.0</code></li><li>The RC number of the release, for example <code>1</code> or <code>2</code></li><li>The Maven staging repository ID, for example <code>1033</code> (the full number at the end of the Maven repo [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> --silent https://raw.githubusercontent.com/apache/polaris/refs/heads/main/tools/verify-release/verify-release.sh<span style=color:#ce5c00;font-weight:700>)</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> --git-sha 354a5ef6b337bf690b7a12fefe2c984e2139b029 <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> --version 1.4.0-rc0 <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span> --maven-repo-id <span style=color:#0000cf;font-weight:700>1033</span>
-</span></span></code></pre></div><p>Same example, but using the short option names:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span>bash <<span style=color:#ce5c00;font-weight:700>(</span>curl <sp [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> -s https://raw.githubusercontent.com/apache/polaris/refs/heads/main/tools/verify-release/verify-release.sh<span style=color:#ce5c00;font-weight:700>)</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> -s 354a5ef6b337bf690b7a12fefe2c984e2139b029 <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> -v 1.4.0-rc0 <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span> -m <span style=color:#0000cf;font-weight:700>1033</span>
+and report those that need to be installed.</p><p>To run the script, you need the following pieces of information from the release-vote email:</p><ul><li>The <em>full</em> Git SHA of the corresponding source commit.</li><li>The version number of the release, something like <code>1.3.0</code></li><li>The RC number of the release, for example <code>1</code> or <code>2</code></li><li>The Maven staging repository ID, for example <code>1033</code> (the full number at the end of the Maven repo [...]
+</span></span></span><span style=display:flex><span> --silent https://raw.githubusercontent.com/apache/polaris/refs/heads/main/tools/verify-release/verify-release.sh<span style=color:#ce5c00;font-weight:700>)</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --git-sha 354a5ef6b337bf690b7a12fefe2c984e2139b029 <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --version 1.4.0-rc0 <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --maven-repo-id <span style=color:#0000cf;font-weight:700>1033</span>
+</span></span></code></pre></div><p>Same example, but using the short option names:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span>bash <<span style=color:#ce5c00;font-weight:700>(</span>curl <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -s https://raw.githubusercontent.com/apache/polaris/refs/heads/main/tools/verify-release/verify-release.sh<span style=color:#ce5c00;font-weight:700>)</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -s 354a5ef6b337bf690b7a12fefe2c984e2139b029 <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -v 1.4.0-rc0 <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -m <span style=color:#0000cf;font-weight:700>1033</span>
</span></span></code></pre></div><p>The verification script creates a temporary directory that will eventually contain a fresh Git clone,
all downloaded and all built artifacts.
This temporary directory is deleted after the script has finished. To keep the temporary directory
diff --git a/community/release-guides/semi-automated-release-guide/index.html b/community/release-guides/semi-automated-release-guide/index.html
index 86c6edee1f..e7efe8d102 100644
--- a/community/release-guides/semi-automated-release-guide/index.html
+++ b/community/release-guides/semi-automated-release-guide/index.html
@@ -10,7 +10,7 @@ Note that all screenshots in this page are for illustration purposes only. The a
Dry-run mode🔗 Each of the Github Workflows that have been developed comes with a dry-run mode. It is enabled ticking the Dry run mode checkbox before starting the workflow. When enabled, the workflow will not perform any destructive action (e.g. tag creation, branch deletion, etc.) but instead print out the commands that would have been executed."><meta itemprop=wordCount content="1783"><meta name=twitter:card content="summary"><meta name=twitter:title content="Semi-Automated Release Gui [...]
Overview🔗 The steps performed in the Manual Release Guide have been automated to a large extent. This semi-automated release guide outlines the workflows that can be used to perform a release with little manual intervention.
Note that all screenshots in this page are for illustration purposes only. The actual repository name, version numbers, etc. may be different.
-Dry-run mode🔗 Each of the Github Workflows that have been developed comes with a dry-run mode. It is enabled ticking the Dry run mode checkbox before starting the workflow. When enabled, the workflow will not perform any destructive action (e.g. tag creation, branch deletion, etc.) but instead print out the commands that would have been executed."><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EA [...]
+Dry-run mode🔗 Each of the Github Workflows that have been developed comes with a dry-run mode. It is enabled ticking the Dry run mode checkbox before starting the workflow. When enabled, the workflow will not perform any destructive action (e.g. tag creation, branch deletion, etc.) but instead print out the commands that would have been executed."><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EA [...]
<label for=m-communitymeetings-check><a href=/community/meetings/ title="Apache Polaris Community Meetings" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-communitymeetings><span>Meetings</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-communityproposals-li><input type=checkbox id=m-communityproposals-check>
<label for=m-communityproposals-check><a href=/community/proposals/ title="Apache Polaris Proposals & Roadmap" class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-communityproposals><span>Proposals & Roadmap</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-communitychat-bylaws-li><input type=checkbox id=m-communitychat-bylaws-check>
<label for=m-communitychat-bylaws-check><a href=/community/chat-bylaws/ title class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-communitychat-bylaws><span>Chat Bylaws</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-communitycommunity-guidelines-li><input type=checkbox id=m-communitycommunity-guidelines-check>
diff --git a/community/security-advisories/cve-2026-42809/index.html b/community/security-advisories/cve-2026-42809/index.html
index e20b493fb0..77ef686657 100644
--- a/community/security-advisories/cve-2026-42809/index.html
+++ b/community/security-advisories/cve-2026-42809/index.html
@@ -1,4 +1,4 @@
-<!doctype html><html itemscope itemtype=http://schema.org/WebPage lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon.png sizes=100x100><link rel=icon type=image/png href=/favicons/android-ch [...]
+<!doctype html><html itemscope itemtype=http://schema.org/WebPage lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon.png sizes=100x100><link rel=icon type=image/png href=/favicons/android-ch [...]
<label for=m-communitymeetings-check><a href=/community/meetings/ title="Apache Polaris Community Meetings" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-communitymeetings><span>Meetings</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-communityproposals-li><input type=checkbox id=m-communityproposals-check>
<label for=m-communityproposals-check><a href=/community/proposals/ title="Apache Polaris Proposals & Roadmap" class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-communityproposals><span>Proposals & Roadmap</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-communitychat-bylaws-li><input type=checkbox id=m-communitychat-bylaws-check>
<label for=m-communitychat-bylaws-check><a href=/community/chat-bylaws/ title class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-communitychat-bylaws><span>Chat Bylaws</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-communitycommunity-guidelines-li><input type=checkbox id=m-communitycommunity-guidelines-check>
diff --git a/community/security-advisories/cve-2026-42810/index.html b/community/security-advisories/cve-2026-42810/index.html
index c50aad4258..8c117fa7e7 100644
--- a/community/security-advisories/cve-2026-42810/index.html
+++ b/community/security-advisories/cve-2026-42810/index.html
@@ -1,4 +1,4 @@
-<!doctype html><html itemscope itemtype=http://schema.org/WebPage lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon.png sizes=100x100><link rel=icon type=image/png href=/favicons/android-ch [...]
+<!doctype html><html itemscope itemtype=http://schema.org/WebPage lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon.png sizes=100x100><link rel=icon type=image/png href=/favicons/android-ch [...]
<label for=m-communitymeetings-check><a href=/community/meetings/ title="Apache Polaris Community Meetings" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-communitymeetings><span>Meetings</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-communityproposals-li><input type=checkbox id=m-communityproposals-check>
<label for=m-communityproposals-check><a href=/community/proposals/ title="Apache Polaris Proposals & Roadmap" class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-communityproposals><span>Proposals & Roadmap</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-communitychat-bylaws-li><input type=checkbox id=m-communitychat-bylaws-check>
<label for=m-communitychat-bylaws-check><a href=/community/chat-bylaws/ title class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-communitychat-bylaws><span>Chat Bylaws</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-communitycommunity-guidelines-li><input type=checkbox id=m-communitycommunity-guidelines-check>
diff --git a/community/security-advisories/cve-2026-42811/index.html b/community/security-advisories/cve-2026-42811/index.html
index 352987f977..debbfb4396 100644
--- a/community/security-advisories/cve-2026-42811/index.html
+++ b/community/security-advisories/cve-2026-42811/index.html
@@ -2,7 +2,7 @@
Severity🔗 Important"><meta property="og:url" content="https://polaris.apache.org/community/security-advisories/cve-2026-42811/"><meta property="og:site_name" content="Apache Polaris"><meta property="og:title" content="Apache Polaris"><meta property="og:description" content="CVE-2026-42811 - GCS CEL Expression Injection🔗 Abstract🔗 An authenticated Apache Polaris user with permission to create a table can use a crafted table name containing CEL expression syntax to bypass GCS credential pa [...]
Severity🔗 Important"><meta property="og:locale" content="en_us"><meta property="og:type" content="article"><meta property="article:section" content="community"><meta itemprop=name content="Apache Polaris"><meta itemprop=description content="CVE-2026-42811 - GCS CEL Expression Injection🔗 Abstract🔗 An authenticated Apache Polaris user with permission to create a table can use a crafted table name containing CEL expression syntax to bypass GCS credential path restrictions, gaining Google Cl [...]
Severity🔗 Important"><meta itemprop=wordCount content="405"><meta name=twitter:card content="summary"><meta name=twitter:title content="Apache Polaris"><meta name=twitter:description content="CVE-2026-42811 - GCS CEL Expression Injection🔗 Abstract🔗 An authenticated Apache Polaris user with permission to create a table can use a crafted table name containing CEL expression syntax to bypass GCS credential path restrictions, gaining Google Cloud Storage credentials scoped to the entire conf [...]
-Severity🔗 Important"><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css rel=stylesheet integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><script src=/jquery-3.7.1.min_1232160679860847782.js integrity="sha512-v2 [...]
+Severity🔗 Important"><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css rel=stylesheet integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><script src=/jquery-3.7.1.min_1232160679860847782.js integrity="sha512-v2 [...]
<label for=m-communitymeetings-check><a href=/community/meetings/ title="Apache Polaris Community Meetings" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-communitymeetings><span>Meetings</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-communityproposals-li><input type=checkbox id=m-communityproposals-check>
<label for=m-communityproposals-check><a href=/community/proposals/ title="Apache Polaris Proposals & Roadmap" class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-communityproposals><span>Proposals & Roadmap</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-communitychat-bylaws-li><input type=checkbox id=m-communitychat-bylaws-check>
<label for=m-communitychat-bylaws-check><a href=/community/chat-bylaws/ title class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-communitychat-bylaws><span>Chat Bylaws</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-communitycommunity-guidelines-li><input type=checkbox id=m-communitycommunity-guidelines-check>
diff --git a/community/security-advisories/cve-2026-42812/index.html b/community/security-advisories/cve-2026-42812/index.html
index cb01dbd619..9d6be1f69e 100644
--- a/community/security-advisories/cve-2026-42812/index.html
+++ b/community/security-advisories/cve-2026-42812/index.html
@@ -6,7 +6,7 @@ Affected versions🔗 Apache Polaris < 1.4.1 Description🔗 In Apache Iceberg,
Severity🔗 Important
Affected versions🔗 Apache Polaris < 1.4.1 Description🔗 In Apache Iceberg, the table’s metadata files are control files: they tell readers which data files belong to the table and which table version to read."><meta itemprop=wordCount content="465"><meta name=twitter:card content="summary"><meta name=twitter:title content="Apache Polaris"><meta name=twitter:description content="CVE-2026-42812 - write.metadata.path Location Escape🔗 Abstract🔗 A user with permissions to alter a table can use [...]
Severity🔗 Important
-Affected versions🔗 Apache Polaris < 1.4.1 Description🔗 In Apache Iceberg, the table’s metadata files are control files: they tell readers which data files belong to the table and which table version to read."><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba32 [...]
+Affected versions🔗 Apache Polaris < 1.4.1 Description🔗 In Apache Iceberg, the table’s metadata files are control files: they tell readers which data files belong to the table and which table version to read."><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba32 [...]
<label for=m-communitymeetings-check><a href=/community/meetings/ title="Apache Polaris Community Meetings" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-communitymeetings><span>Meetings</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-communityproposals-li><input type=checkbox id=m-communityproposals-check>
<label for=m-communityproposals-check><a href=/community/proposals/ title="Apache Polaris Proposals & Roadmap" class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-communityproposals><span>Proposals & Roadmap</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-communitychat-bylaws-li><input type=checkbox id=m-communitychat-bylaws-check>
<label for=m-communitychat-bylaws-check><a href=/community/chat-bylaws/ title class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-communitychat-bylaws><span>Chat Bylaws</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-communitycommunity-guidelines-li><input type=checkbox id=m-communitycommunity-guidelines-check>
diff --git a/community/security-report/index.html b/community/security-report/index.html
index cca9c1a14e..979de85ccd 100644
--- a/community/security-report/index.html
+++ b/community/security-report/index.html
@@ -6,7 +6,7 @@ Please note that the security@apache.org and private@polaris.apache.org mailing
We strongly recommend that users first report such issues on the security@apache.org and private@polaris.apache.org, using the procedure details on The ASF Security page.
Please note that the security@apache.org and private@polaris.apache.org mailing lists are reserved for reporting undisclosed security vulnerabilities and following the vulnerability resolution process. Regular issue reports should be directed to GitHub Issue or the dev@polaris.apache.org mailing list."><meta itemprop=wordCount content="208"><meta name=twitter:card content="summary"><meta name=twitter:title content="Apache Polaris"><meta name=twitter:description content="Security Report🔗 [...]
We strongly recommend that users first report such issues on the security@apache.org and private@polaris.apache.org, using the procedure details on The ASF Security page.
-Please note that the security@apache.org and private@polaris.apache.org mailing lists are reserved for reporting undisclosed security vulnerabilities and following the vulnerability resolution process. Regular issue reports should be directed to GitHub Issue or the dev@polaris.apache.org mailing list."><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossori [...]
+Please note that the security@apache.org and private@polaris.apache.org mailing lists are reserved for reporting undisclosed security vulnerabilities and following the vulnerability resolution process. Regular issue reports should be directed to GitHub Issue or the dev@polaris.apache.org mailing list."><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossori [...]
<label for=m-communitymeetings-check><a href=/community/meetings/ title="Apache Polaris Community Meetings" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-communitymeetings><span>Meetings</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-communityproposals-li><input type=checkbox id=m-communityproposals-check>
<label for=m-communityproposals-check><a href=/community/proposals/ title="Apache Polaris Proposals & Roadmap" class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-communityproposals><span>Proposals & Roadmap</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-communitychat-bylaws-li><input type=checkbox id=m-communitychat-bylaws-check>
<label for=m-communitychat-bylaws-check><a href=/community/chat-bylaws/ title class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-communitychat-bylaws><span>Chat Bylaws</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-communitycommunity-guidelines-li><input type=checkbox id=m-communitycommunity-guidelines-check>
diff --git a/docs/index.html b/docs/index.html
index a0d2575f68..18e609cbd9 100644
--- a/docs/index.html
+++ b/docs/index.html
@@ -2,7 +2,7 @@
1.5.0 1.4.1 1.4.0 1.3.0 1.2.0 1.1.0 1.0.1 1.0.0 0.9.0 For main-branch developer documentation, see Developer Docs (main branch, unreleased)."><meta property="og:url" content="https://polaris.apache.org/docs/"><meta property="og:site_name" content="Apache Polaris"><meta property="og:title" content="Apache Polaris Documentation"><meta property="og:description" content="Welcome to the Apache Polaris documentation. Select a version below to get started.
1.5.0 1.4.1 1.4.0 1.3.0 1.2.0 1.1.0 1.0.1 1.0.0 0.9.0 For main-branch developer documentation, see Developer Docs (main branch, unreleased)."><meta property="og:locale" content="en_us"><meta property="og:type" content="website"><meta itemprop=name content="Apache Polaris Documentation"><meta itemprop=description content="Welcome to the Apache Polaris documentation. Select a version below to get started.
1.5.0 1.4.1 1.4.0 1.3.0 1.2.0 1.1.0 1.0.1 1.0.0 0.9.0 For main-branch developer documentation, see Developer Docs (main branch, unreleased)."><meta itemprop=wordCount content="32"><meta name=twitter:card content="summary"><meta name=twitter:title content="Apache Polaris Documentation"><meta name=twitter:description content="Welcome to the Apache Polaris documentation. Select a version below to get started.
-1.5.0 1.4.1 1.4.0 1.3.0 1.2.0 1.1.0 1.0.1 1.0.0 0.9.0 For main-branch developer documentation, see Developer Docs (main branch, unreleased)."><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css rel=stylesheet integrity="sha256-PXPPJ8EAmx3JvxeSwfeR [...]
+1.5.0 1.4.1 1.4.0 1.3.0 1.2.0 1.1.0 1.0.1 1.0.0 0.9.0 For main-branch developer documentation, see Developer Docs (main branch, unreleased)."><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css rel=stylesheet integrity="sha256-PXPPJ8EAmx3JvxeSwfeR [...]
<label for=m-releases150-check><a href=/releases/1.5.0/ title="Apache Polaris 1.5.0 Documentation" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-releases150><span>1.5.0</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-releases150getting-started-li><input type=checkbox id=m-releases150getting-started-check>
<label for=m-releases150getting-started-check><a href=/releases/1.5.0/getting-started/ title="Getting Started with Apache Polaris" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-releases150getting-started><span>Getting Started</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-releases150getting-startedquick-start-li><input type=checkbox id=m-releases150getting-startedquick-start-check>
<label for=m-releases150getting-startedquick-start-check><a href=/releases/1.5.0/getting-started/quick-start/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-releases150getting-startedquick-start><span>Quickstart</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-releases150getting-startedsetup-tools-li><input type=checkbox id=m-releases150getting-startedsetup-tools-check>
diff --git a/downloads/0.9.0/index.html b/downloads/0.9.0/index.html
index 175b172700..ab58f323e9 100644
--- a/downloads/0.9.0/index.html
+++ b/downloads/0.9.0/index.html
@@ -2,4 +2,4 @@
Downloads🔗 Artifact PGP Sig SHA-512 0.9.0-incubating source tar.gz .asc .sha512 Release Notes🔗 Apache Polaris 0.9.0 was the first Polaris release. Only the source distribution is available for this release."><meta property="og:url" content="https://polaris.apache.org/downloads/0.9.0/"><meta property="og:site_name" content="Apache Polaris"><meta property="og:title" content="Apache Polaris 0.9.0-incubating"><meta property="og:description" content="Released on March 11, 2025.
Downloads🔗 Artifact PGP Sig SHA-512 0.9.0-incubating source tar.gz .asc .sha512 Release Notes🔗 Apache Polaris 0.9.0 was the first Polaris release. Only the source distribution is available for this release."><meta property="og:locale" content="en_us"><meta property="og:type" content="article"><meta property="article:section" content="downloads"><meta itemprop=name content="Apache Polaris 0.9.0-incubating"><meta itemprop=description content="Released on March 11, 2025.
Downloads🔗 Artifact PGP Sig SHA-512 0.9.0-incubating source tar.gz .asc .sha512 Release Notes🔗 Apache Polaris 0.9.0 was the first Polaris release. Only the source distribution is available for this release."><meta itemprop=wordCount content="34"><meta name=twitter:card content="summary"><meta name=twitter:title content="Apache Polaris 0.9.0-incubating"><meta name=twitter:description content="Released on March 11, 2025.
-Downloads🔗 Artifact PGP Sig SHA-512 0.9.0-incubating source tar.gz .asc .sha512 Release Notes🔗 Apache Polaris 0.9.0 was the first Polaris release. Only the source distribution is available for this release."><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329 [...]
\ No newline at end of file
+Downloads🔗 Artifact PGP Sig SHA-512 0.9.0-incubating source tar.gz .asc .sha512 Release Notes🔗 Apache Polaris 0.9.0 was the first Polaris release. Only the source distribution is available for this release."><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329 [...]
\ No newline at end of file
diff --git a/downloads/1.0.0/index.html b/downloads/1.0.0/index.html
index bd133eec04..1f93dbca8c 100644
--- a/downloads/1.0.0/index.html
+++ b/downloads/1.0.0/index.html
@@ -2,4 +2,4 @@
Downloads🔗 Artifact PGP Sig SHA-512 source tar.gz .asc .sha512 binary tgz .asc .sha512 binary zip .asc .sha512 Spark 3.5 with Scala 2.12 Client Jar .asc .sha512 Spark 3.5 with Scala 2.13 Client Jar .asc .sha512 Release Notes🔗 Highlights🔗 First release ready for real-world workloads after the public beta 0.9.0 Binary distribution – first release with single downloadable .tgz or .zip artifact. Helm Chart – debut of an official Helm chart for seamless Kubernetes deployment New features & en [...]
Downloads🔗 Artifact PGP Sig SHA-512 source tar.gz .asc .sha512 binary tgz .asc .sha512 binary zip .asc .sha512 Spark 3.5 with Scala 2.12 Client Jar .asc .sha512 Spark 3.5 with Scala 2.13 Client Jar .asc .sha512 Release Notes🔗 Highlights🔗 First release ready for real-world workloads after the public beta 0.9.0 Binary distribution – first release with single downloadable .tgz or .zip artifact. Helm Chart – debut of an official Helm chart for seamless Kubernetes deployment New features & en [...]
Downloads🔗 Artifact PGP Sig SHA-512 source tar.gz .asc .sha512 binary tgz .asc .sha512 binary zip .asc .sha512 Spark 3.5 with Scala 2.12 Client Jar .asc .sha512 Spark 3.5 with Scala 2.13 Client Jar .asc .sha512 Release Notes🔗 Highlights🔗 First release ready for real-world workloads after the public beta 0.9.0 Binary distribution – first release with single downloadable .tgz or .zip artifact. Helm Chart – debut of an official Helm chart for seamless Kubernetes deployment New features & en [...]
-Downloads🔗 Artifact PGP Sig SHA-512 source tar.gz .asc .sha512 binary tgz .asc .sha512 binary zip .asc .sha512 Spark 3.5 with Scala 2.12 Client Jar .asc .sha512 Spark 3.5 with Scala 2.13 Client Jar .asc .sha512 Release Notes🔗 Highlights🔗 First release ready for real-world workloads after the public beta 0.9.0 Binary distribution – first release with single downloadable .tgz or .zip artifact. Helm Chart – debut of an official Helm chart for seamless Kubernetes deployment New features & en [...]
\ No newline at end of file
+Downloads🔗 Artifact PGP Sig SHA-512 source tar.gz .asc .sha512 binary tgz .asc .sha512 binary zip .asc .sha512 Spark 3.5 with Scala 2.12 Client Jar .asc .sha512 Spark 3.5 with Scala 2.13 Client Jar .asc .sha512 Release Notes🔗 Highlights🔗 First release ready for real-world workloads after the public beta 0.9.0 Binary distribution – first release with single downloadable .tgz or .zip artifact. Helm Chart – debut of an official Helm chart for seamless Kubernetes deployment New features & en [...]
\ No newline at end of file
diff --git a/downloads/1.0.1/index.html b/downloads/1.0.1/index.html
index 4533a5ee69..b6633217f1 100644
--- a/downloads/1.0.1/index.html
+++ b/downloads/1.0.1/index.html
@@ -6,4 +6,4 @@ remove db-kind in Helm Chart add relational-jdbc to helm"><meta property="og:loc
Downloads🔗 Artifact PGP Sig SHA-512 source tar.gz .asc .sha512 binary tgz .asc .sha512 binary zip .asc .sha512 Spark 3.5 with Scala 2.12 Client Jar .asc .sha512 Spark 3.5 with Scala 2.13 Client Jar .asc .sha512 Release Notes🔗 This is a maintenance release on the 1.0.0 release fixing a couple of issues on the Helm Chart:
remove db-kind in Helm Chart add relational-jdbc to helm"><meta itemprop=wordCount content="69"><meta name=twitter:card content="summary"><meta name=twitter:title content="Apache Polaris 1.0.1-incubating"><meta name=twitter:description content="Released on August 16th, 2025.
Downloads🔗 Artifact PGP Sig SHA-512 source tar.gz .asc .sha512 binary tgz .asc .sha512 binary zip .asc .sha512 Spark 3.5 with Scala 2.12 Client Jar .asc .sha512 Spark 3.5 with Scala 2.13 Client Jar .asc .sha512 Release Notes🔗 This is a maintenance release on the 1.0.0 release fixing a couple of issues on the Helm Chart:
-remove db-kind in Helm Chart add relational-jdbc to helm"><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css rel=stylesheet integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><script src=/jquery-3.7.1.min_123216 [...]
\ No newline at end of file
+remove db-kind in Helm Chart add relational-jdbc to helm"><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css rel=stylesheet integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><script src=/jquery-3.7.1.min_123216 [...]
\ No newline at end of file
diff --git a/downloads/1.1.0/index.html b/downloads/1.1.0/index.html
index 3e931af3ef..b44cac755b 100644
--- a/downloads/1.1.0/index.html
+++ b/downloads/1.1.0/index.html
@@ -1,18 +1,18 @@
<!doctype html><html itemscope itemtype=http://schema.org/WebPage lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon.png sizes=100x100><link rel=icon type=image/png href=/favicons/android-ch [...]
-Downloads🔗 Artifact PGP Sig SHA-512 source tar.gz .asc .sha512 binary tgz .asc .sha512 binary zip .asc .sha512 Spark 3.5 with Scala 2.12 Client Jar .asc .sha512 Spark 3.5 with Scala 2.13 Client Jar .asc .sha512 Release Notes🔗 New features & enhancements🔗 HMS support IMPLICIT authentication type Support for non-AWS S3 compatible storage with STS: MinIO, s3a scheme support Use of Realm instead of RealmId Modularized Federation Architecture Federated Catalog Support in Polaris CLI Expanded [...]
-Downloads🔗 Artifact PGP Sig SHA-512 source tar.gz .asc .sha512 binary tgz .asc .sha512 binary zip .asc .sha512 Spark 3.5 with Scala 2.12 Client Jar .asc .sha512 Spark 3.5 with Scala 2.13 Client Jar .asc .sha512 Release Notes🔗 New features & enhancements🔗 HMS support IMPLICIT authentication type Support for non-AWS S3 compatible storage with STS: MinIO, s3a scheme support Use of Realm instead of RealmId Modularized Federation Architecture Federated Catalog Support in Polaris CLI Expanded [...]
-Downloads🔗 Artifact PGP Sig SHA-512 source tar.gz .asc .sha512 binary tgz .asc .sha512 binary zip .asc .sha512 Spark 3.5 with Scala 2.12 Client Jar .asc .sha512 Spark 3.5 with Scala 2.13 Client Jar .asc .sha512 Release Notes🔗 New features & enhancements🔗 HMS support IMPLICIT authentication type Support for non-AWS S3 compatible storage with STS: MinIO, s3a scheme support Use of Realm instead of RealmId Modularized Federation Architecture Federated Catalog Support in Polaris CLI Expanded [...]
-Downloads🔗 Artifact PGP Sig SHA-512 source tar.gz .asc .sha512 binary tgz .asc .sha512 binary zip .asc .sha512 Spark 3.5 with Scala 2.12 Client Jar .asc .sha512 Spark 3.5 with Scala 2.13 Client Jar .asc .sha512 Release Notes🔗 New features & enhancements🔗 HMS support IMPLICIT authentication type Support for non-AWS S3 compatible storage with STS: MinIO, s3a scheme support Use of Realm instead of RealmId Modularized Federation Architecture Federated Catalog Support in Polaris CLI Expanded [...]
+Downloads🔗 Artifact PGP Sig SHA-512 source tar.gz .asc .sha512 binary tgz .asc .sha512 binary zip .asc .sha512 Spark 3.5 with Scala 2.12 Client Jar .asc .sha512 Spark 3.5 with Scala 2.13 Client Jar .asc .sha512 Release Notes🔗 New features & enhancements🔗 HMS support IMPLICIT authentication type Support for non-AWS S3 compatible storage with STS: MinIO, s3a scheme support Use of Realm instead of RealmId Modularized Federation Architecture Federated Catalog Support in Polaris CLI Expanded [...]
+Downloads🔗 Artifact PGP Sig SHA-512 source tar.gz .asc .sha512 binary tgz .asc .sha512 binary zip .asc .sha512 Spark 3.5 with Scala 2.12 Client Jar .asc .sha512 Spark 3.5 with Scala 2.13 Client Jar .asc .sha512 Release Notes🔗 New features & enhancements🔗 HMS support IMPLICIT authentication type Support for non-AWS S3 compatible storage with STS: MinIO, s3a scheme support Use of Realm instead of RealmId Modularized Federation Architecture Federated Catalog Support in Polaris CLI Expanded [...]
+Downloads🔗 Artifact PGP Sig SHA-512 source tar.gz .asc .sha512 binary tgz .asc .sha512 binary zip .asc .sha512 Spark 3.5 with Scala 2.12 Client Jar .asc .sha512 Spark 3.5 with Scala 2.13 Client Jar .asc .sha512 Release Notes🔗 New features & enhancements🔗 HMS support IMPLICIT authentication type Support for non-AWS S3 compatible storage with STS: MinIO, s3a scheme support Use of Realm instead of RealmId Modularized Federation Architecture Federated Catalog Support in Polaris CLI Expanded [...]
+Downloads🔗 Artifact PGP Sig SHA-512 source tar.gz .asc .sha512 binary tgz .asc .sha512 binary zip .asc .sha512 Spark 3.5 with Scala 2.12 Client Jar .asc .sha512 Spark 3.5 with Scala 2.13 Client Jar .asc .sha512 Release Notes🔗 New features & enhancements🔗 HMS support IMPLICIT authentication type Support for non-AWS S3 compatible storage with STS: MinIO, s3a scheme support Use of Realm instead of RealmId Modularized Federation Architecture Federated Catalog Support in Polaris CLI Expanded [...]
from <code>symmetric.pem</code> to <code>symmetric.key</code>.</li><li>For migrations from 1.0.x to 1.1.x, users using JDBC persistence and wanting to continue using v1 schema, must ensure
-that they, run following SQL statement under <code>POLARIS_SCHEMA</code> to make sure version table exists:<div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-sql data-lang=sql><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 1</span><span><span style=color:#204a87;font-weight:700>CREATE [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span><span style=color:#f8f8f8> </span><span style=color:#000>version_key</span><span style=color:#f8f8f8> </span><span style=color:#204a87>TEXT</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>PRIMARY</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:70 [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span><span style=color:#f8f8f8> </span><span style=color:#000>version_value</span><span style=color:#f8f8f8> </span><span style=color:#204a87>INTEGER</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>NOT</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:7 [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span><span style=color:#000;font-weight:700>);</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span><span style=color:#204a87;font-weight:700>INSERT</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>INTO</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>version</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>(</span [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>VALUES</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>'version'</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8> </span><span styl [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span><span style=color:#204a87;font-weight:700>ON</span><span style=color:#f8f8f8> </span><span style=color:#000>CONFLICT</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>(</span><span style=color:#000>version_key</span><span style=color:#000;font-weight:700>)</span><span style=color:#f [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>SET</span><span style=color:#f8f8f8> </span><span style=color:#000>version_value</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span st [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span><span style=color:#204a87;font-weight:700>COMMENT</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>ON</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>TABLE</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>version [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">10</span><span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">11</span><span><span style=color:#204a87;font-weight:700>ALTER</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>TABLE</span><span style=color:#f8f8f8> </span><span style=color:#000>polaris_schema</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>entities</span><span s [...]
+that they, run following SQL statement under <code>POLARIS_SCHEMA</code> to make sure version table exists:<div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-sql data-lang=sql><span style=display:flex><span><span style=color:#204a87;font-weight:700>CREATE</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>TABLE</span><span style=color:#f8f8f8> </span [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#000>version_key</span><span style=color:#f8f8f8> </span><span style=color:#204a87>TEXT</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>PRIMARY</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>KEY</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#000>version_value</span><span style=color:#f8f8f8> </span><span style=color:#204a87>INTEGER</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>NOT</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>NULL</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#000;font-weight:700>);</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>INSERT</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>INTO</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>version</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>(</span><span style=color:#000>version_key</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8> </span><span [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>VALUES</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>'version'</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8> </span><span style=color:#0000cf;font-weight:700>1</span><span style=color:#000;font-weight:700>)</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>ON</span><span style=color:#f8f8f8> </span><span style=color:#000>CONFLICT</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>(</span><span style=color:#000>version_key</span><span style=color:#000;font-weight:700>)</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>DO</span><span style=color:#f8f8f8> </span><span style=color:#204a87;fon [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>SET</span><span style=color:#f8f8f8> </span><span style=color:#000>version_value</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#000>EXCLUDED</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>version_value</span><span st [...]
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>COMMENT</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>ON</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>TABLE</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>version</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>IS</span><span style=color:#f8f8f8> </span><s [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>ALTER</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>TABLE</span><span style=color:#f8f8f8> </span><span style=color:#000>polaris_schema</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>entities</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>ADD</span><span style=color:#f8f8f8> </span><span style=col [...]
</span></span></span></code></pre></div><ul><li>Please don’t enable <a href=https://github.com/apache/polaris/blob/740993963cb41c2c1b4638be5e04dd00f1263c98/polaris-core/src/main/java/org/apache/polaris/core/config/FeatureConfiguration.java#L346>OPTIMIZED_SIBLING_CHECK</a> feature configuration, once the above SQL statements are run. As it may lead to incorrect behavior, due to missing data for location_without_scheme column.</li></ul></li></ul></div></main></div></div><footer class [...]
\ No newline at end of file
diff --git a/downloads/1.2.0/index.html b/downloads/1.2.0/index.html
index 307ecb38cc..0811e387c1 100644
--- a/downloads/1.2.0/index.html
+++ b/downloads/1.2.0/index.html
@@ -2,7 +2,7 @@
Downloads🔗 Artifact PGP Sig SHA-512 source tar.gz .asc .sha512 binary tgz .asc .sha512 binary zip .asc .sha512 Spark 3.5 with Scala 2.12 Client Jar .asc .sha512 Spark 3.5 with Scala 2.13 Client Jar .asc .sha512 Release Notes🔗 Upgrade Notes🔗 Amazon RDS plugin enabled, this allows polaris to connect to AWS Aurora PostgreSQL using IAM authentication. Breaking changes🔗 Creating or altering a namespace with a custom location outside its parent location is now prohibited by default. To restore [...]
Downloads🔗 Artifact PGP Sig SHA-512 source tar.gz .asc .sha512 binary tgz .asc .sha512 binary zip .asc .sha512 Spark 3.5 with Scala 2.12 Client Jar .asc .sha512 Spark 3.5 with Scala 2.13 Client Jar .asc .sha512 Release Notes🔗 Upgrade Notes🔗 Amazon RDS plugin enabled, this allows polaris to connect to AWS Aurora PostgreSQL using IAM authentication. Breaking changes🔗 Creating or altering a namespace with a custom location outside its parent location is now prohibited by default. To restore [...]
Downloads🔗 Artifact PGP Sig SHA-512 source tar.gz .asc .sha512 binary tgz .asc .sha512 binary zip .asc .sha512 Spark 3.5 with Scala 2.12 Client Jar .asc .sha512 Spark 3.5 with Scala 2.13 Client Jar .asc .sha512 Release Notes🔗 Upgrade Notes🔗 Amazon RDS plugin enabled, this allows polaris to connect to AWS Aurora PostgreSQL using IAM authentication. Breaking changes🔗 Creating or altering a namespace with a custom location outside its parent location is now prohibited by default. To restore [...]
-Downloads🔗 Artifact PGP Sig SHA-512 source tar.gz .asc .sha512 binary tgz .asc .sha512 binary zip .asc .sha512 Spark 3.5 with Scala 2.12 Client Jar .asc .sha512 Spark 3.5 with Scala 2.13 Client Jar .asc .sha512 Release Notes🔗 Upgrade Notes🔗 Amazon RDS plugin enabled, this allows polaris to connect to AWS Aurora PostgreSQL using IAM authentication. Breaking changes🔗 Creating or altering a namespace with a custom location outside its parent location is now prohibited by default. To restore [...]
+Downloads🔗 Artifact PGP Sig SHA-512 source tar.gz .asc .sha512 binary tgz .asc .sha512 binary zip .asc .sha512 Spark 3.5 with Scala 2.12 Client Jar .asc .sha512 Spark 3.5 with Scala 2.13 Client Jar .asc .sha512 Release Notes🔗 Upgrade Notes🔗 Amazon RDS plugin enabled, this allows polaris to connect to AWS Aurora PostgreSQL using IAM authentication. Breaking changes🔗 Creating or altering a namespace with a custom location outside its parent location is now prohibited by default. To restore [...]
However, you can now instead grant privileges just for specific operations, such as <code>TABLE_ADD_SNAPSHOT</code></p></li><li><p>Added a Management API endpoint to reset principal credentials, controlled by the <code>ENABLE_CREDENTIAL_RESET</code> (default: true) feature flag.</p></li><li><p>The <code>ENABLE_SUB_CATALOG_RBAC_FOR_FEDERATED_CATALOGS</code> was added to support sub-catalog (initially namespace and table) RBAC for federated catalogs.
The setting can be configured on a per-catalog basis by setting the catalog property: <code>polaris.config.enable-sub-catalog-rbac-for-federated-catalogs</code>.
The realm-level feature flag <code>ALLOW_SETTING_SUB_CATALOG_RBAC_FOR_FEDERATED_CATALOGS</code> (default: true) controls whether this functionality can be enabled or modified at the catalog level.</p></li><li><p>Added support for S3-compatible storage that does not have STS (use <code>stsUnavailable: true</code> in catalog storage configuration)</p></li><li><p>Added a Management API endpoint to reset principal credentials, controlled by the <code>ENABLE_CREDENTIAL_RESET</code> (default: [...]
diff --git a/downloads/1.3.0/index.html b/downloads/1.3.0/index.html
index fa08b71e5d..3b8bfa28c7 100644
--- a/downloads/1.3.0/index.html
+++ b/downloads/1.3.0/index.html
@@ -2,4 +2,4 @@
Downloads🔗 Artifact PGP Sig SHA-512 source tar.gz .asc .sha512 binary tgz .asc .sha512 binary zip .asc .sha512 Spark 3.5 with Scala 2.12 Client Jar .asc .sha512 Spark 3.5 with Scala 2.13 Client Jar .asc .sha512 Release Notes🔗 Highlights🔗 Support for Iceberg Metrics Reporting has been introduced in Polaris. Out of the box, metrics can be printed to the logs by setting the org.apache.polaris.service.reporting logger level to INFO (it’s set to OFF by default). Custom reporters can be implem [...]
Downloads🔗 Artifact PGP Sig SHA-512 source tar.gz .asc .sha512 binary tgz .asc .sha512 binary zip .asc .sha512 Spark 3.5 with Scala 2.12 Client Jar .asc .sha512 Spark 3.5 with Scala 2.13 Client Jar .asc .sha512 Release Notes🔗 Highlights🔗 Support for Iceberg Metrics Reporting has been introduced in Polaris. Out of the box, metrics can be printed to the logs by setting the org.apache.polaris.service.reporting logger level to INFO (it’s set to OFF by default). Custom reporters can be implem [...]
Downloads🔗 Artifact PGP Sig SHA-512 source tar.gz .asc .sha512 binary tgz .asc .sha512 binary zip .asc .sha512 Spark 3.5 with Scala 2.12 Client Jar .asc .sha512 Spark 3.5 with Scala 2.13 Client Jar .asc .sha512 Release Notes🔗 Highlights🔗 Support for Iceberg Metrics Reporting has been introduced in Polaris. Out of the box, metrics can be printed to the logs by setting the org.apache.polaris.service.reporting logger level to INFO (it’s set to OFF by default). Custom reporters can be implem [...]
-Downloads🔗 Artifact PGP Sig SHA-512 source tar.gz .asc .sha512 binary tgz .asc .sha512 binary zip .asc .sha512 Spark 3.5 with Scala 2.12 Client Jar .asc .sha512 Spark 3.5 with Scala 2.13 Client Jar .asc .sha512 Release Notes🔗 Highlights🔗 Support for Iceberg Metrics Reporting has been introduced in Polaris. Out of the box, metrics can be printed to the logs by setting the org.apache.polaris.service.reporting logger level to INFO (it’s set to OFF by default). Custom reporters can be implem [...]
\ No newline at end of file
+Downloads🔗 Artifact PGP Sig SHA-512 source tar.gz .asc .sha512 binary tgz .asc .sha512 binary zip .asc .sha512 Spark 3.5 with Scala 2.12 Client Jar .asc .sha512 Spark 3.5 with Scala 2.13 Client Jar .asc .sha512 Release Notes🔗 Highlights🔗 Support for Iceberg Metrics Reporting has been introduced in Polaris. Out of the box, metrics can be printed to the logs by setting the org.apache.polaris.service.reporting logger level to INFO (it’s set to OFF by default). Custom reporters can be implem [...]
\ No newline at end of file
diff --git a/downloads/1.4.0/index.html b/downloads/1.4.0/index.html
index ea3c5c7623..f8b1b14c82 100644
--- a/downloads/1.4.0/index.html
+++ b/downloads/1.4.0/index.html
@@ -2,7 +2,7 @@
Downloads🔗 Artifact PGP Sig SHA-512 source tar.gz .asc .sha512 binary tgz .asc .sha512 binary zip .asc .sha512 Spark 3.5 with Scala 2.12 Client Jar .asc .sha512 Spark 3.5 with Scala 2.13 Client Jar .asc .sha512 Release Notes🔗 Upgrade notes🔗 The custom token-bucket based rate limiter has been replaced with Guava’s rate limiter implementation. The Helm chart now includes a JSON schema file for easy validation of values files. Because types are now validated, existing values files may need [...]
Downloads🔗 Artifact PGP Sig SHA-512 source tar.gz .asc .sha512 binary tgz .asc .sha512 binary zip .asc .sha512 Spark 3.5 with Scala 2.12 Client Jar .asc .sha512 Spark 3.5 with Scala 2.13 Client Jar .asc .sha512 Release Notes🔗 Upgrade notes🔗 The custom token-bucket based rate limiter has been replaced with Guava’s rate limiter implementation. The Helm chart now includes a JSON schema file for easy validation of values files. Because types are now validated, existing values files may need [...]
Downloads🔗 Artifact PGP Sig SHA-512 source tar.gz .asc .sha512 binary tgz .asc .sha512 binary zip .asc .sha512 Spark 3.5 with Scala 2.12 Client Jar .asc .sha512 Spark 3.5 with Scala 2.13 Client Jar .asc .sha512 Release Notes🔗 Upgrade notes🔗 The custom token-bucket based rate limiter has been replaced with Guava’s rate limiter implementation. The Helm chart now includes a JSON schema file for easy validation of values files. Because types are now validated, existing values files may need [...]
-Downloads🔗 Artifact PGP Sig SHA-512 source tar.gz .asc .sha512 binary tgz .asc .sha512 binary zip .asc .sha512 Spark 3.5 with Scala 2.12 Client Jar .asc .sha512 Spark 3.5 with Scala 2.13 Client Jar .asc .sha512 Release Notes🔗 Upgrade notes🔗 The custom token-bucket based rate limiter has been replaced with Guava’s rate limiter implementation. The Helm chart now includes a JSON schema file for easy validation of values files. Because types are now validated, existing values files may need [...]
+Downloads🔗 Artifact PGP Sig SHA-512 source tar.gz .asc .sha512 binary tgz .asc .sha512 binary zip .asc .sha512 Spark 3.5 with Scala 2.12 Client Jar .asc .sha512 Spark 3.5 with Scala 2.13 Client Jar .asc .sha512 Release Notes🔗 Upgrade notes🔗 The custom token-bucket based rate limiter has been replaced with Guava’s rate limiter implementation. The Helm chart now includes a JSON schema file for easy validation of values files. Because types are now validated, existing values files may need [...]
are now validated, existing values files may need to be updated to match the new schema.</li></ul><h4 id=breaking-changes id=breaking-changes>Breaking changes<a class=heading-anchor href=#breaking-changes aria-label=Anchor>🔗</a></h4><ul><li>The (Before/After)CommitViewEvent has been removed.</li><li>The (Before/After)CommitTableEvent has been removed.</li><li>The <code>PolarisMetricsReporter.reportMetric()</code> method signature has been extended to include a <code>receivedTimestamp</co [...]
the <a href=https://learn.microsoft.com/en-us/azure/storage/blobs/data-lake-storage-namespace>hierarchical namespace</a>
feature is enabled in Azure.</li><li>Relaxed <code>client_id</code>, <code>client_secret</code> regex/pattern validation on reset endpoint call</li><li>Added support for S3-compatible storage that does not have KMS (use <code>kmsUavailable: true</code> in catalog storage configuration)</li><li>Added support for storage-scoped AWS credentials, allowing different AWS credentials to be configured per named storage. Enable with the <code>RESOLVE_CREDENTIALS_BY_STORAGE_NAME</code> feature fla [...]
\ No newline at end of file
diff --git a/downloads/1.4.1/index.html b/downloads/1.4.1/index.html
index 0a8881e970..612f0fdcbf 100644
--- a/downloads/1.4.1/index.html
+++ b/downloads/1.4.1/index.html
@@ -6,4 +6,4 @@ CVE-2026-42809 CVE-2026-42810 CVE-2026-42811 CVE-2026-42812"><meta property="og:
Downloads🔗 Artifact PGP Sig SHA-512 source tar.gz .asc .sha512 binary tgz .asc .sha512 binary zip .asc .sha512 Spark 3.5 with Scala 2.12 Client Jar .asc .sha512 Spark 3.5 with Scala 2.13 Client Jar .asc .sha512 Release Notes🔗 Fixes🔗 This release fixes 4 security issues:
CVE-2026-42809 CVE-2026-42810 CVE-2026-42811 CVE-2026-42812"><meta itemprop=wordCount content="53"><meta name=twitter:card content="summary"><meta name=twitter:title content="Apache Polaris 1.4.1"><meta name=twitter:description content="Released on May 1st, 2026.
Downloads🔗 Artifact PGP Sig SHA-512 source tar.gz .asc .sha512 binary tgz .asc .sha512 binary zip .asc .sha512 Spark 3.5 with Scala 2.12 Client Jar .asc .sha512 Spark 3.5 with Scala 2.13 Client Jar .asc .sha512 Release Notes🔗 Fixes🔗 This release fixes 4 security issues:
-CVE-2026-42809 CVE-2026-42810 CVE-2026-42811 CVE-2026-42812"><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css rel=stylesheet integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><script src=/jquery-3.7.1.min_123 [...]
\ No newline at end of file
+CVE-2026-42809 CVE-2026-42810 CVE-2026-42811 CVE-2026-42812"><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css rel=stylesheet integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><script src=/jquery-3.7.1.min_123 [...]
\ No newline at end of file
diff --git a/downloads/1.5.0/index.html b/downloads/1.5.0/index.html
index 97c71a3a06..4f2a6fc83a 100644
--- a/downloads/1.5.0/index.html
+++ b/downloads/1.5.0/index.html
@@ -2,4 +2,4 @@
Downloads🔗 Artifact PGP Sig SHA-512 source tar.gz .asc .sha512 binary tgz .asc .sha512 binary zip .asc .sha512 Spark 3.5 with Scala 2.12 Client Jar .asc .sha512 Spark 3.5 with Scala 2.13 Client Jar .asc .sha512 Release Notes🔗 Upgrade notes🔗 Breaking changes🔗 The ConnectionCredentials.of() method now throws an exception when more than one expiration timestamp property is present in the credentials map. Only a single expiration timestamp is allowed per credentials bundle. Entity names (nam [...]
Downloads🔗 Artifact PGP Sig SHA-512 source tar.gz .asc .sha512 binary tgz .asc .sha512 binary zip .asc .sha512 Spark 3.5 with Scala 2.12 Client Jar .asc .sha512 Spark 3.5 with Scala 2.13 Client Jar .asc .sha512 Release Notes🔗 Upgrade notes🔗 Breaking changes🔗 The ConnectionCredentials.of() method now throws an exception when more than one expiration timestamp property is present in the credentials map. Only a single expiration timestamp is allowed per credentials bundle. Entity names (nam [...]
Downloads🔗 Artifact PGP Sig SHA-512 source tar.gz .asc .sha512 binary tgz .asc .sha512 binary zip .asc .sha512 Spark 3.5 with Scala 2.12 Client Jar .asc .sha512 Spark 3.5 with Scala 2.13 Client Jar .asc .sha512 Release Notes🔗 Upgrade notes🔗 Breaking changes🔗 The ConnectionCredentials.of() method now throws an exception when more than one expiration timestamp property is present in the credentials map. Only a single expiration timestamp is allowed per credentials bundle. Entity names (nam [...]
-Downloads🔗 Artifact PGP Sig SHA-512 source tar.gz .asc .sha512 binary tgz .asc .sha512 binary zip .asc .sha512 Spark 3.5 with Scala 2.12 Client Jar .asc .sha512 Spark 3.5 with Scala 2.13 Client Jar .asc .sha512 Release Notes🔗 Upgrade notes🔗 Breaking changes🔗 The ConnectionCredentials.of() method now throws an exception when more than one expiration timestamp property is present in the credentials map. Only a single expiration timestamp is allowed per credentials bundle. Entity names (nam [...]
\ No newline at end of file
+Downloads🔗 Artifact PGP Sig SHA-512 source tar.gz .asc .sha512 binary tgz .asc .sha512 binary zip .asc .sha512 Spark 3.5 with Scala 2.12 Client Jar .asc .sha512 Spark 3.5 with Scala 2.13 Client Jar .asc .sha512 Release Notes🔗 Upgrade notes🔗 Breaking changes🔗 The ConnectionCredentials.of() method now throws an exception when more than one expiration timestamp property is present in the credentials map. Only a single expiration timestamp is allowed per credentials bundle. Entity names (nam [...]
\ No newline at end of file
diff --git a/downloads/index.html b/downloads/index.html
index 3341d29b2e..e5fab82b00 100644
--- a/downloads/index.html
+++ b/downloads/index.html
@@ -10,8 +10,8 @@ The Apache Polaris Docker images are available on Docker Hub. The Apache Polaris
1.5.0 - Released May 18, 2026 (docs) 1.4.1 - Released May 1, 2026 (docs) 1.4.0 - Released April 21, 2026 (docs) 1.3.0 - Released January 16, 2026 (docs) 1.2.0 - Released October 23, 2025 (docs) 1.1.0 - Released September 19, 2025 (docs) 1.0.1 - Released August 16, 2025 (docs) 1.0.0 - Released July 9, 2025 (docs) 0.9.0 - Released March 11, 2025 (docs) Verifying Downloads🔗 All downloads can be verified using the Apache Polaris KEYS file."><meta itemprop=wordCount content="156"><meta name=t [...]
💡 Tip
The Apache Polaris Docker images are available on Docker Hub. The Apache Polaris Helm Chart can be found in the Helm Chart Repository or in Artifact Hub. Select a version below to get started:
-1.5.0 - Released May 18, 2026 (docs) 1.4.1 - Released May 1, 2026 (docs) 1.4.0 - Released April 21, 2026 (docs) 1.3.0 - Released January 16, 2026 (docs) 1.2.0 - Released October 23, 2025 (docs) 1.1.0 - Released September 19, 2025 (docs) 1.0.1 - Released August 16, 2025 (docs) 1.0.0 - Released July 9, 2025 (docs) 0.9.0 - Released March 11, 2025 (docs) Verifying Downloads🔗 All downloads can be verified using the Apache Polaris KEYS file."><link rel=preload href=/scss/main.min.3d73cf27c1009 [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span>gpg --import KEYS
-</span></span></code></pre></div><p>Then verify the <code>.asc</code> signature files:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span>gpg --verify apache-polaris-<span style=color:#ce5c00;font-weigh [...]
-</span></span></code></pre></div><h3 id=verifying-checksums id=verifying-checksums>Verifying Checksums<a class=heading-anchor href=#verifying-checksums aria-label=Anchor>🔗</a></h3><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;col [...]
+1.5.0 - Released May 18, 2026 (docs) 1.4.1 - Released May 1, 2026 (docs) 1.4.0 - Released April 21, 2026 (docs) 1.3.0 - Released January 16, 2026 (docs) 1.2.0 - Released October 23, 2025 (docs) 1.1.0 - Released September 19, 2025 (docs) 1.0.1 - Released August 16, 2025 (docs) 1.0.0 - Released July 9, 2025 (docs) 0.9.0 - Released March 11, 2025 (docs) Verifying Downloads🔗 All downloads can be verified using the Apache Polaris KEYS file."><link rel=preload href=/scss/main.min.3d73cf27c1009 [...]
+</span></span><span style=display:flex><span>gpg --import KEYS
+</span></span></code></pre></div><p>Then verify the <code>.asc</code> signature files:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span>gpg --verify apache-polaris-<span style=color:#ce5c00;font-weight:700>[</span>version<span style=color:#ce5c00;font-weight:700>]</span>.tar.gz.asc
+</span></span></code></pre></div><h3 id=verifying-checksums id=verifying-checksums>Verifying Checksums<a class=heading-anchor href=#verifying-checksums aria-label=Anchor>🔗</a></h3><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span>shasum -a <span style=color:#0000cf;font-weight:700>512</span> --check apache-polaris-<span style=col [...]
</span></span></code></pre></div><div class=section-index></div></div></main></div></div><footer class="td-footer row d-print-none"><div class=container-fluid><div class="row mx-md-2"><div class="td-footer__left col-6 col-sm-4 order-sm-1"><ul class=td-footer__links-list><li class=td-footer__links-item data-bs-toggle=tooltip title=Slack aria-label=Slack><a target=_blank rel=noopener href=https://apache-polaris.slack.com/ aria-label=Slack><i class="fa-regular fa-comment-dots"></i></a></li> [...]
\ No newline at end of file
diff --git a/downloads/index.xml b/downloads/index.xml
index 9f7bdf9218..4070b11063 100644
--- a/downloads/index.xml
+++ b/downloads/index.xml
@@ -419,17 +419,17 @@ However, you can now instead grant privileges just for specific operations, such
from <code>symmetric.pem</code> to <code>symmetric.key</code>.</li>
<li>For migrations from 1.0.x to 1.1.x, users using JDBC persistence and wanting to continue using v1 schema, must ensure
that they, run following SQL statement under <code>POLARIS_SCHEMA</code> to make sure version table exists:
-<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-sql" data-lang="sql"><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 1</span><span><span style="color:#204a87;font-weight:bold">CREATE</span><span style="col [...]
-</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 2</span><span><span style="color:#f8f8f8"> </span><span style="color:#000">version_key</span><span style="color:#f8f8f8"> </span><span style="color:#204a87">TEXT</span><span style="color:#f8f8f8"> </span><spa [...]
-</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 3</span><span><span style="color:#f8f8f8"> </span><span style="color:#000">version_value</span><span style="color:#f8f8f8"> </span><span style="color:#204a87">INTEGER</span><span style="color:#f8f8f8"> </span>&l [...]
-</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 4</span><span><span style="color:#000;font-weight:bold">);</span><span style="color:#f8f8f8">
-</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 5</span><span><span style="color:#204a87;font-weight:bold">INSERT</span><span style="color:#f8f8f8"> </span><span style="color:#204a87;font-weight:bold">INTO</span><span style="color:#f8f8f8"> </span><span style="color:# [...]
-</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 6</span><span><span style="color:#f8f8f8"> </span><span style="color:#204a87;font-weight:bold">VALUES</span><span style="color:#f8f8f8"> </span><span style="color:#000;font-weight:bold">(</span><span style="color:#4e9a06 [...]
-</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 7</span><span><span style="color:#204a87;font-weight:bold">ON</span><span style="color:#f8f8f8"> </span><span style="color:#000">CONFLICT</span><span style="color:#f8f8f8"> </span><span style="color:#000;font-weight:bold [...]
-</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 8</span><span><span style="color:#f8f8f8"> </span><span style="color:#204a87;font-weight:bold">SET</span><span style="color:#f8f8f8"> </span><span style="color:#000">version_value</span><span style="color:#f8f8f8"> &l [...]
-</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 9</span><span><span style="color:#204a87;font-weight:bold">COMMENT</span><span style="color:#f8f8f8"> </span><span style="color:#204a87;font-weight:bold">ON</span><span style="color:#f8f8f8"> </span><span style="color:#2 [...]
-</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">10</span><span><span style="color:#f8f8f8">
-</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">11</span><span><span style="color:#204a87;font-weight:bold">ALTER</span><span style="color:#f8f8f8"> </span><span style="color:#204a87;font-weight:bold">TABLE</span><span style="color:#f8f8f8"> </span><span style="color:# [...]
+<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-sql" data-lang="sql"><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">CREATE</span><span style="color:#f8f8f8"> </span><span style="color:#204a87;font-weight:bold">TABLE</span><span style="color:#f8f8f8"> </span>< [...]
+</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8"> </span><span style="color:#000">version_key</span><span style="color:#f8f8f8"> </span><span style="color:#204a87">TEXT</span><span style="color:#f8f8f8"> </span><span style="color:#204a87;font-weight:bold">PRIMARY</span><span style="color:#f8f8f8"> </span><span style="color:#204a87;font-wei [...]
+</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8"> </span><span style="color:#000">version_value</span><span style="color:#f8f8f8"> </span><span style="color:#204a87">INTEGER</span><span style="color:#f8f8f8"> </span><span style="color:#204a87;font-weight:bold">NOT</span><span style="color:#f8f8f8"> </span><span style="color:#204a87;font-we [...]
+</span></span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">);</span><span style="color:#f8f8f8">
+</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">INSERT</span><span style="color:#f8f8f8"> </span><span style="color:#204a87;font-weight:bold">INTO</span><span style="color:#f8f8f8"> </span><span style="color:#204a87;font-weight:bold">version</span><span style="color:#f8f8f8"> </span><span style="color:#000;font-weight:bold">(</ [...]
+</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8"> </span><span style="color:#204a87;font-weight:bold">VALUES</span><span style="color:#f8f8f8"> </span><span style="color:#000;font-weight:bold">(</span><span style="color:#4e9a06">&#39;version&#39;</span><span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8"> </span& [...]
+</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">ON</span><span style="color:#f8f8f8"> </span><span style="color:#000">CONFLICT</span><span style="color:#f8f8f8"> </span><span style="color:#000;font-weight:bold">(</span><span style="color:#000">version_key</span><span style="color:#000;font-weight:bold">)</span><span style [...]
+</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8"> </span><span style="color:#204a87;font-weight:bold">SET</span><span style="color:#f8f8f8"> </span><span style="color:#000">version_value</span><span style="color:#f8f8f8"> </span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#f8f8f8"> </span><span style="color:#000 [...]
+</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">COMMENT</span><span style="color:#f8f8f8"> </span><span style="color:#204a87;font-weight:bold">ON</span><span style="color:#f8f8f8"> </span><span style="color:#204a87;font-weight:bold">TABLE</span><span style="color:#f8f8f8"> </span><span style="color:#204a87;font-weight:bold">versio [...]
+</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8">
+</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">ALTER</span><span style="color:#f8f8f8"> </span><span style="color:#204a87;font-weight:bold">TABLE</span><span style="color:#f8f8f8"> </span><span style="color:#000">polaris_schema</span><span style="color:#000;font-weight:bold">.</span><span style="color:#000">entities</span>& [...]
</span></span></span></code></pre></div><ul>
<li>Please don&rsquo;t enable <a href="https://github.com/apache/polaris/blob/740993963cb41c2c1b4638be5e04dd00f1263c98/polaris-core/src/main/java/org/apache/polaris/core/config/FeatureConfiguration.java#L346">OPTIMIZED_SIBLING_CHECK</a> feature configuration, once the above SQL statements are run. As it may lead to incorrect behavior, due to missing data for location_without_scheme column.</li>
</ul>
diff --git a/downloads/readme/index.html b/downloads/readme/index.html
index cb5e7b2548..5eb0282b70 100644
--- a/downloads/readme/index.html
+++ b/downloads/readme/index.html
@@ -1,25 +1,25 @@
-<!doctype html><html itemscope itemtype=http://schema.org/WebPage lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon.png sizes=100x100><link rel=icon type=image/png href=/favicons/android-ch [...]
+<!doctype html><html itemscope itemtype=http://schema.org/WebPage lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon.png sizes=100x100><link rel=icon type=image/png href=/favicons/android-ch [...]
├── _index.md # Landing page with links to all versions
├── 1.3.0/
│ └── index.md # Version 1.3.0 details
├── 1.2.0/
│ └── index.md # Version 1.2.0 details
└── ...
-</code></pre><h2 id=adding-a-new-release id=adding-a-new-release>Adding a New Release<a class=heading-anchor href=#adding-a-new-release aria-label=Anchor>🔗</a></h2><p>When adding a new release, follow these steps:</p><ol><li><p>Create a new version directory: Create <code>[major].[minor].[patch]/index.md</code></p><ul><li>Use an existing version page as a template (e.g., <code>1.3.0/index.md</code>)</li><li>Update the <code>title</code>, <code>linkTitle</code>, <code>release_version</cod [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span><span style=color:#204a87;font-weight:700>title</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"Apache Polaris [version]"</span><span style=color:#f8f8f8> </span><span style=color:#8f5902;font-style:italic># Full title shown on the page< [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span><span style=color:#204a87;font-weight:700>linkTitle</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"[version]"</span><span style=color:#f8f8f8> </span><span style=color:#8f5902;font-style:italic># Short version shown in the sidebar</span [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span><span style=color:#204a87;font-weight:700>release_version</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"[version]"</span><span style=color:#f8f8f8> </span><span style=color:#8f5902;font-style:italic># Used for active/EOL categorization [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span><span style=color:#204a87;font-weight:700>release_date</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>[</span><span style=color:#000>YYYY-MM-DD].</span><span style=color:#f8f8f8> </span><span style=color:#8f5902;font-style:italic># D [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span><span style=color:#204a87;font-weight:700>weight</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>[</span><span style=color:#000>number] </span><span style=color:#f8f8f8> </span><span style=color:#8f5902;font-style:italic># Negative we [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span><span style=color:#204a87;font-weight:700>hide_summary</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>true</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span><span style=color:#204a87;font-weight:700>exclude_search</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>true</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span><span style=color:#204a87;font-weight:700>type</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>downloads</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">10</span><span><span style=color:#204a87;font-weight:700>menus</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">11</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>main</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">12</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>parent</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>releases</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">13</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>weight</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>[</span><span style=color:#000>number] </span><span style=color:#f8f8f8> </span><span style=color:#8 [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">14</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>identifier: releases-[version] # Unique identifier, e.g.</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>releases-1.3.0, releases-1.2.0, etc.</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">15</span><span><span style=color:#000>---</span><span style=color:#f8f8f8>
+</code></pre><h2 id=adding-a-new-release id=adding-a-new-release>Adding a New Release<a class=heading-anchor href=#adding-a-new-release aria-label=Anchor>🔗</a></h2><p>When adding a new release, follow these steps:</p><ol><li><p>Create a new version directory: Create <code>[major].[minor].[patch]/index.md</code></p><ul><li>Use an existing version page as a template (e.g., <code>1.3.0/index.md</code>)</li><li>Update the <code>title</code>, <code>linkTitle</code>, <code>release_version</cod [...]
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>title</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"Apache Polaris [version]"</span><span style=color:#f8f8f8> </span><span style=color:#8f5902;font-style:italic># Full title shown on the page</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>linkTitle</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"[version]"</span><span style=color:#f8f8f8> </span><span style=color:#8f5902;font-style:italic># Short version shown in the sidebar</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>release_version</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"[version]"</span><span style=color:#f8f8f8> </span><span style=color:#8f5902;font-style:italic># Used for active/EOL categorization</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>release_date</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>[</span><span style=color:#000>YYYY-MM-DD].</span><span style=color:#f8f8f8> </span><span style=color:#8f5902;font-style:italic># Date of release in YYYY-MM-DD format</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>weight</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>[</span><span style=color:#000>number] </span><span style=color:#f8f8f8> </span><span style=color:#8f5902;font-style:italic># Negative weight derived from the version, e.g. 1.2.3 -> -10203</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>hide_summary</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>true</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>exclude_search</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>true</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>type</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>downloads</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>menus</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>main</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>parent</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>releases</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>weight</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>[</span><span style=color:#000>number] </span><span style=color:#f8f8f8> </span><span style=color:#8f5902;font-style:italic># Same as page weight for consistency</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>identifier: releases-[version] # Unique identifier, e.g.</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>releases-1.3.0, releases-1.2.0, etc.</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#000>---</span><span style=color:#f8f8f8>
</span></span></span></code></pre></div><p>No manual configuration in <code>site/hugo.yaml</code> is needed.</p><h2 id=sidebar-categorization id=sidebar-categorization>Sidebar Categorization<a class=heading-anchor href=#sidebar-categorization aria-label=Anchor>🔗</a></h2><p>The releases sidebar automatically categorizes releases into “Active Releases” and “EOL Releases”
based on the <code>active_releases</code> list in <code>site/hugo.yaml</code>. The <code>release_version</code> front matter param is
used to match against this list.</p><h2 id=see-also id=see-also>See Also<a class=heading-anchor href=#see-also aria-label=Anchor>🔗</a></h2><ul><li><a href=../community/release-guides/manual-release-guide.md>Manual Release Guide</a></li><li><a href=../community/release-guides/semi-automated-release-guide.md>Semi-Automated Release Guide</a></li></ul></div></main></div></div><footer class="td-footer row d-print-none"><div class=container-fluid><div class="row mx-md-2"><div class="td-footer_ [...]
\ No newline at end of file
diff --git a/guides/ceph/index.html b/guides/ceph/index.html
index ea3b222704..05f30e2274 100644
--- a/guides/ceph/index.html
+++ b/guides/ceph/index.html
@@ -1,8 +1,8 @@
<!doctype html><html itemscope itemtype=http://schema.org/WebPage lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon.png sizes=100x100><link rel=icon type=image/png href=/favicons/android-ch [...]
This example cluster is configured for basic access key authentication only. It does not include STS (Security Token Service) or temporary credentials. All access to the Ceph RGW (RADOS Gateway) and Polaris integration uses static S3-style credentials (as configured via radosgw-admin user create)."><meta property="og:url" content="https://polaris.apache.org/guides/ceph/"><meta property="og:site_name" content="Apache Polaris"><meta property="og:title" content="Getting Started with Apache [...]
This example cluster is configured for basic access key authentication only. It does not include STS (Security Token Service) or temporary credentials. All access to the Ceph RGW (RADOS Gateway) and Polaris integration uses static S3-style credentials (as configured via radosgw-admin user create)."><meta property="og:locale" content="en_us"><meta property="og:type" content="article"><meta property="article:section" content="guides"><meta property="article:tag" content="Ceph"><meta proper [...]
-This example cluster is configured for basic access key authentication only. It does not include STS (Security Token Service) or temporary credentials. All access to the Ceph RGW (RADOS Gateway) and Polaris integration uses static S3-style credentials (as configured via radosgw-admin user create)."><meta itemprop=wordCount content="411"><meta itemprop=keywords content="Ceph,Object Storage"><meta name=twitter:card content="summary"><meta name=twitter:title content="Getting Started with Ap [...]
-This example cluster is configured for basic access key authentication only. It does not include STS (Security Token Service) or temporary credentials. All access to the Ceph RGW (RADOS Gateway) and Polaris integration uses static S3-style credentials (as configured via radosgw-admin user create)."><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin= [...]
+This example cluster is configured for basic access key authentication only. It does not include STS (Security Token Service) or temporary credentials. All access to the Ceph RGW (RADOS Gateway) and Polaris integration uses static S3-style credentials (as configured via radosgw-admin user create)."><meta itemprop=wordCount content="395"><meta itemprop=keywords content="Ceph,Object Storage"><meta name=twitter:card content="summary"><meta name=twitter:title content="Getting Started with Ap [...]
+This example cluster is configured for basic access key authentication only. It does not include STS (Security Token Service) or temporary credentials. All access to the Ceph RGW (RADOS Gateway) and Polaris integration uses static S3-style credentials (as configured via radosgw-admin user create)."><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin= [...]
<label for=m-guidesquickstart-check><a href=/guides/quickstart/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-guidesquickstart><span>Quickstart</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-guideskeycloak-li><input type=checkbox id=m-guideskeycloak-check>
<label for=m-guideskeycloak-check><a href=/guides/keycloak/ title="Getting Started with Apache Polaris, External Authentication and Keycloak" class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-guideskeycloak><span>Authentication: Keycloak</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-guidesjdbc-li><input type=checkbox id=m-guidesjdbc-check>
<label for=m-guidesjdbc-check><a href=/guides/jdbc/ title="Getting Started with Apache Polaris, Relational JDBC, Postgres and Spark SQL" class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-guidesjdbc><span>Backend: JDBC, Postgres</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-guidestelemetry-li><input type=checkbox id=m-guidestelemetry-check>
@@ -17,9 +17,9 @@ This example cluster is configured for basic access key authentication only. It
<label for=m-guidesreadme-check><a href=/guides/readme/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-guidesreadme><span></span></a></label></li></ul></li></ul></nav></div></aside><main class="col-12 col-md-9 col-xl-8 ps-md-5" role=main><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/guides/>Guides</a></li><li class="breadcrumb-item active" aria-current=page>Storage: Ceph</li></ol></nav><div class=td-content><h1 [...]
It does not include STS (Security Token Service) or temporary credentials.
All access to the Ceph RGW (RADOS Gateway) and Polaris integration uses static S3-style credentials (as configured via radosgw-admin user create).</p><p>Spark is used as a query engine. This example assumes a local Spark installation.
-See the <a href=../spark/>Spark Notebooks Example</a> for a more advanced Spark setup.</p><h2 id=starting-the-example id=starting-the-example>Starting the Example<a class=heading-anchor href=#starting-the-example aria-label=Anchor>🔗</a></h2><p>Before starting the Ceph + Polaris stack, you’ll need to configure environment variables that define network settings, credentials, and cluster IDs.</p><p>The services are started <strong>in sequence</strong>:</p><ol><li>Monitor + Manager</li><li>O [...]
-</span></span></code></pre></div><h3 id=2-start-the-docker-compose-group-by-running-the-following-command id=2-start-the-docker-compose-group-by-running-the-following-command>2. Start the docker compose group by running the following command:<a class=heading-anchor href=#2-start-the-docker-compose-group-by-running-the-following-command aria-label=Anchor>🔗</a></h3><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size [...]
-</span></span></code></pre></div><h4 id=check-status id=check-status>Check status<a class=heading-anchor href=#check-status aria-label=Anchor>🔗</a></h4><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span> [...]
+See the <a href=../spark/>Spark Notebooks Example</a> for a more advanced Spark setup.</p><h2 id=starting-the-example id=starting-the-example>Starting the Example<a class=heading-anchor href=#starting-the-example aria-label=Anchor>🔗</a></h2><p>Before starting the Ceph + Polaris stack, you’ll need to configure environment variables that define network settings, credentials, and cluster IDs.</p><p>The services are started <strong>in sequence</strong>:</p><ol><li>Monitor + Manager</li><li>O [...]
+</span></span></code></pre></div><h3 id=2-start-the-docker-compose-group-by-running-the-following-command id=2-start-the-docker-compose-group-by-running-the-following-command>2. Start the docker compose group by running the following command:<a class=heading-anchor href=#2-start-the-docker-compose-group-by-running-the-following-command aria-label=Anchor>🔗</a></h3><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size [...]
+</span></span></code></pre></div><h4 id=check-status id=check-status>Check status<a class=heading-anchor href=#check-status aria-label=Anchor>🔗</a></h4><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span>docker <span style=color:#204a87>exec</span> ceph-mon1-1 ceph -s
</span></span></code></pre></div><p>You should see something like:</p><pre tabindex=0><code>cluster:
id: b2f59c4b-5f14-4f8c-a9b7-3b7998c76a0e
health: HEALTH_WARN
@@ -32,29 +32,29 @@ services:
mgr: mgr(active, since 94m)
osd: 1 osds: 1 up (since 36m), 1 in (since 93m)
rgw: 1 daemon active (1 hosts, 1 zones)
-</code></pre><h3 id=3-connecting-from-spark id=3-connecting-from-spark>3. Connecting From Spark<a class=heading-anchor href=#3-connecting-from-spark aria-label=Anchor>🔗</a></h3><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;colo [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span> --packages org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:1.10.1,org.apache.iceberg:iceberg-aws-bundle:1.10.1 <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span> --conf spark.sql.extensions<span style=color:#ce5c00;font-weight:700>=</span>org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span> --conf spark.sql.catalog.polaris<span style=color:#ce5c00;font-weight:700>=</span>org.apache.iceberg.spark.SparkCatalog <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span> --conf spark.sql.catalog.polaris.type<span style=color:#ce5c00;font-weight:700>=</span>rest <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span> --conf spark.sql.catalog.polaris.io-impl<span style=color:#ce5c00;font-weight:700>=</span>org.apache.iceberg.aws.s3.S3FileIO <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span> --conf spark.sql.catalog.polaris.uri<span style=color:#ce5c00;font-weight:700>=</span>http://localhost:8181/api/catalog <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span> --conf spark.sql.catalog.polaris.token-refresh-enabled<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#204a87>true</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span> --conf spark.sql.catalog.polaris.warehouse<span style=color:#ce5c00;font-weight:700>=</span>quickstart_catalog <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">10</span><span> --conf spark.sql.catalog.polaris.scope<span style=color:#ce5c00;font-weight:700>=</span>PRINCIPAL_ROLE:ALL <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">11</span><span> --conf spark.sql.catalog.polaris.credential<span style=color:#ce5c00;font-weight:700>=</span>root:s3cr3t <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">12</span><span> --conf spark.sql.catalog.polaris.client.region<span style=color:#ce5c00;font-weight:700>=</span>irrelevant <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">13</span><span> --conf spark.sql.catalog.polaris.s3.access-key-id<span style=color:#ce5c00;font-weight:700>=</span>POLARIS123ACCESS <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">14</span><span> --conf spark.sql.catalog.polaris.s3.secret-access-key<span style=color:#ce5c00;font-weight:700>=</span>POLARIS456SECRET
+</code></pre><h3 id=3-connecting-from-spark id=3-connecting-from-spark>3. Connecting From Spark<a class=heading-anchor href=#3-connecting-from-spark aria-label=Anchor>🔗</a></h3><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span>bin/spark-sql <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --packages org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:1.10.1,org.apache.iceberg:iceberg-aws-bundle:1.10.1 <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --conf spark.sql.extensions<span style=color:#ce5c00;font-weight:700>=</span>org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --conf spark.sql.catalog.polaris<span style=color:#ce5c00;font-weight:700>=</span>org.apache.iceberg.spark.SparkCatalog <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --conf spark.sql.catalog.polaris.type<span style=color:#ce5c00;font-weight:700>=</span>rest <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --conf spark.sql.catalog.polaris.io-impl<span style=color:#ce5c00;font-weight:700>=</span>org.apache.iceberg.aws.s3.S3FileIO <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --conf spark.sql.catalog.polaris.uri<span style=color:#ce5c00;font-weight:700>=</span>http://localhost:8181/api/catalog <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --conf spark.sql.catalog.polaris.token-refresh-enabled<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#204a87>true</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --conf spark.sql.catalog.polaris.warehouse<span style=color:#ce5c00;font-weight:700>=</span>quickstart_catalog <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --conf spark.sql.catalog.polaris.scope<span style=color:#ce5c00;font-weight:700>=</span>PRINCIPAL_ROLE:ALL <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --conf spark.sql.catalog.polaris.credential<span style=color:#ce5c00;font-weight:700>=</span>root:s3cr3t <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --conf spark.sql.catalog.polaris.client.region<span style=color:#ce5c00;font-weight:700>=</span>irrelevant <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --conf spark.sql.catalog.polaris.s3.access-key-id<span style=color:#ce5c00;font-weight:700>=</span>POLARIS123ACCESS <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --conf spark.sql.catalog.polaris.s3.secret-access-key<span style=color:#ce5c00;font-weight:700>=</span>POLARIS456SECRET
</span></span></code></pre></div><p>Note: <code>s3cr3t</code> is defined as the password for the <code>root</code> user in the <code>docker-compose.yml</code> file.</p><p>Note: The <code>client.region</code> configuration is required for the AWS S3 client to work, but it is not used in this example
-since Ceph does not require a specific region.</p><h3 id=4-running-queries id=4-running-queries>4. Running Queries<a class=heading-anchor href=#4-running-queries aria-label=Anchor>🔗</a></h3><p>Run inside the Spark SQL shell:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-sql data-lang=sql><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-se [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span><span style=color:#204a87;font-weight:700>CREATE</span><span style=color:#f8f8f8> </span><span style=color:#000>NAMESPACE</span><span style=color:#f8f8f8> </span><span style=color:#000>ns</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span><span style=color:#204a87;font-weight:700>CREATE</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>TABLE</span><span style=color:#f8f8f8> </span><span style=color:#000>ns</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>t1</span><span style=color:#f8f8f8 [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">6</span><span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">7</span><span><span style=color:#204a87;font-weight:700>SELECT</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>*</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>FROM</span><span style=color:#f8f8f8> </span><span style=color:#000>ns</span><span style=color:#00 [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">8</span><span><span style=color:#8f5902;font-style:italic>-- abc
+since Ceph does not require a specific region.</p><h3 id=4-running-queries id=4-running-queries>4. Running Queries<a class=heading-anchor href=#4-running-queries aria-label=Anchor>🔗</a></h3><p>Run inside the Spark SQL shell:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-sql data-lang=sql><span style=display:flex><span><span style=color:#000>USE</span><span style=color:#f8f [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>CREATE</span><span style=color:#f8f8f8> </span><span style=color:#000>NAMESPACE</span><span style=color:#f8f8f8> </span><span style=color:#000>ns</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>CREATE</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>TABLE</span><span style=color:#f8f8f8> </span><span style=color:#000>ns</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>t1</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>AS</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-we [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>SELECT</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>*</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>FROM</span><span style=color:#f8f8f8> </span><span style=color:#000>ns</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>t1</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic>-- abc
</span></span></span></code></pre></div><h2 id=lack-of-credential-vending id=lack-of-credential-vending>Lack of Credential Vending<a class=heading-anchor href=#lack-of-credential-vending aria-label=Anchor>🔗</a></h2><p>Notice that the Spark configuration does not contain a <code>X-Iceberg-Access-Delegation</code> header.
This is because example cluster does not include STS (Security Token Service) or temporary credentials.</p><p>The lack of STS API is represented in the Catalog storage configuration by the
<code>stsUnavailable=true</code> property.</p></div></main></div></div><footer class="td-footer row d-print-none"><div class=container-fluid><div class="row mx-md-2"><div class="td-footer__left col-6 col-sm-4 order-sm-1"><ul class=td-footer__links-list><li class=td-footer__links-item data-bs-toggle=tooltip title=Slack aria-label=Slack><a target=_blank rel=noopener href=https://apache-polaris.slack.com/ aria-label=Slack><i class="fa-regular fa-comment-dots"></i></a></li><li class=td-foote [...]
\ No newline at end of file
diff --git a/guides/cockroachdb/index.html b/guides/cockroachdb/index.html
index 43ff50bcde..88564b43c3 100644
--- a/guides/cockroachdb/index.html
+++ b/guides/cockroachdb/index.html
@@ -1,12 +1,16 @@
-<!doctype html><html itemscope itemtype=http://schema.org/WebPage lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon.png sizes=100x100><link rel=icon type=image/png href=/favicons/android-ch [...]
+<!doctype html><html itemscope itemtype=http://schema.org/WebPage lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon.png sizes=100x100><link rel=icon type=image/png href=/favicons/android-ch [...]
If such an image is not already present, build the Polaris image with support for JDBC persistence and the Postgres JDBC driver:
-1./gradlew \ 2 :polaris-server:assemble \ 3 :polaris-server:quarkusAppPartsBuild --rerun \ 4 :polaris-admin:assemble \ 5 :polaris-admin:quarkusAppPartsBuild --rerun \ 6 -Dquarkus.container-image.build=true Start the docker compose group by running the following command from the root of the repository:"><meta property="og:url" content="https://polaris.apache.org/guides/cockroachdb/"><meta property="og:site_name" content="Apache Polaris"><meta property="og:title" content="Getting Started w [...]
+./gradlew \ :polaris-server:assemble \ :polaris-server:quarkusAppPartsBuild --rerun \ :polaris-admin:assemble \ :polaris-admin:quarkusAppPartsBuild --rerun \ -Dquarkus.container-image.build=true Start the docker compose group by running the following command from the root of the repository:
+export POLARIS_PERSISTENCE_RELATIONAL_JDBC_DATABASE_TYPE=cockroachdb export QUARKUS_DATASOURCE_JDBC_URL=jdbc:postgresql://cockroachdb:26257/polaris?sslmode=disable export QUARKUS_DATASOURCE_USERNAME=root export QUARKUS_DATASOURCE_PASSWORD="" export ASSETS_PATH=$(pwd)/site/content/guides/assets/ export CLIENT_ID=root export CLIENT_SECRET=s3cr3t docker compose -f site/content/guides/jdbc/docker-compose-bootstrap-db.yml -f site/content/guides/assets/cockroachdb/docker-compose-cockroachdb.ym [...]
If such an image is not already present, build the Polaris image with support for JDBC persistence and the Postgres JDBC driver:
-1./gradlew \ 2 :polaris-server:assemble \ 3 :polaris-server:quarkusAppPartsBuild --rerun \ 4 :polaris-admin:assemble \ 5 :polaris-admin:quarkusAppPartsBuild --rerun \ 6 -Dquarkus.container-image.build=true Start the docker compose group by running the following command from the root of the repository:"><meta property="og:locale" content="en_us"><meta property="og:type" content="article"><meta property="article:section" content="guides"><meta property="article:tag" content="Backend"><meta [...]
+./gradlew \ :polaris-server:assemble \ :polaris-server:quarkusAppPartsBuild --rerun \ :polaris-admin:assemble \ :polaris-admin:quarkusAppPartsBuild --rerun \ -Dquarkus.container-image.build=true Start the docker compose group by running the following command from the root of the repository:
+export POLARIS_PERSISTENCE_RELATIONAL_JDBC_DATABASE_TYPE=cockroachdb export QUARKUS_DATASOURCE_JDBC_URL=jdbc:postgresql://cockroachdb:26257/polaris?sslmode=disable export QUARKUS_DATASOURCE_USERNAME=root export QUARKUS_DATASOURCE_PASSWORD="" export ASSETS_PATH=$(pwd)/site/content/guides/assets/ export CLIENT_ID=root export CLIENT_SECRET=s3cr3t docker compose -f site/content/guides/jdbc/docker-compose-bootstrap-db.yml -f site/content/guides/assets/cockroachdb/docker-compose-cockroachdb.ym [...]
If such an image is not already present, build the Polaris image with support for JDBC persistence and the Postgres JDBC driver:
-1./gradlew \ 2 :polaris-server:assemble \ 3 :polaris-server:quarkusAppPartsBuild --rerun \ 4 :polaris-admin:assemble \ 5 :polaris-admin:quarkusAppPartsBuild --rerun \ 6 -Dquarkus.container-image.build=true Start the docker compose group by running the following command from the root of the repository:"><meta itemprop=wordCount content="257"><meta itemprop=keywords content="Backend,Jdbc,Cockroachdb"><meta name=twitter:card content="summary"><meta name=twitter:title content="Getting Starte [...]
+./gradlew \ :polaris-server:assemble \ :polaris-server:quarkusAppPartsBuild --rerun \ :polaris-admin:assemble \ :polaris-admin:quarkusAppPartsBuild --rerun \ -Dquarkus.container-image.build=true Start the docker compose group by running the following command from the root of the repository:
+export POLARIS_PERSISTENCE_RELATIONAL_JDBC_DATABASE_TYPE=cockroachdb export QUARKUS_DATASOURCE_JDBC_URL=jdbc:postgresql://cockroachdb:26257/polaris?sslmode=disable export QUARKUS_DATASOURCE_USERNAME=root export QUARKUS_DATASOURCE_PASSWORD="" export ASSETS_PATH=$(pwd)/site/content/guides/assets/ export CLIENT_ID=root export CLIENT_SECRET=s3cr3t docker compose -f site/content/guides/jdbc/docker-compose-bootstrap-db.yml -f site/content/guides/assets/cockroachdb/docker-compose-cockroachdb.ym [...]
If such an image is not already present, build the Polaris image with support for JDBC persistence and the Postgres JDBC driver:
-1./gradlew \ 2 :polaris-server:assemble \ 3 :polaris-server:quarkusAppPartsBuild --rerun \ 4 :polaris-admin:assemble \ 5 :polaris-admin:quarkusAppPartsBuild --rerun \ 6 -Dquarkus.container-image.build=true Start the docker compose group by running the following command from the root of the repository:"><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossori [...]
+./gradlew \ :polaris-server:assemble \ :polaris-server:quarkusAppPartsBuild --rerun \ :polaris-admin:assemble \ :polaris-admin:quarkusAppPartsBuild --rerun \ -Dquarkus.container-image.build=true Start the docker compose group by running the following command from the root of the repository:
+export POLARIS_PERSISTENCE_RELATIONAL_JDBC_DATABASE_TYPE=cockroachdb export QUARKUS_DATASOURCE_JDBC_URL=jdbc:postgresql://cockroachdb:26257/polaris?sslmode=disable export QUARKUS_DATASOURCE_USERNAME=root export QUARKUS_DATASOURCE_PASSWORD="" export ASSETS_PATH=$(pwd)/site/content/guides/assets/ export CLIENT_ID=root export CLIENT_SECRET=s3cr3t docker compose -f site/content/guides/jdbc/docker-compose-bootstrap-db.yml -f site/content/guides/assets/cockroachdb/docker-compose-cockroachdb.ym [...]
<label for=m-guidesquickstart-check><a href=/guides/quickstart/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-guidesquickstart><span>Quickstart</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-guideskeycloak-li><input type=checkbox id=m-guideskeycloak-check>
<label for=m-guideskeycloak-check><a href=/guides/keycloak/ title="Getting Started with Apache Polaris, External Authentication and Keycloak" class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-guideskeycloak><span>Authentication: Keycloak</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-guidesjdbc-li><input type=checkbox id=m-guidesjdbc-check>
<label for=m-guidesjdbc-check><a href=/guides/jdbc/ title="Getting Started with Apache Polaris, Relational JDBC, Postgres and Spark SQL" class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-guidesjdbc><span>Backend: JDBC, Postgres</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-guidestelemetry-li><input type=checkbox id=m-guidestelemetry-check>
@@ -19,33 +23,33 @@ If such an image is not already present, build the Polaris image with support fo
<label for=m-guidesspark-check><a href=/guides/spark/ title="Getting Started with Apache Polaris and Apache Spark" class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-guidesspark><span>Client: Apache Spark</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-guidesflink-li><input type=checkbox id=m-guidesflink-check>
<label for=m-guidesflink-check><a href=/guides/flink/ title="Getting Started with Apache Polaris and Apache Flink" class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-guidesflink><span>Client: Apache Flink</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-guidesreadme-li><input type=checkbox id=m-guidesreadme-check>
<label for=m-guidesreadme-check><a href=/guides/readme/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-guidesreadme><span></span></a></label></li></ul></li></ul></nav></div></aside><main class="col-12 col-md-9 col-xl-8 ps-md-5" role=main><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/guides/>Guides</a></li><li class="breadcrumb-item active" aria-current=page>Backend: JDBC, CockroachDB</li></ol></nav><div class=t [...]
-the Postgres JDBC driver:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span>./gradlew <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> :polaris-server:assemble <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> :polaris-server:quarkusAppPartsBuild --rerun <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> :polaris-admin:assemble <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span> :polaris-admin:quarkusAppPartsBuild --rerun <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">6</span><span> -Dquarkus.container-image.build<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#204a87>true</span>
-</span></span></code></pre></div></li><li><p>Start the docker compose group by running the following command from the root of the repository:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span><span s [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#204a87>export</span> <span style=color:#000>QUARKUS_DATASOURCE_JDBC_URL</span><span style=color:#ce5c00;font-weight:700>=</span>jdbc:postgresql://cockroachdb:26257/polaris?sslmode<span style=color:#ce5c00;font-weight:700>=</span>disable
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span><span style=color:#204a87>export</span> <span style=color:#000>QUARKUS_DATASOURCE_USERNAME</span><span style=color:#ce5c00;font-weight:700>=</span>root
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span><span style=color:#204a87>export</span> <span style=color:#000>QUARKUS_DATASOURCE_PASSWORD</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>""</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span><span style=color:#204a87>export</span> <span style=color:#000>ASSETS_PATH</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#204a87;font-weight:700>$(</span><span style=color:#204a87>pwd</span><span style=color:#204a87;font-weight:700>)</span>/site/content/guides/assets/
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">6</span><span><span style=color:#204a87>export</span> <span style=color:#000>CLIENT_ID</span><span style=color:#ce5c00;font-weight:700>=</span>root
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">7</span><span><span style=color:#204a87>export</span> <span style=color:#000>CLIENT_SECRET</span><span style=color:#ce5c00;font-weight:700>=</span>s3cr3t
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">8</span><span>docker compose -f site/content/guides/jdbc/docker-compose-bootstrap-db.yml -f site/content/guides/assets/cockroachdb/docker-compose-cockroachdb.yml -f site/content/guides/jdbc/docker-compose.yml up
-</span></span></code></pre></div></li></ol><ol start=3><li><p>Using spark-sql: attach to the running spark-sql container:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span>docker attach <span style=c [...]
-</span></span></code></pre></div><p>You may not see Spark’s prompt immediately, type ENTER to see it. A few commands that you can try:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-sql data-lang=sql><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span><span style= [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#000>USE</span><span style=color:#f8f8f8> </span><span style=color:#000>polaris</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>ns1</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span><span style=color:#204a87;font-weight:700>CREATE</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>TABLE</span><span style=color:#f8f8f8> </span><span style=color:#000>table1</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>(</span><span style=color:# [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span><span style=color:#204a87;font-weight:700>INSERT</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>INTO</span><span style=color:#f8f8f8> </span><span style=color:#000>table1</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>VALUES</span><span style= [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span><span style=color:#204a87;font-weight:700>SELECT</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>*</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>FROM</span><span style=color:#f8f8f8> </span><span style=color:#000>table1</span><span style=color [...]
-</span></span></span></code></pre></div></li><li><p>To access Polaris from the host machine, first request an access token:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span><span style=color:#204a87 [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> --user root:s3cr3t <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> -d <span style=color:#4e9a06>'grant_type=client_credentials'</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> -d <span style=color:#4e9a06>'scope=PRINCIPAL_ROLE:ALL'</span> <span style=color:#000;font-weight:700>|</span> jq -r .access_token<span style=color:#204a87;font-weight:700>)</span>
-</span></span></code></pre></div></li><li><p>Then, use the access token in the Authorization header when accessing Polaris:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span>curl -v http://localhost: [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span>curl -v http://localhost:8181/api/management/v1/catalogs/quickstart_catalog -H <span style=color:#4e9a06>"Authorization: Bearer </span><span style=color:#000>$POLARIS_TOKEN</span><span style=color:#4e9a06>"</span>
-</span></span></code></pre></div></li><li><p>Using Trino CLI: To access the Trino CLI, run this command:</p></li></ol><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span>docker <span style=color:#204a87>e [...]
+the Postgres JDBC driver:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span>./gradlew <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> :polaris-server:assemble <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> :polaris-server:quarkusAppPartsBuild --rerun <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> :polaris-admin:assemble <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> :polaris-admin:quarkusAppPartsBuild --rerun <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -Dquarkus.container-image.build<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#204a87>true</span>
+</span></span></code></pre></div></li><li><p>Start the docker compose group by running the following command from the root of the repository:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span><span style=color:#204a87>export</span> <span style=color:#000>POLARIS_PERSISTENCE_RELATIONAL_JDBC_DATABASE_TYPE</span><span style=col [...]
+</span></span><span style=display:flex><span><span style=color:#204a87>export</span> <span style=color:#000>QUARKUS_DATASOURCE_JDBC_URL</span><span style=color:#ce5c00;font-weight:700>=</span>jdbc:postgresql://cockroachdb:26257/polaris?sslmode<span style=color:#ce5c00;font-weight:700>=</span>disable
+</span></span><span style=display:flex><span><span style=color:#204a87>export</span> <span style=color:#000>QUARKUS_DATASOURCE_USERNAME</span><span style=color:#ce5c00;font-weight:700>=</span>root
+</span></span><span style=display:flex><span><span style=color:#204a87>export</span> <span style=color:#000>QUARKUS_DATASOURCE_PASSWORD</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>""</span>
+</span></span><span style=display:flex><span><span style=color:#204a87>export</span> <span style=color:#000>ASSETS_PATH</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#204a87;font-weight:700>$(</span><span style=color:#204a87>pwd</span><span style=color:#204a87;font-weight:700>)</span>/site/content/guides/assets/
+</span></span><span style=display:flex><span><span style=color:#204a87>export</span> <span style=color:#000>CLIENT_ID</span><span style=color:#ce5c00;font-weight:700>=</span>root
+</span></span><span style=display:flex><span><span style=color:#204a87>export</span> <span style=color:#000>CLIENT_SECRET</span><span style=color:#ce5c00;font-weight:700>=</span>s3cr3t
+</span></span><span style=display:flex><span>docker compose -f site/content/guides/jdbc/docker-compose-bootstrap-db.yml -f site/content/guides/assets/cockroachdb/docker-compose-cockroachdb.yml -f site/content/guides/jdbc/docker-compose.yml up
+</span></span></code></pre></div></li></ol><ol start=3><li><p>Using spark-sql: attach to the running spark-sql container:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span>docker attach <span style=color:#204a87;font-weight:700>$(</span>docker ps -q --filter <span style=color:#000>name</span><span style=color:#ce5c00;font-we [...]
+</span></span></code></pre></div><p>You may not see Spark’s prompt immediately, type ENTER to see it. A few commands that you can try:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-sql data-lang=sql><span style=display:flex><span><span style=color:#204a87;font-weight:700>CREATE</span><span style=color:#f8f8f8> </span><span style=color:#000>NAMESPACE</span><span style [...]
+</span></span></span><span style=display:flex><span><span style=color:#000>USE</span><span style=color:#f8f8f8> </span><span style=color:#000>polaris</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>ns1</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>CREATE</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>TABLE</span><span style=color:#f8f8f8> </span><span style=color:#000>table1</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>(</span><span style=color:#000>id</span><span style=color:#f8f8f8> </span><span style=color:#204a87>int</span><span style=color:#000;font-weight:700>,</sp [...]
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>INSERT</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>INTO</span><span style=color:#f8f8f8> </span><span style=color:#000>table1</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>VALUES</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>(</span><span style=color:#0000cf;font-weight:700>1</span><span st [...]
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>SELECT</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>*</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>FROM</span><span style=color:#f8f8f8> </span><span style=color:#000>table1</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8>
+</span></span></span></code></pre></div></li><li><p>To access Polaris from the host machine, first request an access token:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span><span style=color:#204a87>export</span> <span style=color:#000>POLARIS_TOKEN</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:# [...]
+</span></span></span><span style=display:flex><span> --user root:s3cr3t <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -d <span style=color:#4e9a06>'grant_type=client_credentials'</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -d <span style=color:#4e9a06>'scope=PRINCIPAL_ROLE:ALL'</span> <span style=color:#000;font-weight:700>|</span> jq -r .access_token<span style=color:#204a87;font-weight:700>)</span>
+</span></span></code></pre></div></li><li><p>Then, use the access token in the Authorization header when accessing Polaris:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span>curl -v http://localhost:8181/api/management/v1/principal-roles -H <span style=color:#4e9a06>"Authorization: Bearer </span><span style=color:#000>$P [...]
+</span></span><span style=display:flex><span>curl -v http://localhost:8181/api/management/v1/catalogs/quickstart_catalog -H <span style=color:#4e9a06>"Authorization: Bearer </span><span style=color:#000>$POLARIS_TOKEN</span><span style=color:#4e9a06>"</span>
+</span></span></code></pre></div></li><li><p>Using Trino CLI: To access the Trino CLI, run this command:</p></li></ol><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span>docker <span style=color:#204a87>exec</span> -it jdbc-trino-1 trino
</span></span></code></pre></div><p>Note, <code>cockroachdb-trino-1</code> is the name of the Docker container.</p><p>Example Trino queries:</p><pre tabindex=0><code>SHOW CATALOGS;
SHOW SCHEMAS FROM iceberg;
SHOW TABLES FROM iceberg.information_schema;
diff --git a/guides/flink/index.html b/guides/flink/index.html
index bd5b6aef5a..70cf01f969 100644
--- a/guides/flink/index.html
+++ b/guides/flink/index.html
@@ -1,12 +1,16 @@
<!doctype html><html itemscope itemtype=http://schema.org/WebPage lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon.png sizes=100x100><link rel=icon type=image/png href=/favicons/android-ch [...]
Build the Polaris server image if it’s not already present locally:
-1./gradlew \ 2 :polaris-server:assemble \ 3 :polaris-server:quarkusAppPartsBuild --rerun \ 4 -Dquarkus.container-image.build=true Start the docker compose group by running the following command from the root of the repository:"><meta property="og:url" content="https://polaris.apache.org/guides/flink/"><meta property="og:site_name" content="Apache Polaris"><meta property="og:title" content="Getting Started with Apache Polaris and Apache Flink"><meta property="og:description" content="This [...]
+./gradlew \ :polaris-server:assemble \ :polaris-server:quarkusAppPartsBuild --rerun \ -Dquarkus.container-image.build=true Start the docker compose group by running the following command from the root of the repository:
+export S3_ENDPOINT=http://rustfs:9000 docker compose -f site/content/guides/rustfs/docker-compose.yml -f site/content/guides/flink/docker-compose.yml up --build Open the Flink SQL client inside the running jobmanager container:"><meta property="og:url" content="https://polaris.apache.org/guides/flink/"><meta property="og:site_name" content="Apache Polaris"><meta property="og:title" content="Getting Started with Apache Polaris and Apache Flink"><meta property="og:description" content="Thi [...]
Build the Polaris server image if it’s not already present locally:
-1./gradlew \ 2 :polaris-server:assemble \ 3 :polaris-server:quarkusAppPartsBuild --rerun \ 4 -Dquarkus.container-image.build=true Start the docker compose group by running the following command from the root of the repository:"><meta property="og:locale" content="en_us"><meta property="og:type" content="article"><meta property="article:section" content="guides"><meta property="article:tag" content="Flink"><meta itemprop=name content="Getting Started with Apache Polaris and Apache Flink"> [...]
+./gradlew \ :polaris-server:assemble \ :polaris-server:quarkusAppPartsBuild --rerun \ -Dquarkus.container-image.build=true Start the docker compose group by running the following command from the root of the repository:
+export S3_ENDPOINT=http://rustfs:9000 docker compose -f site/content/guides/rustfs/docker-compose.yml -f site/content/guides/flink/docker-compose.yml up --build Open the Flink SQL client inside the running jobmanager container:"><meta property="og:locale" content="en_us"><meta property="og:type" content="article"><meta property="article:section" content="guides"><meta property="article:tag" content="Flink"><meta itemprop=name content="Getting Started with Apache Polaris and Apache Flink" [...]
Build the Polaris server image if it’s not already present locally:
-1./gradlew \ 2 :polaris-server:assemble \ 3 :polaris-server:quarkusAppPartsBuild --rerun \ 4 -Dquarkus.container-image.build=true Start the docker compose group by running the following command from the root of the repository:"><meta itemprop=wordCount content="259"><meta itemprop=keywords content="Flink"><meta name=twitter:card content="summary"><meta name=twitter:title content="Getting Started with Apache Polaris and Apache Flink"><meta name=twitter:description content="This getting st [...]
+./gradlew \ :polaris-server:assemble \ :polaris-server:quarkusAppPartsBuild --rerun \ -Dquarkus.container-image.build=true Start the docker compose group by running the following command from the root of the repository:
+export S3_ENDPOINT=http://rustfs:9000 docker compose -f site/content/guides/rustfs/docker-compose.yml -f site/content/guides/flink/docker-compose.yml up --build Open the Flink SQL client inside the running jobmanager container:"><meta itemprop=wordCount content="241"><meta itemprop=keywords content="Flink"><meta name=twitter:card content="summary"><meta name=twitter:title content="Getting Started with Apache Polaris and Apache Flink"><meta name=twitter:description content="This getting s [...]
Build the Polaris server image if it’s not already present locally:
-1./gradlew \ 2 :polaris-server:assemble \ 3 :polaris-server:quarkusAppPartsBuild --rerun \ 4 -Dquarkus.container-image.build=true Start the docker compose group by running the following command from the root of the repository:"><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333 [...]
+./gradlew \ :polaris-server:assemble \ :polaris-server:quarkusAppPartsBuild --rerun \ -Dquarkus.container-image.build=true Start the docker compose group by running the following command from the root of the repository:
+export S3_ENDPOINT=http://rustfs:9000 docker compose -f site/content/guides/rustfs/docker-compose.yml -f site/content/guides/flink/docker-compose.yml up --build Open the Flink SQL client inside the running jobmanager container:"><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f633 [...]
<label for=m-guidesquickstart-check><a href=/guides/quickstart/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-guidesquickstart><span>Quickstart</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-guideskeycloak-li><input type=checkbox id=m-guideskeycloak-check>
<label for=m-guideskeycloak-check><a href=/guides/keycloak/ title="Getting Started with Apache Polaris, External Authentication and Keycloak" class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-guideskeycloak><span>Authentication: Keycloak</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-guidesjdbc-li><input type=checkbox id=m-guidesjdbc-check>
<label for=m-guidesjdbc-check><a href=/guides/jdbc/ title="Getting Started with Apache Polaris, Relational JDBC, Postgres and Spark SQL" class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-guidesjdbc><span>Backend: JDBC, Postgres</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-guidestelemetry-li><input type=checkbox id=m-guidestelemetry-check>
@@ -18,39 +22,39 @@ Build the Polaris server image if it’s not already present locally:
<label for=m-guidesrustfs-check><a href=/guides/rustfs/ title="Getting Started with Apache Polaris and RustFS" class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-guidesrustfs><span>Storage: RustFS</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-guidesspark-li><input type=checkbox id=m-guidesspark-check>
<label for=m-guidesspark-check><a href=/guides/spark/ title="Getting Started with Apache Polaris and Apache Spark" class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-guidesspark><span>Client: Apache Spark</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child active-path" id=m-guidesflink-li><input type=checkbox id=m-guidesflink-check checked>
<label for=m-guidesflink-check><a href=/guides/flink/ title="Getting Started with Apache Polaris and Apache Flink" class="align-left ps-0 active td-sidebar-link td-sidebar-link__page" id=m-guidesflink><span class=td-sidebar-nav-active-item>Client: Apache Flink</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-guidesreadme-li><input type=checkbox id=m-guidesreadme-check>
-<label for=m-guidesreadme-check><a href=/guides/readme/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-guidesreadme><span></span></a></label></li></ul></li></ul></nav></div></aside><main class="col-12 col-md-9 col-xl-8 ps-md-5" role=main><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/guides/>Guides</a></li><li class="breadcrumb-item active" aria-current=page>Client: Apache Flink</li></ol></nav><div class=td-cont [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> :polaris-server:assemble <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> :polaris-server:quarkusAppPartsBuild --rerun <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> -Dquarkus.container-image.build<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#204a87>true</span>
-</span></span></code></pre></div></li><li><p>Start the docker compose group by running the following command from the root of the repository:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span><span s [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span>docker compose -f site/content/guides/rustfs/docker-compose.yml -f site/content/guides/flink/docker-compose.yml up --build
-</span></span></code></pre></div></li></ol><ol start=3><li><p>Open the Flink SQL client inside the running jobmanager container:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span>docker <span style=c [...]
+<label for=m-guidesreadme-check><a href=/guides/readme/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-guidesreadme><span></span></a></label></li></ul></li></ul></nav></div></aside><main class="col-12 col-md-9 col-xl-8 ps-md-5" role=main><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/guides/>Guides</a></li><li class="breadcrumb-item active" aria-current=page>Client: Apache Flink</li></ol></nav><div class=td-cont [...]
+</span></span></span><span style=display:flex><span> :polaris-server:assemble <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> :polaris-server:quarkusAppPartsBuild --rerun <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -Dquarkus.container-image.build<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#204a87>true</span>
+</span></span></code></pre></div></li><li><p>Start the docker compose group by running the following command from the root of the repository:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span><span style=color:#204a87>export</span> <span style=color:#000>S3_ENDPOINT</span><span style=color:#ce5c00;font-weight:700>=</span>htt [...]
+</span></span><span style=display:flex><span>docker compose -f site/content/guides/rustfs/docker-compose.yml -f site/content/guides/flink/docker-compose.yml up --build
+</span></span></code></pre></div></li></ol><ol start=3><li><p>Open the Flink SQL client inside the running jobmanager container:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span>docker <span style=color:#204a87>exec</span> -it <span style=color:#204a87;font-weight:700>$(</span>docker ps -q --filter <span style=color:#000>na [...]
</span></span></code></pre></div></li><li><p>Register the Polaris catalog and run a few statements. The S3 endpoint and
-credentials point at the in-network <code>rustfs</code> service:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-sql data-lang=sql><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 1</span><span><span style=color:#204a87;font-weight:700>CREATE</span><span style=color:#f8f8f8> </spa [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'type'</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'iceberg'</span><span style=color:#000;font-weight:700>,</span [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'catalog-impl'</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'org.apache.iceberg.rest.RESTCatalog'</span><span style=color: [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'uri'</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'http://polaris:8181/api/catalog'</span><span style=color:#000 [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'warehouse'</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'quickstart_catalog'</span><span style=color:#000;font-weight: [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'credential'</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'root:s3cr3t'</span><span style=color:#000;font-weight:700>,</ [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'scope'</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'PRINCIPAL_ROLE:ALL'</span><span style=color:#000;font-weight: [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'io-impl'</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'org.apache.iceberg.aws.s3.S3FileIO'</span><span style=color:# [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'s3.endpoint'</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'http://rustfs:9000'</span><span style=color:#000;font-weight: [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">10</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'s3.path-style-access'</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'true'</span><span style=color:#000;font-weight:700>,</span><s [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">11</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'s3.access-key-id'</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'rustfsadmin'</span><span style=color:#000;font-weight:700>,</ [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">12</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'s3.secret-access-key'</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'rustfsadmin'</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">13</span><span><span style=color:#000;font-weight:700>);</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">14</span><span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">15</span><span><span style=color:#000>USE</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>CATALOG</span><span style=color:#f8f8f8> </span><span style=color:#000>polaris</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">16</span><span><span style=color:#204a87;font-weight:700>CREATE</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>DATABASE</span><span style=color:#f8f8f8> </span><span style=color:#000>ns1</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">17</span><span><span style=color:#000>USE</span><span style=color:#f8f8f8> </span><span style=color:#000>ns1</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">18</span><span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">19</span><span><span style=color:#204a87;font-weight:700>CREATE</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>TABLE</span><span style=color:#f8f8f8> </span><span style=color:#000>table1</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>(</span><span style=color: [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">20</span><span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">21</span><span><span style=color:#204a87;font-weight:700>SET</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'execution.checkpointing.interval'</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'10 [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">22</span><span><span style=color:#204a87;font-weight:700>INSERT</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>INTO</span><span style=color:#f8f8f8> </span><span style=color:#000>table1</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>VALUES</span><span style [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">23</span><span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">24</span><span><span style=color:#204a87;font-weight:700>SET</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'sql-client.execution.result-mode'</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'ta [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">25</span><span><span style=color:#204a87;font-weight:700>SELECT</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>*</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>FROM</span><span style=color:#f8f8f8> </span><span style=color:#000>table1</span><span style=colo [...]
+credentials point at the in-network <code>rustfs</code> service:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-sql data-lang=sql><span style=display:flex><span><span style=color:#204a87;font-weight:700>CREATE</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>CATALOG</span><span style=color:#f8f8f8> </span><span style=color:#000>polaris</span [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'type'</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'iceberg'</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'catalog-impl'</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'org.apache.iceberg.rest.RESTCatalog'</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'uri'</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'http://polaris:8181/api/catalog'</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'warehouse'</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'quickstart_catalog'</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'credential'</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'root:s3cr3t'</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'scope'</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'PRINCIPAL_ROLE:ALL'</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'io-impl'</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'org.apache.iceberg.aws.s3.S3FileIO'</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'s3.endpoint'</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'http://rustfs:9000'</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'s3.path-style-access'</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'true'</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'s3.access-key-id'</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'rustfsadmin'</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'s3.secret-access-key'</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'rustfsadmin'</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#000;font-weight:700>);</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#000>USE</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>CATALOG</span><span style=color:#f8f8f8> </span><span style=color:#000>polaris</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>CREATE</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>DATABASE</span><span style=color:#f8f8f8> </span><span style=color:#000>ns1</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#000>USE</span><span style=color:#f8f8f8> </span><span style=color:#000>ns1</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>CREATE</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>TABLE</span><span style=color:#f8f8f8> </span><span style=color:#000>table1</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>(</span><span style=color:#000>id</span><span style=color:#f8f8f8> </span><span style=color:#204a87>BIGINT</span><span style=color:#000;font-weight:700>,< [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>SET</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'execution.checkpointing.interval'</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'10s'</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>INSERT</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>INTO</span><span style=color:#f8f8f8> </span><span style=color:#000>table1</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>VALUES</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>(</span><span style=color:#0000cf;font-weight:700>1</span><span st [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>SET</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'sql-client.execution.result-mode'</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>'tableau'</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>SELECT</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>*</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>FROM</span><span style=color:#f8f8f8> </span><span style=color:#000>table1</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8>
</span></span></span></code></pre></div></li></ol><p>Note: <code>s3cr3t</code> is defined as the password for the <code>root</code> user in the <code>rustfs/docker-compose.yml</code> file.
<code>rustfsadmin</code> is the RustFS access key from the same file.
Iceberg only makes data visible after a checkpoint commits, so allow ~10s between the INSERT and the SELECT.</p><h2 id=useful-urls id=useful-urls>Useful URLs<a class=heading-anchor href=#useful-urls aria-label=Anchor>🔗</a></h2><ul><li>Flink Web UI: <a href=http://localhost:8081>http://localhost:8081</a></li><li>Polaris REST API: <a href=http://localhost:8181>http://localhost:8181</a></li><li>RustFS Console: <a href=http://localhost:9001>http://localhost:9001</a></li></ul></div></main></d [...]
\ No newline at end of file
diff --git a/guides/index.html b/guides/index.html
index ce0d822a92..210c14146d 100644
--- a/guides/index.html
+++ b/guides/index.html
@@ -4,9 +4,9 @@ Telemetry: An example that includes Prometheus and Jaeger to collect metrics and
Prerequisites🔗 Docker Docker Compose jq (for some examples) Getting Started Examples🔗 Spark: An example that uses an in-memory metastore, automatically bootstrapped, with Apache Spark and a Jupyter notebook.
Telemetry: An example that includes Prometheus and Jaeger to collect metrics and traces from Apache Polaris. This example automatically creates a polaris_demo catalog."><meta property="og:locale" content="en_us"><meta property="og:type" content="website"><meta itemprop=name content="Apache Polaris Guides"><meta itemprop=description content="You can quickly get started with Polaris by playing with the docker-compose examples provided by the guides shown on the left of this page. Each guid [...]
Prerequisites🔗 Docker Docker Compose jq (for some examples) Getting Started Examples🔗 Spark: An example that uses an in-memory metastore, automatically bootstrapped, with Apache Spark and a Jupyter notebook.
-Telemetry: An example that includes Prometheus and Jaeger to collect metrics and traces from Apache Polaris. This example automatically creates a polaris_demo catalog."><meta itemprop=wordCount content="641"><meta name=twitter:card content="summary"><meta name=twitter:title content="Apache Polaris Guides"><meta name=twitter:description content="You can quickly get started with Polaris by playing with the docker-compose examples provided by the guides shown on the left of this page. Each [...]
+Telemetry: An example that includes Prometheus and Jaeger to collect metrics and traces from Apache Polaris. This example automatically creates a polaris_demo catalog."><meta itemprop=wordCount content="618"><meta name=twitter:card content="summary"><meta name=twitter:title content="Apache Polaris Guides"><meta name=twitter:description content="You can quickly get started with Polaris by playing with the docker-compose examples provided by the guides shown on the left of this page. Each [...]
Prerequisites🔗 Docker Docker Compose jq (for some examples) Getting Started Examples🔗 Spark: An example that uses an in-memory metastore, automatically bootstrapped, with Apache Spark and a Jupyter notebook.
-Telemetry: An example that includes Prometheus and Jaeger to collect metrics and traces from Apache Polaris. This example automatically creates a polaris_demo catalog."><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css rel=stylesheet integrity=" [...]
+Telemetry: An example that includes Prometheus and Jaeger to collect metrics and traces from Apache Polaris. This example automatically creates a polaris_demo catalog."><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css rel=stylesheet integrity=" [...]
<label for=m-guidesquickstart-check><a href=/guides/quickstart/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-guidesquickstart><span>Quickstart</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-guideskeycloak-li><input type=checkbox id=m-guideskeycloak-check>
<label for=m-guideskeycloak-check><a href=/guides/keycloak/ title="Getting Started with Apache Polaris, External Authentication and Keycloak" class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-guideskeycloak><span>Authentication: Keycloak</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-guidesjdbc-li><input type=checkbox id=m-guidesjdbc-check>
<label for=m-guidesjdbc-check><a href=/guides/jdbc/ title="Getting Started with Apache Polaris, Relational JDBC, Postgres and Spark SQL" class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-guidesjdbc><span>Backend: JDBC, Postgres</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-guidestelemetry-li><input type=checkbox id=m-guidestelemetry-check>
@@ -26,17 +26,17 @@ traces from Apache Polaris. This example automatically creates a <code>polaris_d
authentication.</p></li></ul><h2 id=authoring-guides id=authoring-guides>Authoring Guides<a class=heading-anchor href=#authoring-guides aria-label=Anchor>🔗</a></h2><p>Writing new Guides or updating existing ones, especially those that use Docker Compose, should follow these
guidelines. This ensures that the examples work as expected and that the guides pass the tests
run in CI and locally.</p><h3 id=running-guides-ci-tests-locally id=running-guides-ci-tests-locally>Running guides CI tests locally<a class=heading-anchor href=#running-guides-ci-tests-locally aria-label=Anchor>🔗</a></h3><p>Requirements: Python 3.14 installed locally. Other Python 3 versions should work as well, but
-have not been validated.</p><p>To run tests for all guides in <code>site/content/guides</code>, run</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span><span style=color:#204a87>cd</span> site/it
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span>./markdown-testing.py
-</span></span></code></pre></div><p>To run tests for one or more guides in <code>site/content/guides</code>, use the following pattern:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span><span style=c [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span>./markdown-testing.py content/guides/rustfs/index.md content/guides/telemetry/index.md
+have not been validated.</p><p>To run tests for all guides in <code>site/content/guides</code>, run</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span><span style=color:#204a87>cd</span> site/it
+</span></span><span style=display:flex><span>./markdown-testing.py
+</span></span></code></pre></div><p>To run tests for one or more guides in <code>site/content/guides</code>, use the following pattern:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span><span style=color:#204a87>cd</span> site/it
+</span></span><span style=display:flex><span>./markdown-testing.py content/guides/rustfs/index.md content/guides/telemetry/index.md
</span></span></code></pre></div><p>More information about guides-testing can be found in the <code>site/it/README.md</code> file in the
<a href=https://github.com/apache/polaris>source repository</a>.</p><h3 id=constraints id=constraints>Constraints<a class=heading-anchor href=#constraints aria-label=Anchor>🔗</a></h3><ol><li><code>docker compose</code> invocations must be on a single line in a <code>shell</code> code block.</li><li>When invoking Spark SQL shell in a <code>shell</code> code block, the <code>bin/spark-sql ...</code> invocation
must be the only statement in that code block.</li><li>Currently, only one <em>docker-compose</em> file is supported per guide. Using multiple
docker-compose files needs some changes to the testing code,
see <a href=https://github.com/apache/polaris/pull/3553#discussion_r2868090144>here</a>.</li></ol><h3 id=tips-for-docker-usage id=tips-for-docker-usage>Tips for Docker usage<a class=heading-anchor href=#tips-for-docker-usage aria-label=Anchor>🔗</a></h3><ul><li>Do not use any of the <code>--interactive</code> or <code>--tty</code> options</li></ul><h3 id=tips-for-docker-compose-files id=tips-for-docker-compose-files>Tips for Docker Compose files<a class=heading-anchor href=#tips-for-docke [...]
-<code>condition: service_healthy</code>.</p></li><li><p>Always put port-mappings in quotes, for example:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-yaml data-lang=yaml><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span><span style=color:#204a87;font-weight:700>port [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#f8f8f8> </span>- <span style=color:#4e9a06>"9874:9874"</span><span style=color:#f8f8f8>
+<code>condition: service_healthy</code>.</p></li><li><p>Always put port-mappings in quotes, for example:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-yaml data-lang=yaml><span style=display:flex><span><span style=color:#204a87;font-weight:700>ports</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span>- <span style=color:#4e9a06>"9874:9874"</span><span style=color:#f8f8f8>
</span></span></span></code></pre></div></li><li><p>“Final setup services,” for example the service that sets up Polaris, are a bit
tricky to get right in the sense that those do not let <code>docker compose up --detach --wait</code>
fail.
@@ -45,37 +45,37 @@ To prevent this, setup-services should have a final “endless” comman
running and have a health check to inform about its success.</p><p>“Intermediate setup services,” for example the service to create a bucket, do <strong>not</strong>
and <strong>should not</strong> have a final <code>sleep</code> command, because that would delay the overall
startup. The Polaris service must depend on the intermediate service to setup a bucket
-with the <code>condition</code> <code>service_completed_successfully</code>.</p><p>Working example:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-yaml data-lang=yaml><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 1</span><span><span style=color:#204a87;font-weight:700>polaris- [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>image</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>alpine/curl:8.17.0</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>depends_on</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>polaris</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>condition</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>service_healthy</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span><span style=color:#f8f8f8> </span><span style=color:#000>(...)</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>entrypoint</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"/bin/sh"</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>command</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span><span style=color:#f8f8f8> </span>- <span style=color:#4e9a06>"-c"</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">10</span><span><span style=color:#f8f8f8> </span>- <span style=color:#000;font-weight:700>>-</span><span style=color:#8f5902;font-style:italic>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">11</span><span><span style=color:#8f5902;font-style:italic> do_stuff &&
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">12</span><span><span style=color:#8f5902;font-style:italic> touch /tmp/polaris-setup-done &&
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">13</span><span><span style=color:#8f5902;font-style:italic> tail -f /dev/null</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">14</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>healthcheck</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">15</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>test</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>[</span><span style=color:#4e9a06>"CMD"</span><span style=color:#000;font-weight:700>,</span>< [...]
+with the <code>condition</code> <code>service_completed_successfully</code>.</p><p>Working example:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-yaml data-lang=yaml><span style=display:flex><span><span style=color:#204a87;font-weight:700>polaris-setup</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>image</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>alpine/curl:8.17.0</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>depends_on</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>polaris</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>condition</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>service_healthy</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#000>(...)</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>entrypoint</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"/bin/sh"</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>command</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span>- <span style=color:#4e9a06>"-c"</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span>- <span style=color:#000;font-weight:700>>-</span><span style=color:#8f5902;font-style:italic>
+</span></span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic> do_stuff &&
+</span></span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic> touch /tmp/polaris-setup-done &&
+</span></span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic> tail -f /dev/null</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>healthcheck</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>test</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>[</span><span style=color:#4e9a06>"CMD"</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"test"</span><span style=color:#000;font-weight:700>,</span>< [...]
</span></span></span></code></pre></div></li><li><p>Take care to propagate <em>all</em> failures of a setup service’s commands.
This can be achieved by chaining the commands with <code>&&</code> and using <code>set -e</code> at the
beginning of executed scripts.</p></li><li><p>For <code>curl</code>, use the <code>--fail-with-body</code> or <code>--fail</code> options or add specialized logic
to validate the HTTP response code.</p></li><li><p>Service dependencies (<code>depends_on</code>) must be declared with the correct <code>condition</code>,
meaning to use the “Long syntax” as described in the
-<a href=https://docs.docker.com/compose/compose-file/compose-file-v3/#depends_on>Docker Compose documentation</a>.</p></li><li><p>Dependencies on “setup” services MUST be declared using a syntax like this:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-yaml data-lang=yaml><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select: [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>image</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>apache/polaris:latest</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>depends_on</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>setup_bucket</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>condition</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>service_completed_successfully</span><span style=color:#f8f8f8>
+<a href=https://docs.docker.com/compose/compose-file/compose-file-v3/#depends_on>Docker Compose documentation</a>.</p></li><li><p>Dependencies on “setup” services MUST be declared using a syntax like this:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-yaml data-lang=yaml><span style=display:flex><span><span style=color:#204a87;font-weight:700>polaris</span><spa [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>image</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>apache/polaris:latest</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>depends_on</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>setup_bucket</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>condition</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>service_completed_successfully</span><span style=color:#f8f8f8>
</span></span></span></code></pre></div></li><li><p>Dependencies on “daemon” services with a “proper” health check should be declared using
-a syntax like this:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-yaml data-lang=yaml><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span><span style=color:#204a87;font-weight:700>polaris</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>image</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>apache/polaris:latest</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>depends_on</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>minio</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>condition</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>service_healthy</span><span style=color:#f8f8f8>
+a syntax like this:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-yaml data-lang=yaml><span style=display:flex><span><span style=color:#204a87;font-weight:700>polaris</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>image</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>apache/polaris:latest</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>depends_on</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>minio</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>condition</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>service_healthy</span><span style=color:#f8f8f8>
</span></span></span></code></pre></div></li></ul><h3 id=tips-for-inspecting-docker-compose-logs id=tips-for-inspecting-docker-compose-logs>Tips for inspecting Docker compose logs<a class=heading-anchor href=#tips-for-inspecting-docker-compose-logs aria-label=Anchor>🔗</a></h3><p>When inspecting the logs of Docker Compose, watch the logged timestamps.
The order of the log entries emitted by Docker Compose is not necessarily in the
natural order of execution between different services.
diff --git a/guides/index.xml b/guides/index.xml
index 9a463d6621..b9c43325e5 100644
--- a/guides/index.xml
+++ b/guides/index.xml
@@ -14,7 +14,7 @@ docker compose up
<h2 id="running-the-quickstart" id="running-the-quickstart">Running the Quickstart<a class="heading-anchor" href="#running-the-quickstart" aria-label="Anchor">🔗</a>
</h2>
<p>Run the following command:</p>
-<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1</span><span>curl -s https://raw.githubusercontent.com/apache/polaris/refs/heads/main/site/content/gu [...]
+<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>curl -s https://raw.githubusercontent.com/apache/polaris/refs/heads/main/site/content/guides/quickstart/docker-compose.yml <span style="color:#000;font-weight:bold">|</span> docker compose -p polaris-quickstart -f - up -d
</span></span></code></pre></div><p>This command will start Polaris + RustFS and automatically create:</p></description></item><item><title>Getting Started with Apache Polaris, External Authentication and Keycloak</title><link>https://polaris.apache.org/guides/keycloak/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://polaris.apache.org/guides/keycloak/</guid><description><h2 id="overview" id="overview">Overview<a cl [...]
</h2>
<p>This example uses Keycloak as an <strong>external</strong> identity provider for Polaris. The &ldquo;iceberg&rdquo; realm is automatically
@@ -34,45 +34,88 @@ Polaris beforehand, and the principal ID, name and roles must match the ones ret
<li>
<p>If such an image is not already present, build the Polaris image with support for JDBC persistence and
the Postgres JDBC driver:</p>
-<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1</span><span>./gradlew <span style="color:#4e9a06">\
-</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">2</span><span> :polaris-server:assemble <span style="color:#4e9a06">\
-</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">3</span><span> :polaris-server:quarkusAppPartsBuild --rerun <span style="color:#4e9a06">\
-</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">4</span><span> :polaris-admin:assemble <span style="color:#4e9a06">\
-</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">5</span><span> :polaris-admin:quarkusAppPartsBuild --rerun <span style="color:#4e9a06">\
-</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">6</span><span> -Dquarkus.container-image.build<span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#204a87">true</span>
+<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>./gradlew <span style="color:#4e9a06">\
+</span></span></span><span style="display:flex;"><span> :polaris-server:assemble <span style="color:#4e9a06">\
+</span></span></span><span style="display:flex;"><span> :polaris-server:quarkusAppPartsBuild --rerun <span style="color:#4e9a06">\
+</span></span></span><span style="display:flex;"><span> :polaris-admin:assemble <span style="color:#4e9a06">\
+</span></span></span><span style="display:flex;"><span> :polaris-admin:quarkusAppPartsBuild --rerun <span style="color:#4e9a06">\
+</span></span></span><span style="display:flex;"><span> -Dquarkus.container-image.build<span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#204a87">true</span>
</span></span></code></pre></div></li>
<li>
-<p>Start the docker compose group by running the following command from the root of the repository:</p></description></item><item><title>Getting Started with Apache Polaris, Prometheus and Jaeger</title><link>https://polaris.apache.org/guides/telemetry/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://polaris.apache.org/guides/telemetry/</guid><description><p>This example requires <code>jq</code> to be installed on your machine.</p>
+<p>Start the docker compose group by running the following command from the root of the repository:</p>
+<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span><span style="color:#204a87">export</span> <span style="color:#000">QUARKUS_DATASOURCE_JDBC_URL</span><span style="color:#ce5c00;font-weight:bold">=</span>jdbc:postgresql://postgres:5432/POLARIS
+</span></span><span style="display:flex;"><span><span style="color:#204a87">export</span> <span style="color:#000">QUARKUS_DATASOURCE_USERNAME</span><span style="color:#ce5c00;font-weight:bold">=</span>postgres
+</span></span><span style="display:flex;"><span><span style="color:#204a87">export</span> <span style="color:#000">QUARKUS_DATASOURCE_PASSWORD</span><span style="color:#ce5c00;font-weight:bold">=</span>postgres
+</span></span><span style="display:flex;"><span><span style="color:#204a87">export</span> <span style="color:#000">ASSETS_PATH</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#204a87;font-weight:bold">$(</span><span style="color:#204a87">pwd</span><span style="color:#204a87;font-weight:bold">)</span>/site/content/guides/assets/
+</span></span><span style="display:flex;"><span><span style="color:#204a87">export</span> <span style="color:#000">CLIENT_ID</span><span style="color:#ce5c00;font-weight:bold">=</span>root
+</span></span><span style="display:flex;"><span><span style="color:#204a87">export</span> <span style="color:#000">CLIENT_SECRET</span><span style="color:#ce5c00;font-weight:bold">=</span>s3cr3t
+</span></span><span style="display:flex;"><span>docker compose -f site/content/guides/jdbc/docker-compose-bootstrap-db.yml -f site/content/guides/assets/postgres/docker-compose-postgres.yml -f site/content/guides/jdbc/docker-compose.yml up
+</span></span></code></pre></div></li>
+</ol>
+<!-- Guide testing: do not exercise the expensive Docker compose setup.
+```shell
+exit 0
+```
+-->
+<ol start="3">
+<li>
+<p>Using spark-sql: attach to the running spark-sql container:</p></description></item><item><title>Getting Started with Apache Polaris, Prometheus and Jaeger</title><link>https://polaris.apache.org/guides/telemetry/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://polaris.apache.org/guides/telemetry/</guid><description><p>This example requires <code>jq</code> to be installed on your machine.</p>
<ol>
<li>
<p>Build the Polaris image if it&rsquo;s not already present locally:</p>
-<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1</span><span>./gradlew <span style="color:#4e9a06">\
-</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">2</span><span> :polaris-server:assemble <span style="color:#4e9a06">\
-</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">3</span><span> :polaris-server:quarkusAppPartsBuild --rerun <span style="color:#4e9a06">\
-</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">4</span><span> -Dquarkus.container-image.build<span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#204a87">true</span>
+<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>./gradlew <span style="color:#4e9a06">\
+</span></span></span><span style="display:flex;"><span> :polaris-server:assemble <span style="color:#4e9a06">\
+</span></span></span><span style="display:flex;"><span> :polaris-server:quarkusAppPartsBuild --rerun <span style="color:#4e9a06">\
+</span></span></span><span style="display:flex;"><span> -Dquarkus.container-image.build<span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#204a87">true</span>
</span></span></code></pre></div></li>
<li>
<p>Start the docker compose group by running the following command from the root of the repository:</p>
-<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1</span><span><span style="color:#204a87">export</span> <span style="color:#000">A [...]
-</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">2</span><span><span style="color:#204a87">export</span> <span style="color:#000">CLIENT_ID</span><span style="color:#ce5c00;font-weight:bold">=</span>root
-</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">3</span><span><span style="color:#204a87">export</span> <span style="color:#000">CLIENT_SECRET</span><span style="color:#ce5c00;font-weight:bold">=</span>s3cr3t
-</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">4</span><span>docker compose -f site/content/guides/telemetry/docker-compose.yml up
+<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span><span style="color:#204a87">export</span> <span style="color:#000">ASSETS_PATH</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#204a87;font-weight:bold">$(</spa [...]
+</span></span><span style="display:flex;"><span><span style="color:#204a87">export</span> <span style="color:#000">CLIENT_ID</span><span style="color:#ce5c00;font-weight:bold">=</span>root
+</span></span><span style="display:flex;"><span><span style="color:#204a87">export</span> <span style="color:#000">CLIENT_SECRET</span><span style="color:#ce5c00;font-weight:bold">=</span>s3cr3t
+</span></span><span style="display:flex;"><span>docker compose -f site/content/guides/telemetry/docker-compose.yml up
+</span></span></code></pre></div></li>
+<li>
+<p>To access Polaris from the host machine, first request an access token:</p>
+<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span><span style="color:#204a87">export</span> <span style="color:#000">POLARIS_TOKEN</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#204a87;font-weight:bold">$(</s [...]
+</span></span></span><span style="display:flex;"><span> --user root:s3cr3t <span style="color:#4e9a06">\
+</span></span></span><span style="display:flex;"><span> -d <span style="color:#4e9a06">&#39;grant_type=client_credentials&#39;</span> <span style="color:#4e9a06">\
+</span></span></span><span style="display:flex;"><span> -d <span style="color:#4e9a06">&#39;scope=PRINCIPAL_ROLE:ALL&#39;</span> <span style="color:#000;font-weight:bold">|</span> jq -r .access_token<span style="color:#204a87;font-weight:bold">)</span>
</span></span></code></pre></div></li>
<li>
-<p>To access Polaris from the host machine, first request an access token:</p></description></item><item><title>Getting Started with Apache Polaris, Relational JDBC, CockroachDB and Spark SQL</title><link>https://polaris.apache.org/guides/cockroachdb/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://polaris.apache.org/guides/cockroachdb/</guid><description><p>This example requires <code>jq</code> to be installed on your machine.</p>
+<p>Then, use the access token in the Authorization header when accessing Polaris; you can also test
+the <code>X-Request-ID</code> header; you should see it in all logs and traces:</p></description></item><item><title>Getting Started with Apache Polaris, Relational JDBC, CockroachDB and Spark SQL</title><link>https://polaris.apache.org/guides/cockroachdb/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://polaris.apache.org/guides/cockroachdb/</guid><description><p>This example requires <code>jq</code> to be installed on your machin [...]
<ol>
<li>
<p>If such an image is not already present, build the Polaris image with support for JDBC persistence and
the Postgres JDBC driver:</p>
-<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1</span><span>./gradlew <span style="color:#4e9a06">\
-</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">2</span><span> :polaris-server:assemble <span style="color:#4e9a06">\
-</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">3</span><span> :polaris-server:quarkusAppPartsBuild --rerun <span style="color:#4e9a06">\
-</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">4</span><span> :polaris-admin:assemble <span style="color:#4e9a06">\
-</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">5</span><span> :polaris-admin:quarkusAppPartsBuild --rerun <span style="color:#4e9a06">\
-</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">6</span><span> -Dquarkus.container-image.build<span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#204a87">true</span>
+<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>./gradlew <span style="color:#4e9a06">\
+</span></span></span><span style="display:flex;"><span> :polaris-server:assemble <span style="color:#4e9a06">\
+</span></span></span><span style="display:flex;"><span> :polaris-server:quarkusAppPartsBuild --rerun <span style="color:#4e9a06">\
+</span></span></span><span style="display:flex;"><span> :polaris-admin:assemble <span style="color:#4e9a06">\
+</span></span></span><span style="display:flex;"><span> :polaris-admin:quarkusAppPartsBuild --rerun <span style="color:#4e9a06">\
+</span></span></span><span style="display:flex;"><span> -Dquarkus.container-image.build<span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#204a87">true</span>
</span></span></code></pre></div></li>
<li>
-<p>Start the docker compose group by running the following command from the root of the repository:</p></description></item><item><title>Getting Started with Apache Polaris and Apache Ozone</title><link>https://polaris.apache.org/guides/ozone/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://polaris.apache.org/guides/ozone/</guid><description><h2 id="overview" id="overview">Overview<a class="heading-anchor" href="#overview" aria-label="Anchor"> [...]
+<p>Start the docker compose group by running the following command from the root of the repository:</p>
+<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span><span style="color:#204a87">export</span> <span style="color:#000">POLARIS_PERSISTENCE_RELATIONAL_JDBC_DATABASE_TYPE</span><span style="color:#ce5c00;font-weight:bold">=</span>cockroachdb
+</span></span><span style="display:flex;"><span><span style="color:#204a87">export</span> <span style="color:#000">QUARKUS_DATASOURCE_JDBC_URL</span><span style="color:#ce5c00;font-weight:bold">=</span>jdbc:postgresql://cockroachdb:26257/polaris?sslmode<span style="color:#ce5c00;font-weight:bold">=</span>disable
+</span></span><span style="display:flex;"><span><span style="color:#204a87">export</span> <span style="color:#000">QUARKUS_DATASOURCE_USERNAME</span><span style="color:#ce5c00;font-weight:bold">=</span>root
+</span></span><span style="display:flex;"><span><span style="color:#204a87">export</span> <span style="color:#000">QUARKUS_DATASOURCE_PASSWORD</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#4e9a06">&#34;&#34;</span>
+</span></span><span style="display:flex;"><span><span style="color:#204a87">export</span> <span style="color:#000">ASSETS_PATH</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#204a87;font-weight:bold">$(</span><span style="color:#204a87">pwd</span><span style="color:#204a87;font-weight:bold">)</span>/site/content/guides/assets/
+</span></span><span style="display:flex;"><span><span style="color:#204a87">export</span> <span style="color:#000">CLIENT_ID</span><span style="color:#ce5c00;font-weight:bold">=</span>root
+</span></span><span style="display:flex;"><span><span style="color:#204a87">export</span> <span style="color:#000">CLIENT_SECRET</span><span style="color:#ce5c00;font-weight:bold">=</span>s3cr3t
+</span></span><span style="display:flex;"><span>docker compose -f site/content/guides/jdbc/docker-compose-bootstrap-db.yml -f site/content/guides/assets/cockroachdb/docker-compose-cockroachdb.yml -f site/content/guides/jdbc/docker-compose.yml up
+</span></span></code></pre></div></li>
+</ol>
+<!-- Guide testing: do not exercise the expensive Docker compose setup.
+```shell
+exit 0
+```
+-->
+<ol start="3">
+<li>
+<p>Using spark-sql: attach to the running spark-sql container:</p></description></item><item><title>Getting Started with Apache Polaris and Apache Ozone</title><link>https://polaris.apache.org/guides/ozone/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://polaris.apache.org/guides/ozone/</guid><description><h2 id="overview" id="overview">Overview<a class="heading-anchor" href="#overview" aria-label="Anchor">🔗</a>
</h2>
<p>This example uses <a href="https://ozone.apache.org/">Apache Ozone</a> as a storage provider with Polaris.</p>
<p>Spark is used as a query engine. This example assumes a local Spark installation.
@@ -80,7 +123,7 @@ See the <a href="../spark">Spark Notebooks Example</a> for a more ad
<h2 id="starting-the-example" id="starting-the-example">Starting the Example<a class="heading-anchor" href="#starting-the-example" aria-label="Anchor">🔗</a>
</h2>
<p>Start the docker compose group by running the following command from the root of the repository:</p>
-<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1</span><span>docker compose -f site/content/guides/ozone/docker-compose.yml up
+<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>docker compose -f site/content/guides/ozone/docker-compose.yml up
</span></span></code></pre></div><p>Note: this example pulls the <code>apache/polaris:latest</code> image, but assumes the image is <code>1.2.0-incubating</code> or later.</p></description></item><item><title>Getting Started with Apache Polaris and Ceph</title><link>https://polaris.apache.org/guides/ceph/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://polaris.apache.org/guides/ceph/</guid><descriptio [...]
</h2>
<p>This guide describes how to spin up a <strong>single-node Ceph cluster</strong> with <strong>RADOS Gateway (RGW)</strong> for S3-compatible storage and configure it for use by <strong>Polaris</strong>.</p>
@@ -119,23 +162,35 @@ A Jupyter notebook is used to run PySpark.</p>
exit 0
```
-->
-<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1</span><span>./gradlew <span style="color:#4e9a06">\
-</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">2</span><span> :polaris-server:assemble <span style="color:#4e9a06">\
-</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">3</span><span> :polaris-server:quarkusAppPartsBuild --rerun <span style="color:#4e9a06">\
-</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">4</span><span> -Dquarkus.container-image.build<span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#204a87">true</span>
+<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>./gradlew <span style="color:#4e9a06">\
+</span></span></span><span style="display:flex;"><span> :polaris-server:assemble <span style="color:#4e9a06">\
+</span></span></span><span style="display:flex;"><span> :polaris-server:quarkusAppPartsBuild --rerun <span style="color:#4e9a06">\
+</span></span></span><span style="display:flex;"><span> -Dquarkus.container-image.build<span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#204a87">true</span>
</span></span></code></pre></div><h2 id="run-the-docker-compose-file" id="run-the-docker-compose-file">Run the <code>docker-compose</code> file<a class="heading-anchor" href="#run-the-docker-compose-file" aria-label="Anchor">🔗</a>
</h2>
<p>To start the <code>docker-compose</code> file with the necessary dependencies, run these commands from the repo&rsquo;s root directory:</p></description></item><item><title>Getting Started with Apache Polaris and Apache Flink</title><link>https://polaris.apache.org/guides/flink/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://polaris.apache.org/guides/flink/</guid><description><p>This getting started guide provides a <code> [...]
<ol>
<li>
<p>Build the Polaris server image if it&rsquo;s not already present locally:</p>
-<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1</span><span>./gradlew <span style="color:#4e9a06">\
-</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">2</span><span> :polaris-server:assemble <span style="color:#4e9a06">\
-</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">3</span><span> :polaris-server:quarkusAppPartsBuild --rerun <span style="color:#4e9a06">\
-</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">4</span><span> -Dquarkus.container-image.build<span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#204a87">true</span>
+<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>./gradlew <span style="color:#4e9a06">\
+</span></span></span><span style="display:flex;"><span> :polaris-server:assemble <span style="color:#4e9a06">\
+</span></span></span><span style="display:flex;"><span> :polaris-server:quarkusAppPartsBuild --rerun <span style="color:#4e9a06">\
+</span></span></span><span style="display:flex;"><span> -Dquarkus.container-image.build<span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#204a87">true</span>
</span></span></code></pre></div></li>
<li>
-<p>Start the docker compose group by running the following command from the root of the repository:</p></description></item><item><title/><link>https://polaris.apache.org/guides/readme/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://polaris.apache.org/guides/readme/</guid><description><!--
+<p>Start the docker compose group by running the following command from the root of the repository:</p>
+<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span><span style="color:#204a87">export</span> <span style="color:#000">S3_ENDPOINT</span><span style="color:#ce5c00;font-weight:bold">=</span>http://rustfs:9000
+</span></span><span style="display:flex;"><span>docker compose -f site/content/guides/rustfs/docker-compose.yml -f site/content/guides/flink/docker-compose.yml up --build
+</span></span></code></pre></div></li>
+</ol>
+<!-- Guide testing: do not exercise the expensive Docker compose setup.
+```shell
+exit 0
+```
+-->
+<ol start="3">
+<li>
+<p>Open the Flink SQL client inside the running jobmanager container:</p></description></item><item><title/><link>https://polaris.apache.org/guides/readme/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://polaris.apache.org/guides/readme/</guid><description><!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
diff --git a/guides/jdbc/index.html b/guides/jdbc/index.html
index d439e413d6..99643963ad 100644
--- a/guides/jdbc/index.html
+++ b/guides/jdbc/index.html
@@ -1,12 +1,16 @@
<!doctype html><html itemscope itemtype=http://schema.org/WebPage lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon.png sizes=100x100><link rel=icon type=image/png href=/favicons/android-ch [...]
If such an image is not already present, build the Polaris image with support for JDBC persistence and the Postgres JDBC driver:
-1./gradlew \ 2 :polaris-server:assemble \ 3 :polaris-server:quarkusAppPartsBuild --rerun \ 4 :polaris-admin:assemble \ 5 :polaris-admin:quarkusAppPartsBuild --rerun \ 6 -Dquarkus.container-image.build=true Start the docker compose group by running the following command from the root of the repository:"><meta property="og:url" content="https://polaris.apache.org/guides/jdbc/"><meta property="og:site_name" content="Apache Polaris"><meta property="og:title" content="Getting Started with Apa [...]
+./gradlew \ :polaris-server:assemble \ :polaris-server:quarkusAppPartsBuild --rerun \ :polaris-admin:assemble \ :polaris-admin:quarkusAppPartsBuild --rerun \ -Dquarkus.container-image.build=true Start the docker compose group by running the following command from the root of the repository:
+export QUARKUS_DATASOURCE_JDBC_URL=jdbc:postgresql://postgres:5432/POLARIS export QUARKUS_DATASOURCE_USERNAME=postgres export QUARKUS_DATASOURCE_PASSWORD=postgres export ASSETS_PATH=$(pwd)/site/content/guides/assets/ export CLIENT_ID=root export CLIENT_SECRET=s3cr3t docker compose -f site/content/guides/jdbc/docker-compose-bootstrap-db.yml -f site/content/guides/assets/postgres/docker-compose-postgres.yml -f site/content/guides/jdbc/docker-compose.yml up Using spark-sql: attach to the ru [...]
If such an image is not already present, build the Polaris image with support for JDBC persistence and the Postgres JDBC driver:
-1./gradlew \ 2 :polaris-server:assemble \ 3 :polaris-server:quarkusAppPartsBuild --rerun \ 4 :polaris-admin:assemble \ 5 :polaris-admin:quarkusAppPartsBuild --rerun \ 6 -Dquarkus.container-image.build=true Start the docker compose group by running the following command from the root of the repository:"><meta property="og:locale" content="en_us"><meta property="og:type" content="article"><meta property="article:section" content="guides"><meta property="article:tag" content="Backend"><meta [...]
+./gradlew \ :polaris-server:assemble \ :polaris-server:quarkusAppPartsBuild --rerun \ :polaris-admin:assemble \ :polaris-admin:quarkusAppPartsBuild --rerun \ -Dquarkus.container-image.build=true Start the docker compose group by running the following command from the root of the repository:
+export QUARKUS_DATASOURCE_JDBC_URL=jdbc:postgresql://postgres:5432/POLARIS export QUARKUS_DATASOURCE_USERNAME=postgres export QUARKUS_DATASOURCE_PASSWORD=postgres export ASSETS_PATH=$(pwd)/site/content/guides/assets/ export CLIENT_ID=root export CLIENT_SECRET=s3cr3t docker compose -f site/content/guides/jdbc/docker-compose-bootstrap-db.yml -f site/content/guides/assets/postgres/docker-compose-postgres.yml -f site/content/guides/jdbc/docker-compose.yml up Using spark-sql: attach to the ru [...]
If such an image is not already present, build the Polaris image with support for JDBC persistence and the Postgres JDBC driver:
-1./gradlew \ 2 :polaris-server:assemble \ 3 :polaris-server:quarkusAppPartsBuild --rerun \ 4 :polaris-admin:assemble \ 5 :polaris-admin:quarkusAppPartsBuild --rerun \ 6 -Dquarkus.container-image.build=true Start the docker compose group by running the following command from the root of the repository:"><meta itemprop=wordCount content="255"><meta itemprop=keywords content="Backend,Jdbc,Postgres"><meta name=twitter:card content="summary"><meta name=twitter:title content="Getting Started w [...]
+./gradlew \ :polaris-server:assemble \ :polaris-server:quarkusAppPartsBuild --rerun \ :polaris-admin:assemble \ :polaris-admin:quarkusAppPartsBuild --rerun \ -Dquarkus.container-image.build=true Start the docker compose group by running the following command from the root of the repository:
+export QUARKUS_DATASOURCE_JDBC_URL=jdbc:postgresql://postgres:5432/POLARIS export QUARKUS_DATASOURCE_USERNAME=postgres export QUARKUS_DATASOURCE_PASSWORD=postgres export ASSETS_PATH=$(pwd)/site/content/guides/assets/ export CLIENT_ID=root export CLIENT_SECRET=s3cr3t docker compose -f site/content/guides/jdbc/docker-compose-bootstrap-db.yml -f site/content/guides/assets/postgres/docker-compose-postgres.yml -f site/content/guides/jdbc/docker-compose.yml up Using spark-sql: attach to the ru [...]
If such an image is not already present, build the Polaris image with support for JDBC persistence and the Postgres JDBC driver:
-1./gradlew \ 2 :polaris-server:assemble \ 3 :polaris-server:quarkusAppPartsBuild --rerun \ 4 :polaris-admin:assemble \ 5 :polaris-admin:quarkusAppPartsBuild --rerun \ 6 -Dquarkus.container-image.build=true Start the docker compose group by running the following command from the root of the repository:"><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossori [...]
+./gradlew \ :polaris-server:assemble \ :polaris-server:quarkusAppPartsBuild --rerun \ :polaris-admin:assemble \ :polaris-admin:quarkusAppPartsBuild --rerun \ -Dquarkus.container-image.build=true Start the docker compose group by running the following command from the root of the repository:
+export QUARKUS_DATASOURCE_JDBC_URL=jdbc:postgresql://postgres:5432/POLARIS export QUARKUS_DATASOURCE_USERNAME=postgres export QUARKUS_DATASOURCE_PASSWORD=postgres export ASSETS_PATH=$(pwd)/site/content/guides/assets/ export CLIENT_ID=root export CLIENT_SECRET=s3cr3t docker compose -f site/content/guides/jdbc/docker-compose-bootstrap-db.yml -f site/content/guides/assets/postgres/docker-compose-postgres.yml -f site/content/guides/jdbc/docker-compose.yml up Using spark-sql: attach to the ru [...]
<label for=m-guidesquickstart-check><a href=/guides/quickstart/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-guidesquickstart><span>Quickstart</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-guideskeycloak-li><input type=checkbox id=m-guideskeycloak-check>
<label for=m-guideskeycloak-check><a href=/guides/keycloak/ title="Getting Started with Apache Polaris, External Authentication and Keycloak" class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-guideskeycloak><span>Authentication: Keycloak</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child active-path" id=m-guidesjdbc-li><input type=checkbox id=m-guidesjdbc-check checked>
<label for=m-guidesjdbc-check><a href=/guides/jdbc/ title="Getting Started with Apache Polaris, Relational JDBC, Postgres and Spark SQL" class="align-left ps-0 active td-sidebar-link td-sidebar-link__page" id=m-guidesjdbc><span class=td-sidebar-nav-active-item>Backend: JDBC, Postgres</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-guidestelemetry-li><input type=checkbox id=m-guidestelemetry-check>
@@ -19,32 +23,32 @@ If such an image is not already present, build the Polaris image with support fo
<label for=m-guidesspark-check><a href=/guides/spark/ title="Getting Started with Apache Polaris and Apache Spark" class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-guidesspark><span>Client: Apache Spark</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-guidesflink-li><input type=checkbox id=m-guidesflink-check>
<label for=m-guidesflink-check><a href=/guides/flink/ title="Getting Started with Apache Polaris and Apache Flink" class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-guidesflink><span>Client: Apache Flink</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-guidesreadme-li><input type=checkbox id=m-guidesreadme-check>
<label for=m-guidesreadme-check><a href=/guides/readme/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-guidesreadme><span></span></a></label></li></ul></li></ul></nav></div></aside><main class="col-12 col-md-9 col-xl-8 ps-md-5" role=main><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/guides/>Guides</a></li><li class="breadcrumb-item active" aria-current=page>Backend: JDBC, Postgres</li></ol></nav><div class=td-c [...]
-the Postgres JDBC driver:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span>./gradlew <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> :polaris-server:assemble <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> :polaris-server:quarkusAppPartsBuild --rerun <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> :polaris-admin:assemble <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span> :polaris-admin:quarkusAppPartsBuild --rerun <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">6</span><span> -Dquarkus.container-image.build<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#204a87>true</span>
-</span></span></code></pre></div></li><li><p>Start the docker compose group by running the following command from the root of the repository:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span><span s [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#204a87>export</span> <span style=color:#000>QUARKUS_DATASOURCE_USERNAME</span><span style=color:#ce5c00;font-weight:700>=</span>postgres
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span><span style=color:#204a87>export</span> <span style=color:#000>QUARKUS_DATASOURCE_PASSWORD</span><span style=color:#ce5c00;font-weight:700>=</span>postgres
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span><span style=color:#204a87>export</span> <span style=color:#000>ASSETS_PATH</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#204a87;font-weight:700>$(</span><span style=color:#204a87>pwd</span><span style=color:#204a87;font-weight:700>)</span>/site/content/guides/assets/
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span><span style=color:#204a87>export</span> <span style=color:#000>CLIENT_ID</span><span style=color:#ce5c00;font-weight:700>=</span>root
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">6</span><span><span style=color:#204a87>export</span> <span style=color:#000>CLIENT_SECRET</span><span style=color:#ce5c00;font-weight:700>=</span>s3cr3t
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">7</span><span>docker compose -f site/content/guides/jdbc/docker-compose-bootstrap-db.yml -f site/content/guides/assets/postgres/docker-compose-postgres.yml -f site/content/guides/jdbc/docker-compose.yml up
-</span></span></code></pre></div></li></ol><ol start=3><li><p>Using spark-sql: attach to the running spark-sql container:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span>docker attach <span style=c [...]
-</span></span></code></pre></div><p>You may not see Spark’s prompt immediately, type ENTER to see it. A few commands that you can try:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-sql data-lang=sql><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span><span style= [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#000>USE</span><span style=color:#f8f8f8> </span><span style=color:#000>polaris</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>ns1</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span><span style=color:#204a87;font-weight:700>CREATE</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>TABLE</span><span style=color:#f8f8f8> </span><span style=color:#000>table1</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>(</span><span style=color:# [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span><span style=color:#204a87;font-weight:700>INSERT</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>INTO</span><span style=color:#f8f8f8> </span><span style=color:#000>table1</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>VALUES</span><span style= [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span><span style=color:#204a87;font-weight:700>SELECT</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>*</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>FROM</span><span style=color:#f8f8f8> </span><span style=color:#000>table1</span><span style=color [...]
-</span></span></span></code></pre></div></li><li><p>To access Polaris from the host machine, first request an access token:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span><span style=color:#204a87 [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> --user root:s3cr3t <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> -d <span style=color:#4e9a06>'grant_type=client_credentials'</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> -d <span style=color:#4e9a06>'scope=PRINCIPAL_ROLE:ALL'</span> <span style=color:#000;font-weight:700>|</span> jq -r .access_token<span style=color:#204a87;font-weight:700>)</span>
-</span></span></code></pre></div></li><li><p>Then, use the access token in the Authorization header when accessing Polaris:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span>curl -v http://localhost: [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span>curl -v http://localhost:8181/api/management/v1/catalogs/quickstart_catalog -H <span style=color:#4e9a06>"Authorization: Bearer </span><span style=color:#000>$POLARIS_TOKEN</span><span style=color:#4e9a06>"</span>
-</span></span></code></pre></div></li><li><p>Using Trino CLI: To access the Trino CLI, run this command:</p></li></ol><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span>docker <span style=color:#204a87>e [...]
+the Postgres JDBC driver:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span>./gradlew <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> :polaris-server:assemble <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> :polaris-server:quarkusAppPartsBuild --rerun <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> :polaris-admin:assemble <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> :polaris-admin:quarkusAppPartsBuild --rerun <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -Dquarkus.container-image.build<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#204a87>true</span>
+</span></span></code></pre></div></li><li><p>Start the docker compose group by running the following command from the root of the repository:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span><span style=color:#204a87>export</span> <span style=color:#000>QUARKUS_DATASOURCE_JDBC_URL</span><span style=color:#ce5c00;font-weight [...]
+</span></span><span style=display:flex><span><span style=color:#204a87>export</span> <span style=color:#000>QUARKUS_DATASOURCE_USERNAME</span><span style=color:#ce5c00;font-weight:700>=</span>postgres
+</span></span><span style=display:flex><span><span style=color:#204a87>export</span> <span style=color:#000>QUARKUS_DATASOURCE_PASSWORD</span><span style=color:#ce5c00;font-weight:700>=</span>postgres
+</span></span><span style=display:flex><span><span style=color:#204a87>export</span> <span style=color:#000>ASSETS_PATH</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#204a87;font-weight:700>$(</span><span style=color:#204a87>pwd</span><span style=color:#204a87;font-weight:700>)</span>/site/content/guides/assets/
+</span></span><span style=display:flex><span><span style=color:#204a87>export</span> <span style=color:#000>CLIENT_ID</span><span style=color:#ce5c00;font-weight:700>=</span>root
+</span></span><span style=display:flex><span><span style=color:#204a87>export</span> <span style=color:#000>CLIENT_SECRET</span><span style=color:#ce5c00;font-weight:700>=</span>s3cr3t
+</span></span><span style=display:flex><span>docker compose -f site/content/guides/jdbc/docker-compose-bootstrap-db.yml -f site/content/guides/assets/postgres/docker-compose-postgres.yml -f site/content/guides/jdbc/docker-compose.yml up
+</span></span></code></pre></div></li></ol><ol start=3><li><p>Using spark-sql: attach to the running spark-sql container:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span>docker attach <span style=color:#204a87;font-weight:700>$(</span>docker ps -q --filter <span style=color:#000>name</span><span style=color:#ce5c00;font-we [...]
+</span></span></code></pre></div><p>You may not see Spark’s prompt immediately, type ENTER to see it. A few commands that you can try:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-sql data-lang=sql><span style=display:flex><span><span style=color:#204a87;font-weight:700>CREATE</span><span style=color:#f8f8f8> </span><span style=color:#000>NAMESPACE</span><span style [...]
+</span></span></span><span style=display:flex><span><span style=color:#000>USE</span><span style=color:#f8f8f8> </span><span style=color:#000>polaris</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>ns1</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>CREATE</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>TABLE</span><span style=color:#f8f8f8> </span><span style=color:#000>table1</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>(</span><span style=color:#000>id</span><span style=color:#f8f8f8> </span><span style=color:#204a87>int</span><span style=color:#000;font-weight:700>,</sp [...]
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>INSERT</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>INTO</span><span style=color:#f8f8f8> </span><span style=color:#000>table1</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>VALUES</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>(</span><span style=color:#0000cf;font-weight:700>1</span><span st [...]
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>SELECT</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>*</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>FROM</span><span style=color:#f8f8f8> </span><span style=color:#000>table1</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8>
+</span></span></span></code></pre></div></li><li><p>To access Polaris from the host machine, first request an access token:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span><span style=color:#204a87>export</span> <span style=color:#000>POLARIS_TOKEN</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:# [...]
+</span></span></span><span style=display:flex><span> --user root:s3cr3t <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -d <span style=color:#4e9a06>'grant_type=client_credentials'</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -d <span style=color:#4e9a06>'scope=PRINCIPAL_ROLE:ALL'</span> <span style=color:#000;font-weight:700>|</span> jq -r .access_token<span style=color:#204a87;font-weight:700>)</span>
+</span></span></code></pre></div></li><li><p>Then, use the access token in the Authorization header when accessing Polaris:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span>curl -v http://localhost:8181/api/management/v1/principal-roles -H <span style=color:#4e9a06>"Authorization: Bearer </span><span style=color:#000>$P [...]
+</span></span><span style=display:flex><span>curl -v http://localhost:8181/api/management/v1/catalogs/quickstart_catalog -H <span style=color:#4e9a06>"Authorization: Bearer </span><span style=color:#000>$POLARIS_TOKEN</span><span style=color:#4e9a06>"</span>
+</span></span></code></pre></div></li><li><p>Using Trino CLI: To access the Trino CLI, run this command:</p></li></ol><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span>docker <span style=color:#204a87>exec</span> -it jdbc-trino-1 trino
</span></span></code></pre></div><p>Note, <code>jdbc-trino-1</code> is the name of the Docker container.</p><p>Example Trino queries:</p><pre tabindex=0><code>SHOW CATALOGS;
SHOW SCHEMAS FROM iceberg;
SHOW TABLES FROM iceberg.information_schema;
diff --git a/guides/keycloak/index.html b/guides/keycloak/index.html
index 57086f801f..260fc591bf 100644
--- a/guides/keycloak/index.html
+++ b/guides/keycloak/index.html
@@ -4,9 +4,9 @@ principal_id: the principal ID of the user. It is always set to zero (0) in this
This Keycloak realm contains 1 client definition: client1:s3cr3t. It is configured to return tokens with the following fixed claims:
principal_id: the principal ID of the user. It is always set to zero (0) in this example. principal_name: the principal name of the user. It is always set to “root” in this example. principal_roles: the principal roles of the user. It is always set to ["server_admin", "catalog_admin"] in this example. This is obviously not a realistic configuration. In a real-world scenario, you would configure Keycloak to return the actual principal ID, name and roles of the user. Note that principals a [...]
This Keycloak realm contains 1 client definition: client1:s3cr3t. It is configured to return tokens with the following fixed claims:
-principal_id: the principal ID of the user. It is always set to zero (0) in this example. principal_name: the principal name of the user. It is always set to “root” in this example. principal_roles: the principal roles of the user. It is always set to ["server_admin", "catalog_admin"] in this example. This is obviously not a realistic configuration. In a real-world scenario, you would configure Keycloak to return the actual principal ID, name and roles of the user. Note that principals a [...]
+principal_id: the principal ID of the user. It is always set to zero (0) in this example. principal_name: the principal name of the user. It is always set to “root” in this example. principal_roles: the principal roles of the user. It is always set to ["server_admin", "catalog_admin"] in this example. This is obviously not a realistic configuration. In a real-world scenario, you would configure Keycloak to return the actual principal ID, name and roles of the user. Note that principals a [...]
This Keycloak realm contains 1 client definition: client1:s3cr3t. It is configured to return tokens with the following fixed claims:
-principal_id: the principal ID of the user. It is always set to zero (0) in this example. principal_name: the principal name of the user. It is always set to “root” in this example. principal_roles: the principal roles of the user. It is always set to ["server_admin", "catalog_admin"] in this example. This is obviously not a realistic configuration. In a real-world scenario, you would configure Keycloak to return the actual principal ID, name and roles of the user. Note that principals a [...]
+principal_id: the principal ID of the user. It is always set to zero (0) in this example. principal_name: the principal name of the user. It is always set to “root” in this example. principal_roles: the principal roles of the user. It is always set to ["server_admin", "catalog_admin"] in this example. This is obviously not a realistic configuration. In a real-world scenario, you would configure Keycloak to return the actual principal ID, name and roles of the user. Note that principals a [...]
<label for=m-guidesquickstart-check><a href=/guides/quickstart/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-guidesquickstart><span>Quickstart</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child active-path" id=m-guideskeycloak-li><input type=checkbox id=m-guideskeycloak-check checked>
<label for=m-guideskeycloak-check><a href=/guides/keycloak/ title="Getting Started with Apache Polaris, External Authentication and Keycloak" class="align-left ps-0 active td-sidebar-link td-sidebar-link__page" id=m-guideskeycloak><span class=td-sidebar-nav-active-item>Authentication: Keycloak</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-guidesjdbc-li><input type=checkbox id=m-guidesjdbc-check>
<label for=m-guidesjdbc-check><a href=/guides/jdbc/ title="Getting Started with Apache Polaris, Relational JDBC, Postgres and Spark SQL" class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-guidesjdbc><span>Backend: JDBC, Postgres</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-guidestelemetry-li><input type=checkbox id=m-guidestelemetry-check>
@@ -27,61 +27,61 @@ Polaris beforehand, and the principal ID, name and roles must match the ones ret
token issues by Polaris itself only.</li><li><code>realm-external</code>: This realm is configured to use an external identity provider (IDP) for authentication only. It
accepts tokens issued by Keycloak only.</li><li><code>realm-mixed</code>: This realm is configured to use both the internal and external authentication. It accepts tokens
issued by both Polaris and Keycloak.</li></ul><p>For more information about how to configure Polaris with external authentication, see the
-<a href=/releases/latest/>Polaris documentation</a>.</p><h2 id=starting-the-example id=starting-the-example>Starting the Example<a class=heading-anchor href=#starting-the-example aria-label=Anchor>🔗</a></h2><ol><li><p>Build the Polaris server image if it’s not already present locally:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=dis [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> :polaris-server:assemble <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> :polaris-server:quarkusAppPartsBuild --rerun <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> -Dquarkus.container-image.build<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#204a87>true</span>
-</span></span></code></pre></div></li><li><p>Start the docker compose group by running the following command from the root of the repository:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span>docker [...]
-</span></span></code></pre></div></li></ol><h2 id=requesting-a-token id=requesting-a-token>Requesting a Token<a class=heading-anchor href=#requesting-a-token aria-label=Anchor>🔗</a></h2><p>Note: the commands below require <code>jq</code> to be installed on your machine.</p><h3 id=from-polaris id=from-polaris>From Polaris<a class=heading-anchor href=#from-polaris aria-label=Anchor>🔗</a></h3><p>You can request a token from Polaris for realms <code>realm-internal</code> and <code>realm-mixe [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> --user root:s3cr3t <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> -H <span style=color:#4e9a06>'Polaris-Realm: realm-internal'</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> -d <span style=color:#4e9a06>'grant_type=client_credentials'</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span> -d <span style=color:#4e9a06>'scope=PRINCIPAL_ROLE:ALL'</span> <span style=color:#000;font-weight:700>|</span> jq -r .access_token<span style=color:#204a87;font-weight:700>)</span>
-</span></span></code></pre></div><p>This token is valid only for the <code>realm-internal</code> realm.</p></li><li><p>Open a terminal and run the following command to request an access token for the <code>realm-mixed</code> realm:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span style="white-space:pre;-webkit-user-select:n [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> --user root:s3cr3t <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> -H <span style=color:#4e9a06>'Polaris-Realm: realm-mixed'</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> -d <span style=color:#4e9a06>'grant_type=client_credentials'</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span> -d <span style=color:#4e9a06>'scope=PRINCIPAL_ROLE:ALL'</span> <span style=color:#000;font-weight:700>|</span> jq -r .access_token<span style=color:#204a87;font-weight:700>)</span>
+<a href=/releases/latest/>Polaris documentation</a>.</p><h2 id=starting-the-example id=starting-the-example>Starting the Example<a class=heading-anchor href=#starting-the-example aria-label=Anchor>🔗</a></h2><ol><li><p>Build the Polaris server image if it’s not already present locally:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=dis [...]
+</span></span></span><span style=display:flex><span> :polaris-server:assemble <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> :polaris-server:quarkusAppPartsBuild --rerun <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -Dquarkus.container-image.build<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#204a87>true</span>
+</span></span></code></pre></div></li><li><p>Start the docker compose group by running the following command from the root of the repository:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span>docker compose -f site/content/guides/keycloak/docker-compose.yml up
+</span></span></code></pre></div></li></ol><h2 id=requesting-a-token id=requesting-a-token>Requesting a Token<a class=heading-anchor href=#requesting-a-token aria-label=Anchor>🔗</a></h2><p>Note: the commands below require <code>jq</code> to be installed on your machine.</p><h3 id=from-polaris id=from-polaris>From Polaris<a class=heading-anchor href=#from-polaris aria-label=Anchor>🔗</a></h3><p>You can request a token from Polaris for realms <code>realm-internal</code> and <code>realm-mixe [...]
+</span></span></span><span style=display:flex><span> --user root:s3cr3t <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -H <span style=color:#4e9a06>'Polaris-Realm: realm-internal'</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -d <span style=color:#4e9a06>'grant_type=client_credentials'</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -d <span style=color:#4e9a06>'scope=PRINCIPAL_ROLE:ALL'</span> <span style=color:#000;font-weight:700>|</span> jq -r .access_token<span style=color:#204a87;font-weight:700>)</span>
+</span></span></code></pre></div><p>This token is valid only for the <code>realm-internal</code> realm.</p></li><li><p>Open a terminal and run the following command to request an access token for the <code>realm-mixed</code> realm:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span><span style=color:#000>polaris_token_realm_m [...]
+</span></span></span><span style=display:flex><span> --user root:s3cr3t <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -H <span style=color:#4e9a06>'Polaris-Realm: realm-mixed'</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -d <span style=color:#4e9a06>'grant_type=client_credentials'</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -d <span style=color:#4e9a06>'scope=PRINCIPAL_ROLE:ALL'</span> <span style=color:#000;font-weight:700>|</span> jq -r .access_token<span style=color:#204a87;font-weight:700>)</span>
</span></span></code></pre></div><p>This token is valid only for the <code>realm-mixed</code> realm.</p></li></ol><p>Polaris tokens are valid for 1 hour.</p><p>Note: if you request a Polaris token for the <code>realm-external</code> realm, it will not work because Polaris won’t issue tokens
-for this realm:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span>curl -v http://localhost:8181/api/catalog/v1/oauth/tokens <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> --user root:s3cr3t <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> -H <span style=color:#4e9a06>'Polaris-Realm: realm-external'</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> -d <span style=color:#4e9a06>'grant_type=client_credentials'</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span> -d <span style=color:#4e9a06>'scope=PRINCIPAL_ROLE:ALL'</span> <span style=color:#ce5c00;font-weight:700>||</span> <span style=color:#204a87>true</span>
-</span></span></code></pre></div><p>This will return a <code>501 Not Implemented</code> error because for this realm, the internal token endpoint has been deactivated.</p><h3 id=from-keycloak id=from-keycloak>From Keycloak<a class=heading-anchor href=#from-keycloak aria-label=Anchor>🔗</a></h3><p>You can request a token from Keycloak for the <code>realm-external</code> and <code>realm-mixed</code> realms:</p><ol><li><p>Open a terminal and run the following command to request an access tok [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> --resolve keycloak:8080:127.0.0.1 <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> --user client1:s3cr3t <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> -d <span style=color:#4e9a06>'grant_type=client_credentials'</span> <span style=color:#000;font-weight:700>|</span> jq -r .access_token<span style=color:#204a87;font-weight:700>)</span>
+for this realm:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span>curl -v http://localhost:8181/api/catalog/v1/oauth/tokens <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --user root:s3cr3t <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -H <span style=color:#4e9a06>'Polaris-Realm: realm-external'</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -d <span style=color:#4e9a06>'grant_type=client_credentials'</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -d <span style=color:#4e9a06>'scope=PRINCIPAL_ROLE:ALL'</span> <span style=color:#ce5c00;font-weight:700>||</span> <span style=color:#204a87>true</span>
+</span></span></code></pre></div><p>This will return a <code>501 Not Implemented</code> error because for this realm, the internal token endpoint has been deactivated.</p><h3 id=from-keycloak id=from-keycloak>From Keycloak<a class=heading-anchor href=#from-keycloak aria-label=Anchor>🔗</a></h3><p>You can request a token from Keycloak for the <code>realm-external</code> and <code>realm-mixed</code> realms:</p><ol><li><p>Open a terminal and run the following command to request an access tok [...]
+</span></span></span><span style=display:flex><span> --resolve keycloak:8080:127.0.0.1 <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --user client1:s3cr3t <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -d <span style=color:#4e9a06>'grant_type=client_credentials'</span> <span style=color:#000;font-weight:700>|</span> jq -r .access_token<span style=color:#204a87;font-weight:700>)</span>
</span></span></code></pre></div></li></ol><p>Note the <code>--resolve</code> option: it is used to send the request with the <code>Host</code> header set to <code>keycloak</code>. This is necessary
because Keycloak issues tokens with the <code>iss</code> claim matching the request’s <code>Host</code> header; without this, the token would
not be valid when used against Polaris because the <code>iss</code> claim would be <code>127.0.0.1</code>, but Polaris expects it to be
<code>keycloak</code>, since that’s Keycloak’s hostname within the Docker network.</p><p>Tokens issued by Keycloak can be used to access Polaris with the <code>realm-external</code> or <code>realm-mixed</code> realms. Access tokens
are valid for 1 hour.</p><p>You can also access the Keycloak admin console. Open a browser and go to <a href=http://localhost:8080>http://localhost:8080</a>,
then log in with the username <code>admin</code> and password <code>admin</code> (you can change this in the docker-compose file).</p><h2 id=accessing-polaris-with-the-tokens id=accessing-polaris-with-the-tokens>Accessing Polaris with the Tokens<a class=heading-anchor href=#accessing-polaris-with-the-tokens aria-label=Anchor>🔗</a></h2><p>You can access Polaris using the tokens you obtained above. The following examples show how to use the tokens with
-<code>curl</code>:</p><h3 id=using-the-polaris-token id=using-the-polaris-token>Using the Polaris Token<a class=heading-anchor href=#using-the-polaris-token aria-label=Anchor>🔗</a></h3><ol><li><p>Open a terminal and run the following command to list the principal roles in the <code>realm-internal</code> realm:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=s [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> -H <span style=color:#4e9a06>"Authorization: Bearer </span><span style=color:#000>$polaris_token_realm_internal</span><span style=color:#4e9a06>"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> -H <span style=color:#4e9a06>'Polaris-Realm: realm-internal'</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> -H <span style=color:#4e9a06>'Accept: application/json'</span>
-</span></span></code></pre></div></li><li><p>Open a terminal and run the following command to list the principal roles in the <code>realm-mixed</code> realm:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</sp [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> -H <span style=color:#4e9a06>"Authorization: Bearer </span><span style=color:#000>$polaris_token_realm_mixed</span><span style=color:#4e9a06>"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> -H <span style=color:#4e9a06>'Polaris-Realm: realm-mixed'</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> -H <span style=color:#4e9a06>'Accept: application/json'</span>
+<code>curl</code>:</p><h3 id=using-the-polaris-token id=using-the-polaris-token>Using the Polaris Token<a class=heading-anchor href=#using-the-polaris-token aria-label=Anchor>🔗</a></h3><ol><li><p>Open a terminal and run the following command to list the principal roles in the <code>realm-internal</code> realm:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=s [...]
+</span></span></span><span style=display:flex><span> -H <span style=color:#4e9a06>"Authorization: Bearer </span><span style=color:#000>$polaris_token_realm_internal</span><span style=color:#4e9a06>"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -H <span style=color:#4e9a06>'Polaris-Realm: realm-internal'</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -H <span style=color:#4e9a06>'Accept: application/json'</span>
+</span></span></code></pre></div></li><li><p>Open a terminal and run the following command to list the principal roles in the <code>realm-mixed</code> realm:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span>curl -v http://localhost:8181/api/management/v1/catalogs <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -H <span style=color:#4e9a06>"Authorization: Bearer </span><span style=color:#000>$polaris_token_realm_mixed</span><span style=color:#4e9a06>"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -H <span style=color:#4e9a06>'Polaris-Realm: realm-mixed'</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -H <span style=color:#4e9a06>'Accept: application/json'</span>
</span></span></code></pre></div></li></ol><p>Note: you cannot mix tokens from different realms. For example, you cannot use a token from the <code>realm-internal</code> realm to access
-the <code>realm-mixed</code> realm:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span>curl -v http://localhost:8181/api/management/v1/catalogs <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> -H <span style=color:#4e9a06>"Authorization: Bearer </span><span style=color:#000>$polaris_token_realm_internal</span><span style=color:#4e9a06>"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> -H <span style=color:#4e9a06>'Polaris-Realm: realm-mixed'</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> -H <span style=color:#4e9a06>'Accept: application/json'</span> <span style=color:#ce5c00;font-weight:700>||</span> <span style=color:#204a87>true</span>
+the <code>realm-mixed</code> realm:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span>curl -v http://localhost:8181/api/management/v1/catalogs <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -H <span style=color:#4e9a06>"Authorization: Bearer </span><span style=color:#000>$polaris_token_realm_internal</span><span style=color:#4e9a06>"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -H <span style=color:#4e9a06>'Polaris-Realm: realm-mixed'</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -H <span style=color:#4e9a06>'Accept: application/json'</span> <span style=color:#ce5c00;font-weight:700>||</span> <span style=color:#204a87>true</span>
</span></span></code></pre></div><p>This will return a <code>401 Unauthorized</code> error because the token is not valid for the <code>realm-mixed</code> realm.</p><h3 id=using-the-keycloak-token id=using-the-keycloak-token>Using the Keycloak Token<a class=heading-anchor href=#using-the-keycloak-token aria-label=Anchor>🔗</a></h3><p>The same Keycloak token can be used to access both the <code>realm-external</code> and <code>realm-mixed</code> realms, as it is valid for
-both (both realms share the same OIDC tenant configuration).</p><ol><li><p>Open a terminal and run the following command to list the principal roles in the <code>realm-external</code> realm:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;pa [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> -H <span style=color:#4e9a06>"Authorization: Bearer </span><span style=color:#000>$keycloak_token</span><span style=color:#4e9a06>"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> -H <span style=color:#4e9a06>'Polaris-Realm: realm-external'</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> -H <span style=color:#4e9a06>'Accept: application/json'</span>
-</span></span></code></pre></div></li><li><p>Open a terminal and run the following command to list the principal roles in the <code>realm-mixed</code> realm:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</sp [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> -H <span style=color:#4e9a06>"Authorization: Bearer </span><span style=color:#000>$keycloak_token</span><span style=color:#4e9a06>"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> -H <span style=color:#4e9a06>'Polaris-Realm: realm-mixed'</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> -H <span style=color:#4e9a06>'Accept: application/json'</span>
-</span></span></code></pre></div></li></ol><p>Note: you cannot use a Keycloak token to access the <code>realm-internal</code> realm:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span>curl -v http://l [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> -H <span style=color:#4e9a06>"Authorization: Bearer </span><span style=color:#000>$keycloak_token</span><span style=color:#4e9a06>"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> -H <span style=color:#4e9a06>'Polaris-Realm: realm-internal'</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> -H <span style=color:#4e9a06>'Accept: application/json'</span> <span style=color:#ce5c00;font-weight:700>||</span> <span style=color:#204a87>true</span>
+both (both realms share the same OIDC tenant configuration).</p><ol><li><p>Open a terminal and run the following command to list the principal roles in the <code>realm-external</code> realm:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span>curl -v http://localhost:8181/api/management/v1/catalogs <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -H <span style=color:#4e9a06>"Authorization: Bearer </span><span style=color:#000>$keycloak_token</span><span style=color:#4e9a06>"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -H <span style=color:#4e9a06>'Polaris-Realm: realm-external'</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -H <span style=color:#4e9a06>'Accept: application/json'</span>
+</span></span></code></pre></div></li><li><p>Open a terminal and run the following command to list the principal roles in the <code>realm-mixed</code> realm:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span>curl -v http://localhost:8181/api/management/v1/catalogs <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -H <span style=color:#4e9a06>"Authorization: Bearer </span><span style=color:#000>$keycloak_token</span><span style=color:#4e9a06>"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -H <span style=color:#4e9a06>'Polaris-Realm: realm-mixed'</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -H <span style=color:#4e9a06>'Accept: application/json'</span>
+</span></span></code></pre></div></li></ol><p>Note: you cannot use a Keycloak token to access the <code>realm-internal</code> realm:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span>curl -v http://localhost:8181/api/management/v1/catalogs <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -H <span style=color:#4e9a06>"Authorization: Bearer </span><span style=color:#000>$keycloak_token</span><span style=color:#4e9a06>"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -H <span style=color:#4e9a06>'Polaris-Realm: realm-internal'</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -H <span style=color:#4e9a06>'Accept: application/json'</span> <span style=color:#ce5c00;font-weight:700>||</span> <span style=color:#204a87>true</span>
</span></span></code></pre></div><p>This will return a <code>401 Unauthorized</code> error because the token is not valid for the <code>realm-internal</code> realm.</p></div></main></div></div><footer class="td-footer row d-print-none"><div class=container-fluid><div class="row mx-md-2"><div class="td-footer__left col-6 col-sm-4 order-sm-1"><ul class=td-footer__links-list><li class=td-footer__links-item data-bs-toggle=tooltip title=Slack aria-label=Slack><a target=_blank rel=noopener hre [...]
\ No newline at end of file
diff --git a/guides/minio/index.html b/guides/minio/index.html
index 0ce1c1d57b..27635d5de2 100644
--- a/guides/minio/index.html
+++ b/guides/minio/index.html
@@ -7,10 +7,10 @@ Spark is used as a query engine. This example assumes a local Spark installation
Starting the Example🔗 Build the Polaris server image if it’s not already present locally:"><meta property="og:locale" content="en_us"><meta property="og:type" content="article"><meta property="article:section" content="guides"><meta property="article:tag" content="Minio"><meta property="article:tag" content="Object Storage"><meta itemprop=name content="Getting Started with Apache Polaris and MinIO"><meta itemprop=description content="⚠️ Warning
Disclaimer: This guide uses MinIO OSS for local testing only. MinIO OSS is in maintenance mode, and MinIO container images may no longer receive updates or security fixes. Overview🔗 This example uses MinIO as a storage provider with Polaris.
Spark is used as a query engine. This example assumes a local Spark installation. See the Spark Notebooks Example for a more advanced Spark setup.
-Starting the Example🔗 Build the Polaris server image if it’s not already present locally:"><meta itemprop=wordCount content="256"><meta itemprop=keywords content="Minio,Object Storage"><meta name=twitter:card content="summary"><meta name=twitter:title content="Getting Started with Apache Polaris and MinIO"><meta name=twitter:description content="⚠️ Warning
+Starting the Example🔗 Build the Polaris server image if it’s not already present locally:"><meta itemprop=wordCount content="240"><meta itemprop=keywords content="Minio,Object Storage"><meta name=twitter:card content="summary"><meta name=twitter:title content="Getting Started with Apache Polaris and MinIO"><meta name=twitter:description content="⚠️ Warning
Disclaimer: This guide uses MinIO OSS for local testing only. MinIO OSS is in maintenance mode, and MinIO container images may no longer receive updates or security fixes. Overview🔗 This example uses MinIO as a storage provider with Polaris.
Spark is used as a query engine. This example assumes a local Spark installation. See the Spark Notebooks Example for a more advanced Spark setup.
-Starting the Example🔗 Build the Polaris server image if it’s not already present locally:"><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css rel=stylesheet integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><sc [...]
+Starting the Example🔗 Build the Polaris server image if it’s not already present locally:"><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css rel=stylesheet integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><sc [...]
<label for=m-guidesquickstart-check><a href=/guides/quickstart/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-guidesquickstart><span>Quickstart</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-guideskeycloak-li><input type=checkbox id=m-guideskeycloak-check>
<label for=m-guideskeycloak-check><a href=/guides/keycloak/ title="Getting Started with Apache Polaris, External Authentication and Keycloak" class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-guideskeycloak><span>Authentication: Keycloak</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-guidesjdbc-li><input type=checkbox id=m-guidesjdbc-check>
<label for=m-guidesjdbc-check><a href=/guides/jdbc/ title="Getting Started with Apache Polaris, Relational JDBC, Postgres and Spark SQL" class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-guidesjdbc><span>Backend: JDBC, Postgres</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-guidestelemetry-li><input type=checkbox id=m-guidestelemetry-check>
@@ -23,30 +23,30 @@ Starting the Example🔗 Build the Polaris server image if it’s not already pr
<label for=m-guidesspark-check><a href=/guides/spark/ title="Getting Started with Apache Polaris and Apache Spark" class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-guidesspark><span>Client: Apache Spark</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-guidesflink-li><input type=checkbox id=m-guidesflink-check>
<label for=m-guidesflink-check><a href=/guides/flink/ title="Getting Started with Apache Polaris and Apache Flink" class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-guidesflink><span>Client: Apache Flink</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-guidesreadme-li><input type=checkbox id=m-guidesreadme-check>
<label for=m-guidesreadme-check><a href=/guides/readme/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-guidesreadme><span></span></a></label></li></ul></li></ul></nav></div></aside><main class="col-12 col-md-9 col-xl-8 ps-md-5" role=main><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/guides/>Guides</a></li><li class="breadcrumb-item active" aria-current=page>Storage: MinIO</li></ol></nav><div class=td-content><h [...]
-See the <a href=../spark>Spark Notebooks Example</a> for a more advanced Spark setup.</p><h2 id=starting-the-example id=starting-the-example>Starting the Example<a class=heading-anchor href=#starting-the-example aria-label=Anchor>🔗</a></h2><ol><li><p>Build the Polaris server image if it’s not already present locally:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shel [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> :polaris-server:assemble <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> :polaris-server:quarkusAppPartsBuild --rerun <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> -Dquarkus.container-image.build<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#204a87>true</span>
-</span></span></code></pre></div></li><li><p>Start the docker compose group by running the following command from the root of the repository:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span>docker [...]
-</span></span></code></pre></div></li></ol><h2 id=connecting-from-spark id=connecting-from-spark>Connecting From Spark<a class=heading-anchor href=#connecting-from-spark aria-label=Anchor>🔗</a></h2><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4e [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span> --packages org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:1.10.1,org.apache.iceberg:iceberg-aws-bundle:1.10.1 <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span> --conf spark.sql.extensions<span style=color:#ce5c00;font-weight:700>=</span>org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span> --conf spark.sql.catalog.polaris<span style=color:#ce5c00;font-weight:700>=</span>org.apache.iceberg.spark.SparkCatalog <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span> --conf spark.sql.catalog.polaris.type<span style=color:#ce5c00;font-weight:700>=</span>rest <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span> --conf spark.sql.catalog.polaris.uri<span style=color:#ce5c00;font-weight:700>=</span>http://localhost:8181/api/catalog <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span> --conf spark.sql.catalog.polaris.token-refresh-enabled<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#204a87>false</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span> --conf spark.sql.catalog.polaris.warehouse<span style=color:#ce5c00;font-weight:700>=</span>quickstart_catalog <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span> --conf spark.sql.catalog.polaris.scope<span style=color:#ce5c00;font-weight:700>=</span>PRINCIPAL_ROLE:ALL <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">10</span><span> --conf spark.sql.catalog.polaris.header.X-Iceberg-Access-Delegation<span style=color:#ce5c00;font-weight:700>=</span>vended-credentials <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">11</span><span> --conf spark.sql.catalog.polaris.credential<span style=color:#ce5c00;font-weight:700>=</span>root:s3cr3t
-</span></span></code></pre></div><p>Note: <code>s3cr3t</code> is defined as the password for the <code>root</code> user in the <code>docker-compose.yml</code> file.</p><h2 id=running-queries id=running-queries>Running Queries<a class=heading-anchor href=#running-queries aria-label=Anchor>🔗</a></h2><p>Run inside the Spark SQL shell:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=lang [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span><span style=color:#204a87;font-weight:700>CREATE</span><span style=color:#f8f8f8> </span><span style=color:#000>NAMESPACE</span><span style=color:#f8f8f8> </span><span style=color:#000>ns</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span><span style=color:#204a87;font-weight:700>CREATE</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>TABLE</span><span style=color:#f8f8f8> </span><span style=color:#000>ns</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>t1</span><span style=color:#f8f8f8 [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">6</span><span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">7</span><span><span style=color:#204a87;font-weight:700>SELECT</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>*</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>FROM</span><span style=color:#f8f8f8> </span><span style=color:#000>ns</span><span style=color:#00 [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">8</span><span><span style=color:#8f5902;font-style:italic>-- abc
+See the <a href=../spark>Spark Notebooks Example</a> for a more advanced Spark setup.</p><h2 id=starting-the-example id=starting-the-example>Starting the Example<a class=heading-anchor href=#starting-the-example aria-label=Anchor>🔗</a></h2><ol><li><p>Build the Polaris server image if it’s not already present locally:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shel [...]
+</span></span></span><span style=display:flex><span> :polaris-server:assemble <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> :polaris-server:quarkusAppPartsBuild --rerun <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -Dquarkus.container-image.build<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#204a87>true</span>
+</span></span></code></pre></div></li><li><p>Start the docker compose group by running the following command from the root of the repository:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span>docker compose -f site/content/guides/minio/docker-compose.yml up
+</span></span></code></pre></div></li></ol><h2 id=connecting-from-spark id=connecting-from-spark>Connecting From Spark<a class=heading-anchor href=#connecting-from-spark aria-label=Anchor>🔗</a></h2><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span>bin/spark-sql <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --packages org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:1.10.1,org.apache.iceberg:iceberg-aws-bundle:1.10.1 <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --conf spark.sql.extensions<span style=color:#ce5c00;font-weight:700>=</span>org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --conf spark.sql.catalog.polaris<span style=color:#ce5c00;font-weight:700>=</span>org.apache.iceberg.spark.SparkCatalog <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --conf spark.sql.catalog.polaris.type<span style=color:#ce5c00;font-weight:700>=</span>rest <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --conf spark.sql.catalog.polaris.uri<span style=color:#ce5c00;font-weight:700>=</span>http://localhost:8181/api/catalog <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --conf spark.sql.catalog.polaris.token-refresh-enabled<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#204a87>false</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --conf spark.sql.catalog.polaris.warehouse<span style=color:#ce5c00;font-weight:700>=</span>quickstart_catalog <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --conf spark.sql.catalog.polaris.scope<span style=color:#ce5c00;font-weight:700>=</span>PRINCIPAL_ROLE:ALL <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --conf spark.sql.catalog.polaris.header.X-Iceberg-Access-Delegation<span style=color:#ce5c00;font-weight:700>=</span>vended-credentials <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --conf spark.sql.catalog.polaris.credential<span style=color:#ce5c00;font-weight:700>=</span>root:s3cr3t
+</span></span></code></pre></div><p>Note: <code>s3cr3t</code> is defined as the password for the <code>root</code> user in the <code>docker-compose.yml</code> file.</p><h2 id=running-queries id=running-queries>Running Queries<a class=heading-anchor href=#running-queries aria-label=Anchor>🔗</a></h2><p>Run inside the Spark SQL shell:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=lang [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>CREATE</span><span style=color:#f8f8f8> </span><span style=color:#000>NAMESPACE</span><span style=color:#f8f8f8> </span><span style=color:#000>ns</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>CREATE</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>TABLE</span><span style=color:#f8f8f8> </span><span style=color:#000>ns</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>t1</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>AS</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-we [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>SELECT</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>*</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>FROM</span><span style=color:#f8f8f8> </span><span style=color:#000>ns</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>t1</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic>-- abc
</span></span></span></code></pre></div><h2 id=minio-endpoints id=minio-endpoints>MinIO Endpoints<a class=heading-anchor href=#minio-endpoints aria-label=Anchor>🔗</a></h2><p>Note that the catalog configuration defined in the <code>docker-compose.yml</code> contains
different endpoints for the Polaris Server and the client (Spark). Specifically,
the client endpoint is <code>http://localhost:9000</code>, but <code>endpointInternal</code> is <code>http://minio:9000</code>.</p><p>This is necessary because clients running on <code>localhost</code> do not normally see service
diff --git a/guides/ozone/index.html b/guides/ozone/index.html
index c313cd2f09..e772f861b5 100644
--- a/guides/ozone/index.html
+++ b/guides/ozone/index.html
@@ -1,16 +1,16 @@
<!doctype html><html itemscope itemtype=http://schema.org/WebPage lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon.png sizes=100x100><link rel=icon type=image/png href=/favicons/android-ch [...]
Spark is used as a query engine. This example assumes a local Spark installation. See the Spark Notebooks Example for a more advanced Spark setup.
Starting the Example🔗 Start the docker compose group by running the following command from the root of the repository:
-1docker compose -f site/content/guides/ozone/docker-compose.yml up Note: this example pulls the apache/polaris:latest image, but assumes the image is 1.2.0-incubating or later."><meta property="og:url" content="https://polaris.apache.org/guides/ozone/"><meta property="og:site_name" content="Apache Polaris"><meta property="og:title" content="Getting Started with Apache Polaris and Apache Ozone"><meta property="og:description" content="Overview🔗 This example uses Apache Ozone as a storage [...]
+docker compose -f site/content/guides/ozone/docker-compose.yml up Note: this example pulls the apache/polaris:latest image, but assumes the image is 1.2.0-incubating or later."><meta property="og:url" content="https://polaris.apache.org/guides/ozone/"><meta property="og:site_name" content="Apache Polaris"><meta property="og:title" content="Getting Started with Apache Polaris and Apache Ozone"><meta property="og:description" content="Overview🔗 This example uses Apache Ozone as a storage p [...]
Spark is used as a query engine. This example assumes a local Spark installation. See the Spark Notebooks Example for a more advanced Spark setup.
Starting the Example🔗 Start the docker compose group by running the following command from the root of the repository:
-1docker compose -f site/content/guides/ozone/docker-compose.yml up Note: this example pulls the apache/polaris:latest image, but assumes the image is 1.2.0-incubating or later."><meta property="og:locale" content="en_us"><meta property="og:type" content="article"><meta property="article:section" content="guides"><meta property="article:tag" content="Ozone"><meta property="article:tag" content="Object Storage"><meta itemprop=name content="Getting Started with Apache Polaris and Apache Ozo [...]
+docker compose -f site/content/guides/ozone/docker-compose.yml up Note: this example pulls the apache/polaris:latest image, but assumes the image is 1.2.0-incubating or later."><meta property="og:locale" content="en_us"><meta property="og:type" content="article"><meta property="article:section" content="guides"><meta property="article:tag" content="Ozone"><meta property="article:tag" content="Object Storage"><meta itemprop=name content="Getting Started with Apache Polaris and Apache Ozon [...]
Spark is used as a query engine. This example assumes a local Spark installation. See the Spark Notebooks Example for a more advanced Spark setup.
Starting the Example🔗 Start the docker compose group by running the following command from the root of the repository:
-1docker compose -f site/content/guides/ozone/docker-compose.yml up Note: this example pulls the apache/polaris:latest image, but assumes the image is 1.2.0-incubating or later."><meta itemprop=wordCount content="346"><meta itemprop=keywords content="Ozone,Object Storage"><meta name=twitter:card content="summary"><meta name=twitter:title content="Getting Started with Apache Polaris and Apache Ozone"><meta name=twitter:description content="Overview🔗 This example uses Apache Ozone as a stor [...]
+docker compose -f site/content/guides/ozone/docker-compose.yml up Note: this example pulls the apache/polaris:latest image, but assumes the image is 1.2.0-incubating or later."><meta itemprop=wordCount content="331"><meta itemprop=keywords content="Ozone,Object Storage"><meta name=twitter:card content="summary"><meta name=twitter:title content="Getting Started with Apache Polaris and Apache Ozone"><meta name=twitter:description content="Overview🔗 This example uses Apache Ozone as a stora [...]
Spark is used as a query engine. This example assumes a local Spark installation. See the Spark Notebooks Example for a more advanced Spark setup.
Starting the Example🔗 Start the docker compose group by running the following command from the root of the repository:
-1docker compose -f site/content/guides/ozone/docker-compose.yml up Note: this example pulls the apache/polaris:latest image, but assumes the image is 1.2.0-incubating or later."><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css rel=stylesheet in [...]
+docker compose -f site/content/guides/ozone/docker-compose.yml up Note: this example pulls the apache/polaris:latest image, but assumes the image is 1.2.0-incubating or later."><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css rel=stylesheet int [...]
<label for=m-guidesquickstart-check><a href=/guides/quickstart/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-guidesquickstart><span>Quickstart</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-guideskeycloak-li><input type=checkbox id=m-guideskeycloak-check>
<label for=m-guideskeycloak-check><a href=/guides/keycloak/ title="Getting Started with Apache Polaris, External Authentication and Keycloak" class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-guideskeycloak><span>Authentication: Keycloak</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-guidesjdbc-li><input type=checkbox id=m-guidesjdbc-check>
<label for=m-guidesjdbc-check><a href=/guides/jdbc/ title="Getting Started with Apache Polaris, Relational JDBC, Postgres and Spark SQL" class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-guidesjdbc><span>Backend: JDBC, Postgres</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-guidestelemetry-li><input type=checkbox id=m-guidestelemetry-check>
@@ -23,30 +23,30 @@ Starting the Example🔗 Start the docker compose group by running the following
<label for=m-guidesspark-check><a href=/guides/spark/ title="Getting Started with Apache Polaris and Apache Spark" class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-guidesspark><span>Client: Apache Spark</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-guidesflink-li><input type=checkbox id=m-guidesflink-check>
<label for=m-guidesflink-check><a href=/guides/flink/ title="Getting Started with Apache Polaris and Apache Flink" class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-guidesflink><span>Client: Apache Flink</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-guidesreadme-li><input type=checkbox id=m-guidesreadme-check>
<label for=m-guidesreadme-check><a href=/guides/readme/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-guidesreadme><span></span></a></label></li></ul></li></ul></nav></div></aside><main class="col-12 col-md-9 col-xl-8 ps-md-5" role=main><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/guides/>Guides</a></li><li class="breadcrumb-item active" aria-current=page>Storage: Apache Ozone</li></ol></nav><div class=td-con [...]
-See the <a href=../spark>Spark Notebooks Example</a> for a more advanced Spark setup.</p><h2 id=starting-the-example id=starting-the-example>Starting the Example<a class=heading-anchor href=#starting-the-example aria-label=Anchor>🔗</a></h2><p>Start the docker compose group by running the following command from the root of the repository:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code clas [...]
-</span></span></code></pre></div><p>Note: this example pulls the <code>apache/polaris:latest</code> image, but assumes the image is <code>1.2.0-incubating</code> or later.</p><h2 id=connecting-from-spark id=connecting-from-spark>Connecting From Spark<a class=heading-anchor href=#connecting-from-spark aria-label=Anchor>🔗</a></h2><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-sh [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span> --packages org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:1.10.1,org.apache.iceberg:iceberg-aws-bundle:1.10.1 <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span> --conf spark.sql.extensions<span style=color:#ce5c00;font-weight:700>=</span>org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span> --conf spark.sql.catalog.polaris<span style=color:#ce5c00;font-weight:700>=</span>org.apache.iceberg.spark.SparkCatalog <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span> --conf spark.sql.catalog.polaris.type<span style=color:#ce5c00;font-weight:700>=</span>rest <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span> --conf spark.sql.catalog.polaris.uri<span style=color:#ce5c00;font-weight:700>=</span>http://localhost:8181/api/catalog <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span> --conf spark.sql.catalog.polaris.token-refresh-enabled<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#204a87>false</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span> --conf spark.sql.catalog.polaris.warehouse<span style=color:#ce5c00;font-weight:700>=</span>quickstart_catalog <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span> --conf spark.sql.catalog.polaris.scope<span style=color:#ce5c00;font-weight:700>=</span>PRINCIPAL_ROLE:ALL <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">10</span><span> --conf spark.sql.catalog.polaris.credential<span style=color:#ce5c00;font-weight:700>=</span>root:s3cr3t <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">11</span><span> --conf spark.sql.catalog.polaris.client.region<span style=color:#ce5c00;font-weight:700>=</span>us-west-2 <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">12</span><span> --conf spark.sql.catalog.polaris.s3.access-key-id<span style=color:#ce5c00;font-weight:700>=</span>polaris_root <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">13</span><span> --conf spark.sql.catalog.polaris.s3.secret-access-key<span style=color:#ce5c00;font-weight:700>=</span>polaris_pass
+See the <a href=../spark>Spark Notebooks Example</a> for a more advanced Spark setup.</p><h2 id=starting-the-example id=starting-the-example>Starting the Example<a class=heading-anchor href=#starting-the-example aria-label=Anchor>🔗</a></h2><p>Start the docker compose group by running the following command from the root of the repository:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code clas [...]
+</span></span></code></pre></div><p>Note: this example pulls the <code>apache/polaris:latest</code> image, but assumes the image is <code>1.2.0-incubating</code> or later.</p><h2 id=connecting-from-spark id=connecting-from-spark>Connecting From Spark<a class=heading-anchor href=#connecting-from-spark aria-label=Anchor>🔗</a></h2><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-sh [...]
+</span></span></span><span style=display:flex><span> --packages org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:1.10.1,org.apache.iceberg:iceberg-aws-bundle:1.10.1 <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --conf spark.sql.extensions<span style=color:#ce5c00;font-weight:700>=</span>org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --conf spark.sql.catalog.polaris<span style=color:#ce5c00;font-weight:700>=</span>org.apache.iceberg.spark.SparkCatalog <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --conf spark.sql.catalog.polaris.type<span style=color:#ce5c00;font-weight:700>=</span>rest <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --conf spark.sql.catalog.polaris.uri<span style=color:#ce5c00;font-weight:700>=</span>http://localhost:8181/api/catalog <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --conf spark.sql.catalog.polaris.token-refresh-enabled<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#204a87>false</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --conf spark.sql.catalog.polaris.warehouse<span style=color:#ce5c00;font-weight:700>=</span>quickstart_catalog <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --conf spark.sql.catalog.polaris.scope<span style=color:#ce5c00;font-weight:700>=</span>PRINCIPAL_ROLE:ALL <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --conf spark.sql.catalog.polaris.credential<span style=color:#ce5c00;font-weight:700>=</span>root:s3cr3t <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --conf spark.sql.catalog.polaris.client.region<span style=color:#ce5c00;font-weight:700>=</span>us-west-2 <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --conf spark.sql.catalog.polaris.s3.access-key-id<span style=color:#ce5c00;font-weight:700>=</span>polaris_root <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --conf spark.sql.catalog.polaris.s3.secret-access-key<span style=color:#ce5c00;font-weight:700>=</span>polaris_pass
</span></span></code></pre></div><p>Note: <code>s3cr3t</code> is defined as the password for the <code>root</code> user in the <code>docker-compose.yml</code> file.</p><p>Note: The <code>client.region</code>, <code>s3.access-key-id</code>, and <code>s3.secret-access-key</code> configuration are required
for the AWS S3 client to work, but they are not used in this example since Ozone does not require them
-when securing S3 is not enabled.</p><h2 id=running-queries id=running-queries>Running Queries<a class=heading-anchor href=#running-queries aria-label=Anchor>🔗</a></h2><p>Run inside the Spark SQL shell:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-sql data-lang=sql><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right: [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span><span style=color:#204a87;font-weight:700>CREATE</span><span style=color:#f8f8f8> </span><span style=color:#000>NAMESPACE</span><span style=color:#f8f8f8> </span><span style=color:#000>ns</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span><span style=color:#204a87;font-weight:700>CREATE</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>TABLE</span><span style=color:#f8f8f8> </span><span style=color:#000>ns</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>t1</span><span style=color:#f8f8f8 [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">6</span><span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">7</span><span><span style=color:#204a87;font-weight:700>SELECT</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>*</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>FROM</span><span style=color:#f8f8f8> </span><span style=color:#000>ns</span><span style=color:#00 [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">8</span><span><span style=color:#8f5902;font-style:italic>-- abc
+when securing S3 is not enabled.</p><h2 id=running-queries id=running-queries>Running Queries<a class=heading-anchor href=#running-queries aria-label=Anchor>🔗</a></h2><p>Run inside the Spark SQL shell:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-sql data-lang=sql><span style=display:flex><span><span style=color:#000>USE</span><span style=color:#f8f8f8> </span><span style [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>CREATE</span><span style=color:#f8f8f8> </span><span style=color:#000>NAMESPACE</span><span style=color:#f8f8f8> </span><span style=color:#000>ns</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>CREATE</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>TABLE</span><span style=color:#f8f8f8> </span><span style=color:#000>ns</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>t1</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>AS</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-we [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>SELECT</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>*</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>FROM</span><span style=color:#f8f8f8> </span><span style=color:#000>ns</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>t1</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic>-- abc
</span></span></span></code></pre></div><h2 id=lack-of-credential-vending id=lack-of-credential-vending>Lack of Credential Vending<a class=heading-anchor href=#lack-of-credential-vending aria-label=Anchor>🔗</a></h2><p>Notice that the Spark configuration does not contain a <code>X-Iceberg-Access-Delegation</code> header.
This is because Ozone does not support the STS API and consequently cannot produce session
credentials to be vended to Polaris clients.</p><p>The lack of STS API is represented in the Catalog storage configuration by the
diff --git a/guides/quickstart/index.html b/guides/quickstart/index.html
index 21f765f9b1..f6e604406e 100644
--- a/guides/quickstart/index.html
+++ b/guides/quickstart/index.html
@@ -1,16 +1,16 @@
<!doctype html><html itemscope itemtype=http://schema.org/WebPage lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon.png sizes=100x100><link rel=icon type=image/png href=/favicons/android-ch [...]
This setup is not intended for production use.
Prerequisites🔗 Docker and Docker Compose v2 installed and running. Running the Quickstart🔗 Run the following command:
-1curl -s https://raw.githubusercontent.com/apache/polaris/refs/heads/main/site/content/guides/quickstart/docker-compose.yml | docker compose -p polaris-quickstart -f - up -d This command will start Polaris + RustFS and automatically create:"><meta property="og:url" content="https://polaris.apache.org/guides/quickstart/"><meta property="og:site_name" content="Apache Polaris"><meta property="og:title" content="Quickstart"><meta property="og:description" content="Welcome to Apache Polaris! [...]
+curl -s https://raw.githubusercontent.com/apache/polaris/refs/heads/main/site/content/guides/quickstart/docker-compose.yml | docker compose -p polaris-quickstart -f - up -d This command will start Polaris + RustFS and automatically create:"><meta property="og:url" content="https://polaris.apache.org/guides/quickstart/"><meta property="og:site_name" content="Apache Polaris"><meta property="og:title" content="Quickstart"><meta property="og:description" content="Welcome to Apache Polaris! T [...]
This setup is not intended for production use.
Prerequisites🔗 Docker and Docker Compose v2 installed and running. Running the Quickstart🔗 Run the following command:
-1curl -s https://raw.githubusercontent.com/apache/polaris/refs/heads/main/site/content/guides/quickstart/docker-compose.yml | docker compose -p polaris-quickstart -f - up -d This command will start Polaris + RustFS and automatically create:"><meta property="og:locale" content="en_us"><meta property="og:type" content="article"><meta property="article:section" content="guides"><meta itemprop=name content="Quickstart"><meta itemprop=description content="Welcome to Apache Polaris! This guide [...]
+curl -s https://raw.githubusercontent.com/apache/polaris/refs/heads/main/site/content/guides/quickstart/docker-compose.yml | docker compose -p polaris-quickstart -f - up -d This command will start Polaris + RustFS and automatically create:"><meta property="og:locale" content="en_us"><meta property="og:type" content="article"><meta property="article:section" content="guides"><meta itemprop=name content="Quickstart"><meta itemprop=description content="Welcome to Apache Polaris! This guide [...]
This setup is not intended for production use.
Prerequisites🔗 Docker and Docker Compose v2 installed and running. Running the Quickstart🔗 Run the following command:
-1curl -s https://raw.githubusercontent.com/apache/polaris/refs/heads/main/site/content/guides/quickstart/docker-compose.yml | docker compose -p polaris-quickstart -f - up -d This command will start Polaris + RustFS and automatically create:"><meta itemprop=wordCount content="112"><meta name=twitter:card content="summary"><meta name=twitter:title content="Quickstart"><meta name=twitter:description content="Welcome to Apache Polaris! This guide helps you quickly get Polaris running locally [...]
+curl -s https://raw.githubusercontent.com/apache/polaris/refs/heads/main/site/content/guides/quickstart/docker-compose.yml | docker compose -p polaris-quickstart -f - up -d This command will start Polaris + RustFS and automatically create:"><meta itemprop=wordCount content="112"><meta name=twitter:card content="summary"><meta name=twitter:title content="Quickstart"><meta name=twitter:description content="Welcome to Apache Polaris! This guide helps you quickly get Polaris running locally [...]
This setup is not intended for production use.
Prerequisites🔗 Docker and Docker Compose v2 installed and running. Running the Quickstart🔗 Run the following command:
-1curl -s https://raw.githubusercontent.com/apache/polaris/refs/heads/main/site/content/guides/quickstart/docker-compose.yml | docker compose -p polaris-quickstart -f - up -d This command will start Polaris + RustFS and automatically create:"><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27c1009b1dc9bf17 [...]
+curl -s https://raw.githubusercontent.com/apache/polaris/refs/heads/main/site/content/guides/quickstart/docker-compose.yml | docker compose -p polaris-quickstart -f - up -d This command will start Polaris + RustFS and automatically create:"><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27c1009b1dc9bf179 [...]
<label for=m-guidesquickstart-check><a href=/guides/quickstart/ class="align-left ps-0 active td-sidebar-link td-sidebar-link__page" id=m-guidesquickstart><span class=td-sidebar-nav-active-item>Quickstart</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-guideskeycloak-li><input type=checkbox id=m-guideskeycloak-check>
<label for=m-guideskeycloak-check><a href=/guides/keycloak/ title="Getting Started with Apache Polaris, External Authentication and Keycloak" class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-guideskeycloak><span>Authentication: Keycloak</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-guidesjdbc-li><input type=checkbox id=m-guidesjdbc-check>
<label for=m-guidesjdbc-check><a href=/guides/jdbc/ title="Getting Started with Apache Polaris, Relational JDBC, Postgres and Spark SQL" class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-guidesjdbc><span>Backend: JDBC, Postgres</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-guidestelemetry-li><input type=checkbox id=m-guidestelemetry-check>
@@ -22,7 +22,7 @@ Prerequisites🔗 Docker and Docker Compose v2 installed and running. Running th
<label for=m-guidesrustfs-check><a href=/guides/rustfs/ title="Getting Started with Apache Polaris and RustFS" class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-guidesrustfs><span>Storage: RustFS</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-guidesspark-li><input type=checkbox id=m-guidesspark-check>
<label for=m-guidesspark-check><a href=/guides/spark/ title="Getting Started with Apache Polaris and Apache Spark" class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-guidesspark><span>Client: Apache Spark</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-guidesflink-li><input type=checkbox id=m-guidesflink-check>
<label for=m-guidesflink-check><a href=/guides/flink/ title="Getting Started with Apache Polaris and Apache Flink" class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-guidesflink><span>Client: Apache Flink</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-guidesreadme-li><input type=checkbox id=m-guidesreadme-check>
-<label for=m-guidesreadme-check><a href=/guides/readme/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-guidesreadme><span></span></a></label></li></ul></li></ul></nav></div></aside><main class="col-12 col-md-9 col-xl-8 ps-md-5" role=main><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/guides/>Guides</a></li><li class="breadcrumb-item active" aria-current=page>Quickstart</li></ol></nav><div class=td-content><h1>Qu [...]
-</span></span></code></pre></div><p>This command will start Polaris + RustFS and automatically create:</p><ul><li>Catalog: <code>quickstart_catalog</code></li><li>Principal: <code>quickstart_user</code> (with full access)</li></ul><p>Check the logs for credentials and example commands:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:fl [...]
-</span></span></code></pre></div><h3 id=useful-urls id=useful-urls>Useful URLs<a class=heading-anchor href=#useful-urls aria-label=Anchor>🔗</a></h3><ul><li>Polaris REST API: <a href=http://localhost:8181>http://localhost:8181</a></li><li>RustFS Console: <a href=http://localhost:9001>http://localhost:9001</a></li></ul><p>To stop the services:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code [...]
+<label for=m-guidesreadme-check><a href=/guides/readme/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-guidesreadme><span></span></a></label></li></ul></li></ul></nav></div></aside><main class="col-12 col-md-9 col-xl-8 ps-md-5" role=main><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/guides/>Guides</a></li><li class="breadcrumb-item active" aria-current=page>Quickstart</li></ol></nav><div class=td-content><h1>Qu [...]
+</span></span></code></pre></div><p>This command will start Polaris + RustFS and automatically create:</p><ul><li>Catalog: <code>quickstart_catalog</code></li><li>Principal: <code>quickstart_user</code> (with full access)</li></ul><p>Check the logs for credentials and example commands:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:fl [...]
+</span></span></code></pre></div><h3 id=useful-urls id=useful-urls>Useful URLs<a class=heading-anchor href=#useful-urls aria-label=Anchor>🔗</a></h3><ul><li>Polaris REST API: <a href=http://localhost:8181>http://localhost:8181</a></li><li>RustFS Console: <a href=http://localhost:9001>http://localhost:9001</a></li></ul><p>To stop the services:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code [...]
</span></span></code></pre></div><h2 id=next-steps id=next-steps>Next Steps<a class=heading-anchor href=#next-steps aria-label=Anchor>🔗</a></h2><ul><li><a href=/releases/latest/getting-started/binary-distribution>Binary Distribution</a></li><li><a href=/releases/latest/getting-started/setup-tools>Setup Tools</a></li><li><a href=/guides/spark>Spark Integration</a></li><li><a href=/releases/latest/>Full Documentation</a></li></ul></div></main></div></div><footer class="td-footer row d-prin [...]
\ No newline at end of file
diff --git a/guides/readme/index.html b/guides/readme/index.html
index aec96ebd6c..eae6b4f9ed 100644
--- a/guides/readme/index.html
+++ b/guides/readme/index.html
@@ -1,4 +1,4 @@
-<!doctype html><html itemscope itemtype=http://schema.org/WebPage lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon.png sizes=100x100><link rel=icon type=image/png href=/favicons/android-ch [...]
+<!doctype html><html itemscope itemtype=http://schema.org/WebPage lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon.png sizes=100x100><link rel=icon type=image/png href=/favicons/android-ch [...]
<label for=m-guidesquickstart-check><a href=/guides/quickstart/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-guidesquickstart><span>Quickstart</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-guideskeycloak-li><input type=checkbox id=m-guideskeycloak-check>
<label for=m-guideskeycloak-check><a href=/guides/keycloak/ title="Getting Started with Apache Polaris, External Authentication and Keycloak" class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-guideskeycloak><span>Authentication: Keycloak</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-guidesjdbc-li><input type=checkbox id=m-guidesjdbc-check>
<label for=m-guidesjdbc-check><a href=/guides/jdbc/ title="Getting Started with Apache Polaris, Relational JDBC, Postgres and Spark SQL" class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-guidesjdbc><span>Backend: JDBC, Postgres</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-guidestelemetry-li><input type=checkbox id=m-guidestelemetry-check>
diff --git a/guides/rustfs/index.html b/guides/rustfs/index.html
index 1f1dcacfd6..222087fdeb 100644
--- a/guides/rustfs/index.html
+++ b/guides/rustfs/index.html
@@ -4,9 +4,9 @@ Spark is used as a query engine. This example assumes a local Spark installation
Disclaimer: This guide uses mc from MinIO OSS for local testing only. MinIO OSS is in maintenance mode, and MinIO container images may no longer receive updates or security fixes. For production setups, rc should be used. Overview🔗 This example uses RustFS as a storage provider with Polaris.
Spark is used as a query engine. This example assumes a local Spark installation. See the Spark Notebooks Example for a more advanced Spark setup."><meta property="og:locale" content="en_us"><meta property="og:type" content="article"><meta property="article:section" content="guides"><meta property="article:tag" content="Rustfs"><meta property="article:tag" content="Object Storage"><meta itemprop=name content="Getting Started with Apache Polaris and RustFS"><meta itemprop=description cont [...]
Disclaimer: This guide uses mc from MinIO OSS for local testing only. MinIO OSS is in maintenance mode, and MinIO container images may no longer receive updates or security fixes. For production setups, rc should be used. Overview🔗 This example uses RustFS as a storage provider with Polaris.
-Spark is used as a query engine. This example assumes a local Spark installation. See the Spark Notebooks Example for a more advanced Spark setup."><meta itemprop=wordCount content="265"><meta itemprop=keywords content="Rustfs,Object Storage"><meta name=twitter:card content="summary"><meta name=twitter:title content="Getting Started with Apache Polaris and RustFS"><meta name=twitter:description content="⚠️ Warning
+Spark is used as a query engine. This example assumes a local Spark installation. See the Spark Notebooks Example for a more advanced Spark setup."><meta itemprop=wordCount content="249"><meta itemprop=keywords content="Rustfs,Object Storage"><meta name=twitter:card content="summary"><meta name=twitter:title content="Getting Started with Apache Polaris and RustFS"><meta name=twitter:description content="⚠️ Warning
Disclaimer: This guide uses mc from MinIO OSS for local testing only. MinIO OSS is in maintenance mode, and MinIO container images may no longer receive updates or security fixes. For production setups, rc should be used. Overview🔗 This example uses RustFS as a storage provider with Polaris.
-Spark is used as a query engine. This example assumes a local Spark installation. See the Spark Notebooks Example for a more advanced Spark setup."><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css rel=stylesheet integrity="sha256-PXPPJ8EAmx3Jvx [...]
+Spark is used as a query engine. This example assumes a local Spark installation. See the Spark Notebooks Example for a more advanced Spark setup."><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css rel=stylesheet integrity="sha256-PXPPJ8EAmx3Jvx [...]
<label for=m-guidesquickstart-check><a href=/guides/quickstart/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-guidesquickstart><span>Quickstart</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-guideskeycloak-li><input type=checkbox id=m-guideskeycloak-check>
<label for=m-guideskeycloak-check><a href=/guides/keycloak/ title="Getting Started with Apache Polaris, External Authentication and Keycloak" class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-guideskeycloak><span>Authentication: Keycloak</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-guidesjdbc-li><input type=checkbox id=m-guidesjdbc-check>
<label for=m-guidesjdbc-check><a href=/guides/jdbc/ title="Getting Started with Apache Polaris, Relational JDBC, Postgres and Spark SQL" class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-guidesjdbc><span>Backend: JDBC, Postgres</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-guidestelemetry-li><input type=checkbox id=m-guidestelemetry-check>
@@ -19,30 +19,30 @@ Spark is used as a query engine. This example assumes a local Spark installation
<label for=m-guidesspark-check><a href=/guides/spark/ title="Getting Started with Apache Polaris and Apache Spark" class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-guidesspark><span>Client: Apache Spark</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-guidesflink-li><input type=checkbox id=m-guidesflink-check>
<label for=m-guidesflink-check><a href=/guides/flink/ title="Getting Started with Apache Polaris and Apache Flink" class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-guidesflink><span>Client: Apache Flink</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-guidesreadme-li><input type=checkbox id=m-guidesreadme-check>
<label for=m-guidesreadme-check><a href=/guides/readme/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-guidesreadme><span></span></a></label></li></ul></li></ul></nav></div></aside><main class="col-12 col-md-9 col-xl-8 ps-md-5" role=main><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/guides/>Guides</a></li><li class="breadcrumb-item active" aria-current=page>Storage: RustFS</li></ol></nav><div class=td-content>< [...]
-See the <a href=../spark>Spark Notebooks Example</a> for a more advanced Spark setup.</p><h2 id=starting-the-example id=starting-the-example>Starting the Example<a class=heading-anchor href=#starting-the-example aria-label=Anchor>🔗</a></h2><ol><li><p>Build the Polaris server image if it’s not already present locally:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shel [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> :polaris-server:assemble <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> :polaris-server:quarkusAppPartsBuild --rerun <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> -Dquarkus.container-image.build<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#204a87>true</span>
-</span></span></code></pre></div></li><li><p>Start the docker compose group by running the following command from the root of the repository:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span>docker [...]
-</span></span></code></pre></div></li></ol><h2 id=connecting-from-spark id=connecting-from-spark>Connecting From Spark<a class=heading-anchor href=#connecting-from-spark aria-label=Anchor>🔗</a></h2><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4e [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span> --packages org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:1.10.1,org.apache.iceberg:iceberg-aws-bundle:1.10.1 <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span> --conf spark.sql.extensions<span style=color:#ce5c00;font-weight:700>=</span>org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span> --conf spark.sql.catalog.polaris<span style=color:#ce5c00;font-weight:700>=</span>org.apache.iceberg.spark.SparkCatalog <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span> --conf spark.sql.catalog.polaris.type<span style=color:#ce5c00;font-weight:700>=</span>rest <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span> --conf spark.sql.catalog.polaris.uri<span style=color:#ce5c00;font-weight:700>=</span>http://localhost:8181/api/catalog <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span> --conf spark.sql.catalog.polaris.token-refresh-enabled<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#204a87>false</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span> --conf spark.sql.catalog.polaris.warehouse<span style=color:#ce5c00;font-weight:700>=</span>quickstart_catalog <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span> --conf spark.sql.catalog.polaris.scope<span style=color:#ce5c00;font-weight:700>=</span>PRINCIPAL_ROLE:ALL <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">10</span><span> --conf spark.sql.catalog.polaris.header.X-Iceberg-Access-Delegation<span style=color:#ce5c00;font-weight:700>=</span>vended-credentials <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">11</span><span> --conf spark.sql.catalog.polaris.credential<span style=color:#ce5c00;font-weight:700>=</span>root:s3cr3t
-</span></span></code></pre></div><p>Note: <code>s3cr3t</code> is defined as the password for the <code>root</code> user in the <code>docker-compose.yml</code> file.</p><h2 id=running-queries id=running-queries>Running Queries<a class=heading-anchor href=#running-queries aria-label=Anchor>🔗</a></h2><p>Run inside the Spark SQL shell:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=lang [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span><span style=color:#204a87;font-weight:700>CREATE</span><span style=color:#f8f8f8> </span><span style=color:#000>NAMESPACE</span><span style=color:#f8f8f8> </span><span style=color:#000>ns</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span><span style=color:#204a87;font-weight:700>CREATE</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>TABLE</span><span style=color:#f8f8f8> </span><span style=color:#000>ns</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>t1</span><span style=color:#f8f8f8 [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">6</span><span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">7</span><span><span style=color:#204a87;font-weight:700>SELECT</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>*</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>FROM</span><span style=color:#f8f8f8> </span><span style=color:#000>ns</span><span style=color:#00 [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">8</span><span><span style=color:#8f5902;font-style:italic>-- abc
+See the <a href=../spark>Spark Notebooks Example</a> for a more advanced Spark setup.</p><h2 id=starting-the-example id=starting-the-example>Starting the Example<a class=heading-anchor href=#starting-the-example aria-label=Anchor>🔗</a></h2><ol><li><p>Build the Polaris server image if it’s not already present locally:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shel [...]
+</span></span></span><span style=display:flex><span> :polaris-server:assemble <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> :polaris-server:quarkusAppPartsBuild --rerun <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -Dquarkus.container-image.build<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#204a87>true</span>
+</span></span></code></pre></div></li><li><p>Start the docker compose group by running the following command from the root of the repository:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span>docker compose -f site/content/guides/rustfs/docker-compose.yml up
+</span></span></code></pre></div></li></ol><h2 id=connecting-from-spark id=connecting-from-spark>Connecting From Spark<a class=heading-anchor href=#connecting-from-spark aria-label=Anchor>🔗</a></h2><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span>bin/spark-sql <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --packages org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:1.10.1,org.apache.iceberg:iceberg-aws-bundle:1.10.1 <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --conf spark.sql.extensions<span style=color:#ce5c00;font-weight:700>=</span>org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --conf spark.sql.catalog.polaris<span style=color:#ce5c00;font-weight:700>=</span>org.apache.iceberg.spark.SparkCatalog <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --conf spark.sql.catalog.polaris.type<span style=color:#ce5c00;font-weight:700>=</span>rest <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --conf spark.sql.catalog.polaris.uri<span style=color:#ce5c00;font-weight:700>=</span>http://localhost:8181/api/catalog <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --conf spark.sql.catalog.polaris.token-refresh-enabled<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#204a87>false</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --conf spark.sql.catalog.polaris.warehouse<span style=color:#ce5c00;font-weight:700>=</span>quickstart_catalog <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --conf spark.sql.catalog.polaris.scope<span style=color:#ce5c00;font-weight:700>=</span>PRINCIPAL_ROLE:ALL <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --conf spark.sql.catalog.polaris.header.X-Iceberg-Access-Delegation<span style=color:#ce5c00;font-weight:700>=</span>vended-credentials <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --conf spark.sql.catalog.polaris.credential<span style=color:#ce5c00;font-weight:700>=</span>root:s3cr3t
+</span></span></code></pre></div><p>Note: <code>s3cr3t</code> is defined as the password for the <code>root</code> user in the <code>docker-compose.yml</code> file.</p><h2 id=running-queries id=running-queries>Running Queries<a class=heading-anchor href=#running-queries aria-label=Anchor>🔗</a></h2><p>Run inside the Spark SQL shell:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=lang [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>CREATE</span><span style=color:#f8f8f8> </span><span style=color:#000>NAMESPACE</span><span style=color:#f8f8f8> </span><span style=color:#000>ns</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>CREATE</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>TABLE</span><span style=color:#f8f8f8> </span><span style=color:#000>ns</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>t1</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>AS</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-we [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>SELECT</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>*</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>FROM</span><span style=color:#f8f8f8> </span><span style=color:#000>ns</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>t1</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic>-- abc
</span></span></span></code></pre></div><h2 id=rustfs-endpoints id=rustfs-endpoints>RustFS Endpoints<a class=heading-anchor href=#rustfs-endpoints aria-label=Anchor>🔗</a></h2><p>Note that the catalog configuration defined in the <code>docker-compose.yml</code> contains
different endpoints for the Polaris Server and the client (Spark). Specifically,
the client endpoint is <code>http://localhost:9000</code>, but <code>endpointInternal</code> is <code>http://rustfs:9000</code>.</p><p>This is necessary because clients running on <code>localhost</code> do not normally see service
diff --git a/guides/spark/index.html b/guides/spark/index.html
index f6fd245285..cf12c5efde 100644
--- a/guides/spark/index.html
+++ b/guides/spark/index.html
@@ -1,12 +1,12 @@
<!doctype html><html itemscope itemtype=http://schema.org/WebPage lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon.png sizes=100x100><link rel=icon type=image/png href=/favicons/android-ch [...]
Build the Polaris image🔗 If a Polaris image is not already present locally, build one with the following command:
-1./gradlew \ 2 :polaris-server:assemble \ 3 :polaris-server:quarkusAppPartsBuild --rerun \ 4 -Dquarkus.container-image.build=true Run the docker-compose file🔗 To start the docker-compose file with the necessary dependencies, run these commands from the repo’s root directory:"><meta property="og:url" content="https://polaris.apache.org/guides/spark/"><meta property="og:site_name" content="Apache Polaris"><meta property="og:title" content="Getting Started with Apache Polaris and Apache Spa [...]
+./gradlew \ :polaris-server:assemble \ :polaris-server:quarkusAppPartsBuild --rerun \ -Dquarkus.container-image.build=true Run the docker-compose file🔗 To start the docker-compose file with the necessary dependencies, run these commands from the repo’s root directory:"><meta property="og:url" content="https://polaris.apache.org/guides/spark/"><meta property="og:site_name" content="Apache Polaris"><meta property="og:title" content="Getting Started with Apache Polaris and Apache Spark"><me [...]
Build the Polaris image🔗 If a Polaris image is not already present locally, build one with the following command:
-1./gradlew \ 2 :polaris-server:assemble \ 3 :polaris-server:quarkusAppPartsBuild --rerun \ 4 -Dquarkus.container-image.build=true Run the docker-compose file🔗 To start the docker-compose file with the necessary dependencies, run these commands from the repo’s root directory:"><meta property="og:locale" content="en_us"><meta property="og:type" content="article"><meta property="article:section" content="guides"><meta property="article:tag" content="Spark"><meta itemprop=name content="Getti [...]
+./gradlew \ :polaris-server:assemble \ :polaris-server:quarkusAppPartsBuild --rerun \ -Dquarkus.container-image.build=true Run the docker-compose file🔗 To start the docker-compose file with the necessary dependencies, run these commands from the repo’s root directory:"><meta property="og:locale" content="en_us"><meta property="og:type" content="article"><meta property="article:section" content="guides"><meta property="article:tag" content="Spark"><meta itemprop=name content="Getting Star [...]
Build the Polaris image🔗 If a Polaris image is not already present locally, build one with the following command:
-1./gradlew \ 2 :polaris-server:assemble \ 3 :polaris-server:quarkusAppPartsBuild --rerun \ 4 -Dquarkus.container-image.build=true Run the docker-compose file🔗 To start the docker-compose file with the necessary dependencies, run these commands from the repo’s root directory:"><meta itemprop=wordCount content="176"><meta itemprop=keywords content="Spark"><meta name=twitter:card content="summary"><meta name=twitter:title content="Getting Started with Apache Polaris and Apache Spark"><meta [...]
+./gradlew \ :polaris-server:assemble \ :polaris-server:quarkusAppPartsBuild --rerun \ -Dquarkus.container-image.build=true Run the docker-compose file🔗 To start the docker-compose file with the necessary dependencies, run these commands from the repo’s root directory:"><meta itemprop=wordCount content="173"><meta itemprop=keywords content="Spark"><meta name=twitter:card content="summary"><meta name=twitter:title content="Getting Started with Apache Polaris and Apache Spark"><meta name=tw [...]
Build the Polaris image🔗 If a Polaris image is not already present locally, build one with the following command:
-1./gradlew \ 2 :polaris-server:assemble \ 3 :polaris-server:quarkusAppPartsBuild --rerun \ 4 -Dquarkus.container-image.build=true Run the docker-compose file🔗 To start the docker-compose file with the necessary dependencies, run these commands from the repo’s root directory:"><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/s [...]
+./gradlew \ :polaris-server:assemble \ :polaris-server:quarkusAppPartsBuild --rerun \ -Dquarkus.container-image.build=true Run the docker-compose file🔗 To start the docker-compose file with the necessary dependencies, run these commands from the repo’s root directory:"><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/mai [...]
<label for=m-guidesquickstart-check><a href=/guides/quickstart/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-guidesquickstart><span>Quickstart</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-guideskeycloak-li><input type=checkbox id=m-guideskeycloak-check>
<label for=m-guideskeycloak-check><a href=/guides/keycloak/ title="Getting Started with Apache Polaris, External Authentication and Keycloak" class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-guideskeycloak><span>Authentication: Keycloak</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-guidesjdbc-li><input type=checkbox id=m-guidesjdbc-check>
<label for=m-guidesjdbc-check><a href=/guides/jdbc/ title="Getting Started with Apache Polaris, Relational JDBC, Postgres and Spark SQL" class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-guidesjdbc><span>Backend: JDBC, Postgres</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-guidestelemetry-li><input type=checkbox id=m-guidestelemetry-check>
@@ -19,11 +19,11 @@ Build the Polaris image🔗 If a Polaris image is not already present locally, b
<label for=m-guidesspark-check><a href=/guides/spark/ title="Getting Started with Apache Polaris and Apache Spark" class="align-left ps-0 active td-sidebar-link td-sidebar-link__page" id=m-guidesspark><span class=td-sidebar-nav-active-item>Client: Apache Spark</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-guidesflink-li><input type=checkbox id=m-guidesflink-check>
<label for=m-guidesflink-check><a href=/guides/flink/ title="Getting Started with Apache Polaris and Apache Flink" class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-guidesflink><span>Client: Apache Flink</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-guidesreadme-li><input type=checkbox id=m-guidesreadme-check>
<label for=m-guidesreadme-check><a href=/guides/readme/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-guidesreadme><span></span></a></label></li></ul></li></ul></nav></div></aside><main class="col-12 col-md-9 col-xl-8 ps-md-5" role=main><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/guides/>Guides</a></li><li class="breadcrumb-item active" aria-current=page>Client: Apache Spark</li></ol></nav><div class=td-cont [...]
-A Jupyter notebook is used to run PySpark.</p><h2 id=build-the-polaris-image id=build-the-polaris-image>Build the Polaris image<a class=heading-anchor href=#build-the-polaris-image aria-label=Anchor>🔗</a></h2><p>If a Polaris image is not already present locally, build one with the following command:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> :polaris-server:assemble <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> :polaris-server:quarkusAppPartsBuild --rerun <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> -Dquarkus.container-image.build<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#204a87>true</span>
-</span></span></code></pre></div><h2 id=run-the-docker-compose-file id=run-the-docker-compose-file>Run the <code>docker-compose</code> file<a class=heading-anchor href=#run-the-docker-compose-file aria-label=Anchor>🔗</a></h2><p>To start the <code>docker-compose</code> file with the necessary dependencies, run these commands from the repo’s root directory:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-siz [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span>docker compose -f site/content/guides/spark/docker-compose.yml up
+A Jupyter notebook is used to run PySpark.</p><h2 id=build-the-polaris-image id=build-the-polaris-image>Build the Polaris image<a class=heading-anchor href=#build-the-polaris-image aria-label=Anchor>🔗</a></h2><p>If a Polaris image is not already present locally, build one with the following command:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span [...]
+</span></span></span><span style=display:flex><span> :polaris-server:assemble <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> :polaris-server:quarkusAppPartsBuild --rerun <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -Dquarkus.container-image.build<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#204a87>true</span>
+</span></span></code></pre></div><h2 id=run-the-docker-compose-file id=run-the-docker-compose-file>Run the <code>docker-compose</code> file<a class=heading-anchor href=#run-the-docker-compose-file aria-label=Anchor>🔗</a></h2><p>To start the <code>docker-compose</code> file with the necessary dependencies, run these commands from the repo’s root directory:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-siz [...]
+</span></span><span style=display:flex><span>docker compose -f site/content/guides/spark/docker-compose.yml up
</span></span></code></pre></div><p>This will spin up 2 container services</p><ul><li>The <code>polaris</code> service for running Apache Polaris using an in-memory metastore</li><li>The <code>jupyter</code> service for running Jupyter notebook with PySpark</li></ul><h2 id=access-the-jupyter-notebook-interface id=access-the-jupyter-notebook-interface>Access the Jupyter notebook interface<a class=heading-anchor href=#access-the-jupyter-notebook-interface aria-label=Anchor>🔗</a></h2><p>In [...]
Navigate to <a href=http://127.0.0.1:8888/lab/tree/notebooks/SparkPolaris.ipynb><code>notebooks/SparkPolaris.ipynb</code></a></p><h2 id=run-the-jupyter-notebook id=run-the-jupyter-notebook>Run the Jupyter notebook<a class=heading-anchor href=#run-the-jupyter-notebook aria-label=Anchor>🔗</a></h2><p>You can now run all cells in the notebook or write your own code!</p></div></main></div></div><footer class="td-footer row d-print-none"><div class=container-fluid><div class="row mx-md-2"><div [...]
\ No newline at end of file
diff --git a/guides/telemetry/index.html b/guides/telemetry/index.html
index 504cdb2952..5b2d5d8d0a 100644
--- a/guides/telemetry/index.html
+++ b/guides/telemetry/index.html
@@ -1,16 +1,20 @@
<!doctype html><html itemscope itemtype=http://schema.org/WebPage lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon.png sizes=100x100><link rel=icon type=image/png href=/favicons/android-ch [...]
Build the Polaris image if it’s not already present locally:
-1./gradlew \ 2 :polaris-server:assemble \ 3 :polaris-server:quarkusAppPartsBuild --rerun \ 4 -Dquarkus.container-image.build=true Start the docker compose group by running the following command from the root of the repository:
-1export ASSETS_PATH=$(pwd)/site/content/guides/assets/ 2export CLIENT_ID=root 3export CLIENT_SECRET=s3cr3t 4docker compose -f site/content/guides/telemetry/docker-compose.yml up To access Polaris from the host machine, first request an access token:"><meta property="og:url" content="https://polaris.apache.org/guides/telemetry/"><meta property="og:site_name" content="Apache Polaris"><meta property="og:title" content="Getting Started with Apache Polaris, Prometheus and Jaeger"><meta proper [...]
+./gradlew \ :polaris-server:assemble \ :polaris-server:quarkusAppPartsBuild --rerun \ -Dquarkus.container-image.build=true Start the docker compose group by running the following command from the root of the repository:
+export ASSETS_PATH=$(pwd)/site/content/guides/assets/ export CLIENT_ID=root export CLIENT_SECRET=s3cr3t docker compose -f site/content/guides/telemetry/docker-compose.yml up To access Polaris from the host machine, first request an access token:
+export POLARIS_TOKEN=$(curl -s http://localhost:8181/api/catalog/v1/oauth/tokens \ --user root:s3cr3t \ -d 'grant_type=client_credentials' \ -d 'scope=PRINCIPAL_ROLE:ALL' | jq -r .access_token) Then, use the access token in the Authorization header when accessing Polaris; you can also test the X-Request-ID header; you should see it in all logs and traces:"><meta property="og:url" content="https://polaris.apache.org/guides/telemetry/"><meta property="og:site_name" content="Apache Polaris" [...]
Build the Polaris image if it’s not already present locally:
-1./gradlew \ 2 :polaris-server:assemble \ 3 :polaris-server:quarkusAppPartsBuild --rerun \ 4 -Dquarkus.container-image.build=true Start the docker compose group by running the following command from the root of the repository:
-1export ASSETS_PATH=$(pwd)/site/content/guides/assets/ 2export CLIENT_ID=root 3export CLIENT_SECRET=s3cr3t 4docker compose -f site/content/guides/telemetry/docker-compose.yml up To access Polaris from the host machine, first request an access token:"><meta property="og:locale" content="en_us"><meta property="og:type" content="article"><meta property="article:section" content="guides"><meta property="article:tag" content="Telemetry"><meta property="article:tag" content="Prometheus"><meta [...]
+./gradlew \ :polaris-server:assemble \ :polaris-server:quarkusAppPartsBuild --rerun \ -Dquarkus.container-image.build=true Start the docker compose group by running the following command from the root of the repository:
+export ASSETS_PATH=$(pwd)/site/content/guides/assets/ export CLIENT_ID=root export CLIENT_SECRET=s3cr3t docker compose -f site/content/guides/telemetry/docker-compose.yml up To access Polaris from the host machine, first request an access token:
+export POLARIS_TOKEN=$(curl -s http://localhost:8181/api/catalog/v1/oauth/tokens \ --user root:s3cr3t \ -d 'grant_type=client_credentials' \ -d 'scope=PRINCIPAL_ROLE:ALL' | jq -r .access_token) Then, use the access token in the Authorization header when accessing Polaris; you can also test the X-Request-ID header; you should see it in all logs and traces:"><meta property="og:locale" content="en_us"><meta property="og:type" content="article"><meta property="article:section" content="guide [...]
Build the Polaris image if it’s not already present locally:
-1./gradlew \ 2 :polaris-server:assemble \ 3 :polaris-server:quarkusAppPartsBuild --rerun \ 4 -Dquarkus.container-image.build=true Start the docker compose group by running the following command from the root of the repository:
-1export ASSETS_PATH=$(pwd)/site/content/guides/assets/ 2export CLIENT_ID=root 3export CLIENT_SECRET=s3cr3t 4docker compose -f site/content/guides/telemetry/docker-compose.yml up To access Polaris from the host machine, first request an access token:"><meta itemprop=wordCount content="166"><meta itemprop=keywords content="Telemetry,Prometheus,Jaeger"><meta name=twitter:card content="summary"><meta name=twitter:title content="Getting Started with Apache Polaris, Prometheus and Jaeger"><met [...]
+./gradlew \ :polaris-server:assemble \ :polaris-server:quarkusAppPartsBuild --rerun \ -Dquarkus.container-image.build=true Start the docker compose group by running the following command from the root of the repository:
+export ASSETS_PATH=$(pwd)/site/content/guides/assets/ export CLIENT_ID=root export CLIENT_SECRET=s3cr3t docker compose -f site/content/guides/telemetry/docker-compose.yml up To access Polaris from the host machine, first request an access token:
+export POLARIS_TOKEN=$(curl -s http://localhost:8181/api/catalog/v1/oauth/tokens \ --user root:s3cr3t \ -d 'grant_type=client_credentials' \ -d 'scope=PRINCIPAL_ROLE:ALL' | jq -r .access_token) Then, use the access token in the Authorization header when accessing Polaris; you can also test the X-Request-ID header; you should see it in all logs and traces:"><meta itemprop=wordCount content="156"><meta itemprop=keywords content="Telemetry,Prometheus,Jaeger"><meta name=twitter:card content= [...]
Build the Polaris image if it’s not already present locally:
-1./gradlew \ 2 :polaris-server:assemble \ 3 :polaris-server:quarkusAppPartsBuild --rerun \ 4 -Dquarkus.container-image.build=true Start the docker compose group by running the following command from the root of the repository:
-1export ASSETS_PATH=$(pwd)/site/content/guides/assets/ 2export CLIENT_ID=root 3export CLIENT_SECRET=s3cr3t 4docker compose -f site/content/guides/telemetry/docker-compose.yml up To access Polaris from the host machine, first request an access token:"><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27c1009 [...]
+./gradlew \ :polaris-server:assemble \ :polaris-server:quarkusAppPartsBuild --rerun \ -Dquarkus.container-image.build=true Start the docker compose group by running the following command from the root of the repository:
+export ASSETS_PATH=$(pwd)/site/content/guides/assets/ export CLIENT_ID=root export CLIENT_SECRET=s3cr3t docker compose -f site/content/guides/telemetry/docker-compose.yml up To access Polaris from the host machine, first request an access token:
+export POLARIS_TOKEN=$(curl -s http://localhost:8181/api/catalog/v1/oauth/tokens \ --user root:s3cr3t \ -d 'grant_type=client_credentials' \ -d 'scope=PRINCIPAL_ROLE:ALL' | jq -r .access_token) Then, use the access token in the Authorization header when accessing Polaris; you can also test the X-Request-ID header; you should see it in all logs and traces:"><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256 [...]
<label for=m-guidesquickstart-check><a href=/guides/quickstart/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-guidesquickstart><span>Quickstart</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-guideskeycloak-li><input type=checkbox id=m-guideskeycloak-check>
<label for=m-guideskeycloak-check><a href=/guides/keycloak/ title="Getting Started with Apache Polaris, External Authentication and Keycloak" class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-guideskeycloak><span>Authentication: Keycloak</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-guidesjdbc-li><input type=checkbox id=m-guidesjdbc-check>
<label for=m-guidesjdbc-check><a href=/guides/jdbc/ title="Getting Started with Apache Polaris, Relational JDBC, Postgres and Spark SQL" class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-guidesjdbc><span>Backend: JDBC, Postgres</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child active-path" id=m-guidestelemetry-li><input type=checkbox id=m-guidestelemetry-check checked>
@@ -22,23 +26,23 @@ Build the Polaris image if it’s not already present locally:
<label for=m-guidesrustfs-check><a href=/guides/rustfs/ title="Getting Started with Apache Polaris and RustFS" class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-guidesrustfs><span>Storage: RustFS</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-guidesspark-li><input type=checkbox id=m-guidesspark-check>
<label for=m-guidesspark-check><a href=/guides/spark/ title="Getting Started with Apache Polaris and Apache Spark" class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-guidesspark><span>Client: Apache Spark</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-guidesflink-li><input type=checkbox id=m-guidesflink-check>
<label for=m-guidesflink-check><a href=/guides/flink/ title="Getting Started with Apache Polaris and Apache Flink" class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-guidesflink><span>Client: Apache Flink</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-guidesreadme-li><input type=checkbox id=m-guidesreadme-check>
-<label for=m-guidesreadme-check><a href=/guides/readme/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-guidesreadme><span></span></a></label></li></ul></li></ul></nav></div></aside><main class="col-12 col-md-9 col-xl-8 ps-md-5" role=main><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/guides/>Guides</a></li><li class="breadcrumb-item active" aria-current=page>Telemetry: Prometheus and Jaeger</li></ol></nav><div c [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> :polaris-server:assemble <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> :polaris-server:quarkusAppPartsBuild --rerun <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> -Dquarkus.container-image.build<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#204a87>true</span>
-</span></span></code></pre></div></li><li><p>Start the docker compose group by running the following command from the root of the repository:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span><span s [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#204a87>export</span> <span style=color:#000>CLIENT_ID</span><span style=color:#ce5c00;font-weight:700>=</span>root
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span><span style=color:#204a87>export</span> <span style=color:#000>CLIENT_SECRET</span><span style=color:#ce5c00;font-weight:700>=</span>s3cr3t
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span>docker compose -f site/content/guides/telemetry/docker-compose.yml up
-</span></span></code></pre></div></li><li><p>To access Polaris from the host machine, first request an access token:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span><span style=color:#204a87>export [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> --user root:s3cr3t <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> -d <span style=color:#4e9a06>'grant_type=client_credentials'</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> -d <span style=color:#4e9a06>'scope=PRINCIPAL_ROLE:ALL'</span> <span style=color:#000;font-weight:700>|</span> jq -r .access_token<span style=color:#204a87;font-weight:700>)</span>
+<label for=m-guidesreadme-check><a href=/guides/readme/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-guidesreadme><span></span></a></label></li></ul></li></ul></nav></div></aside><main class="col-12 col-md-9 col-xl-8 ps-md-5" role=main><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/guides/>Guides</a></li><li class="breadcrumb-item active" aria-current=page>Telemetry: Prometheus and Jaeger</li></ol></nav><div c [...]
+</span></span></span><span style=display:flex><span> :polaris-server:assemble <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> :polaris-server:quarkusAppPartsBuild --rerun <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -Dquarkus.container-image.build<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#204a87>true</span>
+</span></span></code></pre></div></li><li><p>Start the docker compose group by running the following command from the root of the repository:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span><span style=color:#204a87>export</span> <span style=color:#000>ASSETS_PATH</span><span style=color:#ce5c00;font-weight:700>=</span><sp [...]
+</span></span><span style=display:flex><span><span style=color:#204a87>export</span> <span style=color:#000>CLIENT_ID</span><span style=color:#ce5c00;font-weight:700>=</span>root
+</span></span><span style=display:flex><span><span style=color:#204a87>export</span> <span style=color:#000>CLIENT_SECRET</span><span style=color:#ce5c00;font-weight:700>=</span>s3cr3t
+</span></span><span style=display:flex><span>docker compose -f site/content/guides/telemetry/docker-compose.yml up
+</span></span></code></pre></div></li><li><p>To access Polaris from the host machine, first request an access token:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span><span style=color:#204a87>export</span> <span style=color:#000>POLARIS_TOKEN</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#204a87; [...]
+</span></span></span><span style=display:flex><span> --user root:s3cr3t <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -d <span style=color:#4e9a06>'grant_type=client_credentials'</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -d <span style=color:#4e9a06>'scope=PRINCIPAL_ROLE:ALL'</span> <span style=color:#000;font-weight:700>|</span> jq -r .access_token<span style=color:#204a87;font-weight:700>)</span>
</span></span></code></pre></div></li><li><p>Then, use the access token in the Authorization header when accessing Polaris; you can also test
-the <code>X-Request-ID</code> header; you should see it in all logs and traces:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span>curl -v <span style=color:#4e9a06>'http://localhost:8181/api/mana [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> -H <span style=color:#4e9a06>"Authorization: Bearer </span><span style=color:#000>$POLARIS_TOKEN</span><span style=color:#4e9a06>"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> -H <span style=color:#4e9a06>"X-Request-ID: 1234"</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span>curl -v <span style=color:#4e9a06>'http://localhost:8181/api/catalog/v1/config?warehouse=quickstart_catalog'</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span> -H <span style=color:#4e9a06>"Authorization: Bearer </span><span style=color:#000>$POLARIS_TOKEN</span><span style=color:#4e9a06>"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">6</span><span> -H <span style=color:#4e9a06>"X-Request-ID: 5678"</span>
+the <code>X-Request-ID</code> header; you should see it in all logs and traces:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span>curl -v <span style=color:#4e9a06>'http://localhost:8181/api/management/v1/principal-roles'</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -H <span style=color:#4e9a06>"Authorization: Bearer </span><span style=color:#000>$POLARIS_TOKEN</span><span style=color:#4e9a06>"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -H <span style=color:#4e9a06>"X-Request-ID: 1234"</span>
+</span></span><span style=display:flex><span>curl -v <span style=color:#4e9a06>'http://localhost:8181/api/catalog/v1/config?warehouse=quickstart_catalog'</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -H <span style=color:#4e9a06>"Authorization: Bearer </span><span style=color:#000>$POLARIS_TOKEN</span><span style=color:#4e9a06>"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -H <span style=color:#4e9a06>"X-Request-ID: 5678"</span>
</span></span></code></pre></div></li><li><p>Access the following services:</p><ul><li>Prometheus UI: browse to http://localhost:9093 to view metrics.</li><li>Jaeger UI: browse to http://localhost:16686 to view traces.</li></ul></li></ol></div></main></div></div><footer class="td-footer row d-print-none"><div class=container-fluid><div class="row mx-md-2"><div class="td-footer__left col-6 col-sm-4 order-sm-1"><ul class=td-footer__links-list><li class=td-footer__links-item data-bs-toggle= [...]
\ No newline at end of file
diff --git a/in-dev/index.html b/in-dev/index.html
index 762ab3a0ab..a01aa75fa8 100644
--- a/in-dev/index.html
+++ b/in-dev/index.html
@@ -1 +1 @@
-<!doctype html><html itemscope itemtype=http://schema.org/WebPage lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><link rel=alternate type=application/rss+xml href=https://polaris.apache.org/in-dev/index.xml><meta name=robots content="index, follow"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon.png sizes=180x180><link rel=icon type=image/png hr [...]
\ No newline at end of file
+<!doctype html><html itemscope itemtype=http://schema.org/WebPage lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><link rel=alternate type=application/rss+xml href=https://polaris.apache.org/in-dev/index.xml><meta name=robots content="index, follow"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon.png sizes=180x180><link rel=icon type=image/png hr [...]
\ No newline at end of file
diff --git a/in-dev/release_index/index.html b/in-dev/release_index/index.html
index 2dd9c64f5f..59423d19cf 100644
--- a/in-dev/release_index/index.html
+++ b/in-dev/release_index/index.html
@@ -1,4 +1,4 @@
-<!doctype html><html itemscope itemtype=http://schema.org/WebPage lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon.png sizes=100x100><link rel=icon type=image/png href=/favicons/android-ch [...]
+<!doctype html><html itemscope itemtype=http://schema.org/WebPage lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon.png sizes=100x100><link rel=icon type=image/png href=/favicons/android-ch [...]
<label for=m-in-devunreleased-check><a href=/in-dev/unreleased/ title="Apache Polaris Documentation (Unreleased)" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleased><span>Developer Docs</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-in-devunreleasedgetting-started-li><input type=checkbox id=m-in-devunreleasedgetting-started-check>
<label for=m-in-devunreleasedgetting-started-check><a href=/in-dev/unreleased/getting-started/ title="Getting Started with Apache Polaris" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleasedgetting-started><span>Getting Started</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedquick-start-li><input type=checkbox id=m-in-devunreleasedgetting-star [...]
<label for=m-in-devunreleasedgetting-startedquick-start-check><a href=/in-dev/unreleased/getting-started/quick-start/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-in-devunreleasedgetting-startedquick-start><span>Quickstart</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedsetup-tools-li><input type=checkbox id=m-in-devunreleasedgetting-startedsetup-tools-check>
diff --git a/in-dev/unreleased/admin-tool/index.html b/in-dev/unreleased/admin-tool/index.html
index e9d5fa1adf..c90abd9009 100644
--- a/in-dev/unreleased/admin-tool/index.html
+++ b/in-dev/unreleased/admin-tool/index.html
@@ -7,10 +7,10 @@ The tool is available as a Docker image: apache/polaris-admin-tool. It can also
The tool must be built with the necessary database drivers to access the metastore database. The default build includes drivers for the PostgreSQL and NoSQL (MongoDB) backends. Usage🔗 Please make sure the admin tool and Polaris server are with the same version before using it. To run the standalone JAR, use the following command:"><meta property="og:locale" content="en_us"><meta property="og:type" content="article"><meta property="article:section" content="in-dev"><meta itemprop=name con [...]
The tool is available as a Docker image: apache/polaris-admin-tool. It can also be downloaded as part of the binary distribution.
📝 Note
-The tool must be built with the necessary database drivers to access the metastore database. The default build includes drivers for the PostgreSQL and NoSQL (MongoDB) backends. Usage🔗 Please make sure the admin tool and Polaris server are with the same version before using it. To run the standalone JAR, use the following command:"><meta itemprop=wordCount content="1382"><meta name=twitter:card content="summary"><meta name=twitter:title content="Admin Tool"><meta name=twitter:description [...]
+The tool must be built with the necessary database drivers to access the metastore database. The default build includes drivers for the PostgreSQL and NoSQL (MongoDB) backends. Usage🔗 Please make sure the admin tool and Polaris server are with the same version before using it. To run the standalone JAR, use the following command:"><meta itemprop=wordCount content="1362"><meta name=twitter:card content="summary"><meta name=twitter:title content="Admin Tool"><meta name=twitter:description [...]
The tool is available as a Docker image: apache/polaris-admin-tool. It can also be downloaded as part of the binary distribution.
📝 Note
-The tool must be built with the necessary database drivers to access the metastore database. The default build includes drivers for the PostgreSQL and NoSQL (MongoDB) backends. Usage🔗 Please make sure the admin tool and Polaris server are with the same version before using it. To run the standalone JAR, use the following command:"><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2Mzr [...]
+The tool must be built with the necessary database drivers to access the metastore database. The default build includes drivers for the PostgreSQL and NoSQL (MongoDB) backends. Usage🔗 Please make sure the admin tool and Polaris server are with the same version before using it. To run the standalone JAR, use the following command:"><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2Mzr [...]
<label for=m-in-devunreleased-check><a href=/in-dev/unreleased/ title="Apache Polaris Documentation (Unreleased)" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleased><span>Unreleased</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-in-devunreleasedgetting-started-li><input type=checkbox id=m-in-devunreleasedgetting-started-check>
<label for=m-in-devunreleasedgetting-started-check><a href=/in-dev/unreleased/getting-started/ title="Getting Started with Apache Polaris" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleasedgetting-started><span>Getting Started</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedquick-start-li><input type=checkbox id=m-in-devunreleasedgetting-star [...]
<label for=m-in-devunreleasedgetting-startedquick-start-check><a href=/in-dev/unreleased/getting-started/quick-start/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-in-devunreleasedgetting-startedquick-start><span>Quickstart</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedsetup-tools-li><input type=checkbox id=m-in-devunreleasedgetting-startedsetup-tools-check>
@@ -81,8 +81,8 @@ For stable user documentation, see the
<a href=/releases/latest/>latest release docs</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/docs/>Documentation</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/>Developer Docs</a></li><li class="breadcrumb-item active" aria-current=page>Admin Tool</li></ol></nav><div class=td-content><h1>Admin Tool</h1><header class=article-meta></header><p>Polaris includes a tool for administrators to manage the <a href [...]
The default build includes drivers for the PostgreSQL and NoSQL (MongoDB) backends.</div><h2 id=usage id=usage>Usage<a class=heading-anchor href=#usage aria-label=Anchor>🔗</a></h2><p>Please make sure the admin tool and Polaris server are with the same version before using it.
To run the standalone JAR, use the following command:</p><p>If you downloaded the <a href=https://polaris.apache.org/in-dev/unreleased/getting-started/binary-distribution/>binary distribution</a>, you
-can run the admin tool as follows:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span>java -jar polaris-bin-<version>/admin/quarkus-run.jar --help
-</span></span></code></pre></div><p>Make sure to replace <code><version></code> with the actual version of Polaris you are using.</p><p>To run the Docker image instead, use the following command:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right [...]
+can run the admin tool as follows:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span>java -jar polaris-bin-<version>/admin/quarkus-run.jar --help
+</span></span></code></pre></div><p>Make sure to replace <code><version></code> with the actual version of Polaris you are using.</p><p>To run the Docker image instead, use the following command:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span>docker run apache/polaris-admin-tool:latest --help
</span></span></code></pre></div><p>The basic usage of the Polaris Admin Tool is outlined below:</p><pre tabindex=0><code>Usage: polaris-admin-tool.jar [-hV] [COMMAND]
Polaris administration & maintenance tool
-h, --help Show this help message and exit.
@@ -99,8 +99,8 @@ database connection. See <a href=https://polaris.apache.org/in-dev/unreleased/co
for the Polaris server. This command is idempotent and can be run multiple times without causing any
issues. If a realm is already bootstrapped, running the <code>bootstrap</code> command again will not have any
effect on that realm.</p><p>If you have downloaded the <a href=https://polaris.apache.org/in-dev/unreleased/getting-started/binary-distribution/>binary distribution</a>,
-you can run the <code>bootstrap</code> command as follows:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span>java -jar polaris-bin-<version>/admin/quarkus-run.jar bootstrap --help
-</span></span></code></pre></div><p>You can also use the Docker image to run the <code>bootstrap</code> command:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span>docker run apache/polaris-admin-tool [...]
+you can run the <code>bootstrap</code> command as follows:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span>java -jar polaris-bin-<version>/admin/quarkus-run.jar bootstrap --help
+</span></span></code></pre></div><p>You can also use the Docker image to run the <code>bootstrap</code> command:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span>docker run apache/polaris-admin-tool:latest bootstrap --help
</span></span></code></pre></div><p>The basic usage of the <code>bootstrap</code> command is outlined below:</p><pre tabindex=0><code>Usage: polaris-admin-tool.jar bootstrap [-hV] [-v=<schema version>]
([-r=<realm> [-r=<realm>]... [-c=<realm,
clientId,clientSecret>]... [-p]] |
@@ -122,39 +122,39 @@ File Input Options:
A file containing root principal credentials to
bootstrap.
</code></pre><p>For example, to bootstrap the <code>realm1</code> realm and create its root principal credential with the
-client ID <code>admin</code> and client secret <code>admin</code>, you can run the following commands:</p><p>Example for the PostgreSQL backend:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span>docker [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> --env<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"polaris.persistence.type=relational-jdbc"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> --env<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"quarkus.datasource.username=<your-username>"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> --env<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"quarkus.datasource.password=<your-password>"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span> --env<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"quarkus.datasource.jdbc.url=<jdbc-url-of-postgres>"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">6</span><span> apache/polaris-admin-tool:latest bootstrap -r realm1 -c realm1,admin,admin
-</span></span></code></pre></div><p>Example for the NoSQL (MongoDB) backend:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span>docker run --rm -it <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> --env<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"polaris.persistence.type=nosql"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> --env<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"polaris.persistence.nosql.backend=MongoDb"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> --env<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"quarkus.mongodb.database=polaris"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span> --env<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"quarkus.mongodb.connection-string=<mongodb-connection-string>"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">6</span><span> apache/polaris-admin-tool:latest bootstrap -r realm1 -c realm1,admin,admin
+client ID <code>admin</code> and client secret <code>admin</code>, you can run the following commands:</p><p>Example for the PostgreSQL backend:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span>docker run --rm -it <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --env<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"polaris.persistence.type=relational-jdbc"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --env<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"quarkus.datasource.username=<your-username>"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --env<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"quarkus.datasource.password=<your-password>"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --env<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"quarkus.datasource.jdbc.url=<jdbc-url-of-postgres>"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> apache/polaris-admin-tool:latest bootstrap -r realm1 -c realm1,admin,admin
+</span></span></code></pre></div><p>Example for the NoSQL (MongoDB) backend:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span>docker run --rm -it <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --env<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"polaris.persistence.type=nosql"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --env<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"polaris.persistence.nosql.backend=MongoDb"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --env<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"quarkus.mongodb.database=polaris"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --env<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"quarkus.mongodb.connection-string=<mongodb-connection-string>"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> apache/polaris-admin-tool:latest bootstrap -r realm1 -c realm1,admin,admin
</span></span></code></pre></div><p>As you can see, the Polaris Admin Tool must be executed with appropriate configuration to connect to the same database used by the Polaris server. The configuration can be done via environment variables (as above) or system properties.</p><p>To know which configuration options you should use, read the <a href=https://polaris.apache.org/in-dev/unreleased/metastores/>Metastores</a> section and the documentation of the specific metastore backend you are u [...]
This includes all entities (catalogs, namespaces, tables, views, roles), all principal
-credentials, grants, and any other data associated with the realms.</div><p>If you have downloaded the <a href=https://polaris.apache.org/in-dev/unreleased/getting-started/binary-distribution/>binary distribution</a>, you can run the <code>purge</code> command as follows:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span sty [...]
-</span></span></code></pre></div><p>You can also use the Docker image to run the <code>purge</code> command:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span>docker run apache/polaris-admin-tool:lat [...]
+credentials, grants, and any other data associated with the realms.</div><p>If you have downloaded the <a href=https://polaris.apache.org/in-dev/unreleased/getting-started/binary-distribution/>binary distribution</a>, you can run the <code>purge</code> command as follows:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span>jav [...]
+</span></span></code></pre></div><p>You can also use the Docker image to run the <code>purge</code> command:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span>docker run apache/polaris-admin-tool:latest purge --help
</span></span></code></pre></div><p>The basic usage of the <code>purge</code> command is outlined below:</p><pre tabindex=0><code>Usage: polaris-admin-tool.jar purge [-hV] -r=<realm> [-r=<realm>]...
Purge realms and all associated entities.
-h, --help Show this help message and exit.
-r, --realm=<realm> The name of a realm to purge.
-V, --version Print version information and exit.
-</code></pre><p>For example, to purge the <code>realm1</code> realm, you can run the following commands:</p><p>Example for the PostgreSQL backend:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span>dock [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> --env<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"polaris.persistence.type=relational-jdbc"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> --env<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"quarkus.datasource.username=<your-username>"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> --env<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"quarkus.datasource.password=<your-password>"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span> --env<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"quarkus.datasource.jdbc.url=<jdbc-url-of-postgres>"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">6</span><span> apache/polaris-admin-tool:latest purge -r realm1
-</span></span></code></pre></div><p>Example for the NoSQL (MongoDB) backend:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span>docker run --rm -it <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> --env<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"polaris.persistence.type=nosql"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> --env<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"polaris.persistence.nosql.backend=MongoDb"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> --env<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"quarkus.mongodb.database=polaris"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span> --env<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"quarkus.mongodb.connection-string=<mongodb-connection-string>"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">6</span><span> apache/polaris-admin-tool:latest purge -r realm1
+</code></pre><p>For example, to purge the <code>realm1</code> realm, you can run the following commands:</p><p>Example for the PostgreSQL backend:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span>docker run --rm -it <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --env<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"polaris.persistence.type=relational-jdbc"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --env<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"quarkus.datasource.username=<your-username>"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --env<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"quarkus.datasource.password=<your-password>"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --env<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"quarkus.datasource.jdbc.url=<jdbc-url-of-postgres>"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> apache/polaris-admin-tool:latest purge -r realm1
+</span></span></code></pre></div><p>Example for the NoSQL (MongoDB) backend:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span>docker run --rm -it <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --env<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"polaris.persistence.type=nosql"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --env<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"polaris.persistence.nosql.backend=MongoDb"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --env<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"quarkus.mongodb.database=polaris"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --env<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"quarkus.mongodb.connection-string=<mongodb-connection-string>"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> apache/polaris-admin-tool:latest purge -r realm1
</span></span></code></pre></div><p>Again, the Polaris Admin Tool must be executed with appropriate configuration to connect to the same database used by the Polaris server. The configuration can be done via environment variables (as above) or system properties.</p><h2 id=nosql-specific-operations id=nosql-specific-operations>NoSQL Specific Operations<a class=heading-anchor href=#nosql-specific-operations aria-label=Anchor>🔗</a></h2><p>The <code>nosql</code> admin tool command is used to [...]
Sub-commands specific to NoSQL persistence.
-h, --help Show this help message and exit.
diff --git a/in-dev/unreleased/command-line-interface/index.html b/in-dev/unreleased/command-line-interface/index.html
index e60357df2d..4291cd25e7 100644
--- a/in-dev/unreleased/command-line-interface/index.html
+++ b/in-dev/unreleased/command-line-interface/index.html
@@ -6,7 +6,7 @@ usage: polaris [-h] [options] COMMAND ... options: -h, --help show this help mes
The basic syntax of the Polaris CLI is outlined below:
usage: polaris [-h] [options] COMMAND ... options: -h, --help show this help message and exit Global Options: --host HOST Polaris server hostname --port PORT Polaris server port --base-url BASE_URL Complete base URL (overrides host/port) --client-id CLIENT_ID OAuth client ID --client-secret CLIENT_SECRET OAuth client secret --access-token ACCESS_TOKEN OAuth access token --realm REALM Polaris realm (default: from server) --header HEADER Context header name (default: Polaris-Realm) --profi [...]
The basic syntax of the Polaris CLI is outlined below:
-usage: polaris [-h] [options] COMMAND ... options: -h, --help show this help message and exit Global Options: --host HOST Polaris server hostname --port PORT Polaris server port --base-url BASE_URL Complete base URL (overrides host/port) --client-id CLIENT_ID OAuth client ID --client-secret CLIENT_SECRET OAuth client secret --access-token ACCESS_TOKEN OAuth access token --realm REALM Polaris realm (default: from server) --header HEADER Context header name (default: Polaris-Realm) --profi [...]
+usage: polaris [-h] [options] COMMAND ... options: -h, --help show this help message and exit Global Options: --host HOST Polaris server hostname --port PORT Polaris server port --base-url BASE_URL Complete base URL (overrides host/port) --client-id CLIENT_ID OAuth client ID --client-secret CLIENT_SECRET OAuth client secret --access-token ACCESS_TOKEN OAuth access token --realm REALM Polaris realm (default: from server) --header HEADER Context header name (default: Polaris-Realm) --profi [...]
<label for=m-in-devunreleased-check><a href=/in-dev/unreleased/ title="Apache Polaris Documentation (Unreleased)" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleased><span>Unreleased</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-in-devunreleasedgetting-started-li><input type=checkbox id=m-in-devunreleasedgetting-started-check>
<label for=m-in-devunreleasedgetting-started-check><a href=/in-dev/unreleased/getting-started/ title="Getting Started with Apache Polaris" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleasedgetting-started><span>Getting Started</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedquick-start-li><input type=checkbox id=m-in-devunreleasedgetting-star [...]
<label for=m-in-devunreleasedgetting-startedquick-start-check><a href=/in-dev/unreleased/getting-started/quick-start/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-in-devunreleasedgetting-startedquick-start><span>Quickstart</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedsetup-tools-li><input type=checkbox id=m-in-devunreleasedgetting-startedsetup-tools-check>
diff --git a/in-dev/unreleased/configuration/configuration-reference/index.html b/in-dev/unreleased/configuration/configuration-reference/index.html
index db897d0401..b2c563af3f 100644
--- a/in-dev/unreleased/configuration/configuration-reference/index.html
+++ b/in-dev/unreleased/configuration/configuration-reference/index.html
@@ -10,7 +10,7 @@ Table of Contents🔗 Features & Behavior Authentication & Authorization Storage
polaris.features."ADD_TRAILING_SLASH_TO_LOCATION"🔗 When set, the base location for a table or namespace will have / added as a suffix if not present'><meta itemprop=wordCount content="5801"><meta name=twitter:card content="summary"><meta name=twitter:title content="Configuration Reference"><meta name=twitter:description content='This document provides a comprehensive reference for all Polaris configuration options.
All properties listed here are runtime properties and can be changed without rebuilding Polaris.
Table of Contents🔗 Features & Behavior Authentication & Authorization Storage & Credentials Persistence Events Operational Other Features & Behavior🔗 polaris.features🔗 Feature configurations for Polaris. These are stable, user-facing settings.
-polaris.features."ADD_TRAILING_SLASH_TO_LOCATION"🔗 When set, the base location for a table or namespace will have / added as a suffix if not present'><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css rel=stylesheet integrity="sha256-PXPPJ8EAmx3J [...]
+polaris.features."ADD_TRAILING_SLASH_TO_LOCATION"🔗 When set, the base location for a table or namespace will have / added as a suffix if not present'><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css rel=stylesheet integrity="sha256-PXPPJ8EAmx3J [...]
<label for=m-in-devunreleased-check><a href=/in-dev/unreleased/ title="Apache Polaris Documentation (Unreleased)" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleased><span>Unreleased</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-in-devunreleasedgetting-started-li><input type=checkbox id=m-in-devunreleasedgetting-started-check>
<label for=m-in-devunreleasedgetting-started-check><a href=/in-dev/unreleased/getting-started/ title="Getting Started with Apache Polaris" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleasedgetting-started><span>Getting Started</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedquick-start-li><input type=checkbox id=m-in-devunreleasedgetting-star [...]
<label for=m-in-devunreleasedgetting-startedquick-start-check><a href=/in-dev/unreleased/getting-started/quick-start/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-in-devunreleasedgetting-startedquick-start><span>Quickstart</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedsetup-tools-li><input type=checkbox id=m-in-devunreleasedgetting-startedsetup-tools-check>
diff --git a/in-dev/unreleased/configuration/configuring-polaris-for-production/configuring-aws-s3-cloud-storage-specific/index.html b/in-dev/unreleased/configuration/configuring-polaris-for-production/configuring-aws-s3-cloud-storage-specific/index.html
index eda2065f6e..ff36ae9ab0 100644
--- a/in-dev/unreleased/configuration/configuring-polaris-for-production/configuring-aws-s3-cloud-storage-specific/index.html
+++ b/in-dev/unreleased/configuration/configuring-polaris-for-production/configuring-aws-s3-cloud-storage-specific/index.html
@@ -1,4 +1,4 @@
-<!doctype html><html itemscope itemtype=http://schema.org/WebPage lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon.png sizes=100x100><link rel=icon type=image/png href=/favicons/android-ch [...]
+<!doctype html><html itemscope itemtype=http://schema.org/WebPage lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon.png sizes=100x100><link rel=icon type=image/png href=/favicons/android-ch [...]
<label for=m-in-devunreleased-check><a href=/in-dev/unreleased/ title="Apache Polaris Documentation (Unreleased)" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleased><span>Unreleased</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-in-devunreleasedgetting-started-li><input type=checkbox id=m-in-devunreleasedgetting-started-check>
<label for=m-in-devunreleasedgetting-started-check><a href=/in-dev/unreleased/getting-started/ title="Getting Started with Apache Polaris" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleasedgetting-started><span>Getting Started</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedquick-start-li><input type=checkbox id=m-in-devunreleasedgetting-star [...]
<label for=m-in-devunreleasedgetting-startedquick-start-check><a href=/in-dev/unreleased/getting-started/quick-start/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-in-devunreleasedgetting-startedquick-start><span>Quickstart</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedsetup-tools-li><input type=checkbox id=m-in-devunreleasedgetting-startedsetup-tools-check>
@@ -84,16 +84,16 @@ credentials automatically.</li><li><strong>EC2</strong> — attach an IAM instan
IMDS.</li><li><strong>Static credentials</strong> — set <code>AWS_ACCESS_KEY_ID</code>, <code>AWS_SECRET_ACCESS_KEY</code>, optionally
<code>AWS_SESSION_TOKEN</code> and <code>AWS_REGION</code> in the Polaris container’s environment. Suitable for local
development only.</li></ul><p>Any other AWS compute environment that participates in the standard AWS SDK credentials chain
-should also work, though the patterns above are the ones we have validated.</p><p>Whichever mechanism is used, the resulting identity needs a single permission to talk to STS:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-json data-lang=json><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;colo [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span> <span style=color:#204a87;font-weight:700>"Version"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"2012-10-17"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span> <span style=color:#204a87;font-weight:700>"Statement"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span> <span style=color:#000;font-weight:700>{</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span> <span style=color:#204a87;font-weight:700>"Effect"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"Allow"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span> <span style=color:#204a87;font-weight:700>"Action"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"sts:AssumeRole"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span> <span style=color:#204a87;font-weight:700>"Resource"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"arn:aws:iam::123456789012:role/polaris-warehouse-access"</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span> <span style=color:#000;font-weight:700>}</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span> <span style=color:#000;font-weight:700>]</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">10</span><span><span style=color:#000;font-weight:700>}</span>
+should also work, though the patterns above are the ones we have validated.</p><p>Whichever mechanism is used, the resulting identity needs a single permission to talk to STS:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-json data-lang=json><span style=display:flex><span><span style=color:#000;font-weight:700>{</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"Version"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"2012-10-17"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"Statement"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>{</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"Effect"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"Allow"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"Action"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"sts:AssumeRole"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"Resource"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"arn:aws:iam::123456789012:role/polaris-warehouse-access"</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>}</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>]</span>
+</span></span><span style=display:flex><span><span style=color:#000;font-weight:700>}</span>
</span></span></code></pre></div><p><code>Resource</code> should list every catalog access role Polaris is expected to assume; use a wildcard
(for example <code>arn:aws:iam::123456789012:role/polaris-*</code>) only when role names follow a strict
naming convention that the AWS account owner controls.</p><p>The ARN of this identity is the <code>Principal</code> that the catalog access role’s trust policy must
@@ -107,127 +107,127 @@ must:</p><ol><li>Grant the actions required for object access on the bucket and
the relevant <code>kms:*</code> actions).</li><li>Trust the Polaris service principal — typically the IAM role that the Polaris server runs as.
Polaris fills the <code>sts:AssumeRole</code> request with an <code>externalId</code> when one is configured. The
trust policy must accept the same external ID.</li></ol><p>Using <code>externalId</code> is recommended for cross-account or hosted Polaris deployments to mitigate the
-confused-deputy problem. A minimal trust policy looks like:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-json data-lang=json><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 1</span><span><span style=color:#000;font-weight:700>{</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span> <span style=color:#204a87;font-weight:700>"Version"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"2012-10-17"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span> <span style=color:#204a87;font-weight:700>"Statement"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span> <span style=color:#000;font-weight:700>{</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span> <span style=color:#204a87;font-weight:700>"Effect"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"Allow"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span> <span style=color:#204a87;font-weight:700>"Principal"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span> <span style=color:#204a87;font-weight:700>"AWS"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"arn:aws: [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span> <span style=color:#204a87;font-weight:700>"Action"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"sts:AssumeRole"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span> <span style=color:#204a87;font-weight:700>"Condition"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span> <span style=color:#204a87;font-weight:700>"StringEquals"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span> <span style=color:#204a87;font-weight:700>"sts:ExternalId"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">10</span><span> <span style=color:#000;font-weight:700>}</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">11</span><span> <span style=color:#000;font-weight:700>}</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">12</span><span> <span style=color:#000;font-weight:700>]</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">13</span><span><span style=color:#000;font-weight:700>}</span>
+confused-deputy problem. A minimal trust policy looks like:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-json data-lang=json><span style=display:flex><span><span style=color:#000;font-weight:700>{</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"Version"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"2012-10-17"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"Statement"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>{</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"Effect"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"Allow"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"Principal"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span> <span style=color:#204a87;font-weight:700>"AWS"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"arn:aws:iam::123456789012:role/polaris-server"</span> <span style=color:#000;font-weight:700>},</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"Action"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"sts:AssumeRole"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"Condition"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"StringEquals"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span> <span style=color:#204a87;font-weight:700>"sts:ExternalId"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"polaris-prod"</span> <span style=color:#000;font-weight:700>}</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>}</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>}</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>]</span>
+</span></span><span style=display:flex><span><span style=color:#000;font-weight:700>}</span>
</span></span></code></pre></div><h2 id=catalog-storage-configuration id=catalog-storage-configuration>Catalog storage configuration<a class=heading-anchor href=#catalog-storage-configuration aria-label=Anchor>🔗</a></h2><p>Provide the role ARN, region, and <code>externalId</code> when creating the catalog. The token in the
<code>Authorization</code> header below is the Polaris admin bearer token obtained from
<code>/api/catalog/v1/oauth/tokens</code> (see <a href=/in-dev/unreleased/configuration/configuring-polaris-for-production/>Configuring Polaris for Production</a> for
-how to bootstrap and issue admin tokens).</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 1</span><span>curl -X POST https://<polaris-host>/management/v1/catalogs <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span> -H <span style=color:#4e9a06>"Authorization: Bearer </span><span style=color:#000>$TOKEN</span><span style=color:#4e9a06>"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span> -H <span style=color:#4e9a06>"Content-Type: application/json"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span> -d <span style=color:#4e9a06>'{
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span><span style=color:#4e9a06> "catalog": {
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span><span style=color:#4e9a06> "type": "INTERNAL",
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span><span style=color:#4e9a06> "name": "warehouse_s3",
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span><span style=color:#4e9a06> "properties": { "default-base-location": "s3://warehouse-bucket/prod/" },
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span><span style=color:#4e9a06> "storageConfigInfo": {
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">10</span><span><span style=color:#4e9a06> "storageType": "S3",
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">11</span><span><span style=color:#4e9a06> "roleArn": "arn:aws:iam::123456789012:role/polaris-warehouse-access",
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">12</span><span><span style=color:#4e9a06> "externalId": "polaris-prod",
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">13</span><span><span style=color:#4e9a06> "region": "us-east-1"
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">14</span><span><span style=color:#4e9a06> }
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">15</span><span><span style=color:#4e9a06> }
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">16</span><span><span style=color:#4e9a06> }'</span>
+how to bootstrap and issue admin tokens).</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span>curl -X POST https://<polaris-host>/management/v1/catalogs <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -H <span style=color:#4e9a06>"Authorization: Bearer </span><span style=color:#000>$TOKEN</span><span style=color:#4e9a06>"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -H <span style=color:#4e9a06>"Content-Type: application/json"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -d <span style=color:#4e9a06>'{
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "catalog": {
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "type": "INTERNAL",
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "name": "warehouse_s3",
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "properties": { "default-base-location": "s3://warehouse-bucket/prod/" },
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "storageConfigInfo": {
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "storageType": "S3",
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "roleArn": "arn:aws:iam::123456789012:role/polaris-warehouse-access",
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "externalId": "polaris-prod",
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "region": "us-east-1"
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> }
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> }
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> }'</span>
</span></span></code></pre></div><p>The role ARN is validated against the pattern enforced by <code>AwsStorageConfigurationInfo</code>; an
ill-formed ARN is rejected at catalog creation time.</p><h2 id=server-side-encryption-with-kms id=server-side-encryption-with-kms>Server-side encryption with KMS<a class=heading-anchor href=#server-side-encryption-with-kms aria-label=Anchor>🔗</a></h2><p>When the bucket uses SSE-KMS, supply both <code>currentKmsKey</code> (the key Polaris should use for writes)
and <code>allowedKmsKeys</code> (every key the catalog is allowed to read from). The two fields are processed
independently in <code>AwsCredentialsStorageIntegration</code>, so the write key must be included in
-<code>allowedKmsKeys</code> as well if you want it readable through vended credentials:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-json data-lang=json><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 1</span><span><span style=color:#4e9a06>"storageConfigInfo"</span><s [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span> <span style=color:#204a87;font-weight:700>"storageType"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"S3"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span> <span style=color:#204a87;font-weight:700>"roleArn"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"..."</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span> <span style=color:#204a87;font-weight:700>"region"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"us-east-1"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span> <span style=color:#204a87;font-weight:700>"currentKmsKey"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"arn:aws:kms:us-east-1:123456789012:key/aaaa-bbbb"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span> <span style=color:#204a87;font-weight:700>"allowedKmsKeys"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span> <span style=color:#4e9a06>"arn:aws:kms:us-east-1:123456789012:key/aaaa-bbbb"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span> <span style=color:#4e9a06>"arn:aws:kms:us-east-1:123456789012:key/cccc-dddd"</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span> <span style=color:#000;font-weight:700>]</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">10</span><span><span style=color:#000;font-weight:700>}</span>
+<code>allowedKmsKeys</code> as well if you want it readable through vended credentials:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-json data-lang=json><span style=display:flex><span><span style=color:#4e9a06>"storageConfigInfo"</span><span style=color:#a40000>:</span> <span style=color:#000;font-weight:700>{</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"storageType"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"S3"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"roleArn"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"..."</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"region"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"us-east-1"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"currentKmsKey"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"arn:aws:kms:us-east-1:123456789012:key/aaaa-bbbb"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"allowedKmsKeys"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span>
+</span></span><span style=display:flex><span> <span style=color:#4e9a06>"arn:aws:kms:us-east-1:123456789012:key/aaaa-bbbb"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#4e9a06>"arn:aws:kms:us-east-1:123456789012:key/cccc-dddd"</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>]</span>
+</span></span><span style=display:flex><span><span style=color:#000;font-weight:700>}</span>
</span></span></code></pre></div><p>The IAM role’s policy must include <code>kms:GenerateDataKey</code> and <code>kms:Decrypt</code> on <code>currentKmsKey</code> and
<code>kms:Decrypt</code> on every key listed in <code>allowedKmsKeys</code>, and each key policy must grant the same to
the role principal.</p><p>If the deployment does not use KMS, set <code>kmsUnavailable</code> to <code>true</code> so Polaris will not request
-KMS-related session permissions:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-json data-lang=json><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span><span style=color:#4e9a06>"kmsUnavailable"</span><span style=color:#a40000>:</span> <span style=color:#204a87; [...]
+KMS-related session permissions:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-json data-lang=json><span style=display:flex><span><span style=color:#4e9a06>"kmsUnavailable"</span><span style=color:#a40000>:</span> <span style=color:#204a87;font-weight:700>true</span>
</span></span></code></pre></div><h2 id=s3-compatible-endpoints id=s3-compatible-endpoints>S3-compatible endpoints<a class=heading-anchor href=#s3-compatible-endpoints aria-label=Anchor>🔗</a></h2><p>Polaris can be pointed at S3-compatible object stores (MinIO, Ceph RGW, Apache Ozone S3 gateway).
The available fields are:</p><ul><li><code>endpoint</code> — the S3 API endpoint Polaris and its clients should call.</li><li><code>endpointInternal</code> — optional, used by the Polaris server when the in-cluster endpoint differs
from the one returned to clients.</li><li><code>pathStyleAccess</code> — set to <code>true</code> for backends that do not support virtual-host-style addressing.</li><li><code>stsEndpoint</code> — STS endpoint; defaults to <code>endpointInternal</code> then <code>endpoint</code> when not set.</li><li><code>stsUnavailable</code> — set to <code>true</code> when the backend does not implement STS.</li></ul><p>The credential-vending guarantee at the top of this page assumes that the backend [...]
For AWS S3 and S3-compatible backends that expose the STS API (such as MinIO), leave
-<code>stsUnavailable</code> unset (or <code>false</code>) and the vended-credentials flow described above works as is.</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-json data-lang=json><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span><span style=color:#4e9a06>"s [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> <span style=color:#204a87;font-weight:700>"storageType"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"S3"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> <span style=color:#204a87;font-weight:700>"endpoint"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"https://s3.internal.example.com"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> <span style=color:#204a87;font-weight:700>"pathStyleAccess"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#204a87;font-weight:700>true</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span> <span style=color:#204a87;font-weight:700>"region"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"us-east-1"</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">6</span><span><span style=color:#000;font-weight:700>}</span>
+<code>stsUnavailable</code> unset (or <code>false</code>) and the vended-credentials flow described above works as is.</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-json data-lang=json><span style=display:flex><span><span style=color:#4e9a06>"storageConfigInfo"</span><span style=color:#a40000>:</span> <span style=color:#000;font-weight:700>{</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"storageType"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"S3"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"endpoint"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"https://s3.internal.example.com"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"pathStyleAccess"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#204a87;font-weight:700>true</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"region"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"us-east-1"</span>
+</span></span><span style=display:flex><span><span style=color:#000;font-weight:700>}</span>
</span></span></code></pre></div><p>For S3-compatible backends without STS (Apache Ozone S3 gateway, or Ceph RGW without STS enabled),
set <code>stsUnavailable: true</code>. Polaris will then skip subscoped credential vending entirely, and the
client must omit <code>X-Iceberg-Access-Delegation: vended-credentials</code> and authenticate to the object
store directly. The Polaris guides for <a href=../../../../guides/ozone/>Apache Ozone</a> and <a href=../../../../guides/ceph/>Ceph</a> show
-this pattern end-to-end.</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-json data-lang=json><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span><span style=color:#4e9a06>"storageConfigInfo"</span><span style=color:#a40000>:</span> <span style=color:#000;font-wei [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> <span style=color:#204a87;font-weight:700>"storageType"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"S3"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> <span style=color:#204a87;font-weight:700>"endpoint"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"https://s3.internal.example.com"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> <span style=color:#204a87;font-weight:700>"pathStyleAccess"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#204a87;font-weight:700>true</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span> <span style=color:#204a87;font-weight:700>"stsUnavailable"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#204a87;font-weight:700>true</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">6</span><span> <span style=color:#204a87;font-weight:700>"region"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"us-east-1"</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">7</span><span><span style=color:#000;font-weight:700>}</span>
+this pattern end-to-end.</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-json data-lang=json><span style=display:flex><span><span style=color:#4e9a06>"storageConfigInfo"</span><span style=color:#a40000>:</span> <span style=color:#000;font-weight:700>{</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"storageType"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"S3"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"endpoint"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"https://s3.internal.example.com"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"pathStyleAccess"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#204a87;font-weight:700>true</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"stsUnavailable"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#204a87;font-weight:700>true</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"region"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"us-east-1"</span>
+</span></span><span style=display:flex><span><span style=color:#000;font-weight:700>}</span>
</span></span></code></pre></div><h2 id=client-configuration id=client-configuration>Client configuration<a class=heading-anchor href=#client-configuration aria-label=Anchor>🔗</a></h2><p>Engines connect through the Iceberg REST API and let Polaris vend credentials at table-load time;
-they do not need static AWS credentials when STS is available.</p><p>Spark example, matching the property names used by the existing MinIO / RustFS guides:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 1</spa [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span> --packages org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:1.10.1,org.apache.iceberg:iceberg-aws-bundle:1.10.1 <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span> --conf spark.sql.extensions<span style=color:#ce5c00;font-weight:700>=</span>org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span> --conf spark.sql.catalog.polaris<span style=color:#ce5c00;font-weight:700>=</span>org.apache.iceberg.spark.SparkCatalog <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span> --conf spark.sql.catalog.polaris.type<span style=color:#ce5c00;font-weight:700>=</span>rest <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span> --conf spark.sql.catalog.polaris.uri<span style=color:#ce5c00;font-weight:700>=</span>https://<polaris-host>/api/catalog <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span> --conf spark.sql.catalog.polaris.oauth2-server-uri<span style=color:#ce5c00;font-weight:700>=</span>https://<polaris-host>/api/catalog/v1/oauth/tokens <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span> --conf spark.sql.catalog.polaris.token-refresh-enabled<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#204a87>false</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span> --conf spark.sql.catalog.polaris.warehouse<span style=color:#ce5c00;font-weight:700>=</span>warehouse_s3 <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">10</span><span> --conf spark.sql.catalog.polaris.scope<span style=color:#ce5c00;font-weight:700>=</span>PRINCIPAL_ROLE:ALL <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">11</span><span> --conf spark.sql.catalog.polaris.credential<span style=color:#ce5c00;font-weight:700>=</span><client-id>:<client-secret> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">12</span><span> --conf spark.sql.catalog.polaris.header.X-Iceberg-Access-Delegation<span style=color:#ce5c00;font-weight:700>=</span>vended-credentials
+they do not need static AWS credentials when STS is available.</p><p>Spark example, matching the property names used by the existing MinIO / RustFS guides:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span>bin/spark-sql <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --packages org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:1.10.1,org.apache.iceberg:iceberg-aws-bundle:1.10.1 <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --conf spark.sql.extensions<span style=color:#ce5c00;font-weight:700>=</span>org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --conf spark.sql.catalog.polaris<span style=color:#ce5c00;font-weight:700>=</span>org.apache.iceberg.spark.SparkCatalog <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --conf spark.sql.catalog.polaris.type<span style=color:#ce5c00;font-weight:700>=</span>rest <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --conf spark.sql.catalog.polaris.uri<span style=color:#ce5c00;font-weight:700>=</span>https://<polaris-host>/api/catalog <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --conf spark.sql.catalog.polaris.oauth2-server-uri<span style=color:#ce5c00;font-weight:700>=</span>https://<polaris-host>/api/catalog/v1/oauth/tokens <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --conf spark.sql.catalog.polaris.token-refresh-enabled<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#204a87>false</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --conf spark.sql.catalog.polaris.warehouse<span style=color:#ce5c00;font-weight:700>=</span>warehouse_s3 <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --conf spark.sql.catalog.polaris.scope<span style=color:#ce5c00;font-weight:700>=</span>PRINCIPAL_ROLE:ALL <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --conf spark.sql.catalog.polaris.credential<span style=color:#ce5c00;font-weight:700>=</span><client-id>:<client-secret> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --conf spark.sql.catalog.polaris.header.X-Iceberg-Access-Delegation<span style=color:#ce5c00;font-weight:700>=</span>vended-credentials
</span></span></code></pre></div><p>The <code>oauth2-server-uri</code> is recommended: without it the Iceberg REST client falls back to a
hard-coded <code>/v1/oauth/tokens</code> path and logs a deprecation warning, since the automatic fallback
is slated for removal in a future Iceberg release.</p><p>For Trino, use the Iceberg connector with the REST catalog. The REST/OAuth2 properties talk to
Polaris, and Polaris vends the endpoint, path-style flag, and region together with the scoped
credentials (<code>s3.endpoint</code>, <code>s3.path-style-access</code>, <code>client.region</code> in the load-table response),
so they do not need to be repeated on the client. The native S3 filesystem still has to be
-enabled on the Trino side:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-properties data-lang=properties><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 1</span><span><span style=color:#c4a000>connector.name</span><span style=color:#ce5c00;font-weight:700>=</span><span style=co [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span><span style=color:#c4a000>iceberg.catalog.type</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>rest</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span><span style=color:#c4a000>iceberg.rest-catalog.uri</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>https://<polaris-host>/api/catalog</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span><span style=color:#c4a000>iceberg.rest-catalog.warehouse</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>warehouse_s3</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span><span style=color:#c4a000>iceberg.rest-catalog.security</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>OAUTH2</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span><span style=color:#c4a000>iceberg.rest-catalog.oauth2.credential</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06><client-id>:<client-secret></span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span><span style=color:#c4a000>iceberg.rest-catalog.oauth2.scope</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>PRINCIPAL_ROLE:ALL</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span><span style=color:#c4a000>iceberg.rest-catalog.oauth2.server-uri</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>https://<polaris-host>/api/catalog/v1/oauth/tokens</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span><span style=color:#c4a000>iceberg.rest-catalog.vended-credentials-enabled</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>true</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">10</span><span><span style=color:#c4a000>fs.native-s3.enabled</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>true</span>
+enabled on the Trino side:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-properties data-lang=properties><span style=display:flex><span><span style=color:#c4a000>connector.name</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>iceberg</span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>iceberg.catalog.type</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>rest</span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>iceberg.rest-catalog.uri</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>https://<polaris-host>/api/catalog</span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>iceberg.rest-catalog.warehouse</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>warehouse_s3</span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>iceberg.rest-catalog.security</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>OAUTH2</span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>iceberg.rest-catalog.oauth2.credential</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06><client-id>:<client-secret></span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>iceberg.rest-catalog.oauth2.scope</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>PRINCIPAL_ROLE:ALL</span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>iceberg.rest-catalog.oauth2.server-uri</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>https://<polaris-host>/api/catalog/v1/oauth/tokens</span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>iceberg.rest-catalog.vended-credentials-enabled</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>true</span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>fs.native-s3.enabled</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>true</span>
</span></span></code></pre></div><p>For PyIceberg, use the <code>rest</code> catalog type. The same Polaris-side properties (<code>uri</code>, <code>warehouse</code>,
<code>credential</code>, <code>scope</code>, <code>oauth2-server-uri</code>) apply, and the vended-credential header must be
-forwarded as a REST header:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-python data-lang=python><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 1</span><span><span style=color:#204a87;font-weight:700>from</span> <span style=color:#000>pyiceberg.catalog.rest</span> <span style [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span><span style=color:#000>cat</span> <span style=color:#ce5c00;font-weight:700>=</span> <span style=color:#000>RestCatalog</span><span style=color:#000;font-weight:700>(</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span> <span style=color:#000>name</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"polaris"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span> <span style=color:#ce5c00;font-weight:700>**</span><span style=color:#000;font-weight:700>{</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span> <span style=color:#4e9a06>"uri"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"https://<polaris-host>/api/catalog"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span> <span style=color:#4e9a06>"warehouse"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"warehouse_s3"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span> <span style=color:#4e9a06>"credential"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"<client-id>:<client-secret>"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span> <span style=color:#4e9a06>"scope"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"PRINCIPAL_ROLE:ALL"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">10</span><span> <span style=color:#4e9a06>"oauth2-server-uri"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"https://<polaris-host>/api/catalog/v1/oauth/tokens"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">11</span><span> <span style=color:#4e9a06>"header.X-Iceberg-Access-Delegation"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"vended-credentials"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">12</span><span> <span style=color:#000;font-weight:700>},</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">13</span><span><span style=color:#000;font-weight:700>)</span>
+forwarded as a REST header:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-python data-lang=python><span style=display:flex><span><span style=color:#204a87;font-weight:700>from</span> <span style=color:#000>pyiceberg.catalog.rest</span> <span style=color:#204a87;font-weight:700>import</span> <span style=color:#000>RestCatalog</span>
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span><span style=color:#000>cat</span> <span style=color:#ce5c00;font-weight:700>=</span> <span style=color:#000>RestCatalog</span><span style=color:#000;font-weight:700>(</span>
+</span></span><span style=display:flex><span> <span style=color:#000>name</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"polaris"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#ce5c00;font-weight:700>**</span><span style=color:#000;font-weight:700>{</span>
+</span></span><span style=display:flex><span> <span style=color:#4e9a06>"uri"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"https://<polaris-host>/api/catalog"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#4e9a06>"warehouse"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"warehouse_s3"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#4e9a06>"credential"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"<client-id>:<client-secret>"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#4e9a06>"scope"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"PRINCIPAL_ROLE:ALL"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#4e9a06>"oauth2-server-uri"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"https://<polaris-host>/api/catalog/v1/oauth/tokens"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#4e9a06>"header.X-Iceberg-Access-Delegation"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"vended-credentials"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>},</span>
+</span></span><span style=display:flex><span><span style=color:#000;font-weight:700>)</span>
</span></span></code></pre></div><p>Polaris returns the vended S3 properties (<code>s3.access-key-id</code>, <code>s3.secret-access-key</code>,
<code>s3.session-token</code>) to the client at table-load time, so static credentials should not be
configured on the PyIceberg side.</p><h2 id=verifying-the-setup id=verifying-the-setup>Verifying the setup<a class=heading-anchor href=#verifying-the-setup aria-label=Anchor>🔗</a></h2><p>A successful end-to-end test should be possible without giving the client any long-lived AWS
-credentials:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-sql data-lang=sql><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span><span style=color:#204a87;font-weight:700>CREATE</span><span style=color:#f8f8f8> </span><span style=color:#000>NAMESPACE</span><span style= [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#204a87;font-weight:700>CREATE</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>TABLE</span><span style=color:#f8f8f8> </span><span style=color:#000>warehouse_s3</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>demo</span><span style=c [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span><span style=color:#204a87;font-weight:700>INSERT</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>INTO</span><span style=color:#f8f8f8> </span><span style=color:#000>warehouse_s3</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>demo</span><span style=co [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span><span style=color:#204a87;font-weight:700>SELECT</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>*</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>FROM</span><span style=color:#f8f8f8> </span><span style=color:#000>warehouse_s3</span><span style [...]
+credentials:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-sql data-lang=sql><span style=display:flex><span><span style=color:#204a87;font-weight:700>CREATE</span><span style=color:#f8f8f8> </span><span style=color:#000>NAMESPACE</span><span style=color:#f8f8f8> </span><span style=color:#000>warehouse_s3</span><span style=color:#000;font-weight:700>.</span><span style=colo [...]
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>CREATE</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>TABLE</span><span style=color:#f8f8f8> </span><span style=color:#000>warehouse_s3</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>demo</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>t</span><span style=color:#f8f8f8> </span><span style=color:#000;font- [...]
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>INSERT</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>INTO</span><span style=color:#f8f8f8> </span><span style=color:#000>warehouse_s3</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>demo</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>t</span><span style=color:#f8f8f8> </span><span style=color:#204a87;fon [...]
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>SELECT</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>*</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>FROM</span><span style=color:#f8f8f8> </span><span style=color:#000>warehouse_s3</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>demo</span><span style=color:#000;font-weight:700>.</span><span styl [...]
</span></span></span></code></pre></div><p>If <code>INSERT</code> or <code>SELECT</code> fails with a 403, the most common causes are:</p><ul><li>The IAM role’s trust policy does not match the <code>roleArn</code> / <code>externalId</code> Polaris is presenting.</li><li>The role grants S3 permissions but is missing the KMS actions for <code>currentKmsKey</code>.</li><li>The bucket policy denies access from outside a specific VPC endpoint.</li></ul><p>Polaris logs the assumed-role S [...]
which identity is being presented.</p></div></main></div></div><footer class="td-footer row d-print-none"><div class=container-fluid><div class="row mx-md-2"><div class="td-footer__left col-6 col-sm-4 order-sm-1"><ul class=td-footer__links-list><li class=td-footer__links-item data-bs-toggle=tooltip title=Slack aria-label=Slack><a target=_blank rel=noopener href=https://apache-polaris.slack.com/ aria-label=Slack><i class="fa-regular fa-comment-dots"></i></a></li><li class=td-footer__links [...]
\ No newline at end of file
diff --git a/in-dev/unreleased/configuration/configuring-polaris-for-production/configuring-azure-blob-cloud-storage-specific/index.html b/in-dev/unreleased/configuration/configuring-polaris-for-production/configuring-azure-blob-cloud-storage-specific/index.html
index a39305288a..8cd0879a15 100644
--- a/in-dev/unreleased/configuration/configuring-polaris-for-production/configuring-azure-blob-cloud-storage-specific/index.html
+++ b/in-dev/unreleased/configuration/configuring-polaris-for-production/configuring-azure-blob-cloud-storage-specific/index.html
@@ -1,8 +1,8 @@
<!doctype html><html itemscope itemtype=http://schema.org/WebPage lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon.png sizes=100x100><link rel=icon type=image/png href=/favicons/android-ch [...]
Service principal and Polaris credentials🔗 Polaris uses the Azure SDK’s DefaultAzureCredential chain, which by default reads the service-principal credentials from environment variables. Create a service principal with data access to the storage account and pass its credentials to the Polaris process:"><meta property="og:url" content="https://polaris.apache.org/in-dev/unreleased/configuration/configuring-polaris-for-production/configuring-azure-blob-cloud-storage-specific/"><meta propert [...]
Service principal and Polaris credentials🔗 Polaris uses the Azure SDK’s DefaultAzureCredential chain, which by default reads the service-principal credentials from environment variables. Create a service principal with data access to the storage account and pass its credentials to the Polaris process:"><meta property="og:locale" content="en_us"><meta property="og:type" content="article"><meta property="article:section" content="in-dev"><meta itemprop=name content="Configuring Azure Blob [...]
-Service principal and Polaris credentials🔗 Polaris uses the Azure SDK’s DefaultAzureCredential chain, which by default reads the service-principal credentials from environment variables. Create a service principal with data access to the storage account and pass its credentials to the Polaris process:"><meta itemprop=wordCount content="1142"><meta name=twitter:card content="summary"><meta name=twitter:title content="Configuring Azure Blob Cloud Storage"><meta name=twitter:description con [...]
-Service principal and Polaris credentials🔗 Polaris uses the Azure SDK’s DefaultAzureCredential chain, which by default reads the service-principal credentials from environment variables. Create a service principal with data access to the storage account and pass its credentials to the Polaris process:"><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossori [...]
+Service principal and Polaris credentials🔗 Polaris uses the Azure SDK’s DefaultAzureCredential chain, which by default reads the service-principal credentials from environment variables. Create a service principal with data access to the storage account and pass its credentials to the Polaris process:"><meta itemprop=wordCount content="1098"><meta name=twitter:card content="summary"><meta name=twitter:title content="Configuring Azure Blob Cloud Storage"><meta name=twitter:description con [...]
+Service principal and Polaris credentials🔗 Polaris uses the Azure SDK’s DefaultAzureCredential chain, which by default reads the service-principal credentials from environment variables. Create a service principal with data access to the storage account and pass its credentials to the Polaris process:"><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossori [...]
<label for=m-in-devunreleased-check><a href=/in-dev/unreleased/ title="Apache Polaris Documentation (Unreleased)" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleased><span>Unreleased</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-in-devunreleasedgetting-started-li><input type=checkbox id=m-in-devunreleasedgetting-started-check>
<label for=m-in-devunreleasedgetting-started-check><a href=/in-dev/unreleased/getting-started/ title="Getting Started with Apache Polaris" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleasedgetting-started><span>Getting Started</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedquick-start-li><input type=checkbox id=m-in-devunreleasedgetting-star [...]
<label for=m-in-devunreleasedgetting-startedquick-start-check><a href=/in-dev/unreleased/getting-started/quick-start/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-in-devunreleasedgetting-startedquick-start><span>Quickstart</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedsetup-tools-li><input type=checkbox id=m-in-devunreleasedgetting-startedsetup-tools-check>
@@ -75,14 +75,14 @@ the storage backend for a Polaris catalog. Polaris authenticates against Azure w
of a service principal that has data-plane access to the target storage account, and then vends
short-lived SAS tokens to clients on each table-load request.</p><h2 id=service-principal-and-polaris-credentials id=service-principal-and-polaris-credentials>Service principal and Polaris credentials<a class=heading-anchor href=#service-principal-and-polaris-credentials aria-label=Anchor>🔗</a></h2><p>Polaris uses the Azure SDK’s <code>DefaultAzureCredential</code> chain, which by default reads the
service-principal credentials from environment variables. Create a service principal with data
-access to the storage account and pass its credentials to the Polaris process:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span><span style=color:#8f5902;font-style:italic># Replace <subscription&g [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span>az ad sp create-for-rbac <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> --name polaris-storage <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> --role <span style=color:#4e9a06>"Storage Blob Data Contributor"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span> --scopes <span style=color:#4e9a06>"/subscriptions/<subscription>/resourceGroups/<resource-group>/providers/Microsoft.Storage/storageAccounts/<storage-account>"</span>
-</span></span></code></pre></div><p>The command prints <code>appId</code>, <code>password</code>, and <code>tenant</code>. Set these on the Polaris server:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span>< [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#204a87>export</span> <span style=color:#000>AZURE_CLIENT_ID</span><span style=color:#ce5c00;font-weight:700>=</span><appId>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span><span style=color:#204a87>export</span> <span style=color:#000>AZURE_CLIENT_SECRET</span><span style=color:#ce5c00;font-weight:700>=</span><password>
+access to the storage account and pass its credentials to the Polaris process:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span><span style=color:#8f5902;font-style:italic># Replace <subscription>, <resource-group>, <storage-account> with your values.</span>
+</span></span><span style=display:flex><span>az ad sp create-for-rbac <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --name polaris-storage <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --role <span style=color:#4e9a06>"Storage Blob Data Contributor"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --scopes <span style=color:#4e9a06>"/subscriptions/<subscription>/resourceGroups/<resource-group>/providers/Microsoft.Storage/storageAccounts/<storage-account>"</span>
+</span></span></code></pre></div><p>The command prints <code>appId</code>, <code>password</code>, and <code>tenant</code>. Set these on the Polaris server:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span><span style=color:#204a87>export</span> <span style=color:#000>AZURE_TENANT_ID</span><span style=color:#ce5c00;font-weight [...]
+</span></span><span style=display:flex><span><span style=color:#204a87>export</span> <span style=color:#000>AZURE_CLIENT_ID</span><span style=color:#ce5c00;font-weight:700>=</span><appId>
+</span></span><span style=display:flex><span><span style=color:#204a87>export</span> <span style=color:#000>AZURE_CLIENT_SECRET</span><span style=color:#ce5c00;font-weight:700>=</span><password>
</span></span></code></pre></div><p>In a Kubernetes deployment, do not embed <code>AZURE_CLIENT_SECRET</code> in the pod spec as plain text.
Store the client secret in a Kubernetes <code>Secret</code> (or an external secret store referenced by an
operator like the Azure Key Vault provider) and project it into the Polaris container with
@@ -98,26 +98,26 @@ account. If they disagree, vended tokens are scoped against directory ACLs that
on the storage side and runtime access errors result.</li><li>A <strong>container</strong> that will hold the catalog’s namespaces and tables (for example <code>warehouse</code>).
Polaris does not create the container itself.</li><li><strong>Firewall</strong> rules that permit traffic from the Polaris control plane and from the engines that
will read the data. SAS tokens do not bypass storage-account firewalls.</li></ul><h2 id=catalog-storage-configuration id=catalog-storage-configuration>Catalog storage configuration<a class=heading-anchor href=#catalog-storage-configuration aria-label=Anchor>🔗</a></h2><p>With the service principal in place on the server, create the catalog with the storage account’s
-tenant ID and the <code>abfss://</code> location:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 1</span><span>curl -X POST https://<polaris-host>/management/v1/catalogs <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span> -H <span style=color:#4e9a06>"Authorization: Bearer </span><span style=color:#000>$TOKEN</span><span style=color:#4e9a06>"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span> -H <span style=color:#4e9a06>"Content-Type: application/json"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span> -d <span style=color:#4e9a06>'{
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span><span style=color:#4e9a06> "catalog": {
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span><span style=color:#4e9a06> "type": "INTERNAL",
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span><span style=color:#4e9a06> "name": "warehouse_azure",
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span><span style=color:#4e9a06> "properties": {
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span><span style=color:#4e9a06> "default-base-location": "abfss://warehouse@example.dfs.core.windows.net/prod/"
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">10</span><span><span style=color:#4e9a06> },
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">11</span><span><span style=color:#4e9a06> "storageConfigInfo": {
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">12</span><span><span style=color:#4e9a06> "storageType": "AZURE",
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">13</span><span><span style=color:#4e9a06> "tenantId": "00000000-0000-0000-0000-000000000000",
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">14</span><span><span style=color:#4e9a06> "hierarchical": true,
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">15</span><span><span style=color:#4e9a06> "allowedLocations": [
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">16</span><span><span style=color:#4e9a06> "abfss://warehouse@example.dfs.core.windows.net/"
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">17</span><span><span style=color:#4e9a06> ]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">18</span><span><span style=color:#4e9a06> }
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">19</span><span><span style=color:#4e9a06> }
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">20</span><span><span style=color:#4e9a06> }'</span>
+tenant ID and the <code>abfss://</code> location:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span>curl -X POST https://<polaris-host>/management/v1/catalogs <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -H <span style=color:#4e9a06>"Authorization: Bearer </span><span style=color:#000>$TOKEN</span><span style=color:#4e9a06>"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -H <span style=color:#4e9a06>"Content-Type: application/json"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -d <span style=color:#4e9a06>'{
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "catalog": {
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "type": "INTERNAL",
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "name": "warehouse_azure",
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "properties": {
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "default-base-location": "abfss://warehouse@example.dfs.core.windows.net/prod/"
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> },
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "storageConfigInfo": {
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "storageType": "AZURE",
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "tenantId": "00000000-0000-0000-0000-000000000000",
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "hierarchical": true,
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "allowedLocations": [
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "abfss://warehouse@example.dfs.core.windows.net/"
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> ]
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> }
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> }
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> }'</span>
</span></span></code></pre></div><p><code>default-base-location</code> must use the <code>abfss://</code> scheme together with the ADLS Gen2 endpoint
(<code><account>.dfs.core.windows.net</code>). The <code>wasbs://</code> scheme is not supported.</p><p><code>AzureStorageConfigurationInfo</code> also accepts <code>multiTenantAppName</code> and <code>consentUrl</code>. Current
Apache Polaris code does not use these fields when communicating with Azure APIs; they are
@@ -130,53 +130,53 @@ directory-level ACL. The 403 returned by ADLS includes the path that was denied;
that exact prefix to recover.</p><p>When HNS is disabled, set <code>hierarchical: false</code>. Polaris will then issue SAS tokens scoped at the
container level rather than per-directory; this is acceptable for small deployments but does not
restrict cross-namespace access.</p><h2 id=client-configuration id=client-configuration>Client configuration<a class=heading-anchor href=#client-configuration aria-label=Anchor>🔗</a></h2><p>Engines call Polaris through the Iceberg REST API and receive SAS-token properties at table-load
-time; they do not need static Azure credentials on the client side.</p><p>Spark example, matching the property names used by the existing MinIO / RustFS guides:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 1 [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span> --packages org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:1.10.1,org.apache.iceberg:iceberg-azure-bundle:1.10.1 <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span> --conf spark.sql.extensions<span style=color:#ce5c00;font-weight:700>=</span>org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span> --conf spark.sql.catalog.polaris<span style=color:#ce5c00;font-weight:700>=</span>org.apache.iceberg.spark.SparkCatalog <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span> --conf spark.sql.catalog.polaris.type<span style=color:#ce5c00;font-weight:700>=</span>rest <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span> --conf spark.sql.catalog.polaris.uri<span style=color:#ce5c00;font-weight:700>=</span>https://<polaris-host>/api/catalog <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span> --conf spark.sql.catalog.polaris.oauth2-server-uri<span style=color:#ce5c00;font-weight:700>=</span>https://<polaris-host>/api/catalog/v1/oauth/tokens <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span> --conf spark.sql.catalog.polaris.token-refresh-enabled<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#204a87>false</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span> --conf spark.sql.catalog.polaris.warehouse<span style=color:#ce5c00;font-weight:700>=</span>warehouse_azure <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">10</span><span> --conf spark.sql.catalog.polaris.scope<span style=color:#ce5c00;font-weight:700>=</span>PRINCIPAL_ROLE:ALL <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">11</span><span> --conf spark.sql.catalog.polaris.credential<span style=color:#ce5c00;font-weight:700>=</span><client-id>:<client-secret> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">12</span><span> --conf spark.sql.catalog.polaris.header.X-Iceberg-Access-Delegation<span style=color:#ce5c00;font-weight:700>=</span>vended-credentials <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">13</span><span> --conf spark.sql.catalog.polaris.io-impl<span style=color:#ce5c00;font-weight:700>=</span>org.apache.iceberg.azure.adlsv2.ADLSFileIO
+time; they do not need static Azure credentials on the client side.</p><p>Spark example, matching the property names used by the existing MinIO / RustFS guides:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span>bin/spark-sql <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --packages org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:1.10.1,org.apache.iceberg:iceberg-azure-bundle:1.10.1 <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --conf spark.sql.extensions<span style=color:#ce5c00;font-weight:700>=</span>org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --conf spark.sql.catalog.polaris<span style=color:#ce5c00;font-weight:700>=</span>org.apache.iceberg.spark.SparkCatalog <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --conf spark.sql.catalog.polaris.type<span style=color:#ce5c00;font-weight:700>=</span>rest <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --conf spark.sql.catalog.polaris.uri<span style=color:#ce5c00;font-weight:700>=</span>https://<polaris-host>/api/catalog <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --conf spark.sql.catalog.polaris.oauth2-server-uri<span style=color:#ce5c00;font-weight:700>=</span>https://<polaris-host>/api/catalog/v1/oauth/tokens <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --conf spark.sql.catalog.polaris.token-refresh-enabled<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#204a87>false</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --conf spark.sql.catalog.polaris.warehouse<span style=color:#ce5c00;font-weight:700>=</span>warehouse_azure <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --conf spark.sql.catalog.polaris.scope<span style=color:#ce5c00;font-weight:700>=</span>PRINCIPAL_ROLE:ALL <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --conf spark.sql.catalog.polaris.credential<span style=color:#ce5c00;font-weight:700>=</span><client-id>:<client-secret> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --conf spark.sql.catalog.polaris.header.X-Iceberg-Access-Delegation<span style=color:#ce5c00;font-weight:700>=</span>vended-credentials <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --conf spark.sql.catalog.polaris.io-impl<span style=color:#ce5c00;font-weight:700>=</span>org.apache.iceberg.azure.adlsv2.ADLSFileIO
</span></span></code></pre></div><p>The <code>oauth2-server-uri</code> is recommended: without it the Iceberg REST client falls back to a
hard-coded <code>/v1/oauth/tokens</code> path and logs a deprecation warning, since the automatic fallback
is slated for removal in a future Iceberg release.</p><p>The Spark application must include the Iceberg Azure bundle (or <code>iceberg-azure</code> and the matching
Hadoop / Azure jars) on the classpath; Polaris does not ship these jars to the engine.</p><p>For Trino, use the Iceberg connector with the REST catalog, in the same shape as the AWS S3
-example on the sibling page:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-properties data-lang=properties><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span><span style=color:#c4a000>connector.name</span><span style=color:#ce5c00;font-weight:700>=</span><span style=c [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#c4a000>iceberg.catalog.type</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>rest</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span><span style=color:#c4a000>iceberg.rest-catalog.uri</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>https://<polaris-host>/api/catalog</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span><span style=color:#c4a000>iceberg.rest-catalog.warehouse</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>warehouse_azure</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span><span style=color:#c4a000>iceberg.rest-catalog.security</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>OAUTH2</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">6</span><span><span style=color:#c4a000>iceberg.rest-catalog.oauth2.credential</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06><client-id>:<client-secret></span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">7</span><span><span style=color:#c4a000>iceberg.rest-catalog.oauth2.scope</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>PRINCIPAL_ROLE:ALL</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">8</span><span><span style=color:#c4a000>iceberg.rest-catalog.oauth2.server-uri</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>https://<polaris-host>/api/catalog/v1/oauth/tokens</span>
+example on the sibling page:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-properties data-lang=properties><span style=display:flex><span><span style=color:#c4a000>connector.name</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>iceberg</span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>iceberg.catalog.type</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>rest</span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>iceberg.rest-catalog.uri</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>https://<polaris-host>/api/catalog</span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>iceberg.rest-catalog.warehouse</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>warehouse_azure</span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>iceberg.rest-catalog.security</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>OAUTH2</span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>iceberg.rest-catalog.oauth2.credential</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06><client-id>:<client-secret></span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>iceberg.rest-catalog.oauth2.scope</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>PRINCIPAL_ROLE:ALL</span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>iceberg.rest-catalog.oauth2.server-uri</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>https://<polaris-host>/api/catalog/v1/oauth/tokens</span>
</span></span></code></pre></div><p>For PyIceberg, use the <code>rest</code> catalog type and forward the vended-credential header as a REST
-header:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-python data-lang=python><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 1</span><span><span style=color:#204a87;font-weight:700>from</span> <span style=color:#000>pyiceberg.catalog.rest</span> <span style=color:#204a87;font- [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span><span style=color:#000>cat</span> <span style=color:#ce5c00;font-weight:700>=</span> <span style=color:#000>RestCatalog</span><span style=color:#000;font-weight:700>(</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span> <span style=color:#000>name</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"polaris"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span> <span style=color:#ce5c00;font-weight:700>**</span><span style=color:#000;font-weight:700>{</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span> <span style=color:#4e9a06>"uri"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"https://<polaris-host>/api/catalog"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span> <span style=color:#4e9a06>"warehouse"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"warehouse_azure"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span> <span style=color:#4e9a06>"credential"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"<client-id>:<client-secret>"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span> <span style=color:#4e9a06>"scope"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"PRINCIPAL_ROLE:ALL"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">10</span><span> <span style=color:#4e9a06>"oauth2-server-uri"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"https://<polaris-host>/api/catalog/v1/oauth/tokens"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">11</span><span> <span style=color:#4e9a06>"header.X-Iceberg-Access-Delegation"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"vended-credentials"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">12</span><span> <span style=color:#000;font-weight:700>},</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">13</span><span><span style=color:#000;font-weight:700>)</span>
+header:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-python data-lang=python><span style=display:flex><span><span style=color:#204a87;font-weight:700>from</span> <span style=color:#000>pyiceberg.catalog.rest</span> <span style=color:#204a87;font-weight:700>import</span> <span style=color:#000>RestCatalog</span>
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span><span style=color:#000>cat</span> <span style=color:#ce5c00;font-weight:700>=</span> <span style=color:#000>RestCatalog</span><span style=color:#000;font-weight:700>(</span>
+</span></span><span style=display:flex><span> <span style=color:#000>name</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"polaris"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#ce5c00;font-weight:700>**</span><span style=color:#000;font-weight:700>{</span>
+</span></span><span style=display:flex><span> <span style=color:#4e9a06>"uri"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"https://<polaris-host>/api/catalog"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#4e9a06>"warehouse"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"warehouse_azure"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#4e9a06>"credential"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"<client-id>:<client-secret>"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#4e9a06>"scope"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"PRINCIPAL_ROLE:ALL"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#4e9a06>"oauth2-server-uri"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"https://<polaris-host>/api/catalog/v1/oauth/tokens"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#4e9a06>"header.X-Iceberg-Access-Delegation"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"vended-credentials"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>},</span>
+</span></span><span style=display:flex><span><span style=color:#000;font-weight:700>)</span>
</span></span></code></pre></div><p>Polaris vends per-account SAS tokens to the FileIO at table-load time. The credentials are
returned under keys of the form <code>adls.sas-token.<storage-account></code> (with optional
<code>dfs.core.windows.net</code> / <code>blob.core.windows.net</code> suffixes when scoping requires it), as defined in
<code>StorageAccessProperty</code>. The PyIceberg client picks these up directly; no static account key or
-SAS token needs to be configured.</p><h2 id=verifying-the-setup id=verifying-the-setup>Verifying the setup<a class=heading-anchor href=#verifying-the-setup aria-label=Anchor>🔗</a></h2><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-sql data-lang=sql><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;c [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#204a87;font-weight:700>CREATE</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>TABLE</span><span style=color:#f8f8f8> </span><span style=color:#000>warehouse_azure</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>demo</span><span styl [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span><span style=color:#204a87;font-weight:700>INSERT</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>INTO</span><span style=color:#f8f8f8> </span><span style=color:#000>warehouse_azure</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>demo</span><span style [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span><span style=color:#204a87;font-weight:700>SELECT</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>*</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>FROM</span><span style=color:#f8f8f8> </span><span style=color:#000>warehouse_azure</span><span st [...]
+SAS token needs to be configured.</p><h2 id=verifying-the-setup id=verifying-the-setup>Verifying the setup<a class=heading-anchor href=#verifying-the-setup aria-label=Anchor>🔗</a></h2><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-sql data-lang=sql><span style=display:flex><span><span style=color:#204a87;font-weight:700>CREATE</span><span style=color:#f8f8f8> </span><span styl [...]
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>CREATE</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>TABLE</span><span style=color:#f8f8f8> </span><span style=color:#000>warehouse_azure</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>demo</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>t</span><span style=color:#f8f8f8> </span><span style=color:#000;fo [...]
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>INSERT</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>INTO</span><span style=color:#f8f8f8> </span><span style=color:#000>warehouse_azure</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>demo</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>t</span><span style=color:#f8f8f8> </span><span style=color:#204a87; [...]
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>SELECT</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>*</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>FROM</span><span style=color:#f8f8f8> </span><span style=color:#000>warehouse_azure</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>demo</span><span style=color:#000;font-weight:700>.</span><span s [...]
</span></span></span></code></pre></div><p>If any operation fails:</p><ul><li>Errors from Azure AD (<code>AADSTS*</code>) usually mean the service principal credentials in
<code>AZURE_CLIENT_ID</code> / <code>AZURE_CLIENT_SECRET</code> / <code>AZURE_TENANT_ID</code> are wrong, the secret has expired,
or the principal has no role assignment on the storage account.</li><li><code>Failed to get subscoped credentials</code> with <code>Status code 403</code> and an
diff --git a/in-dev/unreleased/configuration/configuring-polaris-for-production/configuring-gcs-cloud-storage-specific/index.html b/in-dev/unreleased/configuration/configuring-polaris-for-production/configuring-gcs-cloud-storage-specific/index.html
index b31a7654af..1858f92678 100644
--- a/in-dev/unreleased/configuration/configuring-polaris-for-production/configuring-gcs-cloud-storage-specific/index.html
+++ b/in-dev/unreleased/configuration/configuring-polaris-for-production/configuring-gcs-cloud-storage-specific/index.html
@@ -6,7 +6,7 @@ Polaris requires both IAM roles and Hierarchical Namespace (HNS) ACLs (if HNS is
All catalog operations in Polaris for Google Cloud Storage (GCS)—including listing, reading, and writing objects—are performed using credential vending, which issues scoped (vended) tokens for secure access.
Polaris requires both IAM roles and Hierarchical Namespace (HNS) ACLs (if HNS is enabled) to be properly configured. Even with the correct IAM role (e.g., roles/storage.objectAdmin), access to paths such as gs://<bucket>/idsp_ns/sample_table4/ may fail with 403 errors if HNS ACLs are missing for scoped tokens. The original access token may work, but scoped (vended) tokens require HNS ACLs on the base path or relevant subpath."><meta itemprop=wordCount content="171"><meta name=twitter:car [...]
All catalog operations in Polaris for Google Cloud Storage (GCS)—including listing, reading, and writing objects—are performed using credential vending, which issues scoped (vended) tokens for secure access.
-Polaris requires both IAM roles and Hierarchical Namespace (HNS) ACLs (if HNS is enabled) to be properly configured. Even with the correct IAM role (e.g., roles/storage.objectAdmin), access to paths such as gs://<bucket>/idsp_ns/sample_table4/ may fail with 403 errors if HNS ACLs are missing for scoped tokens. The original access token may work, but scoped (vended) tokens require HNS ACLs on the base path or relevant subpath."><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf179 [...]
+Polaris requires both IAM roles and Hierarchical Namespace (HNS) ACLs (if HNS is enabled) to be properly configured. Even with the correct IAM role (e.g., roles/storage.objectAdmin), access to paths such as gs://<bucket>/idsp_ns/sample_table4/ may fail with 403 errors if HNS ACLs are missing for scoped tokens. The original access token may work, but scoped (vended) tokens require HNS ACLs on the base path or relevant subpath."><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf179 [...]
<label for=m-in-devunreleased-check><a href=/in-dev/unreleased/ title="Apache Polaris Documentation (Unreleased)" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleased><span>Unreleased</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-in-devunreleasedgetting-started-li><input type=checkbox id=m-in-devunreleasedgetting-started-check>
<label for=m-in-devunreleasedgetting-started-check><a href=/in-dev/unreleased/getting-started/ title="Getting Started with Apache Polaris" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleasedgetting-started><span>Getting Started</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedquick-start-li><input type=checkbox id=m-in-devunreleasedgetting-star [...]
<label for=m-in-devunreleasedgetting-startedquick-start-check><a href=/in-dev/unreleased/getting-started/quick-start/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-in-devunreleasedgetting-startedquick-start><span>Quickstart</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedsetup-tools-li><input type=checkbox id=m-in-devunreleasedgetting-startedsetup-tools-check>
diff --git a/in-dev/unreleased/configuration/configuring-polaris-for-production/index.html b/in-dev/unreleased/configuration/configuring-polaris-for-production/index.html
index f9b6c4f748..afaa6e8dd5 100644
--- a/in-dev/unreleased/configuration/configuring-polaris-for-production/index.html
+++ b/in-dev/unreleased/configuration/configuring-polaris-for-production/index.html
@@ -4,9 +4,9 @@ If you are deploying Polaris using the Helm chart, make sure to review the Helm
Configure OAuth2 keys Enforce realm header validation (require-header=true) Use a durable metastore (JDBC + PostgreSQL) Bootstrap valid realms in the metastore Disable local FILE storage 📝 Note
If you are deploying Polaris using the Helm chart, make sure to review the Helm Chart Production Configuration guide as well. Configure OAuth2🔗 Polaris authentication requires specifying a token broker factory type. Two implementations are supported out of the box:"><meta property="og:locale" content="en_us"><meta property="og:type" content="website"><meta itemprop=name content="Configuring Polaris for Production"><meta itemprop=description content="The default server configuration is in [...]
Configure OAuth2 keys Enforce realm header validation (require-header=true) Use a durable metastore (JDBC + PostgreSQL) Bootstrap valid realms in the metastore Disable local FILE storage 📝 Note
-If you are deploying Polaris using the Helm chart, make sure to review the Helm Chart Production Configuration guide as well. Configure OAuth2🔗 Polaris authentication requires specifying a token broker factory type. Two implementations are supported out of the box:"><meta itemprop=wordCount content="1111"><meta name=twitter:card content="summary"><meta name=twitter:title content="Configuring Polaris for Production"><meta name=twitter:description content="The default server configuration [...]
+If you are deploying Polaris using the Helm chart, make sure to review the Helm Chart Production Configuration guide as well. Configure OAuth2🔗 Polaris authentication requires specifying a token broker factory type. Two implementations are supported out of the box:"><meta itemprop=wordCount content="1098"><meta name=twitter:card content="summary"><meta name=twitter:title content="Configuring Polaris for Production"><meta name=twitter:description content="The default server configuration [...]
Configure OAuth2 keys Enforce realm header validation (require-header=true) Use a durable metastore (JDBC + PostgreSQL) Bootstrap valid realms in the metastore Disable local FILE storage 📝 Note
-If you are deploying Polaris using the Helm chart, make sure to review the Helm Chart Production Configuration guide as well. Configure OAuth2🔗 Polaris authentication requires specifying a token broker factory type. Two implementations are supported out of the box:"><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.m [...]
+If you are deploying Polaris using the Helm chart, make sure to review the Helm Chart Production Configuration guide as well. Configure OAuth2🔗 Polaris authentication requires specifying a token broker factory type. Two implementations are supported out of the box:"><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.m [...]
<label for=m-in-devunreleased-check><a href=/in-dev/unreleased/ title="Apache Polaris Documentation (Unreleased)" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleased><span>Unreleased</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-in-devunreleasedgetting-started-li><input type=checkbox id=m-in-devunreleasedgetting-started-check>
<label for=m-in-devunreleasedgetting-started-check><a href=/in-dev/unreleased/getting-started/ title="Getting Started with Apache Polaris" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleasedgetting-started><span>Getting Started</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedquick-start-li><input type=checkbox id=m-in-devunreleasedgetting-star [...]
<label for=m-in-devunreleasedgetting-startedquick-start-check><a href=/in-dev/unreleased/getting-started/quick-start/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-in-devunreleasedgetting-startedquick-start><span>Quickstart</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedsetup-tools-li><input type=checkbox id=m-in-devunreleasedgetting-startedsetup-tools-check>
@@ -79,29 +79,29 @@ review and apply the following checklist:</p><ul><li><input disabled type=checkb
supported out of the box:</p><ul><li><a href=https://github.com/apache/polaris/blob/390f1fa57bb1af24a21aa95fdbff49a46e31add7/service/common/src/main/java/org/apache/polaris/service/auth/JWTRSAKeyPairFactory.java>rsa-key-pair</a> uses a pair of public and private keys;</li><li><a href=https://github.com/apache/polaris/blob/390f1fa57bb1af24a21aa95fdbff49a46e31add7/service/common/src/main/java/org/apache/polaris/service/auth/JWTSymmetricKeyFactory.java>symmetric-key</a> uses a shared secret [...]
as each replica will have its own set of keys. This will cause token validation to fail when a
request is routed to a different replica than the one that issued the token.</div><p>It is highly recommended to configure Polaris with previously-generated RSA keys. This can be done
-by setting the following properties:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-properties data-lang=properties><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span><span style=color:#c4a000>polaris.authentication.token-broker.type</span><span style=color:#ce5c00;fon [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#c4a000>polaris.authentication.token-broker.rsa-key-pair.public-key-file</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>/tmp/public.key</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span><span style=color:#c4a000>polaris.authentication.token-broker.rsa-key-pair.private-key-file</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>/tmp/private.key</span>
-</span></span></code></pre></div><p>To generate an RSA key pair in PKCS#8 format, you can use the following commands:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span>openssl genpkey -algorithm RSA [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span>openssl rsa -in private.key -pubout -out public.key
-</span></span></code></pre></div><p>Alternatively, you can use a symmetric key by setting the following properties:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-properties data-lang=properties><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span><span style=color:#c4a0 [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#c4a000>polaris.authentication.token-broker.symmetric-key.file</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>/tmp/symmetric.key</span>
+by setting the following properties:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-properties data-lang=properties><span style=display:flex><span><span style=color:#c4a000>polaris.authentication.token-broker.type</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>rsa-key-pair</span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>polaris.authentication.token-broker.rsa-key-pair.public-key-file</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>/tmp/public.key</span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>polaris.authentication.token-broker.rsa-key-pair.private-key-file</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>/tmp/private.key</span>
+</span></span></code></pre></div><p>To generate an RSA key pair in PKCS#8 format, you can use the following commands:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span>openssl genpkey -algorithm RSA -out private.key -pkeyopt rsa_keygen_bits:2048
+</span></span><span style=display:flex><span>openssl rsa -in private.key -pubout -out public.key
+</span></span></code></pre></div><p>Alternatively, you can use a symmetric key by setting the following properties:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-properties data-lang=properties><span style=display:flex><span><span style=color:#c4a000>polaris.authentication.token-broker.type</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>s [...]
+</span></span><span style=display:flex><span><span style=color:#c4a000>polaris.authentication.token-broker.symmetric-key.file</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>/tmp/symmetric.key</span>
</span></span></code></pre></div><p>Note: it is also possible to set the symmetric key secret directly in the configuration file. If
possible, pass the secret as an environment variable to avoid storing sensitive information in the
-configuration file:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-properties data-lang=properties><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span><span style=color:#c4a000>polaris.authentication.token-broker.symmetric-key.secret</span><span style=color:#ce5c00;font [...]
+configuration file:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-properties data-lang=properties><span style=display:flex><span><span style=color:#c4a000>polaris.authentication.token-broker.symmetric-key.secret</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>${POLARIS_SYMMETRIC_KEY_SECRET}</span>
</span></span></code></pre></div><p>Finally, you can also configure the token broker to use a maximum lifespan by setting the following
-property:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-properties data-lang=properties><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span><span style=color:#c4a000>polaris.authentication.token-broker.max-token-generation</span><span style=color:#ce5c00;font-weight:70 [...]
+property:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-properties data-lang=properties><span style=display:flex><span><span style=color:#c4a000>polaris.authentication.token-broker.max-token-generation</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>PT1H</span>
</span></span></code></pre></div><p>Typically, in Kubernetes, you would define the keys as a <code>Secret</code> and mount them as files in the
container.</p><h3 id=realm-context-resolver id=realm-context-resolver>Realm Context Resolver<a class=heading-anchor href=#realm-context-resolver aria-label=Anchor>🔗</a></h3><p>By default, Polaris resolves realms based on incoming request headers. You can configure the realm
-context resolver by setting the following properties in <code>application.properties</code>:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-properties data-lang=properties><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span><span style=color:#c4a000>polaris.realm-contex [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#c4a000>polaris.realm-context.header-name</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>Polaris-Realm</span>
+context resolver by setting the following properties in <code>application.properties</code>:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-properties data-lang=properties><span style=display:flex><span><span style=color:#c4a000>polaris.realm-context.realms</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>POLARIS,MY-REALM</span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>polaris.realm-context.header-name</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>Polaris-Realm</span>
</span></span></code></pre></div><p>Where:</p><ul><li><code>realms</code> is a comma-separated list of allowed realms. This setting <em>must</em> be correctly configured.
At least one realm must be specified.</li><li><code>header-name</code> is the name of the header used to resolve the realm; by default, it is
<code>Polaris-Realm</code>.</li></ul><p>If a request contains the specified header, Polaris will use the realm specified in the header. If
the realm is not in the list of allowed realms, Polaris will return a <code>404 Not Found</code> response.</p><p>If a request <em>does not</em> contain the specified header, however, by default Polaris will use the first
realm in the list as the default realm. In the above example, <code>POLARIS</code> is the default realm and
would be used if the <code>Polaris-Realm</code> header is not present in the request.</p><p>This is not recommended for production use, as it may lead to security vulnerabilities. To avoid
-this, set the following property to <code>true</code>:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-properties data-lang=properties><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span><span style=color:#c4a000>polaris.realm-context.require-header</span><span style=col [...]
+this, set the following property to <code>true</code>:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-properties data-lang=properties><span style=display:flex><span><span style=color:#c4a000>polaris.realm-context.require-header</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>true</span>
</span></span></code></pre></div><p>This will cause Polaris to also return a <code>404 Not Found</code> response if the realm header is not present
in the request.</p><h3 id=metastore-configuration id=metastore-configuration>Metastore Configuration<a class=heading-anchor href=#metastore-configuration aria-label=Anchor>🔗</a></h3><p>A metastore should be configured with an implementation that durably persists Polaris entities. By
default, Polaris uses an in-memory metastore.</p><div class="alert alert-primary"><p class=alert-heading>❗Important</p>The default in-memory metastore is not suitable for production use, as it will lose all data
@@ -119,25 +119,25 @@ metadata.</div><p>Note: Polaris will always create schema ‘polaris_schema&
performed <strong>only once</strong> for each realm in order to prepare the metastore to integrate with Polaris.</p><p>By default, when bootstrapping a new realm, Polaris will create randomised <code>CLIENT_ID</code> and
<code>CLIENT_SECRET</code> for the <code>root</code> principal and store their hashes in the metastore backend.</p><p>Depending on your database, this may not be convenient as the generated credentials are not stored
in clear text in the database.</p><p>In order to provide your own credentials for <code>root</code> principal (so you can request tokens via
-<code>api/catalog/v1/oauth/tokens</code>), use the <a href=../admin-tool#bootstrapping-realms-and-principal-credentials>Polaris Admin Tool</a> Bootstrap command.</p><p>You can verify the setup by attempting a token issue for the <code>root</code> principal:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span style="white-space:p [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> -d <span style=color:#4e9a06>"grant_type=client_credentials"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> -d <span style=color:#4e9a06>"client_id=my-client-id"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> -d <span style=color:#4e9a06>"client_secret=my-client-secret"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span> -d <span style=color:#4e9a06>"scope=PRINCIPAL_ROLE:ALL"</span>
-</span></span></code></pre></div><p>Which should return an access token:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-json data-lang=json><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span><span style=color:#000;font-weight:700>{</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> <span style=color:#204a87;font-weight:700>"access_token"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"..."</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> <span style=color:#204a87;font-weight:700>"token_type"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"bearer"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> <span style=color:#204a87;font-weight:700>"issued_token_type"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"urn:ietf:params:oauth:token-type:access_token"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span> <span style=color:#204a87;font-weight:700>"expires_in"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#0000cf;font-weight:700>3600</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">6</span><span><span style=color:#000;font-weight:700>}</span>
+<code>api/catalog/v1/oauth/tokens</code>), use the <a href=../admin-tool#bootstrapping-realms-and-principal-credentials>Polaris Admin Tool</a> Bootstrap command.</p><p>You can verify the setup by attempting a token issue for the <code>root</code> principal:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span>curl -X POST http:// [...]
+</span></span></span><span style=display:flex><span> -d <span style=color:#4e9a06>"grant_type=client_credentials"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -d <span style=color:#4e9a06>"client_id=my-client-id"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -d <span style=color:#4e9a06>"client_secret=my-client-secret"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -d <span style=color:#4e9a06>"scope=PRINCIPAL_ROLE:ALL"</span>
+</span></span></code></pre></div><p>Which should return an access token:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-json data-lang=json><span style=display:flex><span><span style=color:#000;font-weight:700>{</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"access_token"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"..."</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"token_type"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"bearer"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"issued_token_type"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"urn:ietf:params:oauth:token-type:access_token"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"expires_in"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#0000cf;font-weight:700>3600</span>
+</span></span><span style=display:flex><span><span style=color:#000;font-weight:700>}</span>
</span></span></code></pre></div><p>If you used a non-default realm name, add the appropriate request header to the <code>curl</code> command,
otherwise Polaris will resolve the realm to the first one in the configuration
-<code>polaris.realm-context.realms</code>. Here is an example to set realm header:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span>curl -X POST http://localhost:8181/api/catalog/v1/oauth/tokens <span [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> -H <span style=color:#4e9a06>"Polaris-Realm: my-realm"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> -d <span style=color:#4e9a06>"grant_type=client_credentials"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> -d <span style=color:#4e9a06>"client_id=my-client-id"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span> -d <span style=color:#4e9a06>"client_secret=my-client-secret"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">6</span><span> -d <span style=color:#4e9a06>"scope=PRINCIPAL_ROLE:ALL"</span>
+<code>polaris.realm-context.realms</code>. Here is an example to set realm header:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span>curl -X POST http://localhost:8181/api/catalog/v1/oauth/tokens <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -H <span style=color:#4e9a06>"Polaris-Realm: my-realm"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -d <span style=color:#4e9a06>"grant_type=client_credentials"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -d <span style=color:#4e9a06>"client_id=my-client-id"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -d <span style=color:#4e9a06>"client_secret=my-client-secret"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -d <span style=color:#4e9a06>"scope=PRINCIPAL_ROLE:ALL"</span>
</span></span></code></pre></div><h3 id=disable-file-storage-type id=disable-file-storage-type>Disable FILE Storage Type<a class=heading-anchor href=#disable-file-storage-type aria-label=Anchor>🔗</a></h3><p>By default, Polaris allows using the local file system (<code>FILE</code>) for catalog storage. This is fine for testing,
but <strong>not recommended for production</strong>. To disable it, set the supported storage types like this:</p><pre tabindex=0><code class=language-hocon data-lang=hocon>polaris.features."SUPPORTED_CATALOG_STORAGE_TYPES" = [ "S3", "Azure" ]
</code></pre><p>Leave out <code>FILE</code> to prevent its use. Only include the storage types your setup needs.</p><h3 id=review-location-compatibility-flags id=review-location-compatibility-flags>Review Location Compatibility Flags<a class=heading-anchor href=#review-location-compatibility-flags aria-label=Anchor>🔗</a></h3><p>Treat non-default location compatibility flags as part of your production deployment review.
@@ -148,7 +148,7 @@ interoperability or migration requirements. <code>OPTIMIZED_SIBLING_CHECK</code>
changes how overlap detection is performed and should only be enabled when the required index and
backfill state is known to be correct.</p><h3 id=polaris-server-header id=polaris-server-header>Polaris Server Header<a class=heading-anchor href=#polaris-server-header aria-label=Anchor>🔗</a></h3><p>Polaris can emit an informational <code>Server</code> HTTP response header using Quarkus’ built-in header
configuration. Add the following property to one of the supported configuration sources (for example,
-<code>application.properties</code>) to enable it with the Polaris version string:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-properties data-lang=properties><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span><span style=color:#c4a000>quarkus.http.header."Serve [...]
+<code>application.properties</code>) to enable it with the Polaris version string:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-properties data-lang=properties><span style=display:flex><span><span style=color:#c4a000>quarkus.http.header."Server".value</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>Polaris/${quarkus.application.ve [...]
</span></span></code></pre></div><p>If you prefer to scope the header to specific environments, only set the property for the desired
profile (for example, <code>%prod</code>).</p><h3 id=upgrade-considerations id=upgrade-considerations>Upgrade Considerations<a class=heading-anchor href=#upgrade-considerations aria-label=Anchor>🔗</a></h3><p>The <a href=../../evolution>Polaris Evolution</a> page discusses backward compatibility and
upgrade concerns.</p><h3 id=configuring-polaris-for-cloud-storages id=configuring-polaris-for-cloud-storages>Configuring Polaris for Cloud Storages<a class=heading-anchor href=#configuring-polaris-for-cloud-storages aria-label=Anchor>🔗</a></h3><p>For guidance on configuring specific cloud storage providers see child pages (links in the left-hand pane).</p><div class=section-index></div></div></main></div></div><footer class="td-footer row d-print-none"><div class=container-fluid><div cla [...]
\ No newline at end of file
diff --git a/in-dev/unreleased/configuration/configuring-polaris/index.html b/in-dev/unreleased/configuration/configuring-polaris/index.html
index 9c85553d7d..dc74fae0ca 100644
--- a/in-dev/unreleased/configuration/configuring-polaris/index.html
+++ b/in-dev/unreleased/configuration/configuring-polaris/index.html
@@ -4,9 +4,9 @@ For Production tips and best practices, refer to Configuring Polaris for Product
📝 Note
For Production tips and best practices, refer to Configuring Polaris for Production. First off, Polaris server runs on Quarkus, and uses its configuration mechanisms. Read Quarkus configuration guide to get familiar with the basics."><meta property="og:locale" content="en_us"><meta property="og:type" content="article"><meta property="article:section" content="in-dev"><meta itemprop=name content="Configuring Polaris"><meta itemprop=description content="Overview🔗 This page provides informa [...]
📝 Note
-For Production tips and best practices, refer to Configuring Polaris for Production. First off, Polaris server runs on Quarkus, and uses its configuration mechanisms. Read Quarkus configuration guide to get familiar with the basics."><meta itemprop=wordCount content="1020"><meta name=twitter:card content="summary"><meta name=twitter:title content="Configuring Polaris"><meta name=twitter:description content="Overview🔗 This page provides information on how to configure Apache Polaris. Unle [...]
+For Production tips and best practices, refer to Configuring Polaris for Production. First off, Polaris server runs on Quarkus, and uses its configuration mechanisms. Read Quarkus configuration guide to get familiar with the basics."><meta itemprop=wordCount content="1019"><meta name=twitter:card content="summary"><meta name=twitter:title content="Configuring Polaris"><meta name=twitter:description content="Overview🔗 This page provides information on how to configure Apache Polaris. Unle [...]
📝 Note
-For Production tips and best practices, refer to Configuring Polaris for Production. First off, Polaris server runs on Quarkus, and uses its configuration mechanisms. Read Quarkus configuration guide to get familiar with the basics."><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f791 [...]
+For Production tips and best practices, refer to Configuring Polaris for Production. First off, Polaris server runs on Quarkus, and uses its configuration mechanisms. Read Quarkus configuration guide to get familiar with the basics."><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f791 [...]
<label for=m-in-devunreleased-check><a href=/in-dev/unreleased/ title="Apache Polaris Documentation (Unreleased)" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleased><span>Unreleased</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-in-devunreleasedgetting-started-li><input type=checkbox id=m-in-devunreleasedgetting-started-check>
<label for=m-in-devunreleasedgetting-started-check><a href=/in-dev/unreleased/getting-started/ title="Getting Started with Apache Polaris" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleasedgetting-started><span>Getting Started</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedquick-start-li><input type=checkbox id=m-in-devunreleasedgetting-star [...]
<label for=m-in-devunreleasedgetting-startedquick-start-check><a href=/in-dev/unreleased/getting-started/quick-start/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-in-devunreleasedgetting-startedquick-start><span>Quickstart</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedsetup-tools-li><input type=checkbox id=m-in-devunreleasedgetting-startedsetup-tools-check>
@@ -81,9 +81,9 @@ well as for Polaris binary distributions.</p><div class="alert alert-info"><p cl
of precedence. When a property is defined in multiple sources, the value from the source with the
higher priority overrides those from lower-priority sources.</p><p>The sources are listed below, from highest to lowest priority:</p><ol><li>System properties: properties set via the Java command line using <code>-Dproperty.name=value</code>.</li><li>Environment variables (see below for important details).</li><li>Settings in <code>$PWD/config/application.properties</code> file.</li><li>The <code>application.properties</code> files packaged in Polaris.</li><li>Default values: hardcoded d [...]
cases, e.g. in Kubernetes deployments. For example, <code>polaris.realm-context.realms</code> can be
-included as is in a container YAML definition:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-yaml data-lang=yaml><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span><span style=color:#204a87;font-weight:700>env</span><span style=color:#000;font-weight:700>:</span><span [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span>- <span style=color:#204a87;font-weight:700>name</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"polaris.realm-context.realms"</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>value</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"realm1,realm2"</span><span style=color:#f8f8f8>
+included as is in a container YAML definition:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-yaml data-lang=yaml><span style=display:flex><span><span style=color:#204a87;font-weight:700>env</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span>- <span style=color:#204a87;font-weight:700>name</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"polaris.realm-context.realms"</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>value</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"realm1,realm2"</span><span style=color:#f8f8f8>
</span></span></span></code></pre></div></li><li><p>If running from a script or shell prompt, however, stricter naming rules apply: variable names
can consist solely of uppercase letters, digits, and the <code>_</code> (underscore) sign. In such
situations, the environment variable name must be derived from the property name, by using
@@ -97,7 +97,7 @@ mounted in the container at <code>/deployment/config/application.properties</cod
read-only mode, as Polaris only reads the configuration file once, at startup.</p><h2 id=polaris-configuration-options id=polaris-configuration-options>Polaris Configuration Options<a class=heading-anchor href=#polaris-configuration-options aria-label=Anchor>🔗</a></h2><p>For a comprehensive reference of all Polaris configuration options, see the <a href=https://polaris.apache.org/in-dev/unreleased/configuration/configuration-reference/>Configuration Reference</a> page.</p><h2 id=quarkus- [...]
Please refer to the <a href=https://quarkus.io/guides/>Quarkus documentation</a> for more details.</p><table><thead><tr><th>Configuration Property</th><th>Default Value in Polaris</th><th>Description</th></tr></thead><tbody><tr><td><code>quarkus.log.level</code></td><td><code>INFO</code></td><td>Define the root log level.</td></tr><tr><td><code>quarkus.log.category."org.apache.polaris".level</code></td><td></td><td>Define the log level for a specific category.</td></tr><tr><td><code>quar [...]
is using. To do this, set the log level for the <code>io.smallrye.config</code> category to <code>DEBUG</code>, and also
-set the console appender level to <code>DEBUG</code>:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-properties data-lang=properties><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span><span style=color:#c4a000>quarkus.log.console.level</span><span style=color:#ce5c00;f [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#c4a000>quarkus.log.category."io.smallrye.config".level</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>DEBUG</span>
+set the console appender level to <code>DEBUG</code>:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-properties data-lang=properties><span style=display:flex><span><span style=color:#c4a000>quarkus.log.console.level</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>DEBUG</span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>quarkus.log.category."io.smallrye.config".level</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>DEBUG</span>
</span></span></code></pre></div><div class="alert alert-primary"><p class=alert-heading>❗Important</p>This will print out all configuration values, including sensitive ones like
passwords. Don’t do this in production, and don’t share this output with anyone you don’t trust!</div></div></main></div></div><footer class="td-footer row d-print-none"><div class=container-fluid><div class="row mx-md-2"><div class="td-footer__left col-6 col-sm-4 order-sm-1"><ul class=td-footer__links-list><li class=td-footer__links-item data-bs-toggle=tooltip title=Slack aria-label=Slack><a target=_blank rel=noopener href=https://apache-polaris.slack.com/ aria-label=S [...]
\ No newline at end of file
diff --git a/in-dev/unreleased/configuration/index.html b/in-dev/unreleased/configuration/index.html
index 7be39019ea..d8337d8e96 100644
--- a/in-dev/unreleased/configuration/index.html
+++ b/in-dev/unreleased/configuration/index.html
@@ -2,7 +2,7 @@
Configuring Polaris - Learn how to configure Polaris using environment variables, configuration files, and other mechanisms. Configuration Reference - A comprehensive reference of all Polaris configuration options. Production Configuration - Tips and best practices for deploying Polaris in production environments."><meta property="og:url" content="https://polaris.apache.org/in-dev/unreleased/configuration/"><meta property="og:site_name" content="Apache Polaris"><meta property="og:title" [...]
Configuring Polaris - Learn how to configure Polaris using environment variables, configuration files, and other mechanisms. Configuration Reference - A comprehensive reference of all Polaris configuration options. Production Configuration - Tips and best practices for deploying Polaris in production environments."><meta property="og:locale" content="en_us"><meta property="og:type" content="website"><meta itemprop=name content="Configuration"><meta itemprop=description content="This sect [...]
Configuring Polaris - Learn how to configure Polaris using environment variables, configuration files, and other mechanisms. Configuration Reference - A comprehensive reference of all Polaris configuration options. Production Configuration - Tips and best practices for deploying Polaris in production environments."><meta itemprop=wordCount content="48"><meta name=twitter:card content="summary"><meta name=twitter:title content="Configuration"><meta name=twitter:description content="This s [...]
-Configuring Polaris - Learn how to configure Polaris using environment variables, configuration files, and other mechanisms. Configuration Reference - A comprehensive reference of all Polaris configuration options. Production Configuration - Tips and best practices for deploying Polaris in production environments."><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi [...]
+Configuring Polaris - Learn how to configure Polaris using environment variables, configuration files, and other mechanisms. Configuration Reference - A comprehensive reference of all Polaris configuration options. Production Configuration - Tips and best practices for deploying Polaris in production environments."><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi [...]
<label for=m-in-devunreleased-check><a href=/in-dev/unreleased/ title="Apache Polaris Documentation (Unreleased)" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleased><span>Unreleased</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-in-devunreleasedgetting-started-li><input type=checkbox id=m-in-devunreleasedgetting-started-check>
<label for=m-in-devunreleasedgetting-started-check><a href=/in-dev/unreleased/getting-started/ title="Getting Started with Apache Polaris" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleasedgetting-started><span>Getting Started</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedquick-start-li><input type=checkbox id=m-in-devunreleasedgetting-star [...]
<label for=m-in-devunreleasedgetting-startedquick-start-check><a href=/in-dev/unreleased/getting-started/quick-start/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-in-devunreleasedgetting-startedquick-start><span>Quickstart</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedsetup-tools-li><input type=checkbox id=m-in-devunreleasedgetting-startedsetup-tools-check>
diff --git a/in-dev/unreleased/downstream-build/index.html b/in-dev/unreleased/downstream-build/index.html
index 2d406ffc0f..d4faa1848a 100644
--- a/in-dev/unreleased/downstream-build/index.html
+++ b/in-dev/unreleased/downstream-build/index.html
@@ -6,7 +6,7 @@ General Principles🔗 Create a module in your project (Maven, Gradle or any oth
Polaris produces several jars. These jars may be used to build custom catalog server according to the terms of the license included in Polaris distributions.
General Principles🔗 Create a module in your project (Maven, Gradle or any other build tool) for a Quarkus Application. Include polaris-runtime-service as a runtime or compile-time dependency. Include / exclude other dependencies according to the project’s needs (e.g., an alternative JDBC driver). Do not include polaris-runtime-defaults or polaris-server as dependencies. Provide your own application.properties file for your Quarkus build. Define your own Quarkus Application Name and Versi [...]
Polaris produces several jars. These jars may be used to build custom catalog server according to the terms of the license included in Polaris distributions.
-General Principles🔗 Create a module in your project (Maven, Gradle or any other build tool) for a Quarkus Application. Include polaris-runtime-service as a runtime or compile-time dependency. Include / exclude other dependencies according to the project’s needs (e.g., an alternative JDBC driver). Do not include polaris-runtime-defaults or polaris-server as dependencies. Provide your own application.properties file for your Quarkus build. Define your own Quarkus Application Name and Versi [...]
+General Principles🔗 Create a module in your project (Maven, Gradle or any other build tool) for a Quarkus Application. Include polaris-runtime-service as a runtime or compile-time dependency. Include / exclude other dependencies according to the project’s needs (e.g., an alternative JDBC driver). Do not include polaris-runtime-defaults or polaris-server as dependencies. Provide your own application.properties file for your Quarkus build. Define your own Quarkus Application Name and Versi [...]
<label for=m-in-devunreleased-check><a href=/in-dev/unreleased/ title="Apache Polaris Documentation (Unreleased)" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleased><span>Unreleased</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-in-devunreleasedgetting-started-li><input type=checkbox id=m-in-devunreleasedgetting-started-check>
<label for=m-in-devunreleasedgetting-started-check><a href=/in-dev/unreleased/getting-started/ title="Getting Started with Apache Polaris" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleasedgetting-started><span>Getting Started</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedquick-start-li><input type=checkbox id=m-in-devunreleasedgetting-star [...]
<label for=m-in-devunreleasedgetting-startedquick-start-check><a href=/in-dev/unreleased/getting-started/quick-start/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-in-devunreleasedgetting-startedquick-start><span>Quickstart</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedsetup-tools-li><input type=checkbox id=m-in-devunreleasedgetting-startedsetup-tools-check>
diff --git a/in-dev/unreleased/entities/index.html b/in-dev/unreleased/entities/index.html
index 406427d228..d897ccee0a 100644
--- a/in-dev/unreleased/entities/index.html
+++ b/in-dev/unreleased/entities/index.html
@@ -10,7 +10,7 @@ A valid entity name:
is not empty; is not . or ..; does not contain ISO control characters (U+0000–U+001F or U+007F–U+009F); does not contain any of the following characters: /:*?"<>|#+`; does not start or end with whitespace. These constraints apply to create, register, and rename operations. Existing entities whose names pre-date this validation are not affected by read or update operations.'><meta itemprop=wordCount content="1001"><meta name=twitter:card content="summary"><meta name=twitter:title content= [...]
Entity name constraints🔗 The REST layer enforces the following rules for entity names (namespace levels, table names, view names, and generic table names). Names that violate these rules are rejected with HTTP 400.
A valid entity name:
-is not empty; is not . or ..; does not contain ISO control characters (U+0000–U+001F or U+007F–U+009F); does not contain any of the following characters: /:*?"<>|#+`; does not start or end with whitespace. These constraints apply to create, register, and rename operations. Existing entities whose names pre-date this validation are not affected by read or update operations.'><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style [...]
+is not empty; is not . or ..; does not contain ISO control characters (U+0000–U+001F or U+007F–U+009F); does not contain any of the following characters: /:*?"<>|#+`; does not start or end with whitespace. These constraints apply to create, register, and rename operations. Existing entities whose names pre-date this validation are not affected by read or update operations.'><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style [...]
<label for=m-in-devunreleased-check><a href=/in-dev/unreleased/ title="Apache Polaris Documentation (Unreleased)" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleased><span>Unreleased</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-in-devunreleasedgetting-started-li><input type=checkbox id=m-in-devunreleasedgetting-started-check>
<label for=m-in-devunreleasedgetting-started-check><a href=/in-dev/unreleased/getting-started/ title="Getting Started with Apache Polaris" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleasedgetting-started><span>Getting Started</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedquick-start-li><input type=checkbox id=m-in-devunreleasedgetting-star [...]
<label for=m-in-devunreleasedgetting-startedquick-start-check><a href=/in-dev/unreleased/getting-started/quick-start/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-in-devunreleasedgetting-startedquick-start><span>Quickstart</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedsetup-tools-li><input type=checkbox id=m-in-devunreleasedgetting-startedsetup-tools-check>
diff --git a/in-dev/unreleased/evolution/index.html b/in-dev/unreleased/evolution/index.html
index f24c3aa7e2..35e35178d8 100644
--- a/in-dev/unreleased/evolution/index.html
+++ b/in-dev/unreleased/evolution/index.html
@@ -6,7 +6,7 @@ Revisions of the Iceberg REST Catalog API are controlled by the Apache Iceberg c
Using Polaris as a Catalog🔗 Polaris is primarily intended to be used as a Catalog of Tables and Views. As such, it implements the Iceberg REST Catalog API and its own REST APIs.
Revisions of the Iceberg REST Catalog API are controlled by the Apache Iceberg community. Polaris attempts to accurately implement this specification. Nonetheless, optional REST Catalog features may or may not be supported immediately. In general, there is no guarantee that Polaris releases always implement the latest version of the Iceberg REST Catalog API."><meta itemprop=wordCount content="701"><meta name=twitter:card content="summary"><meta name=twitter:title content="Polaris Evoluti [...]
Using Polaris as a Catalog🔗 Polaris is primarily intended to be used as a Catalog of Tables and Views. As such, it implements the Iceberg REST Catalog API and its own REST APIs.
-Revisions of the Iceberg REST Catalog API are controlled by the Apache Iceberg community. Polaris attempts to accurately implement this specification. Nonetheless, optional REST Catalog features may or may not be supported immediately. In general, there is no guarantee that Polaris releases always implement the latest version of the Iceberg REST Catalog API."><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha [...]
+Revisions of the Iceberg REST Catalog API are controlled by the Apache Iceberg community. Polaris attempts to accurately implement this specification. Nonetheless, optional REST Catalog features may or may not be supported immediately. In general, there is no guarantee that Polaris releases always implement the latest version of the Iceberg REST Catalog API."><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha [...]
<label for=m-in-devunreleased-check><a href=/in-dev/unreleased/ title="Apache Polaris Documentation (Unreleased)" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleased><span>Unreleased</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-in-devunreleasedgetting-started-li><input type=checkbox id=m-in-devunreleasedgetting-started-check>
<label for=m-in-devunreleasedgetting-started-check><a href=/in-dev/unreleased/getting-started/ title="Getting Started with Apache Polaris" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleasedgetting-started><span>Getting Started</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedquick-start-li><input type=checkbox id=m-in-devunreleasedgetting-star [...]
<label for=m-in-devunreleasedgetting-startedquick-start-check><a href=/in-dev/unreleased/getting-started/quick-start/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-in-devunreleasedgetting-startedquick-start><span>Quickstart</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedsetup-tools-li><input type=checkbox id=m-in-devunreleasedgetting-startedsetup-tools-check>
diff --git a/in-dev/unreleased/federation/bigquery-metastore-federation/index.html b/in-dev/unreleased/federation/bigquery-metastore-federation/index.html
index b1f414cda1..828695f363 100644
--- a/in-dev/unreleased/federation/bigquery-metastore-federation/index.html
+++ b/in-dev/unreleased/federation/bigquery-metastore-federation/index.html
@@ -1,8 +1,8 @@
<!doctype html><html itemscope itemtype=http://schema.org/WebPage lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon.png sizes=100x100><link rel=icon type=image/png href=/favicons/android-ch [...]
Build-time enablement🔗 The BigQuery factory is packaged as an optional extension and is not baked into default server builds. Include it when assembling the runtime or container images by setting the NonRESTCatalogs Gradle property to include BIGQUERY (and any other non-REST backends you need):"><meta property="og:url" content="https://polaris.apache.org/in-dev/unreleased/federation/bigquery-metastore-federation/"><meta property="og:site_name" content="Apache Polaris"><meta property="og: [...]
Build-time enablement🔗 The BigQuery factory is packaged as an optional extension and is not baked into default server builds. Include it when assembling the runtime or container images by setting the NonRESTCatalogs Gradle property to include BIGQUERY (and any other non-REST backends you need):"><meta property="og:locale" content="en_us"><meta property="og:type" content="article"><meta property="article:section" content="in-dev"><meta itemprop=name content="BigQuery Metastore Federation" [...]
-Build-time enablement🔗 The BigQuery factory is packaged as an optional extension and is not baked into default server builds. Include it when assembling the runtime or container images by setting the NonRESTCatalogs Gradle property to include BIGQUERY (and any other non-REST backends you need):"><meta itemprop=wordCount content="606"><meta name=twitter:card content="summary"><meta name=twitter:title content="BigQuery Metastore Federation"><meta name=twitter:description content="Polaris c [...]
-Build-time enablement🔗 The BigQuery factory is packaged as an optional extension and is not baked into default server builds. Include it when assembling the runtime or container images by setting the NonRESTCatalogs Gradle property to include BIGQUERY (and any other non-REST backends you need):"><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=ano [...]
+Build-time enablement🔗 The BigQuery factory is packaged as an optional extension and is not baked into default server builds. Include it when assembling the runtime or container images by setting the NonRESTCatalogs Gradle property to include BIGQUERY (and any other non-REST backends you need):"><meta itemprop=wordCount content="581"><meta name=twitter:card content="summary"><meta name=twitter:title content="BigQuery Metastore Federation"><meta name=twitter:description content="Polaris c [...]
+Build-time enablement🔗 The BigQuery factory is packaged as an optional extension and is not baked into default server builds. Include it when assembling the runtime or container images by setting the NonRESTCatalogs Gradle property to include BIGQUERY (and any other non-REST backends you need):"><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=ano [...]
<label for=m-in-devunreleased-check><a href=/in-dev/unreleased/ title="Apache Polaris Documentation (Unreleased)" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleased><span>Unreleased</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-in-devunreleasedgetting-started-li><input type=checkbox id=m-in-devunreleasedgetting-started-check>
<label for=m-in-devunreleasedgetting-started-check><a href=/in-dev/unreleased/getting-started/ title="Getting Started with Apache Polaris" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleasedgetting-started><span>Getting Started</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedquick-start-li><input type=checkbox id=m-in-devunreleasedgetting-star [...]
<label for=m-in-devunreleasedgetting-startedquick-start-check><a href=/in-dev/unreleased/getting-started/quick-start/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-in-devunreleasedgetting-startedquick-start><span>Quickstart</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedsetup-tools-li><input type=checkbox id=m-in-devunreleasedgetting-startedsetup-tools-check>
@@ -74,19 +74,19 @@ For stable user documentation, see the
remain the source of truth for Iceberg table metadata while Polaris brokers access, policies, and
multi-engine connectivity.</p><h2 id=build-time-enablement id=build-time-enablement>Build-time enablement<a class=heading-anchor href=#build-time-enablement aria-label=Anchor>🔗</a></h2><p>The BigQuery factory is packaged as an optional extension and is not baked into default server
builds. Include it when assembling the runtime or container images by setting the <code>NonRESTCatalogs</code>
-Gradle property to include <code>BIGQUERY</code> (and any other non-REST backends you need):</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span>./gradlew :polaris-server:assemble :polaris-server:quarkus [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> -PNonRESTCatalogs<span style=color:#ce5c00;font-weight:700>=</span>BIGQUERY -Dquarkus.container-image.build<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#204a87>true</span>
+Gradle property to include <code>BIGQUERY</code> (and any other non-REST backends you need):</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span>./gradlew :polaris-server:assemble :polaris-server:quarkusAppPartsBuild --rerun <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -PNonRESTCatalogs<span style=color:#ce5c00;font-weight:700>=</span>BIGQUERY -Dquarkus.container-image.build<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#204a87>true</span>
</span></span></code></pre></div><p><code>runtime/server/build.gradle.kts</code> wires the extension in only when this flag is present, so binaries
built without it will reject BigQuery federation requests.</p><h2 id=feature-configuration id=feature-configuration>Feature configuration<a class=heading-anchor href=#feature-configuration aria-label=Anchor>🔗</a></h2><p>After building Polaris with BigQuery Metastore support, enable the necessary feature flags in your
<code>application.properties</code> file (or equivalent configuration mechanism such as environment variables
-or a Kubernetes ConfigMap):</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-properties data-lang=properties><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span><span style=color:#8f5902;font-style:italic># Allows BIGQUERY connection type</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#c4a000>polaris.features."SUPPORTED_CATALOG_CONNECTION_TYPES"</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>["BIGQUERY"]</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span><span style=color:#8f5902;font-style:italic># Allows IMPLICIT authentication, needed for BigQuery Metastore federation</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span><span style=color:#c4a000>polaris.features."SUPPORTED_EXTERNAL_CATALOG_AUTHENTICATION_TYPES"</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>["IMPLICIT"]</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">6</span><span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">7</span><span><span style=color:#8f5902;font-style:italic># Enables the federation feature itself</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">8</span><span><span style=color:#c4a000>polaris.features."ENABLE_CATALOG_FEDERATION"</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>true</span>
+or a Kubernetes ConfigMap):</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-properties data-lang=properties><span style=display:flex><span><span style=color:#8f5902;font-style:italic># Allows BIGQUERY connection type</span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>polaris.features."SUPPORTED_CATALOG_CONNECTION_TYPES"</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>["BIGQUERY"]</span>
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># Allows IMPLICIT authentication, needed for BigQuery Metastore federation</span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>polaris.features."SUPPORTED_EXTERNAL_CATALOG_AUTHENTICATION_TYPES"</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>["IMPLICIT"]</span>
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># Enables the federation feature itself</span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>polaris.features."ENABLE_CATALOG_FEDERATION"</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>true</span>
</span></span></code></pre></div><p>For Kubernetes deployments, add these properties to the ConfigMap mounted into the Polaris
container (typically at <code>/deployment/config/application.properties</code>).</p><h2 id=runtime-requirements id=runtime-requirements>Runtime requirements<a class=heading-anchor href=#runtime-requirements aria-label=Anchor>🔗</a></h2><ul><li><strong>BigQuery API access:</strong> The Polaris deployment must be able to reach the BigQuery API
(<code>bigquery.googleapis.com</code>) over HTTPS.</li><li><strong>Authentication:</strong> BigQuery Metastore federation only supports <code>IMPLICIT</code> authentication, meaning
@@ -98,29 +98,29 @@ for details. Ensure valid credentials are available before starting the server.<
project and read access to the GCS warehouse bucket (read/write if Polaris will commit table
metadata).</li></ul><h2 id=creating-a-federated-catalog id=creating-a-federated-catalog>Creating a federated catalog<a class=heading-anchor href=#creating-a-federated-catalog aria-label=Anchor>🔗</a></h2><p>Use the Management API to create an external catalog whose connection type is <code>BIGQUERY</code>. The
following request registers a catalog that proxies to BigQuery Metastore in the GCP project
-<code>my-gcp-project</code>, using <code>analytics_dataset</code> as the default warehouse:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 1</span><span>curl -X POST https://<polaris-host>/management/v1/ca [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span> -H <span style=color:#4e9a06>"Authorization: Bearer </span><span style=color:#000>$TOKEN</span><span style=color:#4e9a06>"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span> -H <span style=color:#4e9a06>"Content-Type: application/json"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span> -d <span style=color:#4e9a06>'{
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span><span style=color:#4e9a06> "type": "EXTERNAL",
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span><span style=color:#4e9a06> "name": "analytics_bigquery",
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span><span style=color:#4e9a06> "storageConfigInfo": {
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span><span style=color:#4e9a06> "storageType": "GCS"
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span><span style=color:#4e9a06> },
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">10</span><span><span style=color:#4e9a06> "properties": {
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">11</span><span><span style=color:#4e9a06> "default-base-location": "gs://analytics-bucket/warehouse/"
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">12</span><span><span style=color:#4e9a06> },
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">13</span><span><span style=color:#4e9a06> "connectionConfigInfo": {
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">14</span><span><span style=color:#4e9a06> "connectionType": "BIGQUERY",
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">15</span><span><span style=color:#4e9a06> "properties": {
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">16</span><span><span style=color:#4e9a06> "gcp.bigquery.project-id": "my-gcp-project",
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">17</span><span><span style=color:#4e9a06> "warehouse": "analytics_dataset"
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">18</span><span><span style=color:#4e9a06> },
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">19</span><span><span style=color:#4e9a06> "authenticationParameters": {
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">20</span><span><span style=color:#4e9a06> "authenticationType": "IMPLICIT"
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">21</span><span><span style=color:#4e9a06> }
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">22</span><span><span style=color:#4e9a06> }
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">23</span><span><span style=color:#4e9a06> }'</span>
+<code>my-gcp-project</code>, using <code>analytics_dataset</code> as the default warehouse:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span>curl -X POST https://<polaris-host>/management/v1/catalogs <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -H <span style=color:#4e9a06>"Authorization: Bearer </span><span style=color:#000>$TOKEN</span><span style=color:#4e9a06>"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -H <span style=color:#4e9a06>"Content-Type: application/json"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -d <span style=color:#4e9a06>'{
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "type": "EXTERNAL",
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "name": "analytics_bigquery",
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "storageConfigInfo": {
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "storageType": "GCS"
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> },
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "properties": {
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "default-base-location": "gs://analytics-bucket/warehouse/"
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> },
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "connectionConfigInfo": {
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "connectionType": "BIGQUERY",
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "properties": {
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "gcp.bigquery.project-id": "my-gcp-project",
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "warehouse": "analytics_dataset"
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> },
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "authenticationParameters": {
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "authenticationType": "IMPLICIT"
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> }
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> }
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> }'</span>
</span></span></code></pre></div><p>The <code>connectionConfigInfo.properties</code> map carries BigQuery-specific configuration consumed by
Iceberg’s <code>BigQueryProperties</code>:</p><ul><li><code>gcp.bigquery.project-id</code> (required): the GCP project that owns the BigQuery datasets.</li><li><code>warehouse</code> (required): the BigQuery dataset name used as the default warehouse for new tables.</li><li><code>gcp.bigquery.location</code> (optional): the BigQuery location (region) of the datasets.</li><li><code>gcp.bigquery.list-all-tables</code> (optional): when <code>true</code> (the default), <code>listTables [...]
table in a BigQuery dataset regardless of type. Set to <code>false</code> to filter to BigQuery-Metastore
diff --git a/in-dev/unreleased/federation/hive-metastore-federation/index.html b/in-dev/unreleased/federation/hive-metastore-federation/index.html
index ada22b9c96..c98f11a745 100644
--- a/in-dev/unreleased/federation/hive-metastore-federation/index.html
+++ b/in-dev/unreleased/federation/hive-metastore-federation/index.html
@@ -1,8 +1,8 @@
<!doctype html><html itemscope itemtype=http://schema.org/WebPage lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon.png sizes=100x100><link rel=icon type=image/png href=/favicons/android-ch [...]
Build-time enablement🔗 The Hive factory is packaged as an optional extension and is not baked into default server builds. Include it when assembling the runtime or container images by setting the NonRESTCatalogs Gradle property to include HIVE (and any other non-REST backends you need):"><meta property="og:url" content="https://polaris.apache.org/in-dev/unreleased/federation/hive-metastore-federation/"><meta property="og:site_name" content="Apache Polaris"><meta property="og:title" conte [...]
Build-time enablement🔗 The Hive factory is packaged as an optional extension and is not baked into default server builds. Include it when assembling the runtime or container images by setting the NonRESTCatalogs Gradle property to include HIVE (and any other non-REST backends you need):"><meta property="og:locale" content="en_us"><meta property="og:type" content="article"><meta property="article:section" content="in-dev"><meta itemprop=name content="Hive Metastore Federation"><meta itemp [...]
-Build-time enablement🔗 The Hive factory is packaged as an optional extension and is not baked into default server builds. Include it when assembling the runtime or container images by setting the NonRESTCatalogs Gradle property to include HIVE (and any other non-REST backends you need):"><meta itemprop=wordCount content="971"><meta name=twitter:card content="summary"><meta name=twitter:title content="Hive Metastore Federation"><meta name=twitter:description content="Polaris can federate [...]
-Build-time enablement🔗 The Hive factory is packaged as an optional extension and is not baked into default server builds. Include it when assembling the runtime or container images by setting the NonRESTCatalogs Gradle property to include HIVE (and any other non-REST backends you need):"><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous>< [...]
+Build-time enablement🔗 The Hive factory is packaged as an optional extension and is not baked into default server builds. Include it when assembling the runtime or container images by setting the NonRESTCatalogs Gradle property to include HIVE (and any other non-REST backends you need):"><meta itemprop=wordCount content="950"><meta name=twitter:card content="summary"><meta name=twitter:title content="Hive Metastore Federation"><meta name=twitter:description content="Polaris can federate [...]
+Build-time enablement🔗 The Hive factory is packaged as an optional extension and is not baked into default server builds. Include it when assembling the runtime or container images by setting the NonRESTCatalogs Gradle property to include HIVE (and any other non-REST backends you need):"><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous>< [...]
<label for=m-in-devunreleased-check><a href=/in-dev/unreleased/ title="Apache Polaris Documentation (Unreleased)" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleased><span>Unreleased</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-in-devunreleasedgetting-started-li><input type=checkbox id=m-in-devunreleasedgetting-started-check>
<label for=m-in-devunreleasedgetting-started-check><a href=/in-dev/unreleased/getting-started/ title="Getting Started with Apache Polaris" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleasedgetting-started><span>Getting Started</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedquick-start-li><input type=checkbox id=m-in-devunreleasedgetting-star [...]
<label for=m-in-devunreleasedgetting-startedquick-start-check><a href=/in-dev/unreleased/getting-started/quick-start/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-in-devunreleasedgetting-startedquick-start><span>Quickstart</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedsetup-tools-li><input type=checkbox id=m-in-devunreleasedgetting-startedsetup-tools-check>
@@ -74,19 +74,19 @@ For stable user documentation, see the
HMS remain the source of truth for table metadata while Polaris brokers access, policies, and
multi-engine connectivity.</p><h2 id=build-time-enablement id=build-time-enablement>Build-time enablement<a class=heading-anchor href=#build-time-enablement aria-label=Anchor>🔗</a></h2><p>The Hive factory is packaged as an optional extension and is not baked into default server builds.
Include it when assembling the runtime or container images by setting the <code>NonRESTCatalogs</code> Gradle
-property to include <code>HIVE</code> (and any other non-REST backends you need):</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span>./gradlew :polaris-server:assemble :polaris-server:quarkusAppPartsBui [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> -PNonRESTCatalogs<span style=color:#ce5c00;font-weight:700>=</span>HIVE -Dquarkus.container-image.build<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#204a87>true</span>
+property to include <code>HIVE</code> (and any other non-REST backends you need):</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span>./gradlew :polaris-server:assemble :polaris-server:quarkusAppPartsBuild --rerun <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -PNonRESTCatalogs<span style=color:#ce5c00;font-weight:700>=</span>HIVE -Dquarkus.container-image.build<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#204a87>true</span>
</span></span></code></pre></div><p><code>runtime/server/build.gradle.kts</code> wires the extension in only when this flag is present, so binaries
built without it will reject Hive federation requests.</p><h2 id=feature-configuration id=feature-configuration>Feature configuration<a class=heading-anchor href=#feature-configuration aria-label=Anchor>🔗</a></h2><p>After building Polaris with Hive support, enable the necessary feature flags in your
<code>application.properties</code> file (or equivalent configuration mechanism such as environment variables or
-a Kubernetes ConfigMap):</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-properties data-lang=properties><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span><span style=color:#8f5902;font-style:italic># Allows both REST and HIVE connection type</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#c4a000>polaris.features."SUPPORTED_CATALOG_CONNECTION_TYPES"</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>["ICEBERG_REST","HIVE"]</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span><span style=color:#8f5902;font-style:italic># Allows IMPLICIT authentication, needed for Hive federation</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span><span style=color:#c4a000>polaris.features."SUPPORTED_EXTERNAL_CATALOG_AUTHENTICATION_TYPES"</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>["OAUTH","IMPLICIT"]</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">6</span><span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">7</span><span><span style=color:#8f5902;font-style:italic># Enables the federation feature itself</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">8</span><span><span style=color:#c4a000>polaris.features."ENABLE_CATALOG_FEDERATION"</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>true</span>
+a Kubernetes ConfigMap):</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-properties data-lang=properties><span style=display:flex><span><span style=color:#8f5902;font-style:italic># Allows both REST and HIVE connection type</span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>polaris.features."SUPPORTED_CATALOG_CONNECTION_TYPES"</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>["ICEBERG_REST","HIVE"]</span>
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># Allows IMPLICIT authentication, needed for Hive federation</span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>polaris.features."SUPPORTED_EXTERNAL_CATALOG_AUTHENTICATION_TYPES"</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>["OAUTH","IMPLICIT"]</span>
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># Enables the federation feature itself</span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>polaris.features."ENABLE_CATALOG_FEDERATION"</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>true</span>
</span></span></code></pre></div><p>For Kubernetes deployments, add these properties to the ConfigMap mounted into the Polaris container
(typically at <code>/deployment/config/application.properties</code>).</p><h2 id=runtime-requirements id=runtime-requirements>Runtime requirements<a class=heading-anchor href=#runtime-requirements aria-label=Anchor>🔗</a></h2><ul><li><strong>Metastore connectivity:</strong> Expose the HMS Thrift endpoint (<code>thrift://host:port</code>) to the Polaris
deployment.</li><li><strong>Configuration discovery:</strong> Iceberg’s <code>HiveCatalog</code> loads Hadoop/Hive client settings from the
@@ -95,10 +95,10 @@ classpath. Provide <code>hive-site.xml</code> (and <code>core-site.xml</code> if
the operating-system or Kerberos identity of the running process (no stored secrets). Ensure the
service principal is logged in or holds a valid keytab/TGT before starting Polaris.</li><li><strong>Object storage role:</strong> Configure <code>polaris.service-identity.<realm>.aws-iam.*</code> (or the default
realm) so the server can assume the AWS role referenced by the catalog. The IAM role must allow
-STS access from the Polaris service identity and grant permissions to the table locations.</li></ul><h3 id=kerberos-setup-example id=kerberos-setup-example>Kerberos setup example<a class=heading-anchor href=#kerberos-setup-example aria-label=Anchor>🔗</a></h3><p>If your Hive Metastore enforces Kerberos, stage the necessary configuration alongside Polaris:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjus [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#204a87>export</span> <span style=color:#000>HADOOP_CONF_DIR</span><span style=color:#ce5c00;font-weight:700>=</span>/etc/polaris/hadoop-conf <span style=color:#8f5902;font-style:italic># contains hive-site.xml with HMS principal</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span><span style=color:#204a87>export</span> <span style=color:#000>HADOOP_OPTS</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"-Djava.security.auth.login.config=/etc/polaris/jaas.conf"</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span>kinit -kt /etc/polaris/keytabs/polaris.keytab polaris/service@EXAMPLE.COM
+STS access from the Polaris service identity and grant permissions to the table locations.</li></ul><h3 id=kerberos-setup-example id=kerberos-setup-example>Kerberos setup example<a class=heading-anchor href=#kerberos-setup-example aria-label=Anchor>🔗</a></h3><p>If your Hive Metastore enforces Kerberos, stage the necessary configuration alongside Polaris:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjus [...]
+</span></span><span style=display:flex><span><span style=color:#204a87>export</span> <span style=color:#000>HADOOP_CONF_DIR</span><span style=color:#ce5c00;font-weight:700>=</span>/etc/polaris/hadoop-conf <span style=color:#8f5902;font-style:italic># contains hive-site.xml with HMS principal</span>
+</span></span><span style=display:flex><span><span style=color:#204a87>export</span> <span style=color:#000>HADOOP_OPTS</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"-Djava.security.auth.login.config=/etc/polaris/jaas.conf"</span>
+</span></span><span style=display:flex><span>kinit -kt /etc/polaris/keytabs/polaris.keytab polaris/service@EXAMPLE.COM
</span></span></code></pre></div><ul><li><code>hive-site.xml</code> must define <code>hive.metastore.sasl.enabled=true</code>, the metastore principal, and
client principal pattern (for example <code>hive.metastore.client.kerberos.principal=polaris/_HOST@REALM</code>).</li><li>The JAAS entry (referenced by <code>java.security.auth.login.config</code>) should use <code>useKeyTab=true</code> and
point to the same keytab shown above so the Polaris JVM can refresh credentials automatically.</li><li>Keep the keytab readable solely by the Polaris service user; the implicit authenticator consumes
@@ -111,25 +111,25 @@ not by themselves require rebuilding Polaris. By contrast, adding missing filesy
libraries such as <code>hadoop-aws</code> does require custom packaging of the Polaris runtime or container
image.</p><h2 id=creating-a-federated-catalog id=creating-a-federated-catalog>Creating a federated catalog<a class=heading-anchor href=#creating-a-federated-catalog aria-label=Anchor>🔗</a></h2><p>Use the Management API (or the Python CLI) to create an external catalog whose connection type is
<code>HIVE</code>. The following request registers a catalog that proxies to an HMS running on
-<code>thrift://hms.example.internal:9083</code>:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 1</span><span>curl -X POST https://<polaris-host>/management/v1/catalogs <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span> -H <span style=color:#4e9a06>"Authorization: Bearer </span><span style=color:#000>$TOKEN</span><span style=color:#4e9a06>"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span> -H <span style=color:#4e9a06>"Content-Type: application/json"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span> -d <span style=color:#4e9a06>'{
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span><span style=color:#4e9a06> "type": "EXTERNAL",
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span><span style=color:#4e9a06> "name": "analytics_hms",
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span><span style=color:#4e9a06> "storageConfigInfo": {
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span><span style=color:#4e9a06> "storageType": "S3",
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span><span style=color:#4e9a06> "roleArn": "arn:aws:iam::123456789012:role/polaris-warehouse-access",
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">10</span><span><span style=color:#4e9a06> "region": "us-east-1"
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">11</span><span><span style=color:#4e9a06> },
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">12</span><span><span style=color:#4e9a06> "properties": { "default-base-location": "s3://analytics-bucket/warehouse/" },
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">13</span><span><span style=color:#4e9a06> "connectionConfigInfo": {
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">14</span><span><span style=color:#4e9a06> "connectionType": "HIVE",
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">15</span><span><span style=color:#4e9a06> "uri": "thrift://hms.example.internal:9083",
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">16</span><span><span style=color:#4e9a06> "warehouse": "s3://analytics-bucket/warehouse/",
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">17</span><span><span style=color:#4e9a06> "authenticationParameters": { "authenticationType": "IMPLICIT" }
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">18</span><span><span style=color:#4e9a06> }
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">19</span><span><span style=color:#4e9a06> }'</span>
+<code>thrift://hms.example.internal:9083</code>:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span>curl -X POST https://<polaris-host>/management/v1/catalogs <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -H <span style=color:#4e9a06>"Authorization: Bearer </span><span style=color:#000>$TOKEN</span><span style=color:#4e9a06>"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -H <span style=color:#4e9a06>"Content-Type: application/json"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -d <span style=color:#4e9a06>'{
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "type": "EXTERNAL",
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "name": "analytics_hms",
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "storageConfigInfo": {
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "storageType": "S3",
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "roleArn": "arn:aws:iam::123456789012:role/polaris-warehouse-access",
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "region": "us-east-1"
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> },
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "properties": { "default-base-location": "s3://analytics-bucket/warehouse/" },
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "connectionConfigInfo": {
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "connectionType": "HIVE",
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "uri": "thrift://hms.example.internal:9083",
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "warehouse": "s3://analytics-bucket/warehouse/",
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "authenticationParameters": { "authenticationType": "IMPLICIT" }
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> }
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> }'</span>
</span></span></code></pre></div><p>Grant catalog roles to principal roles exactly as you would for internal catalogs so engines can
obtain tokens that authorize against the federated metadata.</p><p><code>default-base-location</code> is required; it tells Polaris and Iceberg where to place new metadata files.
<code>allowedLocations</code> is optional—supply it only when you want to restrict writers to a specific set of
diff --git a/in-dev/unreleased/federation/iceberg-rest-federation/index.html b/in-dev/unreleased/federation/iceberg-rest-federation/index.html
index 94dc2c34d5..d9fb98a876 100644
--- a/in-dev/unreleased/federation/iceberg-rest-federation/index.html
+++ b/in-dev/unreleased/federation/iceberg-rest-federation/index.html
@@ -1,8 +1,8 @@
<!doctype html><html itemscope itemtype=http://schema.org/WebPage lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon.png sizes=100x100><link rel=icon type=image/png href=/favicons/android-ch [...]
Runtime requirements🔗 REST endpoint: The remote service must expose the Iceberg REST specification. Configure firewalls so Polaris can reach the base URI you provide in the connection config. Authentication: Polaris forwards requests using the credentials defined in ConnectionConfigInfo.AuthenticationParameters. OAuth2 client credentials, bearer tokens, and AWS SigV4 are supported; choose the scheme the remote service expects. Feature configuration🔗 The catalog federation feature is disa [...]
Runtime requirements🔗 REST endpoint: The remote service must expose the Iceberg REST specification. Configure firewalls so Polaris can reach the base URI you provide in the connection config. Authentication: Polaris forwards requests using the credentials defined in ConnectionConfigInfo.AuthenticationParameters. OAuth2 client credentials, bearer tokens, and AWS SigV4 are supported; choose the scheme the remote service expects. Feature configuration🔗 The catalog federation feature is disa [...]
-Runtime requirements🔗 REST endpoint: The remote service must expose the Iceberg REST specification. Configure firewalls so Polaris can reach the base URI you provide in the connection config. Authentication: Polaris forwards requests using the credentials defined in ConnectionConfigInfo.AuthenticationParameters. OAuth2 client credentials, bearer tokens, and AWS SigV4 are supported; choose the scheme the remote service expects. Feature configuration🔗 The catalog federation feature is disa [...]
-Runtime requirements🔗 REST endpoint: The remote service must expose the Iceberg REST specification. Configure firewalls so Polaris can reach the base URI you provide in the connection config. Authentication: Polaris forwards requests using the credentials defined in ConnectionConfigInfo.AuthenticationParameters. OAuth2 client credentials, bearer tokens, and AWS SigV4 are supported; choose the scheme the remote service expects. Feature configuration🔗 The catalog federation feature is disa [...]
+Runtime requirements🔗 REST endpoint: The remote service must expose the Iceberg REST specification. Configure firewalls so Polaris can reach the base URI you provide in the connection config. Authentication: Polaris forwards requests using the credentials defined in ConnectionConfigInfo.AuthenticationParameters. OAuth2 client credentials, bearer tokens, and AWS SigV4 are supported; choose the scheme the remote service expects. Feature configuration🔗 The catalog federation feature is disa [...]
+Runtime requirements🔗 REST endpoint: The remote service must expose the Iceberg REST specification. Configure firewalls so Polaris can reach the base URI you provide in the connection config. Authentication: Polaris forwards requests using the credentials defined in ConnectionConfigInfo.AuthenticationParameters. OAuth2 client credentials, bearer tokens, and AWS SigV4 are supported; choose the scheme the remote service expects. Feature configuration🔗 The catalog federation feature is disa [...]
<label for=m-in-devunreleased-check><a href=/in-dev/unreleased/ title="Apache Polaris Documentation (Unreleased)" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleased><span>Unreleased</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-in-devunreleasedgetting-started-li><input type=checkbox id=m-in-devunreleasedgetting-started-check>
<label for=m-in-devunreleasedgetting-started-check><a href=/in-dev/unreleased/getting-started/ title="Getting Started with Apache Polaris" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleasedgetting-started><span>Getting Started</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedquick-start-li><input type=checkbox id=m-in-devunreleasedgetting-star [...]
<label for=m-in-devunreleasedgetting-startedquick-start-check><a href=/in-dev/unreleased/getting-started/quick-start/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-in-devunreleasedgetting-startedquick-start><span>Quickstart</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedsetup-tools-li><input type=checkbox id=m-in-devunreleasedgetting-startedsetup-tools-check>
@@ -75,34 +75,34 @@ REST implementation), enabling a Polaris service to access table and view entiti
firewalls so Polaris can reach the base URI you provide in the connection config.</li><li><strong>Authentication:</strong> Polaris forwards requests using the credentials defined in
<code>ConnectionConfigInfo.AuthenticationParameters</code>. OAuth2 client credentials, bearer tokens, and AWS
SigV4 are supported; choose the scheme the remote service expects.</li></ul><h2 id=feature-configuration id=feature-configuration>Feature configuration<a class=heading-anchor href=#feature-configuration aria-label=Anchor>🔗</a></h2><p>The catalog federation feature is disabled by default. Enable the necessary feature flag in your application.properties
-file (or equivalent configuration mechanism such as environment variables or a Kubernetes ConfigMap):</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-properties data-lang=properties><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span><span style=color:#8f5902;font-style: [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#c4a000>polaris.features."ENABLE_CATALOG_FEDERATION"</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>true</span>
+file (or equivalent configuration mechanism such as environment variables or a Kubernetes ConfigMap):</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-properties data-lang=properties><span style=display:flex><span><span style=color:#8f5902;font-style:italic># Enables the federation feature itself</span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>polaris.features."ENABLE_CATALOG_FEDERATION"</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>true</span>
</span></span></code></pre></div><h2 id=creating-a-federated-rest-catalog id=creating-a-federated-rest-catalog>Creating a federated REST catalog<a class=heading-anchor href=#creating-a-federated-rest-catalog aria-label=Anchor>🔗</a></h2><p>The snippet below registers an external catalog that forwards to a remote Polaris server using OAuth2
client credentials. <code>iceberg-remote-catalog-name</code> is optional; supply it when the remote server multiplexes
-multiple logical catalogs under one URI.</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 1</span><span>polaris catalogs create <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span> --type EXTERNAL <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span> --storage-type s3 <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span> --role-arn <span style=color:#4e9a06>"arn:aws:iam::123456789012:role/polaris-warehouse-access"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span> --default-base-location <span style=color:#4e9a06>"s3://analytics-bucket/warehouse/"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span> --catalog-connection-type iceberg-rest <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span> --iceberg-remote-catalog-name analytics <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span> --catalog-uri <span style=color:#4e9a06>"https://remote-polaris.example.com/catalog/v1"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span> --catalog-authentication-type OAUTH <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">10</span><span> --catalog-token-uri <span style=color:#4e9a06>"https://remote-polaris.example.com/catalog/v1/oauth/tokens"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">11</span><span> --catalog-client-id <span style=color:#4e9a06>"<remote-client-id>"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">12</span><span> --catalog-client-secret <span style=color:#4e9a06>"<remote-client-secret>"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">13</span><span> --catalog-client-scope <span style=color:#4e9a06>"PRINCIPAL_ROLE:ALL"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">14</span><span> analytics_rest
+multiple logical catalogs under one URI.</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span>polaris catalogs create <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --type EXTERNAL <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --storage-type s3 <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --role-arn <span style=color:#4e9a06>"arn:aws:iam::123456789012:role/polaris-warehouse-access"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --default-base-location <span style=color:#4e9a06>"s3://analytics-bucket/warehouse/"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --catalog-connection-type iceberg-rest <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --iceberg-remote-catalog-name analytics <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --catalog-uri <span style=color:#4e9a06>"https://remote-polaris.example.com/catalog/v1"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --catalog-authentication-type OAUTH <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --catalog-token-uri <span style=color:#4e9a06>"https://remote-polaris.example.com/catalog/v1/oauth/tokens"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --catalog-client-id <span style=color:#4e9a06>"<remote-client-id>"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --catalog-client-secret <span style=color:#4e9a06>"<remote-client-secret>"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --catalog-client-scope <span style=color:#4e9a06>"PRINCIPAL_ROLE:ALL"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> analytics_rest
</span></span></code></pre></div><p>Refer to the <a href=../command-line-interface.md#catalogs>CLI documentation</a> for details on alternative authentication types such as BEARER or SIGV4.</p><p>Grant catalog roles to principal roles the same way you do for internal catalogs so compute engines
receive tokens with access to the federated namespace.</p><h2 id=outbound-http-settings id=outbound-http-settings>Outbound HTTP settings<a class=heading-anchor href=#outbound-http-settings aria-label=Anchor>🔗</a></h2><p>Iceberg REST federation uses Iceberg’s HTTP client. You can pass through non-sensitive HTTP
settings by adding catalog properties when creating or updating the external catalog (via
<code>--property</code> or <code>--set-property</code>).</p><div class="alert alert-warning"><p class=alert-heading>⚠️ Warning</p>Catalog properties are returned to authenticated catalog clients as part of the Iceberg REST
<code>/config</code> response. Only place non-sensitive client configuration in catalog properties. Do not put
-passwords, tokens, access keys, or other secrets into catalog properties.</div><p>Common settings include:</p><ul><li><code>rest.client.proxy.hostname</code></li><li><code>rest.client.proxy.port</code></li><li><code>rest.client.connection-timeout-ms</code></li><li><code>rest.client.socket-timeout-ms</code></li></ul><p>Example:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language- [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> --set-property rest.client.proxy.hostname<span style=color:#ce5c00;font-weight:700>=</span>proxy.example.com <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> --set-property rest.client.proxy.port<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#0000cf;font-weight:700>3128</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> --set-property rest.client.connection-timeout-ms<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#0000cf;font-weight:700>30000</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span> --set-property rest.client.socket-timeout-ms<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#0000cf;font-weight:700>120000</span>
+passwords, tokens, access keys, or other secrets into catalog properties.</div><p>Common settings include:</p><ul><li><code>rest.client.proxy.hostname</code></li><li><code>rest.client.proxy.port</code></li><li><code>rest.client.connection-timeout-ms</code></li><li><code>rest.client.socket-timeout-ms</code></li></ul><p>Example:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language- [...]
+</span></span></span><span style=display:flex><span> --set-property rest.client.proxy.hostname<span style=color:#ce5c00;font-weight:700>=</span>proxy.example.com <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --set-property rest.client.proxy.port<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#0000cf;font-weight:700>3128</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --set-property rest.client.connection-timeout-ms<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#0000cf;font-weight:700>30000</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --set-property rest.client.socket-timeout-ms<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#0000cf;font-weight:700>120000</span>
</span></span></code></pre></div><p>Connection config properties (URI and authentication) take precedence if the same keys are present.</p><h2 id=operational-notes id=operational-notes>Operational notes<a class=heading-anchor href=#operational-notes aria-label=Anchor>🔗</a></h2><ul><li><strong>Connectivity checks:</strong> Polaris does not lazily probe the remote service; catalog creation fails if
the REST endpoint is unreachable or authentication is rejected.</li><li><strong>Feature parity:</strong> Federation exposes whatever table/namespace operations the remote service
implements. Unsupported features return the remote error directly to callers.</li><li><strong>Register table overwrite:</strong> <code>POST /v1/{catalog}/namespaces/{namespace}/register</code> with
diff --git a/in-dev/unreleased/federation/index.html b/in-dev/unreleased/federation/index.html
index 0da496cfc9..1827322a1b 100644
--- a/in-dev/unreleased/federation/index.html
+++ b/in-dev/unreleased/federation/index.html
@@ -1,4 +1,4 @@
-<!doctype html><html itemscope itemtype=http://schema.org/WebPage lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><link rel=alternate type=application/rss+xml href=https://polaris.apache.org/in-dev/unreleased/federation/index.xml><meta name=robots content="index, follow"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon.png sizes=180x180><link rel= [...]
+<!doctype html><html itemscope itemtype=http://schema.org/WebPage lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><link rel=alternate type=application/rss+xml href=https://polaris.apache.org/in-dev/unreleased/federation/index.xml><meta name=robots content="index, follow"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon.png sizes=180x180><link rel= [...]
<label for=m-in-devunreleased-check><a href=/in-dev/unreleased/ title="Apache Polaris Documentation (Unreleased)" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleased><span>Unreleased</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-in-devunreleasedgetting-started-li><input type=checkbox id=m-in-devunreleasedgetting-started-check>
<label for=m-in-devunreleasedgetting-started-check><a href=/in-dev/unreleased/getting-started/ title="Getting Started with Apache Polaris" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleasedgetting-started><span>Getting Started</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedquick-start-li><input type=checkbox id=m-in-devunreleasedgetting-star [...]
<label for=m-in-devunreleasedgetting-startedquick-start-check><a href=/in-dev/unreleased/getting-started/quick-start/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-in-devunreleasedgetting-startedquick-start><span>Quickstart</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedsetup-tools-li><input type=checkbox id=m-in-devunreleasedgetting-startedsetup-tools-check>
diff --git a/in-dev/unreleased/generic-table/index.html b/in-dev/unreleased/generic-table/index.html
index 0752a5313e..5855e78ed5 100644
--- a/in-dev/unreleased/generic-table/index.html
+++ b/in-dev/unreleased/generic-table/index.html
@@ -4,9 +4,9 @@ Generic tables are in beta. Please use it with caution and report any issue if e
Create a generic table under a namespace Load a generic table Drop a generic table List all generic tables under a namespace ❗Important
Generic tables are in beta. Please use it with caution and report any issue if encountered. What is a Generic Table?🔗 A generic table is an entity that defines the following fields:"><meta property="og:locale" content="en_us"><meta property="og:type" content="article"><meta property="article:section" content="in-dev"><meta itemprop=name content="Generic Table"><meta itemprop=description content="The generic tables are non-Iceberg tables. Table can be multiple formats including Delta, CSV [...]
Create a generic table under a namespace Load a generic table Drop a generic table List all generic tables under a namespace ❗Important
-Generic tables are in beta. Please use it with caution and report any issue if encountered. What is a Generic Table?🔗 A generic table is an entity that defines the following fields:"><meta itemprop=wordCount content="805"><meta name=twitter:card content="summary"><meta name=twitter:title content="Generic Table"><meta name=twitter:description content="The generic tables are non-Iceberg tables. Table can be multiple formats including Delta, CSV, etc. With this framework, you can:
+Generic tables are in beta. Please use it with caution and report any issue if encountered. What is a Generic Table?🔗 A generic table is an entity that defines the following fields:"><meta itemprop=wordCount content="772"><meta name=twitter:card content="summary"><meta name=twitter:title content="Generic Table"><meta name=twitter:description content="The generic tables are non-Iceberg tables. Table can be multiple formats including Delta, CSV, etc. With this framework, you can:
Create a generic table under a namespace Load a generic table Drop a generic table List all generic tables under a namespace ❗Important
-Generic tables are in beta. Please use it with caution and report any issue if encountered. What is a Generic Table?🔗 A generic table is an entity that defines the following fields:"><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css rel=styleshe [...]
+Generic tables are in beta. Please use it with caution and report any issue if encountered. What is a Generic Table?🔗 A generic table is an entity that defines the following fields:"><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css rel=styleshe [...]
<label for=m-in-devunreleased-check><a href=/in-dev/unreleased/ title="Apache Polaris Documentation (Unreleased)" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleased><span>Unreleased</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-in-devunreleasedgetting-started-li><input type=checkbox id=m-in-devunreleasedgetting-started-check>
<label for=m-in-devunreleasedgetting-started-check><a href=/in-dev/unreleased/getting-started/ title="Getting Started with Apache Polaris" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleasedgetting-started><span>Getting Started</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedquick-start-li><input type=checkbox id=m-in-devunreleasedgetting-star [...]
<label for=m-in-devunreleasedgetting-startedquick-start-check><a href=/in-dev/unreleased/getting-started/quick-start/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-in-devunreleasedgetting-startedquick-start><span>Quickstart</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedsetup-tools-li><input type=checkbox id=m-in-devunreleasedgetting-startedsetup-tools-check>
@@ -76,49 +76,49 @@ This content is unreleased and may change before the next Polaris release.
For stable user documentation, see the
<a href=/releases/latest/>latest release docs</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/docs/>Documentation</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/>Developer Docs</a></li><li class="breadcrumb-item active" aria-current=page>Generic Table</li></ol></nav><div class=td-content><h1>Generic Table</h1><header class=article-meta></header><p>The generic tables are non-Iceberg tables. Table can be mu [...]
shows the comparison between the two APIs:</p><table><thead><tr><th>Operations</th><th><strong>Iceberg Table API</strong></th><th><strong>Generic Table API</strong></th></tr></thead><tbody><tr><td>Create Table</td><td>Create an Iceberg table</td><td>Create a generic table</td></tr><tr><td>Load Table</td><td>Load an Iceberg table. If the table to load is a generic table, you need to call the Generic Table loadTable API, otherwise a TableNotFoundException will be thrown</td><td>Load a gene [...]
-request body looks like the following:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-json data-lang=json><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span><span style=color:#000;font-weight:700>{</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> <span style=color:#204a87;font-weight:700>"name"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"<table_name>"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> <span style=color:#204a87;font-weight:700>"format"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"<table_format>"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> <span style=color:#204a87;font-weight:700>"base-location"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"<table_base_location>"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span> <span style=color:#204a87;font-weight:700>"doc"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"<comment or description for table>"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">6</span><span> <span style=color:#204a87;font-weight:700>"properties"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">7</span><span> <span style=color:#204a87;font-weight:700>"<property-key>"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"<property-value>"</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">8</span><span> <span style=color:#000;font-weight:700>}</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">9</span><span><span style=color:#000;font-weight:700>}</span>
+request body looks like the following:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-json data-lang=json><span style=display:flex><span><span style=color:#000;font-weight:700>{</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"name"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"<table_name>"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"format"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"<table_format>"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"base-location"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"<table_base_location>"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"doc"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"<comment or description for table>"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"properties"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"<property-key>"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"<property-value>"</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>}</span>
+</span></span><span style=display:flex><span><span style=color:#000;font-weight:700>}</span>
</span></span></code></pre></div><p>Here is an example to create a generic table with name <code>delta_table</code> and format as <code>delta</code> under a namespace <code>delta_ns</code>
-for catalog <code>delta_catalog</code> using curl:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 1</span><span>curl -X POST http://localhost:8181/api/catalog/polaris/v1/delta_catalog/namespaces/delta_ns/gener [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span> -H <span style=color:#4e9a06>"Content-Type: application/json"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span> -d <span style=color:#4e9a06>'{
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span><span style=color:#4e9a06> "name": "delta_table",
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span><span style=color:#4e9a06> "format": "delta",
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span><span style=color:#4e9a06> "base-location": "s3://<my-bucket>/path/to/table",
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span><span style=color:#4e9a06> "doc": "delta table example",
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span><span style=color:#4e9a06> "properties": {
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span><span style=color:#4e9a06> "key1": "value1"
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">10</span><span><span style=color:#4e9a06> }
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">11</span><span><span style=color:#4e9a06> }'</span>
-</span></span></code></pre></div><h3 id=load-a-generic-table id=load-a-generic-table>Load a Generic Table<a class=heading-anchor href=#load-a-generic-table aria-label=Anchor>🔗</a></h3><p>The REST endpoint for load a generic table is <code>GET /polaris/v1/{prefix}/namespaces/{namespace}/generic-tables/{generic-table}</code>.</p><p>Here is an example to load the table <code>delta_table</code> using curl:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4 [...]
-</span></span></code></pre></div><p>And the response looks like the following:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-json data-lang=json><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 1</span><span><span style=color:#000;font-weight:700>{</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span> <span style=color:#204a87;font-weight:700>"table"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span> <span style=color:#204a87;font-weight:700>"name"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"delta_table"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span> <span style=color:#204a87;font-weight:700>"format"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"delta"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span> <span style=color:#204a87;font-weight:700>"base-location"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"s3://<my-bucket>/path/to/table"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span> <span style=color:#204a87;font-weight:700>"doc"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"delta table example"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span> <span style=color:#204a87;font-weight:700>"properties"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span> <span style=color:#204a87;font-weight:700>"key1"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"value1"</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span> <span style=color:#000;font-weight:700>}</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">10</span><span> <span style=color:#000;font-weight:700>}</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">11</span><span><span style=color:#000;font-weight:700>}</span>
+for catalog <code>delta_catalog</code> using curl:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span>curl -X POST http://localhost:8181/api/catalog/polaris/v1/delta_catalog/namespaces/delta_ns/generic-tables <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -H <span style=color:#4e9a06>"Content-Type: application/json"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -d <span style=color:#4e9a06>'{
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "name": "delta_table",
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "format": "delta",
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "base-location": "s3://<my-bucket>/path/to/table",
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "doc": "delta table example",
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "properties": {
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> "key1": "value1"
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> }
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> }'</span>
+</span></span></code></pre></div><h3 id=load-a-generic-table id=load-a-generic-table>Load a Generic Table<a class=heading-anchor href=#load-a-generic-table aria-label=Anchor>🔗</a></h3><p>The REST endpoint for load a generic table is <code>GET /polaris/v1/{prefix}/namespaces/{namespace}/generic-tables/{generic-table}</code>.</p><p>Here is an example to load the table <code>delta_table</code> using curl:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4 [...]
+</span></span></code></pre></div><p>And the response looks like the following:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-json data-lang=json><span style=display:flex><span><span style=color:#000;font-weight:700>{</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"table"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"name"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"delta_table"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"format"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"delta"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"base-location"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"s3://<my-bucket>/path/to/table"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"doc"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"delta table example"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"properties"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"key1"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"value1"</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>}</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>}</span>
+</span></span><span style=display:flex><span><span style=color:#000;font-weight:700>}</span>
</span></span></code></pre></div><h3 id=list-generic-tables id=list-generic-tables>List Generic Tables<a class=heading-anchor href=#list-generic-tables aria-label=Anchor>🔗</a></h3><p>The REST endpoint for listing the generic tables under a given
-namespace is <code>GET /polaris/v1/{prefix}/namespaces/{namespace}/generic-tables/</code>.</p><p>Following curl command lists all tables under namespace delta_namespace:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7 [...]
-</span></span></code></pre></div><p>Example Response:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-json data-lang=json><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span><span style=color:#000;font-weight:700>{</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> <span style=color:#204a87;font-weight:700>"identifiers"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> <span style=color:#000;font-weight:700>{</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> <span style=color:#204a87;font-weight:700>"namespace"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span><span style=color:#4e9a06>"delta_ns"</span><span style=color:#000;font-weight:700>],</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span> <span style=color:#204a87;font-weight:700>"name"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"delta_table"</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">6</span><span> <span style=color:#000;font-weight:700>}</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">7</span><span> <span style=color:#000;font-weight:700>],</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">8</span><span> <span style=color:#204a87;font-weight:700>"next-page-token"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#204a87;font-weight:700>null</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">9</span><span><span style=color:#000;font-weight:700>}</span>
-</span></span></code></pre></div><h3 id=drop-a-generic-table id=drop-a-generic-table>Drop a Generic Table<a class=heading-anchor href=#drop-a-generic-table aria-label=Anchor>🔗</a></h3><p>The drop generic table REST endpoint is <code>DELETE /polaris/v1/{prefix}/namespaces/{namespace}/generic-tables/{generic-table}</code></p><p>The following curl call drops the table <code>delat_table</code>:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size [...]
+namespace is <code>GET /polaris/v1/{prefix}/namespaces/{namespace}/generic-tables/</code>.</p><p>Following curl command lists all tables under namespace delta_namespace:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span>curl -X GET http://localhost:8181/api/catalog/polaris/v1/delta_catalog/namespaces/delta_ns/generic-tables/
+</span></span></code></pre></div><p>Example Response:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-json data-lang=json><span style=display:flex><span><span style=color:#000;font-weight:700>{</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"identifiers"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>{</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"namespace"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span><span style=color:#4e9a06>"delta_ns"</span><span style=color:#000;font-weight:700>],</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"name"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"delta_table"</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>}</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>],</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"next-page-token"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#204a87;font-weight:700>null</span>
+</span></span><span style=display:flex><span><span style=color:#000;font-weight:700>}</span>
+</span></span></code></pre></div><h3 id=drop-a-generic-table id=drop-a-generic-table>Drop a Generic Table<a class=heading-anchor href=#drop-a-generic-table aria-label=Anchor>🔗</a></h3><p>The drop generic table REST endpoint is <code>DELETE /polaris/v1/{prefix}/namespaces/{namespace}/generic-tables/{generic-table}</code></p><p>The following curl call drops the table <code>delat_table</code>:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size [...]
</span></span></code></pre></div><h3 id=api-reference id=api-reference>API Reference<a class=heading-anchor href=#api-reference aria-label=Anchor>🔗</a></h3><p>For the complete and up-to-date API specification, see the <a href="https://editor-next.swagger.io/?url=https://raw.githubusercontent.com/apache/polaris/refs/heads/main/spec/generated/bundled-polaris-catalog-service.yaml">Catalog API Spec</a>.</p><h2 id=current-limitations id=current-limitations>Current Limitations<a class=heading- [...]
\ No newline at end of file
diff --git a/in-dev/unreleased/getting-started/binary-distribution/index.html b/in-dev/unreleased/getting-started/binary-distribution/index.html
index 666b0135d7..68d7a75b03 100644
--- a/in-dev/unreleased/getting-started/binary-distribution/index.html
+++ b/in-dev/unreleased/getting-started/binary-distribution/index.html
@@ -1,16 +1,16 @@
<!doctype html><html itemscope itemtype=http://schema.org/WebPage lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon.png sizes=100x100><link rel=icon type=image/png href=/favicons/android-ch [...]
Prerequisites🔗 Java SE 21 or later installed on your machine Running🔗 Download the latest release and extract the binary distribution:
-1POLARIS_VERSION=1.5.0 2curl -Lf https://downloads.apache.org/polaris/${POLARIS_VERSION}/polaris-bin-${POLARIS_VERSION}.tgz | tar xzf - 3cd polaris-bin-${POLARIS_VERSION} Start the Polaris server:
-1bin/server The server will start and listen on http://localhost:8181 (main REST APIs) and http://localhost:8182 (management interface, for health checks and metrics)."><meta property="og:url" content="https://polaris.apache.org/in-dev/unreleased/getting-started/binary-distribution/"><meta property="og:site_name" content="Apache Polaris"><meta property="og:title" content="Binary Distribution"><meta property="og:description" content="Use this guide to quickly start running Polaris using t [...]
+POLARIS_VERSION=1.5.0 curl -Lf https://downloads.apache.org/polaris/${POLARIS_VERSION}/polaris-bin-${POLARIS_VERSION}.tgz | tar xzf - cd polaris-bin-${POLARIS_VERSION} Start the Polaris server:
+bin/server The server will start and listen on http://localhost:8181 (main REST APIs) and http://localhost:8182 (management interface, for health checks and metrics)."><meta property="og:url" content="https://polaris.apache.org/in-dev/unreleased/getting-started/binary-distribution/"><meta property="og:site_name" content="Apache Polaris"><meta property="og:title" content="Binary Distribution"><meta property="og:description" content="Use this guide to quickly start running Polaris using th [...]
Prerequisites🔗 Java SE 21 or later installed on your machine Running🔗 Download the latest release and extract the binary distribution:
-1POLARIS_VERSION=1.5.0 2curl -Lf https://downloads.apache.org/polaris/${POLARIS_VERSION}/polaris-bin-${POLARIS_VERSION}.tgz | tar xzf - 3cd polaris-bin-${POLARIS_VERSION} Start the Polaris server:
-1bin/server The server will start and listen on http://localhost:8181 (main REST APIs) and http://localhost:8182 (management interface, for health checks and metrics)."><meta property="og:locale" content="en_us"><meta property="og:type" content="article"><meta property="article:section" content="in-dev"><meta itemprop=name content="Binary Distribution"><meta itemprop=description content="Use this guide to quickly start running Polaris using the pre-built binary distribution.
+POLARIS_VERSION=1.5.0 curl -Lf https://downloads.apache.org/polaris/${POLARIS_VERSION}/polaris-bin-${POLARIS_VERSION}.tgz | tar xzf - cd polaris-bin-${POLARIS_VERSION} Start the Polaris server:
+bin/server The server will start and listen on http://localhost:8181 (main REST APIs) and http://localhost:8182 (management interface, for health checks and metrics)."><meta property="og:locale" content="en_us"><meta property="og:type" content="article"><meta property="article:section" content="in-dev"><meta itemprop=name content="Binary Distribution"><meta itemprop=description content="Use this guide to quickly start running Polaris using the pre-built binary distribution.
Prerequisites🔗 Java SE 21 or later installed on your machine Running🔗 Download the latest release and extract the binary distribution:
-1POLARIS_VERSION=1.5.0 2curl -Lf https://downloads.apache.org/polaris/${POLARIS_VERSION}/polaris-bin-${POLARIS_VERSION}.tgz | tar xzf - 3cd polaris-bin-${POLARIS_VERSION} Start the Polaris server:
-1bin/server The server will start and listen on http://localhost:8181 (main REST APIs) and http://localhost:8182 (management interface, for health checks and metrics)."><meta itemprop=wordCount content="93"><meta name=twitter:card content="summary"><meta name=twitter:title content="Binary Distribution"><meta name=twitter:description content="Use this guide to quickly start running Polaris using the pre-built binary distribution.
+POLARIS_VERSION=1.5.0 curl -Lf https://downloads.apache.org/polaris/${POLARIS_VERSION}/polaris-bin-${POLARIS_VERSION}.tgz | tar xzf - cd polaris-bin-${POLARIS_VERSION} Start the Polaris server:
+bin/server The server will start and listen on http://localhost:8181 (main REST APIs) and http://localhost:8182 (management interface, for health checks and metrics)."><meta itemprop=wordCount content="93"><meta name=twitter:card content="summary"><meta name=twitter:title content="Binary Distribution"><meta name=twitter:description content="Use this guide to quickly start running Polaris using the pre-built binary distribution.
Prerequisites🔗 Java SE 21 or later installed on your machine Running🔗 Download the latest release and extract the binary distribution:
-1POLARIS_VERSION=1.5.0 2curl -Lf https://downloads.apache.org/polaris/${POLARIS_VERSION}/polaris-bin-${POLARIS_VERSION}.tgz | tar xzf - 3cd polaris-bin-${POLARIS_VERSION} Start the Polaris server:
-1bin/server The server will start and listen on http://localhost:8181 (main REST APIs) and http://localhost:8182 (management interface, for health checks and metrics)."><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css rel=stylesheet integrity=" [...]
+POLARIS_VERSION=1.5.0 curl -Lf https://downloads.apache.org/polaris/${POLARIS_VERSION}/polaris-bin-${POLARIS_VERSION}.tgz | tar xzf - cd polaris-bin-${POLARIS_VERSION} Start the Polaris server:
+bin/server The server will start and listen on http://localhost:8181 (main REST APIs) and http://localhost:8182 (management interface, for health checks and metrics)."><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css rel=stylesheet integrity="s [...]
<label for=m-in-devunreleased-check><a href=/in-dev/unreleased/ title="Apache Polaris Documentation (Unreleased)" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleased><span>Unreleased</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child active-path" id=m-in-devunreleasedgetting-started-li><input type=checkbox id=m-in-devunreleasedgetting-started-check checked>
<label for=m-in-devunreleasedgetting-started-check><a href=/in-dev/unreleased/getting-started/ title="Getting Started with Apache Polaris" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleasedgetting-started><span>Getting Started</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedquick-start-li><input type=checkbox id=m-in-devunreleasedgetting-star [...]
<label for=m-in-devunreleasedgetting-startedquick-start-check><a href=/in-dev/unreleased/getting-started/quick-start/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-in-devunreleasedgetting-startedquick-start><span>Quickstart</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedsetup-tools-li><input type=checkbox id=m-in-devunreleasedgetting-startedsetup-tools-check>
@@ -78,9 +78,9 @@ Prerequisites🔗 Java SE 21 or later installed on your machine Running🔗 Down
<a class=td-toc-title__link title="Top of page" href=#></a></div><nav id=TableOfContents><ul><li><a href=#prerequisites>Prerequisites</a></li><li><a href=#running>Running</a></li></ul></nav></div></aside><main class="col-12 col-md-9 col-xl-8 ps-md-5" role=main><div class="pageinfo pageinfo-warning"><p><strong>IMPORTANT:</strong> Developer documentation for the current <code>main</code> branch.
This content is unreleased and may change before the next Polaris release.
For stable user documentation, see the
-<a href=/releases/latest/>latest release docs</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/docs/>Documentation</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/>Developer Docs</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/getting-started/>Getting Started</a></li><li class="breadcrumb-item active" aria-current=page>Binary Distribution</li></ol></nav><div class=td-content><h1>Binary Distribu [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span>curl -Lf https://downloads.apache.org/polaris/<span style=color:#4e9a06>${</span><span style=color:#000>POLARIS_VERSION</span><span style=color:#4e9a06>}</span>/polaris-bin-<span style=color:#4e9a06>${</span><span style=color:#000>POLARIS_VERSION</span><span style=color:#4e9a06>}</span>.tgz <span style=color:#000;font- [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span><span style=color:#204a87>cd</span> polaris-bin-<span style=color:#4e9a06>${</span><span style=color:#000>POLARIS_VERSION</span><span style=color:#4e9a06>}</span>
-</span></span></code></pre></div><p>Start the Polaris server:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span>bin/server
-</span></span></code></pre></div><p>The server will start and listen on http://localhost:8181 (main REST APIs) and http://localhost:8182 (management interface, for health checks and metrics).</p><p>Health and metrics endpoints are available under http://localhost:8182/q/health and http://localhost:8182/q/metrics respectively.</p><p>You can verify the server is running by checking the health endpoint:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;- [...]
+<a href=/releases/latest/>latest release docs</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/docs/>Documentation</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/>Developer Docs</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/getting-started/>Getting Started</a></li><li class="breadcrumb-item active" aria-current=page>Binary Distribution</li></ol></nav><div class=td-content><h1>Binary Distribu [...]
+</span></span><span style=display:flex><span>curl -Lf https://downloads.apache.org/polaris/<span style=color:#4e9a06>${</span><span style=color:#000>POLARIS_VERSION</span><span style=color:#4e9a06>}</span>/polaris-bin-<span style=color:#4e9a06>${</span><span style=color:#000>POLARIS_VERSION</span><span style=color:#4e9a06>}</span>.tgz <span style=color:#000;font-weight:700>|</span> tar xzf -
+</span></span><span style=display:flex><span><span style=color:#204a87>cd</span> polaris-bin-<span style=color:#4e9a06>${</span><span style=color:#000>POLARIS_VERSION</span><span style=color:#4e9a06>}</span>
+</span></span></code></pre></div><p>Start the Polaris server:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span>bin/server
+</span></span></code></pre></div><p>The server will start and listen on http://localhost:8181 (main REST APIs) and http://localhost:8182 (management interface, for health checks and metrics).</p><p>Health and metrics endpoints are available under http://localhost:8182/q/health and http://localhost:8182/q/metrics respectively.</p><p>You can verify the server is running by checking the health endpoint:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;- [...]
</span></span></code></pre></div></div></main></div></div><footer class="td-footer row d-print-none"><div class=container-fluid><div class="row mx-md-2"><div class="td-footer__left col-6 col-sm-4 order-sm-1"><ul class=td-footer__links-list><li class=td-footer__links-item data-bs-toggle=tooltip title=Slack aria-label=Slack><a target=_blank rel=noopener href=https://apache-polaris.slack.com/ aria-label=Slack><i class="fa-regular fa-comment-dots"></i></a></li><li class=td-footer__links-item [...]
\ No newline at end of file
diff --git a/in-dev/unreleased/getting-started/creating-a-catalog/catalog-azure/index.html b/in-dev/unreleased/getting-started/creating-a-catalog/catalog-azure/index.html
index b9d4f756bd..6407a132b6 100644
--- a/in-dev/unreleased/getting-started/creating-a-catalog/catalog-azure/index.html
+++ b/in-dev/unreleased/getting-started/creating-a-catalog/catalog-azure/index.html
@@ -1,8 +1,8 @@
<!doctype html><html itemscope itemtype=http://schema.org/WebPage lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon.png sizes=100x100><link rel=icon type=image/png href=/favicons/android-ch [...]
-1--storage-type azure 2--tenant-id (Required for Azure) A tenant ID to use when connecting to Azure Storage 3--multi-tenant-app-name (Only for Azure) The app name to use when connecting to Azure Storage 4--consent-url (Only for Azure) A consent URL granting permissions for the Azure Storage location Example🔗 1CLIENT_ID=root \ 2CLIENT_SECRET=s3cr3t \ 3DEFAULT_BASE_LOCATION=abfss://tenant123@blob.core.windows.net \ 4TENANT_ID=tenant123.onmicrosoft.com \ 5MULTI_TENANT_APP_NAME=myapp \ 6CONS [...]
-1--storage-type azure 2--tenant-id (Required for Azure) A tenant ID to use when connecting to Azure Storage 3--multi-tenant-app-name (Only for Azure) The app name to use when connecting to Azure Storage 4--consent-url (Only for Azure) A consent URL granting permissions for the Azure Storage location Example🔗 1CLIENT_ID=root \ 2CLIENT_SECRET=s3cr3t \ 3DEFAULT_BASE_LOCATION=abfss://tenant123@blob.core.windows.net \ 4TENANT_ID=tenant123.onmicrosoft.com \ 5MULTI_TENANT_APP_NAME=myapp \ 6CONS [...]
-1--storage-type azure 2--tenant-id (Required for Azure) A tenant ID to use when connecting to Azure Storage 3--multi-tenant-app-name (Only for Azure) The app name to use when connecting to Azure Storage 4--consent-url (Only for Azure) A consent URL granting permissions for the Azure Storage location Example🔗 1CLIENT_ID=root \ 2CLIENT_SECRET=s3cr3t \ 3DEFAULT_BASE_LOCATION=abfss://tenant123@blob.core.windows.net \ 4TENANT_ID=tenant123.onmicrosoft.com \ 5MULTI_TENANT_APP_NAME=myapp \ 6CONS [...]
-1--storage-type azure 2--tenant-id (Required for Azure) A tenant ID to use when connecting to Azure Storage 3--multi-tenant-app-name (Only for Azure) The app name to use when connecting to Azure Storage 4--consent-url (Only for Azure) A consent URL granting permissions for the Azure Storage location Example🔗 1CLIENT_ID=root \ 2CLIENT_SECRET=s3cr3t \ 3DEFAULT_BASE_LOCATION=abfss://tenant123@blob.core.windows.net \ 4TENANT_ID=tenant123.onmicrosoft.com \ 5MULTI_TENANT_APP_NAME=myapp \ 6CONS [...]
+--storage-type azure --tenant-id (Required for Azure) A tenant ID to use when connecting to Azure Storage --multi-tenant-app-name (Only for Azure) The app name to use when connecting to Azure Storage --consent-url (Only for Azure) A consent URL granting permissions for the Azure Storage location Example🔗 CLIENT_ID=root \ CLIENT_SECRET=s3cr3t \ DEFAULT_BASE_LOCATION=abfss://tenant123@blob.core.windows.net \ TENANT_ID=tenant123.onmicrosoft.com \ MULTI_TENANT_APP_NAME=myapp \ CONSENT_URL=ht [...]
+--storage-type azure --tenant-id (Required for Azure) A tenant ID to use when connecting to Azure Storage --multi-tenant-app-name (Only for Azure) The app name to use when connecting to Azure Storage --consent-url (Only for Azure) A consent URL granting permissions for the Azure Storage location Example🔗 CLIENT_ID=root \ CLIENT_SECRET=s3cr3t \ DEFAULT_BASE_LOCATION=abfss://tenant123@blob.core.windows.net \ TENANT_ID=tenant123.onmicrosoft.com \ MULTI_TENANT_APP_NAME=myapp \ CONSENT_URL=ht [...]
+--storage-type azure --tenant-id (Required for Azure) A tenant ID to use when connecting to Azure Storage --multi-tenant-app-name (Only for Azure) The app name to use when connecting to Azure Storage --consent-url (Only for Azure) A consent URL granting permissions for the Azure Storage location Example🔗 CLIENT_ID=root \ CLIENT_SECRET=s3cr3t \ DEFAULT_BASE_LOCATION=abfss://tenant123@blob.core.windows.net \ TENANT_ID=tenant123.onmicrosoft.com \ MULTI_TENANT_APP_NAME=myapp \ CONSENT_URL=ht [...]
+--storage-type azure --tenant-id (Required for Azure) A tenant ID to use when connecting to Azure Storage --multi-tenant-app-name (Only for Azure) The app name to use when connecting to Azure Storage --consent-url (Only for Azure) A consent URL granting permissions for the Azure Storage location Example🔗 CLIENT_ID=root \ CLIENT_SECRET=s3cr3t \ DEFAULT_BASE_LOCATION=abfss://tenant123@blob.core.windows.net \ TENANT_ID=tenant123.onmicrosoft.com \ MULTI_TENANT_APP_NAME=myapp \ CONSENT_URL=ht [...]
<label for=m-in-devunreleased-check><a href=/in-dev/unreleased/ title="Apache Polaris Documentation (Unreleased)" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleased><span>Unreleased</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child active-path" id=m-in-devunreleasedgetting-started-li><input type=checkbox id=m-in-devunreleasedgetting-started-check checked>
<label for=m-in-devunreleasedgetting-started-check><a href=/in-dev/unreleased/getting-started/ title="Getting Started with Apache Polaris" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleasedgetting-started><span>Getting Started</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedquick-start-li><input type=checkbox id=m-in-devunreleasedgetting-star [...]
<label for=m-in-devunreleasedgetting-startedquick-start-check><a href=/in-dev/unreleased/getting-started/quick-start/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-in-devunreleasedgetting-startedquick-start><span>Quickstart</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedsetup-tools-li><input type=checkbox id=m-in-devunreleasedgetting-startedsetup-tools-check>
@@ -70,25 +70,25 @@
<a class=td-toc-title__link title="Top of page" href=#></a></div><nav id=TableOfContents><ul><li><ul><li><a href=#example>Example</a></li></ul></li></ul></nav></div></aside><main class="col-12 col-md-9 col-xl-8 ps-md-5" role=main><div class="pageinfo pageinfo-warning"><p><strong>IMPORTANT:</strong> Developer documentation for the current <code>main</code> branch.
This content is unreleased and may change before the next Polaris release.
For stable user documentation, see the
-<a href=/releases/latest/>latest release docs</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/docs/>Documentation</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/>Developer Docs</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/getting-started/>Getting Started</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/getting-started/creating-a-catalog/>Creating a Catalog</a></li><li class="br [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span>--tenant-id (Required for Azure) A tenant ID to use when connecting to Azure Storage
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span>--multi-tenant-app-name (Only for Azure) The app name to use when connecting to Azure Storage
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span>--consent-url (Only for Azure) A consent URL granting permissions for the Azure Storage location
-</span></span></code></pre></div><h3 id=example id=example>Example<a class=heading-anchor href=#example aria-label=Anchor>🔗</a></h3><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 1</span><span><span style=color:# [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span><span style=color:#000>CLIENT_SECRET</span><span style=color:#ce5c00;font-weight:700>=</span>s3cr3t <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span><span style=color:#000>DEFAULT_BASE_LOCATION</span><span style=color:#ce5c00;font-weight:700>=</span>abfss://tenant123@blob.core.windows.net <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span><span style=color:#000>TENANT_ID</span><span style=color:#ce5c00;font-weight:700>=</span>tenant123.onmicrosoft.com <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span><span style=color:#000>MULTI_TENANT_APP_NAME</span><span style=color:#ce5c00;font-weight:700>=</span>myapp <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span><span style=color:#000>CONSENT_URL</span><span style=color:#ce5c00;font-weight:700>=</span>https://myapp.com/consent
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span>./polaris <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span> --client-id <span style=color:#4e9a06>${</span><span style=color:#000>CLIENT_ID</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span> --client-secret <span style=color:#4e9a06>${</span><span style=color:#000>CLIENT_SECRET</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">10</span><span> catalogs <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">11</span><span> create <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">12</span><span> --storage-type azure <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">13</span><span> --tenant-id <span style=color:#4e9a06>${</span><span style=color:#000>TENANT_ID</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">14</span><span> --multi-tenant-app-name <span style=color:#4e9a06>${</span><span style=color:#000>MULTI_TENANT_APP_NAME</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">15</span><span> --consent-url <span style=color:#4e9a06>${</span><span style=color:#000>CONSENT_URL</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">16</span><span> --default-base-location <span style=color:#4e9a06>${</span><span style=color:#000>DEFAULT_BASE_LOCATION</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">17</span><span> my_azure_catalog
+<a href=/releases/latest/>latest release docs</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/docs/>Documentation</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/>Developer Docs</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/getting-started/>Getting Started</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/getting-started/creating-a-catalog/>Creating a Catalog</a></li><li class="br [...]
+</span></span><span style=display:flex><span>--tenant-id (Required for Azure) A tenant ID to use when connecting to Azure Storage
+</span></span><span style=display:flex><span>--multi-tenant-app-name (Only for Azure) The app name to use when connecting to Azure Storage
+</span></span><span style=display:flex><span>--consent-url (Only for Azure) A consent URL granting permissions for the Azure Storage location
+</span></span></code></pre></div><h3 id=example id=example>Example<a class=heading-anchor href=#example aria-label=Anchor>🔗</a></h3><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span><span style=color:#000>CLIENT_ID</span><span style=color:#ce5c00;font-weight:700>=</span>root <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span><span style=color:#000>CLIENT_SECRET</span><span style=color:#ce5c00;font-weight:700>=</span>s3cr3t <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span><span style=color:#000>DEFAULT_BASE_LOCATION</span><span style=color:#ce5c00;font-weight:700>=</span>abfss://tenant123@blob.core.windows.net <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span><span style=color:#000>TENANT_ID</span><span style=color:#ce5c00;font-weight:700>=</span>tenant123.onmicrosoft.com <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span><span style=color:#000>MULTI_TENANT_APP_NAME</span><span style=color:#ce5c00;font-weight:700>=</span>myapp <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span><span style=color:#000>CONSENT_URL</span><span style=color:#ce5c00;font-weight:700>=</span>https://myapp.com/consent
+</span></span><span style=display:flex><span>./polaris <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --client-id <span style=color:#4e9a06>${</span><span style=color:#000>CLIENT_ID</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --client-secret <span style=color:#4e9a06>${</span><span style=color:#000>CLIENT_SECRET</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> catalogs <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> create <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --storage-type azure <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --tenant-id <span style=color:#4e9a06>${</span><span style=color:#000>TENANT_ID</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --multi-tenant-app-name <span style=color:#4e9a06>${</span><span style=color:#000>MULTI_TENANT_APP_NAME</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --consent-url <span style=color:#4e9a06>${</span><span style=color:#000>CONSENT_URL</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --default-base-location <span style=color:#4e9a06>${</span><span style=color:#000>DEFAULT_BASE_LOCATION</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> my_azure_catalog
</span></span></code></pre></div></div></main></div></div><footer class="td-footer row d-print-none"><div class=container-fluid><div class="row mx-md-2"><div class="td-footer__left col-6 col-sm-4 order-sm-1"><ul class=td-footer__links-list><li class=td-footer__links-item data-bs-toggle=tooltip title=Slack aria-label=Slack><a target=_blank rel=noopener href=https://apache-polaris.slack.com/ aria-label=Slack><i class="fa-regular fa-comment-dots"></i></a></li><li class=td-footer__links-item [...]
\ No newline at end of file
diff --git a/in-dev/unreleased/getting-started/creating-a-catalog/catalog-gcs/index.html b/in-dev/unreleased/getting-started/creating-a-catalog/catalog-gcs/index.html
index 81ce817e44..a154bde1a1 100644
--- a/in-dev/unreleased/getting-started/creating-a-catalog/catalog-gcs/index.html
+++ b/in-dev/unreleased/getting-started/creating-a-catalog/catalog-gcs/index.html
@@ -1,8 +1,8 @@
<!doctype html><html itemscope itemtype=http://schema.org/WebPage lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon.png sizes=100x100><link rel=icon type=image/png href=/favicons/android-ch [...]
-1--storage-type gcs 2--service-account (Only for GCS) The service account to use when connecting to GCS example🔗 1CLIENT_ID=root \ 2CLIENT_SECRET=s3cr3t \ 3DEFAULT_BASE_LOCATION=gs://my-ml-bucket/predictions/ \ 4SERVICE_ACCOUNT=serviceAccount:my-service-account@my-project.iam.gserviceaccount.com \ 5./polaris \ 6 --client-id ${CLIENT_ID} \ 7 --client-secret ${CLIENT_SECRET} \ 8 catalogs \ 9 create \ 10 --storage-type gcs \ 11 --service-account ${SERVICE_ACCOUNT} \ 12 --default-base-locati [...]
-1--storage-type gcs 2--service-account (Only for GCS) The service account to use when connecting to GCS example🔗 1CLIENT_ID=root \ 2CLIENT_SECRET=s3cr3t \ 3DEFAULT_BASE_LOCATION=gs://my-ml-bucket/predictions/ \ 4SERVICE_ACCOUNT=serviceAccount:my-service-account@my-project.iam.gserviceaccount.com \ 5./polaris \ 6 --client-id ${CLIENT_ID} \ 7 --client-secret ${CLIENT_SECRET} \ 8 catalogs \ 9 create \ 10 --storage-type gcs \ 11 --service-account ${SERVICE_ACCOUNT} \ 12 --default-base-locati [...]
-1--storage-type gcs 2--service-account (Only for GCS) The service account to use when connecting to GCS example🔗 1CLIENT_ID=root \ 2CLIENT_SECRET=s3cr3t \ 3DEFAULT_BASE_LOCATION=gs://my-ml-bucket/predictions/ \ 4SERVICE_ACCOUNT=serviceAccount:my-service-account@my-project.iam.gserviceaccount.com \ 5./polaris \ 6 --client-id ${CLIENT_ID} \ 7 --client-secret ${CLIENT_SECRET} \ 8 catalogs \ 9 create \ 10 --storage-type gcs \ 11 --service-account ${SERVICE_ACCOUNT} \ 12 --default-base-locati [...]
-1--storage-type gcs 2--service-account (Only for GCS) The service account to use when connecting to GCS example🔗 1CLIENT_ID=root \ 2CLIENT_SECRET=s3cr3t \ 3DEFAULT_BASE_LOCATION=gs://my-ml-bucket/predictions/ \ 4SERVICE_ACCOUNT=serviceAccount:my-service-account@my-project.iam.gserviceaccount.com \ 5./polaris \ 6 --client-id ${CLIENT_ID} \ 7 --client-secret ${CLIENT_SECRET} \ 8 catalogs \ 9 create \ 10 --storage-type gcs \ 11 --service-account ${SERVICE_ACCOUNT} \ 12 --default-base-locati [...]
+--storage-type gcs --service-account (Only for GCS) The service account to use when connecting to GCS example🔗 CLIENT_ID=root \ CLIENT_SECRET=s3cr3t \ DEFAULT_BASE_LOCATION=gs://my-ml-bucket/predictions/ \ SERVICE_ACCOUNT=serviceAccount:my-service-account@my-project.iam.gserviceaccount.com \ ./polaris \ --client-id ${CLIENT_ID} \ --client-secret ${CLIENT_SECRET} \ catalogs \ create \ --storage-type gcs \ --service-account ${SERVICE_ACCOUNT} \ --default-base-location ${DEFAULT_BASE_LOCATI [...]
+--storage-type gcs --service-account (Only for GCS) The service account to use when connecting to GCS example🔗 CLIENT_ID=root \ CLIENT_SECRET=s3cr3t \ DEFAULT_BASE_LOCATION=gs://my-ml-bucket/predictions/ \ SERVICE_ACCOUNT=serviceAccount:my-service-account@my-project.iam.gserviceaccount.com \ ./polaris \ --client-id ${CLIENT_ID} \ --client-secret ${CLIENT_SECRET} \ catalogs \ create \ --storage-type gcs \ --service-account ${SERVICE_ACCOUNT} \ --default-base-location ${DEFAULT_BASE_LOCATI [...]
+--storage-type gcs --service-account (Only for GCS) The service account to use when connecting to GCS example🔗 CLIENT_ID=root \ CLIENT_SECRET=s3cr3t \ DEFAULT_BASE_LOCATION=gs://my-ml-bucket/predictions/ \ SERVICE_ACCOUNT=serviceAccount:my-service-account@my-project.iam.gserviceaccount.com \ ./polaris \ --client-id ${CLIENT_ID} \ --client-secret ${CLIENT_SECRET} \ catalogs \ create \ --storage-type gcs \ --service-account ${SERVICE_ACCOUNT} \ --default-base-location ${DEFAULT_BASE_LOCATI [...]
+--storage-type gcs --service-account (Only for GCS) The service account to use when connecting to GCS example🔗 CLIENT_ID=root \ CLIENT_SECRET=s3cr3t \ DEFAULT_BASE_LOCATION=gs://my-ml-bucket/predictions/ \ SERVICE_ACCOUNT=serviceAccount:my-service-account@my-project.iam.gserviceaccount.com \ ./polaris \ --client-id ${CLIENT_ID} \ --client-secret ${CLIENT_SECRET} \ catalogs \ create \ --storage-type gcs \ --service-account ${SERVICE_ACCOUNT} \ --default-base-location ${DEFAULT_BASE_LOCATI [...]
<label for=m-in-devunreleased-check><a href=/in-dev/unreleased/ title="Apache Polaris Documentation (Unreleased)" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleased><span>Unreleased</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child active-path" id=m-in-devunreleasedgetting-started-li><input type=checkbox id=m-in-devunreleasedgetting-started-check checked>
<label for=m-in-devunreleasedgetting-started-check><a href=/in-dev/unreleased/getting-started/ title="Getting Started with Apache Polaris" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleasedgetting-started><span>Getting Started</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedquick-start-li><input type=checkbox id=m-in-devunreleasedgetting-star [...]
<label for=m-in-devunreleasedgetting-startedquick-start-check><a href=/in-dev/unreleased/getting-started/quick-start/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-in-devunreleasedgetting-startedquick-start><span>Quickstart</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedsetup-tools-li><input type=checkbox id=m-in-devunreleasedgetting-startedsetup-tools-check>
@@ -70,19 +70,19 @@
<a class=td-toc-title__link title="Top of page" href=#></a></div><nav id=TableOfContents><ul><li><ul><li><a href=#example>example</a></li></ul></li></ul></nav></div></aside><main class="col-12 col-md-9 col-xl-8 ps-md-5" role=main><div class="pageinfo pageinfo-warning"><p><strong>IMPORTANT:</strong> Developer documentation for the current <code>main</code> branch.
This content is unreleased and may change before the next Polaris release.
For stable user documentation, see the
-<a href=/releases/latest/>latest release docs</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/docs/>Documentation</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/>Developer Docs</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/getting-started/>Getting Started</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/getting-started/creating-a-catalog/>Creating a Catalog</a></li><li class="br [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span>--service-account (Only for GCS) The service account to use when connecting to GCS
-</span></span></code></pre></div><h3 id=example id=example>example<a class=heading-anchor href=#example aria-label=Anchor>🔗</a></h3><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 1</span><span><span style=color:# [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span><span style=color:#000>CLIENT_SECRET</span><span style=color:#ce5c00;font-weight:700>=</span>s3cr3t <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span><span style=color:#000>DEFAULT_BASE_LOCATION</span><span style=color:#ce5c00;font-weight:700>=</span>gs://my-ml-bucket/predictions/ <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span><span style=color:#000>SERVICE_ACCOUNT</span><span style=color:#ce5c00;font-weight:700>=</span>serviceAccount:my-service-account@my-project.iam.gserviceaccount.com <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span>./polaris <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span> --client-id <span style=color:#4e9a06>${</span><span style=color:#000>CLIENT_ID</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span> --client-secret <span style=color:#4e9a06>${</span><span style=color:#000>CLIENT_SECRET</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span> catalogs <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span> create <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">10</span><span> --storage-type gcs <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">11</span><span> --service-account <span style=color:#4e9a06>${</span><span style=color:#000>SERVICE_ACCOUNT</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">12</span><span> --default-base-location <span style=color:#4e9a06>${</span><span style=color:#000>DEFAULT_BASE_LOCATION</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">13</span><span> my_gcs_catalog
+<a href=/releases/latest/>latest release docs</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/docs/>Documentation</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/>Developer Docs</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/getting-started/>Getting Started</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/getting-started/creating-a-catalog/>Creating a Catalog</a></li><li class="br [...]
+</span></span><span style=display:flex><span>--service-account (Only for GCS) The service account to use when connecting to GCS
+</span></span></code></pre></div><h3 id=example id=example>example<a class=heading-anchor href=#example aria-label=Anchor>🔗</a></h3><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span><span style=color:#000>CLIENT_ID</span><span style=color:#ce5c00;font-weight:700>=</span>root <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span><span style=color:#000>CLIENT_SECRET</span><span style=color:#ce5c00;font-weight:700>=</span>s3cr3t <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span><span style=color:#000>DEFAULT_BASE_LOCATION</span><span style=color:#ce5c00;font-weight:700>=</span>gs://my-ml-bucket/predictions/ <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span><span style=color:#000>SERVICE_ACCOUNT</span><span style=color:#ce5c00;font-weight:700>=</span>serviceAccount:my-service-account@my-project.iam.gserviceaccount.com <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span>./polaris <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --client-id <span style=color:#4e9a06>${</span><span style=color:#000>CLIENT_ID</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --client-secret <span style=color:#4e9a06>${</span><span style=color:#000>CLIENT_SECRET</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> catalogs <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> create <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --storage-type gcs <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --service-account <span style=color:#4e9a06>${</span><span style=color:#000>SERVICE_ACCOUNT</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --default-base-location <span style=color:#4e9a06>${</span><span style=color:#000>DEFAULT_BASE_LOCATION</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> my_gcs_catalog
</span></span></code></pre></div></div></main></div></div><footer class="td-footer row d-print-none"><div class=container-fluid><div class="row mx-md-2"><div class="td-footer__left col-6 col-sm-4 order-sm-1"><ul class=td-footer__links-list><li class=td-footer__links-item data-bs-toggle=tooltip title=Slack aria-label=Slack><a target=_blank rel=noopener href=https://apache-polaris.slack.com/ aria-label=Slack><i class="fa-regular fa-comment-dots"></i></a></li><li class=td-footer__links-item [...]
\ No newline at end of file
diff --git a/in-dev/unreleased/getting-started/creating-a-catalog/catalog-migration/index.html b/in-dev/unreleased/getting-started/creating-a-catalog/catalog-migration/index.html
index 492df7d398..92b6f99792 100644
--- a/in-dev/unreleased/getting-started/creating-a-catalog/catalog-migration/index.html
+++ b/in-dev/unreleased/getting-started/creating-a-catalog/catalog-migration/index.html
@@ -2,7 +2,7 @@
Using the Iceberg Catalog Migrator tool: A command-line tool to migrate Iceberg tables from one Iceberg catalog to another. This tool works with any existing Iceberg catalog including Polaris. Using the Polaris Synchronizer tool: A tool to migrate entities from one Polaris instance to another. This tool is specific to Polaris."><meta property="og:url" content="https://polaris.apache.org/in-dev/unreleased/getting-started/creating-a-catalog/catalog-migration/"><meta property="og:site_name" [...]
Using the Iceberg Catalog Migrator tool: A command-line tool to migrate Iceberg tables from one Iceberg catalog to another. This tool works with any existing Iceberg catalog including Polaris. Using the Polaris Synchronizer tool: A tool to migrate entities from one Polaris instance to another. This tool is specific to Polaris."><meta property="og:locale" content="en_us"><meta property="og:type" content="article"><meta property="article:section" content="in-dev"><meta itemprop=name conten [...]
Using the Iceberg Catalog Migrator tool: A command-line tool to migrate Iceberg tables from one Iceberg catalog to another. This tool works with any existing Iceberg catalog including Polaris. Using the Polaris Synchronizer tool: A tool to migrate entities from one Polaris instance to another. This tool is specific to Polaris."><meta itemprop=wordCount content="63"><meta name=twitter:card content="summary"><meta name=twitter:title content="Migrating from Existing Iceberg Catalogs"><meta [...]
-Using the Iceberg Catalog Migrator tool: A command-line tool to migrate Iceberg tables from one Iceberg catalog to another. This tool works with any existing Iceberg catalog including Polaris. Using the Polaris Synchronizer tool: A tool to migrate entities from one Polaris instance to another. This tool is specific to Polaris."><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbH [...]
+Using the Iceberg Catalog Migrator tool: A command-line tool to migrate Iceberg tables from one Iceberg catalog to another. This tool works with any existing Iceberg catalog including Polaris. Using the Polaris Synchronizer tool: A tool to migrate entities from one Polaris instance to another. This tool is specific to Polaris."><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbH [...]
<label for=m-in-devunreleased-check><a href=/in-dev/unreleased/ title="Apache Polaris Documentation (Unreleased)" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleased><span>Unreleased</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child active-path" id=m-in-devunreleasedgetting-started-li><input type=checkbox id=m-in-devunreleasedgetting-started-check checked>
<label for=m-in-devunreleasedgetting-started-check><a href=/in-dev/unreleased/getting-started/ title="Getting Started with Apache Polaris" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleasedgetting-started><span>Getting Started</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedquick-start-li><input type=checkbox id=m-in-devunreleasedgetting-star [...]
<label for=m-in-devunreleasedgetting-startedquick-start-check><a href=/in-dev/unreleased/getting-started/quick-start/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-in-devunreleasedgetting-startedquick-start><span>Quickstart</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedsetup-tools-li><input type=checkbox id=m-in-devunreleasedgetting-startedsetup-tools-check>
diff --git a/in-dev/unreleased/getting-started/creating-a-catalog/index.html b/in-dev/unreleased/getting-started/creating-a-catalog/index.html
index 3ad1976c49..c3447cacc3 100644
--- a/in-dev/unreleased/getting-started/creating-a-catalog/index.html
+++ b/in-dev/unreleased/getting-started/creating-a-catalog/index.html
@@ -1,16 +1,16 @@
<!doctype html><html itemscope itemtype=http://schema.org/WebPage lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><link rel=alternate type=application/rss+xml href=https://polaris.apache.org/in-dev/unreleased/getting-started/creating-a-catalog/index.xml><meta name=robots content="index, follow"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon.png [...]
S3 compatible object stores Google Cloud Storage Azure Blob Storage Local file system (By default for testing only) Catalogs may also be created from migrating existing Iceberg catalogs.
Create a catalog using polaris CLI🔗 Check full list of options for the polaris catalogs create command here
-Example🔗 1CLIENT_ID=root \ 2CLIENT_SECRET=s3cr3t \ 3DEFAULT_BASE_LOCATION=s3://example-bucket/my_data \ 4ROLE_ARN=arn:aws:iam::111122223333:role/ExampleCorpRole \ 5./polaris \ 6 --client-id ${CLIENT_ID} \ 7 --client-secret ${CLIENT_SECRET} \ 8 catalogs \ 9 create \ 10 --storage-type s3 \ 11 --default-base-location ${DEFAULT_BASE_LOCATION} \ 12 --role-arn ${ROLE_ARN} \ 13 my_catalog"><meta property="og:url" content="https://polaris.apache.org/in-dev/unreleased/getting-started/creating-a-c [...]
+Example🔗 CLIENT_ID=root \ CLIENT_SECRET=s3cr3t \ DEFAULT_BASE_LOCATION=s3://example-bucket/my_data \ ROLE_ARN=arn:aws:iam::111122223333:role/ExampleCorpRole \ ./polaris \ --client-id ${CLIENT_ID} \ --client-secret ${CLIENT_SECRET} \ catalogs \ create \ --storage-type s3 \ --default-base-location ${DEFAULT_BASE_LOCATION} \ --role-arn ${ROLE_ARN} \ my_catalog"><meta property="og:url" content="https://polaris.apache.org/in-dev/unreleased/getting-started/creating-a-catalog/"><meta property=" [...]
S3 compatible object stores Google Cloud Storage Azure Blob Storage Local file system (By default for testing only) Catalogs may also be created from migrating existing Iceberg catalogs.
Create a catalog using polaris CLI🔗 Check full list of options for the polaris catalogs create command here
-Example🔗 1CLIENT_ID=root \ 2CLIENT_SECRET=s3cr3t \ 3DEFAULT_BASE_LOCATION=s3://example-bucket/my_data \ 4ROLE_ARN=arn:aws:iam::111122223333:role/ExampleCorpRole \ 5./polaris \ 6 --client-id ${CLIENT_ID} \ 7 --client-secret ${CLIENT_SECRET} \ 8 catalogs \ 9 create \ 10 --storage-type s3 \ 11 --default-base-location ${DEFAULT_BASE_LOCATION} \ 12 --role-arn ${ROLE_ARN} \ 13 my_catalog"><meta property="og:locale" content="en_us"><meta property="og:type" content="website"><meta itemprop=name [...]
+Example🔗 CLIENT_ID=root \ CLIENT_SECRET=s3cr3t \ DEFAULT_BASE_LOCATION=s3://example-bucket/my_data \ ROLE_ARN=arn:aws:iam::111122223333:role/ExampleCorpRole \ ./polaris \ --client-id ${CLIENT_ID} \ --client-secret ${CLIENT_SECRET} \ catalogs \ create \ --storage-type s3 \ --default-base-location ${DEFAULT_BASE_LOCATION} \ --role-arn ${ROLE_ARN} \ my_catalog"><meta property="og:locale" content="en_us"><meta property="og:type" content="website"><meta itemprop=name content="Creating a Catal [...]
S3 compatible object stores Google Cloud Storage Azure Blob Storage Local file system (By default for testing only) Catalogs may also be created from migrating existing Iceberg catalogs.
Create a catalog using polaris CLI🔗 Check full list of options for the polaris catalogs create command here
-Example🔗 1CLIENT_ID=root \ 2CLIENT_SECRET=s3cr3t \ 3DEFAULT_BASE_LOCATION=s3://example-bucket/my_data \ 4ROLE_ARN=arn:aws:iam::111122223333:role/ExampleCorpRole \ 5./polaris \ 6 --client-id ${CLIENT_ID} \ 7 --client-secret ${CLIENT_SECRET} \ 8 catalogs \ 9 create \ 10 --storage-type s3 \ 11 --default-base-location ${DEFAULT_BASE_LOCATION} \ 12 --role-arn ${ROLE_ARN} \ 13 my_catalog"><meta itemprop=wordCount content="100"><meta name=twitter:card content="summary"><meta name=twitter:title [...]
+Example🔗 CLIENT_ID=root \ CLIENT_SECRET=s3cr3t \ DEFAULT_BASE_LOCATION=s3://example-bucket/my_data \ ROLE_ARN=arn:aws:iam::111122223333:role/ExampleCorpRole \ ./polaris \ --client-id ${CLIENT_ID} \ --client-secret ${CLIENT_SECRET} \ catalogs \ create \ --storage-type s3 \ --default-base-location ${DEFAULT_BASE_LOCATION} \ --role-arn ${ROLE_ARN} \ my_catalog"><meta itemprop=wordCount content="92"><meta name=twitter:card content="summary"><meta name=twitter:title content="Creating a Catalo [...]
S3 compatible object stores Google Cloud Storage Azure Blob Storage Local file system (By default for testing only) Catalogs may also be created from migrating existing Iceberg catalogs.
Create a catalog using polaris CLI🔗 Check full list of options for the polaris catalogs create command here
-Example🔗 1CLIENT_ID=root \ 2CLIENT_SECRET=s3cr3t \ 3DEFAULT_BASE_LOCATION=s3://example-bucket/my_data \ 4ROLE_ARN=arn:aws:iam::111122223333:role/ExampleCorpRole \ 5./polaris \ 6 --client-id ${CLIENT_ID} \ 7 --client-secret ${CLIENT_SECRET} \ 8 catalogs \ 9 create \ 10 --storage-type s3 \ 11 --default-base-location ${DEFAULT_BASE_LOCATION} \ 12 --role-arn ${ROLE_ARN} \ 13 my_catalog"><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css [...]
+Example🔗 CLIENT_ID=root \ CLIENT_SECRET=s3cr3t \ DEFAULT_BASE_LOCATION=s3://example-bucket/my_data \ ROLE_ARN=arn:aws:iam::111122223333:role/ExampleCorpRole \ ./polaris \ --client-id ${CLIENT_ID} \ --client-secret ${CLIENT_SECRET} \ catalogs \ create \ --storage-type s3 \ --default-base-location ${DEFAULT_BASE_LOCATION} \ --role-arn ${ROLE_ARN} \ my_catalog"><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha2 [...]
<label for=m-in-devunreleased-check><a href=/in-dev/unreleased/ title="Apache Polaris Documentation (Unreleased)" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleased><span>Unreleased</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child active-path" id=m-in-devunreleasedgetting-started-li><input type=checkbox id=m-in-devunreleasedgetting-started-check checked>
<label for=m-in-devunreleasedgetting-started-check><a href=/in-dev/unreleased/getting-started/ title="Getting Started with Apache Polaris" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleasedgetting-started><span>Getting Started</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedquick-start-li><input type=checkbox id=m-in-devunreleasedgetting-star [...]
<label for=m-in-devunreleasedgetting-startedquick-start-check><a href=/in-dev/unreleased/getting-started/quick-start/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-in-devunreleasedgetting-startedquick-start><span>Quickstart</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedsetup-tools-li><input type=checkbox id=m-in-devunreleasedgetting-startedsetup-tools-check>
@@ -78,17 +78,17 @@ Example🔗 1CLIENT_ID=root \ 2CLIENT_SECRET=s3cr3t \ 3DEFAULT_BASE_LOCATION=s3:
<a class=td-toc-title__link title="Top of page" href=#></a></div><nav id=TableOfContents><ul><li><a href=#create-a-catalog-using-polaris-cli>Create a catalog using polaris CLI</a><ul><li><a href=#example>Example</a></li></ul></li></ul></nav></div></aside><main class="col-12 col-md-9 col-xl-8 ps-md-5" role=main><div class="pageinfo pageinfo-warning"><p><strong>IMPORTANT:</strong> Developer documentation for the current <code>main</code> branch.
This content is unreleased and may change before the next Polaris release.
For stable user documentation, see the
-<a href=/releases/latest/>latest release docs</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/docs/>Documentation</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/>Developer Docs</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/getting-started/>Getting Started</a></li><li class="breadcrumb-item active" aria-current=page>Creating a Catalog</li></ol></nav><div class=td-content><h1>Creating a Catal [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span><span style=color:#000>CLIENT_SECRET</span><span style=color:#ce5c00;font-weight:700>=</span>s3cr3t <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span><span style=color:#000>DEFAULT_BASE_LOCATION</span><span style=color:#ce5c00;font-weight:700>=</span>s3://example-bucket/my_data <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span><span style=color:#000>ROLE_ARN</span><span style=color:#ce5c00;font-weight:700>=</span>arn:aws:iam::111122223333:role/ExampleCorpRole <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span>./polaris <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span> --client-id <span style=color:#4e9a06>${</span><span style=color:#000>CLIENT_ID</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span> --client-secret <span style=color:#4e9a06>${</span><span style=color:#000>CLIENT_SECRET</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span> catalogs <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span> create <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">10</span><span> --storage-type s3 <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">11</span><span> --default-base-location <span style=color:#4e9a06>${</span><span style=color:#000>DEFAULT_BASE_LOCATION</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">12</span><span> --role-arn <span style=color:#4e9a06>${</span><span style=color:#000>ROLE_ARN</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">13</span><span> my_catalog
+<a href=/releases/latest/>latest release docs</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/docs/>Documentation</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/>Developer Docs</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/getting-started/>Getting Started</a></li><li class="breadcrumb-item active" aria-current=page>Creating a Catalog</li></ol></nav><div class=td-content><h1>Creating a Catal [...]
+</span></span></span><span style=display:flex><span><span style=color:#000>CLIENT_SECRET</span><span style=color:#ce5c00;font-weight:700>=</span>s3cr3t <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span><span style=color:#000>DEFAULT_BASE_LOCATION</span><span style=color:#ce5c00;font-weight:700>=</span>s3://example-bucket/my_data <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span><span style=color:#000>ROLE_ARN</span><span style=color:#ce5c00;font-weight:700>=</span>arn:aws:iam::111122223333:role/ExampleCorpRole <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span>./polaris <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --client-id <span style=color:#4e9a06>${</span><span style=color:#000>CLIENT_ID</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --client-secret <span style=color:#4e9a06>${</span><span style=color:#000>CLIENT_SECRET</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> catalogs <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> create <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --storage-type s3 <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --default-base-location <span style=color:#4e9a06>${</span><span style=color:#000>DEFAULT_BASE_LOCATION</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --role-arn <span style=color:#4e9a06>${</span><span style=color:#000>ROLE_ARN</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> my_catalog
</span></span></code></pre></div><div class=section-index></div></div></main></div></div><footer class="td-footer row d-print-none"><div class=container-fluid><div class="row mx-md-2"><div class="td-footer__left col-6 col-sm-4 order-sm-1"><ul class=td-footer__links-list><li class=td-footer__links-item data-bs-toggle=tooltip title=Slack aria-label=Slack><a target=_blank rel=noopener href=https://apache-polaris.slack.com/ aria-label=Slack><i class="fa-regular fa-comment-dots"></i></a></li> [...]
\ No newline at end of file
diff --git a/in-dev/unreleased/getting-started/creating-a-catalog/index.xml b/in-dev/unreleased/getting-started/creating-a-catalog/index.xml
index d45ca2fa71..7b0cf4863f 100644
--- a/in-dev/unreleased/getting-started/creating-a-catalog/index.xml
+++ b/in-dev/unreleased/getting-started/creating-a-catalog/index.xml
@@ -1,45 +1,45 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Creating a Catalog on Apache Polaris</title><link>https://polaris.apache.org/in-dev/unreleased/getting-started/creating-a-catalog/</link><description>Recent content in Creating a Catalog on Apache Polaris</description><generator>Hugo</generator><language>en-us</language><copyright><a href="https://www.apache.org/">Copyright © 2026 The Apache Software Fo [...]
-<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-text" data-lang="text"><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1</span><span>--storage-type gcs
-</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">2</span><span>--service-account (Only for GCS) The service account to use when connecting to GCS
+<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>--storage-type gcs
+</span></span><span style="display:flex;"><span>--service-account (Only for GCS) The service account to use when connecting to GCS
</span></span></code></pre></div><h3 id="example" id="example">example<a class="heading-anchor" href="#example" aria-label="Anchor">🔗</a>
</h3>
-<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 1</span><span><span style="color:#000">CLIENT_ID</span><span style="color:#ce5c00;fo [...]
-</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 2</span><span><span style="color:#000">CLIENT_SECRET</span><span style="color:#ce5c00;font-weight:bold">=</span>s3cr3t <span style="color:#4e9a06">\
-</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 3</span><span><span style="color:#000">DEFAULT_BASE_LOCATION</span><span style="color:#ce5c00;font-weight:bold">=</span>gs://my-ml-bucket/predictions/ <span style="color:#4e9a06">\
-</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 4</span><span><span style="color:#000">SERVICE_ACCOUNT</span><span style="color:#ce5c00;font-weight:bold">=</span>serviceAccount:my-service-account@my-project.iam.gserviceaccount.com <span style="color:#4e9a06">\
-</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 5</span><span>./polaris <span style="color:#4e9a06">\
-</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 6</span><span> --client-id <span style="color:#4e9a06">${</span><span style="color:#000">CLIENT_ID</span><span style="color:#4e9a06">}</span> <span style="color:#4e9a06">\
-</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 7</span><span> --client-secret <span style="color:#4e9a06">${</span><span style="color:#000">CLIENT_SECRET</span><span style="color:#4e9a06">}</span> <span style="color:#4e9a06">\
-</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 8</span><span> catalogs <span style="color:#4e9a06">\
-</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 9</span><span> create <span style="color:#4e9a06">\
-</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">10</span><span> --storage-type gcs <span style="color:#4e9a06">\
-</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">11</span><span> --service-account <span style="color:#4e9a06">${</span><span style="color:#000">SERVICE_ACCOUNT</span><span style="color:#4e9a06">}</span> <span style="color:#4e9a06">\
-</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">12</span><span> --default-base-location <span style="color:#4e9a06">${</span><span style="color:#000">DEFAULT_BASE_LOCATION</span><span style="color:#4e9a06">}</span> <span style="color:#4e9a06">\
-</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">13</span><span> my_gcs_catalog
+<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span><span style="color:#000">CLIENT_ID</span><span style="color:#ce5c00;font-weight:bold">=</span>root <span style="color:#4e9a06">\
+</span></span></span><span style="display:flex;"><span><span style="color:#000">CLIENT_SECRET</span><span style="color:#ce5c00;font-weight:bold">=</span>s3cr3t <span style="color:#4e9a06">\
+</span></span></span><span style="display:flex;"><span><span style="color:#000">DEFAULT_BASE_LOCATION</span><span style="color:#ce5c00;font-weight:bold">=</span>gs://my-ml-bucket/predictions/ <span style="color:#4e9a06">\
+</span></span></span><span style="display:flex;"><span><span style="color:#000">SERVICE_ACCOUNT</span><span style="color:#ce5c00;font-weight:bold">=</span>serviceAccount:my-service-account@my-project.iam.gserviceaccount.com <span style="color:#4e9a06">\
+</span></span></span><span style="display:flex;"><span>./polaris <span style="color:#4e9a06">\
+</span></span></span><span style="display:flex;"><span> --client-id <span style="color:#4e9a06">${</span><span style="color:#000">CLIENT_ID</span><span style="color:#4e9a06">}</span> <span style="color:#4e9a06">\
+</span></span></span><span style="display:flex;"><span> --client-secret <span style="color:#4e9a06">${</span><span style="color:#000">CLIENT_SECRET</span><span style="color:#4e9a06">}</span> <span style="color:#4e9a06">\
+</span></span></span><span style="display:flex;"><span> catalogs <span style="color:#4e9a06">\
+</span></span></span><span style="display:flex;"><span> create <span style="color:#4e9a06">\
+</span></span></span><span style="display:flex;"><span> --storage-type gcs <span style="color:#4e9a06">\
+</span></span></span><span style="display:flex;"><span> --service-account <span style="color:#4e9a06">${</span><span style="color:#000">SERVICE_ACCOUNT</span><span style="color:#4e9a06">}</span> <span style="color:#4e9a06">\
+</span></span></span><span style="display:flex;"><span> --default-base-location <span style="color:#4e9a06">${</span><span style="color:#000">DEFAULT_BASE_LOCATION</span><span style="color:#4e9a06">}</span> <span style="color:#4e9a06">\
+</span></span></span><span style="display:flex;"><span> my_gcs_catalog
</span></span></code></pre></div></description></item><item><title>Creating a catalog on Azure</title><link>https://polaris.apache.org/in-dev/unreleased/getting-started/creating-a-catalog/catalog-azure/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://polaris.apache.org/in-dev/unreleased/getting-started/creating-a-catalog/catalog-azure/</guid><description><p>For the <code>polaris catalogs create</code> <a href="https [...]
-<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-text" data-lang="text"><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1</span><span>--storage-type azure
-</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">2</span><span>--tenant-id (Required for Azure) A tenant ID to use when connecting to Azure Storage
-</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">3</span><span>--multi-tenant-app-name (Only for Azure) The app name to use when connecting to Azure Storage
-</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">4</span><span>--consent-url (Only for Azure) A consent URL granting permissions for the Azure Storage location
+<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>--storage-type azure
+</span></span><span style="display:flex;"><span>--tenant-id (Required for Azure) A tenant ID to use when connecting to Azure Storage
+</span></span><span style="display:flex;"><span>--multi-tenant-app-name (Only for Azure) The app name to use when connecting to Azure Storage
+</span></span><span style="display:flex;"><span>--consent-url (Only for Azure) A consent URL granting permissions for the Azure Storage location
</span></span></code></pre></div><h3 id="example" id="example">Example<a class="heading-anchor" href="#example" aria-label="Anchor">🔗</a>
</h3>
-<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 1</span><span><span style="color:#000">CLIENT_ID</span><span style="color:#ce5c00;fo [...]
-</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 2</span><span><span style="color:#000">CLIENT_SECRET</span><span style="color:#ce5c00;font-weight:bold">=</span>s3cr3t <span style="color:#4e9a06">\
-</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 3</span><span><span style="color:#000">DEFAULT_BASE_LOCATION</span><span style="color:#ce5c00;font-weight:bold">=</span>abfss://tenant123@blob.core.windows.net <span style="color:#4e9a06">\
-</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 4</span><span><span style="color:#000">TENANT_ID</span><span style="color:#ce5c00;font-weight:bold">=</span>tenant123.onmicrosoft.com <span style="color:#4e9a06">\
-</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 5</span><span><span style="color:#000">MULTI_TENANT_APP_NAME</span><span style="color:#ce5c00;font-weight:bold">=</span>myapp <span style="color:#4e9a06">\
-</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 6</span><span><span style="color:#000">CONSENT_URL</span><span style="color:#ce5c00;font-weight:bold">=</span>https://myapp.com/consent
-</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 7</span><span>./polaris <span style="color:#4e9a06">\
-</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 8</span><span> --client-id <span style="color:#4e9a06">${</span><span style="color:#000">CLIENT_ID</span><span style="color:#4e9a06">}</span> <span style="color:#4e9a06">\
-</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 9</span><span> --client-secret <span style="color:#4e9a06">${</span><span style="color:#000">CLIENT_SECRET</span><span style="color:#4e9a06">}</span> <span style="color:#4e9a06">\
-</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">10</span><span> catalogs <span style="color:#4e9a06">\
-</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">11</span><span> create <span style="color:#4e9a06">\
-</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">12</span><span> --storage-type azure <span style="color:#4e9a06">\
-</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">13</span><span> --tenant-id <span style="color:#4e9a06">${</span><span style="color:#000">TENANT_ID</span><span style="color:#4e9a06">}</span> <span style="color:#4e9a06">\
-</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">14</span><span> --multi-tenant-app-name <span style="color:#4e9a06">${</span><span style="color:#000">MULTI_TENANT_APP_NAME</span><span style="color:#4e9a06">}</span> <span style="color:#4e9a06">\
-</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">15</span><span> --consent-url <span style="color:#4e9a06">${</span><span style="color:#000">CONSENT_URL</span><span style="color:#4e9a06">}</span> <span style="color:#4e9a06">\
-</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">16</span><span> --default-base-location <span style="color:#4e9a06">${</span><span style="color:#000">DEFAULT_BASE_LOCATION</span><span style="color:#4e9a06">}</span> <span style="color:#4e9a06">\
-</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">17</span><span> my_azure_catalog
+<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span><span style="color:#000">CLIENT_ID</span><span style="color:#ce5c00;font-weight:bold">=</span>root <span style="color:#4e9a06">\
+</span></span></span><span style="display:flex;"><span><span style="color:#000">CLIENT_SECRET</span><span style="color:#ce5c00;font-weight:bold">=</span>s3cr3t <span style="color:#4e9a06">\
+</span></span></span><span style="display:flex;"><span><span style="color:#000">DEFAULT_BASE_LOCATION</span><span style="color:#ce5c00;font-weight:bold">=</span>abfss://tenant123@blob.core.windows.net <span style="color:#4e9a06">\
+</span></span></span><span style="display:flex;"><span><span style="color:#000">TENANT_ID</span><span style="color:#ce5c00;font-weight:bold">=</span>tenant123.onmicrosoft.com <span style="color:#4e9a06">\
+</span></span></span><span style="display:flex;"><span><span style="color:#000">MULTI_TENANT_APP_NAME</span><span style="color:#ce5c00;font-weight:bold">=</span>myapp <span style="color:#4e9a06">\
+</span></span></span><span style="display:flex;"><span><span style="color:#000">CONSENT_URL</span><span style="color:#ce5c00;font-weight:bold">=</span>https://myapp.com/consent
+</span></span><span style="display:flex;"><span>./polaris <span style="color:#4e9a06">\
+</span></span></span><span style="display:flex;"><span> --client-id <span style="color:#4e9a06">${</span><span style="color:#000">CLIENT_ID</span><span style="color:#4e9a06">}</span> <span style="color:#4e9a06">\
+</span></span></span><span style="display:flex;"><span> --client-secret <span style="color:#4e9a06">${</span><span style="color:#000">CLIENT_SECRET</span><span style="color:#4e9a06">}</span> <span style="color:#4e9a06">\
+</span></span></span><span style="display:flex;"><span> catalogs <span style="color:#4e9a06">\
+</span></span></span><span style="display:flex;"><span> create <span style="color:#4e9a06">\
+</span></span></span><span style="display:flex;"><span> --storage-type azure <span style="color:#4e9a06">\
+</span></span></span><span style="display:flex;"><span> --tenant-id <span style="color:#4e9a06">${</span><span style="color:#000">TENANT_ID</span><span style="color:#4e9a06">}</span> <span style="color:#4e9a06">\
+</span></span></span><span style="display:flex;"><span> --multi-tenant-app-name <span style="color:#4e9a06">${</span><span style="color:#000">MULTI_TENANT_APP_NAME</span><span style="color:#4e9a06">}</span> <span style="color:#4e9a06">\
+</span></span></span><span style="display:flex;"><span> --consent-url <span style="color:#4e9a06">${</span><span style="color:#000">CONSENT_URL</span><span style="color:#4e9a06">}</span> <span style="color:#4e9a06">\
+</span></span></span><span style="display:flex;"><span> --default-base-location <span style="color:#4e9a06">${</span><span style="color:#000">DEFAULT_BASE_LOCATION</span><span style="color:#4e9a06">}</span> <span style="color:#4e9a06">\
+</span></span></span><span style="display:flex;"><span> my_azure_catalog
</span></span></code></pre></div></description></item><item><title>Migrating from Existing Iceberg Catalogs</title><link>https://polaris.apache.org/in-dev/unreleased/getting-started/creating-a-catalog/catalog-migration/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://polaris.apache.org/in-dev/unreleased/getting-started/creating-a-catalog/catalog-migration/</guid><description><p>There are two ways to migrate an existing Iceberg cat [...]
<ol>
<li>Using the <a href="../../../../../tools/iceberg-catalog-migrator/">Iceberg Catalog Migrator tool</a>: A command-line tool to migrate Iceberg tables from one Iceberg catalog to another.
diff --git a/in-dev/unreleased/getting-started/creating-a-catalog/s3/catalog-aws/index.html b/in-dev/unreleased/getting-started/creating-a-catalog/s3/catalog-aws/index.html
index 11fdcd9f37..7815d201f1 100644
--- a/in-dev/unreleased/getting-started/creating-a-catalog/s3/catalog-aws/index.html
+++ b/in-dev/unreleased/getting-started/creating-a-catalog/s3/catalog-aws/index.html
@@ -1,12 +1,12 @@
<!doctype html><html itemscope itemtype=http://schema.org/WebPage lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon.png sizes=100x100><link rel=icon type=image/png href=/favicons/android-ch [...]
Note: the name quickstart_catalog from the example below is referenced in other Getting Started examples, but of course, it can be any valid catalog name.
-1CLIENT_ID=root 2CLIENT_SECRET=s3cr3t 3DEFAULT_BASE_LOCATION=s3://example-bucket/my_data 4ROLE_ARN=arn:aws:iam::111122223333:role/ExampleCorpRole 5REGION=us-west-2 6EXTERNAL_ID=12345678901234567890 7 8./polaris \ 9 --client-id ${CLIENT_ID} \ 10 --client-secret ${CLIENT_SECRET} \ 11 catalogs \ 12 create \ 13 --storage-type s3 \ 14 --default-base-location ${DEFAULT_BASE_LOCATION} \ 15 --role-arn ${ROLE_ARN} \ 16 --region ${REGION} \ 17 --external-id ${EXTERNAL_ID} \ 18 quickstart_catalog"> [...]
+CLIENT_ID=root CLIENT_SECRET=s3cr3t DEFAULT_BASE_LOCATION=s3://example-bucket/my_data ROLE_ARN=arn:aws:iam::111122223333:role/ExampleCorpRole REGION=us-west-2 EXTERNAL_ID=12345678901234567890 ./polaris \ --client-id ${CLIENT_ID} \ --client-secret ${CLIENT_SECRET} \ catalogs \ create \ --storage-type s3 \ --default-base-location ${DEFAULT_BASE_LOCATION} \ --role-arn ${ROLE_ARN} \ --region ${REGION} \ --external-id ${EXTERNAL_ID} \ quickstart_catalog"><meta property="og:url" content="https [...]
Note: the name quickstart_catalog from the example below is referenced in other Getting Started examples, but of course, it can be any valid catalog name.
-1CLIENT_ID=root 2CLIENT_SECRET=s3cr3t 3DEFAULT_BASE_LOCATION=s3://example-bucket/my_data 4ROLE_ARN=arn:aws:iam::111122223333:role/ExampleCorpRole 5REGION=us-west-2 6EXTERNAL_ID=12345678901234567890 7 8./polaris \ 9 --client-id ${CLIENT_ID} \ 10 --client-secret ${CLIENT_SECRET} \ 11 catalogs \ 12 create \ 13 --storage-type s3 \ 14 --default-base-location ${DEFAULT_BASE_LOCATION} \ 15 --role-arn ${ROLE_ARN} \ 16 --region ${REGION} \ 17 --external-id ${EXTERNAL_ID} \ 18 quickstart_catalog"> [...]
+CLIENT_ID=root CLIENT_SECRET=s3cr3t DEFAULT_BASE_LOCATION=s3://example-bucket/my_data ROLE_ARN=arn:aws:iam::111122223333:role/ExampleCorpRole REGION=us-west-2 EXTERNAL_ID=12345678901234567890 ./polaris \ --client-id ${CLIENT_ID} \ --client-secret ${CLIENT_SECRET} \ catalogs \ create \ --storage-type s3 \ --default-base-location ${DEFAULT_BASE_LOCATION} \ --role-arn ${ROLE_ARN} \ --region ${REGION} \ --external-id ${EXTERNAL_ID} \ quickstart_catalog"><meta property="og:locale" content="en [...]
Note: the name quickstart_catalog from the example below is referenced in other Getting Started examples, but of course, it can be any valid catalog name.
-1CLIENT_ID=root 2CLIENT_SECRET=s3cr3t 3DEFAULT_BASE_LOCATION=s3://example-bucket/my_data 4ROLE_ARN=arn:aws:iam::111122223333:role/ExampleCorpRole 5REGION=us-west-2 6EXTERNAL_ID=12345678901234567890 7 8./polaris \ 9 --client-id ${CLIENT_ID} \ 10 --client-secret ${CLIENT_SECRET} \ 11 catalogs \ 12 create \ 13 --storage-type s3 \ 14 --default-base-location ${DEFAULT_BASE_LOCATION} \ 15 --role-arn ${ROLE_ARN} \ 16 --region ${REGION} \ 17 --external-id ${EXTERNAL_ID} \ 18 quickstart_catalog"> [...]
+CLIENT_ID=root CLIENT_SECRET=s3cr3t DEFAULT_BASE_LOCATION=s3://example-bucket/my_data ROLE_ARN=arn:aws:iam::111122223333:role/ExampleCorpRole REGION=us-west-2 EXTERNAL_ID=12345678901234567890 ./polaris \ --client-id ${CLIENT_ID} \ --client-secret ${CLIENT_SECRET} \ catalogs \ create \ --storage-type s3 \ --default-base-location ${DEFAULT_BASE_LOCATION} \ --role-arn ${ROLE_ARN} \ --region ${REGION} \ --external-id ${EXTERNAL_ID} \ quickstart_catalog"><meta itemprop=wordCount content="84"> [...]
Note: the name quickstart_catalog from the example below is referenced in other Getting Started examples, but of course, it can be any valid catalog name.
-1CLIENT_ID=root 2CLIENT_SECRET=s3cr3t 3DEFAULT_BASE_LOCATION=s3://example-bucket/my_data 4ROLE_ARN=arn:aws:iam::111122223333:role/ExampleCorpRole 5REGION=us-west-2 6EXTERNAL_ID=12345678901234567890 7 8./polaris \ 9 --client-id ${CLIENT_ID} \ 10 --client-secret ${CLIENT_SECRET} \ 11 catalogs \ 12 create \ 13 --storage-type s3 \ 14 --default-base-location ${DEFAULT_BASE_LOCATION} \ 15 --role-arn ${ROLE_ARN} \ 16 --region ${REGION} \ 17 --external-id ${EXTERNAL_ID} \ 18 quickstart_catalog"> [...]
+CLIENT_ID=root CLIENT_SECRET=s3cr3t DEFAULT_BASE_LOCATION=s3://example-bucket/my_data ROLE_ARN=arn:aws:iam::111122223333:role/ExampleCorpRole REGION=us-west-2 EXTERNAL_ID=12345678901234567890 ./polaris \ --client-id ${CLIENT_ID} \ --client-secret ${CLIENT_SECRET} \ catalogs \ create \ --storage-type s3 \ --default-base-location ${DEFAULT_BASE_LOCATION} \ --role-arn ${ROLE_ARN} \ --region ${REGION} \ --external-id ${EXTERNAL_ID} \ quickstart_catalog"><link rel=preload href=/scss/main.min. [...]
<label for=m-in-devunreleased-check><a href=/in-dev/unreleased/ title="Apache Polaris Documentation (Unreleased)" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleased><span>Unreleased</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child active-path" id=m-in-devunreleasedgetting-started-li><input type=checkbox id=m-in-devunreleasedgetting-started-check checked>
<label for=m-in-devunreleasedgetting-started-check><a href=/in-dev/unreleased/getting-started/ title="Getting Started with Apache Polaris" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleasedgetting-started><span>Getting Started</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedquick-start-li><input type=checkbox id=m-in-devunreleasedgetting-star [...]
<label for=m-in-devunreleasedgetting-startedquick-start-check><a href=/in-dev/unreleased/getting-started/quick-start/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-in-devunreleasedgetting-startedquick-start><span>Quickstart</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedsetup-tools-li><input type=checkbox id=m-in-devunreleasedgetting-startedsetup-tools-check>
@@ -76,22 +76,22 @@ For stable user documentation, see the
<a href=/releases/latest/>latest release docs</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/docs/>Documentation</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/>Developer Docs</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/getting-started/>Getting Started</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/getting-started/creating-a-catalog/>Creating a Catalog</a></li><li class=bre [...]
one also provides the <code>region</code> and
<a href=https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_third-party.html>external-id</a>.</p><p>Note: the name <code>quickstart_catalog</code> from the example below is referenced in other Getting Started examples,
-but of course, it can be any valid catalog name.</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 1</span><span><span style=color:#000>CLIENT_ID</span><span style=color:#ce5c00;font-weight:700>=</span>root
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span><span style=color:#000>CLIENT_SECRET</span><span style=color:#ce5c00;font-weight:700>=</span>s3cr3t
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span><span style=color:#000>DEFAULT_BASE_LOCATION</span><span style=color:#ce5c00;font-weight:700>=</span>s3://example-bucket/my_data
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span><span style=color:#000>ROLE_ARN</span><span style=color:#ce5c00;font-weight:700>=</span>arn:aws:iam::111122223333:role/ExampleCorpRole
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span><span style=color:#000>REGION</span><span style=color:#ce5c00;font-weight:700>=</span>us-west-2
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span><span style=color:#000>EXTERNAL_ID</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#0000cf;font-weight:700>12345678901234567890</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span>./polaris <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span> --client-id <span style=color:#4e9a06>${</span><span style=color:#000>CLIENT_ID</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">10</span><span> --client-secret <span style=color:#4e9a06>${</span><span style=color:#000>CLIENT_SECRET</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">11</span><span> catalogs <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">12</span><span> create <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">13</span><span> --storage-type s3 <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">14</span><span> --default-base-location <span style=color:#4e9a06>${</span><span style=color:#000>DEFAULT_BASE_LOCATION</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">15</span><span> --role-arn <span style=color:#4e9a06>${</span><span style=color:#000>ROLE_ARN</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">16</span><span> --region <span style=color:#4e9a06>${</span><span style=color:#000>REGION</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">17</span><span> --external-id <span style=color:#4e9a06>${</span><span style=color:#000>EXTERNAL_ID</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">18</span><span> quickstart_catalog
+but of course, it can be any valid catalog name.</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span><span style=color:#000>CLIENT_ID</span><span style=color:#ce5c00;font-weight:700>=</span>root
+</span></span><span style=display:flex><span><span style=color:#000>CLIENT_SECRET</span><span style=color:#ce5c00;font-weight:700>=</span>s3cr3t
+</span></span><span style=display:flex><span><span style=color:#000>DEFAULT_BASE_LOCATION</span><span style=color:#ce5c00;font-weight:700>=</span>s3://example-bucket/my_data
+</span></span><span style=display:flex><span><span style=color:#000>ROLE_ARN</span><span style=color:#ce5c00;font-weight:700>=</span>arn:aws:iam::111122223333:role/ExampleCorpRole
+</span></span><span style=display:flex><span><span style=color:#000>REGION</span><span style=color:#ce5c00;font-weight:700>=</span>us-west-2
+</span></span><span style=display:flex><span><span style=color:#000>EXTERNAL_ID</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#0000cf;font-weight:700>12345678901234567890</span>
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span>./polaris <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --client-id <span style=color:#4e9a06>${</span><span style=color:#000>CLIENT_ID</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --client-secret <span style=color:#4e9a06>${</span><span style=color:#000>CLIENT_SECRET</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> catalogs <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> create <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --storage-type s3 <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --default-base-location <span style=color:#4e9a06>${</span><span style=color:#000>DEFAULT_BASE_LOCATION</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --role-arn <span style=color:#4e9a06>${</span><span style=color:#000>ROLE_ARN</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --region <span style=color:#4e9a06>${</span><span style=color:#000>REGION</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --external-id <span style=color:#4e9a06>${</span><span style=color:#000>EXTERNAL_ID</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> quickstart_catalog
</span></span></code></pre></div></div></main></div></div><footer class="td-footer row d-print-none"><div class=container-fluid><div class="row mx-md-2"><div class="td-footer__left col-6 col-sm-4 order-sm-1"><ul class=td-footer__links-list><li class=td-footer__links-item data-bs-toggle=tooltip title=Slack aria-label=Slack><a target=_blank rel=noopener href=https://apache-polaris.slack.com/ aria-label=Slack><i class="fa-regular fa-comment-dots"></i></a></li><li class=td-footer__links-item [...]
\ No newline at end of file
diff --git a/in-dev/unreleased/getting-started/creating-a-catalog/s3/catalog-minio/index.html b/in-dev/unreleased/getting-started/creating-a-catalog/s3/catalog-minio/index.html
index 89fb9c39c3..4814b8f02a 100644
--- a/in-dev/unreleased/getting-started/creating-a-catalog/s3/catalog-minio/index.html
+++ b/in-dev/unreleased/getting-started/creating-a-catalog/s3/catalog-minio/index.html
@@ -1,8 +1,8 @@
<!doctype html><html itemscope itemtype=http://schema.org/WebPage lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon.png sizes=100x100><link rel=icon type=image/png href=/favicons/android-ch [...]
Note: the region setting is not required by MinIO, but it is set in this example for the sake of simplicity as it is usually required by the AWS SDK (used internally by Polaris). One can also set the AWS_REGION environment variable in the Polaris server process and avoid setting region as a catalog property."><meta property="og:url" content="https://polaris.apache.org/in-dev/unreleased/getting-started/creating-a-catalog/s3/catalog-minio/"><meta property="og:site_name" content="Apache Pol [...]
Note: the region setting is not required by MinIO, but it is set in this example for the sake of simplicity as it is usually required by the AWS SDK (used internally by Polaris). One can also set the AWS_REGION environment variable in the Polaris server process and avoid setting region as a catalog property."><meta property="og:locale" content="en_us"><meta property="og:type" content="article"><meta property="article:section" content="in-dev"><meta itemprop=name content="Creating a catal [...]
-Note: the region setting is not required by MinIO, but it is set in this example for the sake of simplicity as it is usually required by the AWS SDK (used internally by Polaris). One can also set the AWS_REGION environment variable in the Polaris server process and avoid setting region as a catalog property."><meta itemprop=wordCount content="244"><meta name=twitter:card content="summary"><meta name=twitter:title content="Creating a catalog on MinIO"><meta name=twitter:description conten [...]
-Note: the region setting is not required by MinIO, but it is set in this example for the sake of simplicity as it is usually required by the AWS SDK (used internally by Polaris). One can also set the AWS_REGION environment variable in the Polaris server process and avoid setting region as a catalog property."><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" c [...]
+Note: the region setting is not required by MinIO, but it is set in this example for the sake of simplicity as it is usually required by the AWS SDK (used internally by Polaris). One can also set the AWS_REGION environment variable in the Polaris server process and avoid setting region as a catalog property."><meta itemprop=wordCount content="234"><meta name=twitter:card content="summary"><meta name=twitter:title content="Creating a catalog on MinIO"><meta name=twitter:description conten [...]
+Note: the region setting is not required by MinIO, but it is set in this example for the sake of simplicity as it is usually required by the AWS SDK (used internally by Polaris). One can also set the AWS_REGION environment variable in the Polaris server process and avoid setting region as a catalog property."><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" c [...]
<label for=m-in-devunreleased-check><a href=/in-dev/unreleased/ title="Apache Polaris Documentation (Unreleased)" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleased><span>Unreleased</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child active-path" id=m-in-devunreleasedgetting-started-li><input type=checkbox id=m-in-devunreleasedgetting-started-check checked>
<label for=m-in-devunreleasedgetting-started-check><a href=/in-dev/unreleased/getting-started/ title="Getting Started with Apache Polaris" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleasedgetting-started><span>Getting Started</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedquick-start-li><input type=checkbox id=m-in-devunreleasedgetting-star [...]
<label for=m-in-devunreleasedgetting-startedquick-start-check><a href=/in-dev/unreleased/getting-started/quick-start/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-in-devunreleasedgetting-startedquick-start><span>Quickstart</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedsetup-tools-li><input type=checkbox id=m-in-devunreleasedgetting-startedsetup-tools-check>
@@ -75,21 +75,21 @@ storage services (which is certain to fail in this case).</p><p>Note: the region
simplicity as it is usually required by the AWS SDK (used internally by Polaris). One can also
set the <code>AWS_REGION</code> environment variable in the Polaris server process and avoid setting region
as a catalog property.</p><p>Note: the name <code>quickstart_catalog</code> from the example below is referenced in other Getting Started examples,
-but of course, it can be any valid catalog name.</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 1</span><span><span style=color:#000>CLIENT_ID</span><span style=color:#ce5c00;font-weight:700>=</span>root
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span><span style=color:#000>CLIENT_SECRET</span><span style=color:#ce5c00;font-weight:700>=</span>s3cr3t
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span><span style=color:#000>DEFAULT_BASE_LOCATION</span><span style=color:#ce5c00;font-weight:700>=</span>s3://example-bucket/my_data
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span><span style=color:#000>REGION</span><span style=color:#ce5c00;font-weight:700>=</span>us-west-2
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span>./polaris <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span> --client-id <span style=color:#4e9a06>${</span><span style=color:#000>CLIENT_ID</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span> --client-secret <span style=color:#4e9a06>${</span><span style=color:#000>CLIENT_SECRET</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span> catalogs <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">10</span><span> create <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">11</span><span> --storage-type s3 <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">12</span><span> --endpoint http://127.0.0.1:9100
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">13</span><span> --default-base-location <span style=color:#4e9a06>${</span><span style=color:#000>DEFAULT_BASE_LOCATION</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">14</span><span> --region <span style=color:#4e9a06>${</span><span style=color:#000>REGION</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">15</span><span> quickstart_catalog
+but of course, it can be any valid catalog name.</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span><span style=color:#000>CLIENT_ID</span><span style=color:#ce5c00;font-weight:700>=</span>root
+</span></span><span style=display:flex><span><span style=color:#000>CLIENT_SECRET</span><span style=color:#ce5c00;font-weight:700>=</span>s3cr3t
+</span></span><span style=display:flex><span><span style=color:#000>DEFAULT_BASE_LOCATION</span><span style=color:#ce5c00;font-weight:700>=</span>s3://example-bucket/my_data
+</span></span><span style=display:flex><span><span style=color:#000>REGION</span><span style=color:#ce5c00;font-weight:700>=</span>us-west-2
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span>./polaris <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --client-id <span style=color:#4e9a06>${</span><span style=color:#000>CLIENT_ID</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --client-secret <span style=color:#4e9a06>${</span><span style=color:#000>CLIENT_SECRET</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> catalogs <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> create <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --storage-type s3 <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --endpoint http://127.0.0.1:9100
+</span></span><span style=display:flex><span> --default-base-location <span style=color:#4e9a06>${</span><span style=color:#000>DEFAULT_BASE_LOCATION</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --region <span style=color:#4e9a06>${</span><span style=color:#000>REGION</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> quickstart_catalog
</span></span></code></pre></div><p>In more complex deployments it may be necessary to configure different endpoints for S3 requests
and for STS (AssumeRole) requests. This can be achieved via the <code>--sts-endpoint</code> CLI option.</p><p>Additionally, the <code>--endpoint-internal</code> CLI option cane be used to set the S3 endpoint for use by
the Polaris Server itself, if it needs to be different from the endpoint used by clients / engines.</p><p>A usable MinIO example for <code>docker-compose</code> is available in the Polaris source code under the
diff --git a/in-dev/unreleased/getting-started/creating-a-catalog/s3/catalog-ozone/index.html b/in-dev/unreleased/getting-started/creating-a-catalog/s3/catalog-ozone/index.html
index 7285b61118..58e21343dc 100644
--- a/in-dev/unreleased/getting-started/creating-a-catalog/s3/catalog-ozone/index.html
+++ b/in-dev/unreleased/getting-started/creating-a-catalog/s3/catalog-ozone/index.html
@@ -1,8 +1,8 @@
<!doctype html><html itemscope itemtype=http://schema.org/WebPage lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon.png sizes=100x100><link rel=icon type=image/png href=/favicons/android-ch [...]
Note: the --no-sts CLI option instructs Polaris to avoid calling STS endpoints with AssumeRoles requests. This means that both Polaris and its clients (engines) will have to use distinct (local) credentials for accessing storage. Engines should not request credential vending in this case (should not use the X-Iceberg-Access-Delegation=vended-credentials header)."><meta property="og:url" content="https://polaris.apache.org/in-dev/unreleased/getting-started/creating-a-catalog/s3/catalog-oz [...]
Note: the --no-sts CLI option instructs Polaris to avoid calling STS endpoints with AssumeRoles requests. This means that both Polaris and its clients (engines) will have to use distinct (local) credentials for accessing storage. Engines should not request credential vending in this case (should not use the X-Iceberg-Access-Delegation=vended-credentials header)."><meta property="og:locale" content="en_us"><meta property="og:type" content="article"><meta property="article:section" content [...]
-Note: the --no-sts CLI option instructs Polaris to avoid calling STS endpoints with AssumeRoles requests. This means that both Polaris and its clients (engines) will have to use distinct (local) credentials for accessing storage. Engines should not request credential vending in this case (should not use the X-Iceberg-Access-Delegation=vended-credentials header)."><meta itemprop=wordCount content="298"><meta name=twitter:card content="summary"><meta name=twitter:title content="Creating a [...]
-Note: the --no-sts CLI option instructs Polaris to avoid calling STS endpoints with AssumeRoles requests. This means that both Polaris and its clients (engines) will have to use distinct (local) credentials for accessing storage. Engines should not request credential vending in this case (should not use the X-Iceberg-Access-Delegation=vended-credentials header)."><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity= [...]
+Note: the --no-sts CLI option instructs Polaris to avoid calling STS endpoints with AssumeRoles requests. This means that both Polaris and its clients (engines) will have to use distinct (local) credentials for accessing storage. Engines should not request credential vending in this case (should not use the X-Iceberg-Access-Delegation=vended-credentials header)."><meta itemprop=wordCount content="286"><meta name=twitter:card content="summary"><meta name=twitter:title content="Creating a [...]
+Note: the --no-sts CLI option instructs Polaris to avoid calling STS endpoints with AssumeRoles requests. This means that both Polaris and its clients (engines) will have to use distinct (local) credentials for accessing storage. Engines should not request credential vending in this case (should not use the X-Iceberg-Access-Delegation=vended-credentials header)."><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity= [...]
<label for=m-in-devunreleased-check><a href=/in-dev/unreleased/ title="Apache Polaris Documentation (Unreleased)" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleased><span>Unreleased</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child active-path" id=m-in-devunreleasedgetting-started-li><input type=checkbox id=m-in-devunreleasedgetting-started-check checked>
<label for=m-in-devunreleasedgetting-started-check><a href=/in-dev/unreleased/getting-started/ title="Getting Started with Apache Polaris" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleasedgetting-started><span>Getting Started</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedquick-start-li><input type=checkbox id=m-in-devunreleasedgetting-star [...]
<label for=m-in-devunreleasedgetting-startedquick-start-check><a href=/in-dev/unreleased/getting-started/quick-start/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-in-devunreleasedgetting-startedquick-start><span>Quickstart</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedsetup-tools-li><input type=checkbox id=m-in-devunreleasedgetting-startedsetup-tools-check>
@@ -78,22 +78,22 @@ credentials for accessing storage. Engines should <em>not</em> request credentia
simplicity as it is usually required by the AWS SDK (used internally by Polaris). One can also
set the <code>AWS_REGION</code> environment variable in the Polaris server process and avoid setting region
as a catalog property.</p><p>Note: the name <code>quickstart_catalog</code> from the example below is referenced in other Getting Started
-examples, but of course, it can be any valid catalog name.</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 1</span><span><span style=color:#000>CLIENT_ID</span><span style=color:#ce5c00;font-weight:700>=</span>root
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span><span style=color:#000>CLIENT_SECRET</span><span style=color:#ce5c00;font-weight:700>=</span>s3cr3t
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span><span style=color:#000>DEFAULT_BASE_LOCATION</span><span style=color:#ce5c00;font-weight:700>=</span>s3://example-bucket/my_data
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span>./polaris <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span> --client-id <span style=color:#4e9a06>${</span><span style=color:#000>CLIENT_ID</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span> --client-secret <span style=color:#4e9a06>${</span><span style=color:#000>CLIENT_SECRET</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span> catalogs <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span> create <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">10</span><span> --storage-type s3 <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">11</span><span> --endpoint http://127.0.0.1:9878
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">12</span><span> --no-sts
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">13</span><span> --path-style-access
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">14</span><span> --default-base-location <span style=color:#4e9a06>${</span><span style=color:#000>DEFAULT_BASE_LOCATION</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">15</span><span> --region irrelevant <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">16</span><span> quickstart_catalog
+examples, but of course, it can be any valid catalog name.</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span><span style=color:#000>CLIENT_ID</span><span style=color:#ce5c00;font-weight:700>=</span>root
+</span></span><span style=display:flex><span><span style=color:#000>CLIENT_SECRET</span><span style=color:#ce5c00;font-weight:700>=</span>s3cr3t
+</span></span><span style=display:flex><span><span style=color:#000>DEFAULT_BASE_LOCATION</span><span style=color:#ce5c00;font-weight:700>=</span>s3://example-bucket/my_data
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span>./polaris <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --client-id <span style=color:#4e9a06>${</span><span style=color:#000>CLIENT_ID</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --client-secret <span style=color:#4e9a06>${</span><span style=color:#000>CLIENT_SECRET</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> catalogs <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> create <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --storage-type s3 <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --endpoint http://127.0.0.1:9878
+</span></span><span style=display:flex><span> --no-sts
+</span></span><span style=display:flex><span> --path-style-access
+</span></span><span style=display:flex><span> --default-base-location <span style=color:#4e9a06>${</span><span style=color:#000>DEFAULT_BASE_LOCATION</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --region irrelevant <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> quickstart_catalog
</span></span></code></pre></div><p>In more complex deployments it may be necessary to configure different endpoints for S3 requests
and for STS (AssumeRole) requests. This can be achieved via the <code>--sts-endpoint</code> CLI option.</p><p>Additionally, the <code>--endpoint-internal</code> CLI option cane be used to set the S3 endpoint for use by
the Polaris Server itself, if it needs to be different from the endpoint used by clients / engines.</p><p>A usable Apache Ozone example for <code>docker-compose</code> is available in the Polaris source code under the
diff --git a/in-dev/unreleased/getting-started/creating-a-catalog/s3/index.html b/in-dev/unreleased/getting-started/creating-a-catalog/s3/index.html
index af872e43ca..4c27085ccd 100644
--- a/in-dev/unreleased/getting-started/creating-a-catalog/s3/index.html
+++ b/in-dev/unreleased/getting-started/creating-a-catalog/s3/index.html
@@ -1,12 +1,12 @@
<!doctype html><html itemscope itemtype=http://schema.org/WebPage lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><link rel=alternate type=application/rss+xml href=https://polaris.apache.org/in-dev/unreleased/getting-started/creating-a-catalog/s3/index.xml><meta name=robots content="index, follow"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon.p [...]
For the polaris catalogs create command there are a few s3-only options:
-1--storage-type s3 2--role-arn (Only for AWS S3) A role ARN to use when connecting to S3 3--current-kms-key (Only for AWS S3) The AWS KMS key ARN to be used for encrypting new S3 data 4--allowed-kms-key (Only for AWS S3) AWS KMS key ARN(s) that this catalog and its clients are allowed to use for reading S3 data (zero or more) 5--no-sts (Only for S3) Indicates that Polaris should not use STS (e.g. if STS is not available) 6--region (Only for S3) The region to use when connecting to S3 7-- [...]
+--storage-type s3 --role-arn (Only for AWS S3) A role ARN to use when connecting to S3 --current-kms-key (Only for AWS S3) The AWS KMS key ARN to be used for encrypting new S3 data --allowed-kms-key (Only for AWS S3) AWS KMS key ARN(s) that this catalog and its clients are allowed to use for reading S3 data (zero or more) --no-sts (Only for S3) Indicates that Polaris should not use STS (e.g. if STS is not available) --region (Only for S3) The region to use when connecting to S3 --externa [...]
For the polaris catalogs create command there are a few s3-only options:
-1--storage-type s3 2--role-arn (Only for AWS S3) A role ARN to use when connecting to S3 3--current-kms-key (Only for AWS S3) The AWS KMS key ARN to be used for encrypting new S3 data 4--allowed-kms-key (Only for AWS S3) AWS KMS key ARN(s) that this catalog and its clients are allowed to use for reading S3 data (zero or more) 5--no-sts (Only for S3) Indicates that Polaris should not use STS (e.g. if STS is not available) 6--region (Only for S3) The region to use when connecting to S3 7-- [...]
+--storage-type s3 --role-arn (Only for AWS S3) A role ARN to use when connecting to S3 --current-kms-key (Only for AWS S3) The AWS KMS key ARN to be used for encrypting new S3 data --allowed-kms-key (Only for AWS S3) AWS KMS key ARN(s) that this catalog and its clients are allowed to use for reading S3 data (zero or more) --no-sts (Only for S3) Indicates that Polaris should not use STS (e.g. if STS is not available) --region (Only for S3) The region to use when connecting to S3 --externa [...]
For the polaris catalogs create command there are a few s3-only options:
-1--storage-type s3 2--role-arn (Only for AWS S3) A role ARN to use when connecting to S3 3--current-kms-key (Only for AWS S3) The AWS KMS key ARN to be used for encrypting new S3 data 4--allowed-kms-key (Only for AWS S3) AWS KMS key ARN(s) that this catalog and its clients are allowed to use for reading S3 data (zero or more) 5--no-sts (Only for S3) Indicates that Polaris should not use STS (e.g. if STS is not available) 6--region (Only for S3) The region to use when connecting to S3 7-- [...]
+--storage-type s3 --role-arn (Only for AWS S3) A role ARN to use when connecting to S3 --current-kms-key (Only for AWS S3) The AWS KMS key ARN to be used for encrypting new S3 data --allowed-kms-key (Only for AWS S3) AWS KMS key ARN(s) that this catalog and its clients are allowed to use for reading S3 data (zero or more) --no-sts (Only for S3) Indicates that Polaris should not use STS (e.g. if STS is not available) --region (Only for S3) The region to use when connecting to S3 --externa [...]
For the polaris catalogs create command there are a few s3-only options:
-1--storage-type s3 2--role-arn (Only for AWS S3) A role ARN to use when connecting to S3 3--current-kms-key (Only for AWS S3) The AWS KMS key ARN to be used for encrypting new S3 data 4--allowed-kms-key (Only for AWS S3) AWS KMS key ARN(s) that this catalog and its clients are allowed to use for reading S3 data (zero or more) 5--no-sts (Only for S3) Indicates that Polaris should not use STS (e.g. if STS is not available) 6--region (Only for S3) The region to use when connecting to S3 7-- [...]
+--storage-type s3 --role-arn (Only for AWS S3) A role ARN to use when connecting to S3 --current-kms-key (Only for AWS S3) The AWS KMS key ARN to be used for encrypting new S3 data --allowed-kms-key (Only for AWS S3) AWS KMS key ARN(s) that this catalog and its clients are allowed to use for reading S3 data (zero or more) --no-sts (Only for S3) Indicates that Polaris should not use STS (e.g. if STS is not available) --region (Only for S3) The region to use when connecting to S3 --externa [...]
<label for=m-in-devunreleased-check><a href=/in-dev/unreleased/ title="Apache Polaris Documentation (Unreleased)" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleased><span>Unreleased</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child active-path" id=m-in-devunreleasedgetting-started-li><input type=checkbox id=m-in-devunreleasedgetting-started-check checked>
<label for=m-in-devunreleasedgetting-started-check><a href=/in-dev/unreleased/getting-started/ title="Getting Started with Apache Polaris" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleasedgetting-started><span>Getting Started</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedquick-start-li><input type=checkbox id=m-in-devunreleasedgetting-star [...]
<label for=m-in-devunreleasedgetting-startedquick-start-check><a href=/in-dev/unreleased/getting-started/quick-start/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-in-devunreleasedgetting-startedquick-start><span>Quickstart</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedsetup-tools-li><input type=checkbox id=m-in-devunreleasedgetting-startedsetup-tools-check>
@@ -75,11 +75,11 @@ This content is unreleased and may change before the next Polaris release.
For stable user documentation, see the
<a href=/releases/latest/>latest release docs</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/docs/>Documentation</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/>Developer Docs</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/getting-started/>Getting Started</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/getting-started/creating-a-catalog/>Creating a Catalog</a></li><li class="br [...]
Refer to child pages under this documentation section for some of the possible options.</p><p>For the <code>polaris catalogs create</code> <a href=https://polaris.apache.org/in-dev/unreleased/command-line-interface/#create>command</a>
-there are a few s3-only options:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-text data-lang=text><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span>--storage-type s3
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span>--role-arn (Only for AWS S3) A role ARN to use when connecting to S3
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span>--current-kms-key (Only for AWS S3) The AWS KMS key ARN to be used for encrypting new S3 data
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span>--allowed-kms-key (Only for AWS S3) AWS KMS key ARN(s) that this catalog and its clients are allowed to use for reading S3 data (zero or more)
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span>--no-sts (Only for S3) Indicates that Polaris should not use STS (e.g. if STS is not available)
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">6</span><span>--region (Only for S3) The region to use when connecting to S3
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">7</span><span>--external-id (Only for S3) The external ID to use when connecting to S3
+there are a few s3-only options:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-text data-lang=text><span style=display:flex><span>--storage-type s3
+</span></span><span style=display:flex><span>--role-arn (Only for AWS S3) A role ARN to use when connecting to S3
+</span></span><span style=display:flex><span>--current-kms-key (Only for AWS S3) The AWS KMS key ARN to be used for encrypting new S3 data
+</span></span><span style=display:flex><span>--allowed-kms-key (Only for AWS S3) AWS KMS key ARN(s) that this catalog and its clients are allowed to use for reading S3 data (zero or more)
+</span></span><span style=display:flex><span>--no-sts (Only for S3) Indicates that Polaris should not use STS (e.g. if STS is not available)
+</span></span><span style=display:flex><span>--region (Only for S3) The region to use when connecting to S3
+</span></span><span style=display:flex><span>--external-id (Only for S3) The external ID to use when connecting to S3
</span></span></code></pre></div><div class=section-index></div></div></main></div></div><footer class="td-footer row d-print-none"><div class=container-fluid><div class="row mx-md-2"><div class="td-footer__left col-6 col-sm-4 order-sm-1"><ul class=td-footer__links-list><li class=td-footer__links-item data-bs-toggle=tooltip title=Slack aria-label=Slack><a target=_blank rel=noopener href=https://apache-polaris.slack.com/ aria-label=Slack><i class="fa-regular fa-comment-dots"></i></a></li> [...]
\ No newline at end of file
diff --git a/in-dev/unreleased/getting-started/creating-a-catalog/s3/index.xml b/in-dev/unreleased/getting-started/creating-a-catalog/s3/index.xml
index 22a955db84..9f9b8a2efd 100644
--- a/in-dev/unreleased/getting-started/creating-a-catalog/s3/index.xml
+++ b/in-dev/unreleased/getting-started/creating-a-catalog/s3/index.xml
@@ -3,24 +3,24 @@ one also provides the <code>region</code> and
<a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_third-party.html">external-id</a>.</p>
<p>Note: the name <code>quickstart_catalog</code> from the example below is referenced in other Getting Started examples,
but of course, it can be any valid catalog name.</p>
-<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 1</span><span><span style="color:#000">CLIENT_ID</span><span style="color:#ce5c00;fo [...]
-</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 2</span><span><span style="color:#000">CLIENT_SECRET</span><span style="color:#ce5c00;font-weight:bold">=</span>s3cr3t
-</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 3</span><span><span style="color:#000">DEFAULT_BASE_LOCATION</span><span style="color:#ce5c00;font-weight:bold">=</span>s3://example-bucket/my_data
-</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 4</span><span><span style="color:#000">ROLE_ARN</span><span style="color:#ce5c00;font-weight:bold">=</span>arn:aws:iam::111122223333:role/ExampleCorpRole
-</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 5</span><span><span style="color:#000">REGION</span><span style="color:#ce5c00;font-weight:bold">=</span>us-west-2
-</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 6</span><span><span style="color:#000">EXTERNAL_ID</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#0000cf;font-weight:bold">12345678901234567890</span>
-</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 7</span><span>
-</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 8</span><span>./polaris <span style="color:#4e9a06">\
-</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 9</span><span> --client-id <span style="color:#4e9a06">${</span><span style="color:#000">CLIENT_ID</span><span style="color:#4e9a06">}</span> <span style="color:#4e9a06">\
-</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">10</span><span> --client-secret <span style="color:#4e9a06">${</span><span style="color:#000">CLIENT_SECRET</span><span style="color:#4e9a06">}</span> <span style="color:#4e9a06">\
-</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">11</span><span> catalogs <span style="color:#4e9a06">\
-</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">12</span><span> create <span style="color:#4e9a06">\
-</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">13</span><span> --storage-type s3 <span style="color:#4e9a06">\
-</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">14</span><span> --default-base-location <span style="color:#4e9a06">${</span><span style="color:#000">DEFAULT_BASE_LOCATION</span><span style="color:#4e9a06">}</span> <span style="color:#4e9a06">\
-</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">15</span><span> --role-arn <span style="color:#4e9a06">${</span><span style="color:#000">ROLE_ARN</span><span style="color:#4e9a06">}</span> <span style="color:#4e9a06">\
-</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">16</span><span> --region <span style="color:#4e9a06">${</span><span style="color:#000">REGION</span><span style="color:#4e9a06">}</span> <span style="color:#4e9a06">\
-</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">17</span><span> --external-id <span style="color:#4e9a06">${</span><span style="color:#000">EXTERNAL_ID</span><span style="color:#4e9a06">}</span> <span style="color:#4e9a06">\
-</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">18</span><span> quickstart_catalog
+<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span><span style="color:#000">CLIENT_ID</span><span style="color:#ce5c00;font-weight:bold">=</span>root
+</span></span><span style="display:flex;"><span><span style="color:#000">CLIENT_SECRET</span><span style="color:#ce5c00;font-weight:bold">=</span>s3cr3t
+</span></span><span style="display:flex;"><span><span style="color:#000">DEFAULT_BASE_LOCATION</span><span style="color:#ce5c00;font-weight:bold">=</span>s3://example-bucket/my_data
+</span></span><span style="display:flex;"><span><span style="color:#000">ROLE_ARN</span><span style="color:#ce5c00;font-weight:bold">=</span>arn:aws:iam::111122223333:role/ExampleCorpRole
+</span></span><span style="display:flex;"><span><span style="color:#000">REGION</span><span style="color:#ce5c00;font-weight:bold">=</span>us-west-2
+</span></span><span style="display:flex;"><span><span style="color:#000">EXTERNAL_ID</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#0000cf;font-weight:bold">12345678901234567890</span>
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span>./polaris <span style="color:#4e9a06">\
+</span></span></span><span style="display:flex;"><span> --client-id <span style="color:#4e9a06">${</span><span style="color:#000">CLIENT_ID</span><span style="color:#4e9a06">}</span> <span style="color:#4e9a06">\
+</span></span></span><span style="display:flex;"><span> --client-secret <span style="color:#4e9a06">${</span><span style="color:#000">CLIENT_SECRET</span><span style="color:#4e9a06">}</span> <span style="color:#4e9a06">\
+</span></span></span><span style="display:flex;"><span> catalogs <span style="color:#4e9a06">\
+</span></span></span><span style="display:flex;"><span> create <span style="color:#4e9a06">\
+</span></span></span><span style="display:flex;"><span> --storage-type s3 <span style="color:#4e9a06">\
+</span></span></span><span style="display:flex;"><span> --default-base-location <span style="color:#4e9a06">${</span><span style="color:#000">DEFAULT_BASE_LOCATION</span><span style="color:#4e9a06">}</span> <span style="color:#4e9a06">\
+</span></span></span><span style="display:flex;"><span> --role-arn <span style="color:#4e9a06">${</span><span style="color:#000">ROLE_ARN</span><span style="color:#4e9a06">}</span> <span style="color:#4e9a06">\
+</span></span></span><span style="display:flex;"><span> --region <span style="color:#4e9a06">${</span><span style="color:#000">REGION</span><span style="color:#4e9a06">}</span> <span style="color:#4e9a06">\
+</span></span></span><span style="display:flex;"><span> --external-id <span style="color:#4e9a06">${</span><span style="color:#000">EXTERNAL_ID</span><span style="color:#4e9a06">}</span> <span style="color:#4e9a06">\
+</span></span></span><span style="display:flex;"><span> quickstart_catalog
</span></span></code></pre></div></description></item><item><title>Creating a catalog on Apache Ozone</title><link>https://polaris.apache.org/in-dev/unreleased/getting-started/creating-a-catalog/s3/catalog-ozone/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://polaris.apache.org/in-dev/unreleased/getting-started/creating-a-catalog/s3/catalog-ozone/</guid><description><p>When creating a catalog based on <a href="https://ozone.ap [...]
configure the <code>endpoint</code> property to point to your own storage cluster. If the <code>endpoint</code> property is
not set, Polaris will attempt to contact AWS storage services (which is certain to fail in this case).</p>
diff --git a/in-dev/unreleased/getting-started/deploying-polaris/cloud-deploy/deploy-aws/index.html b/in-dev/unreleased/getting-started/deploying-polaris/cloud-deploy/deploy-aws/index.html
index eb8489f09b..246f84bd68 100644
--- a/in-dev/unreleased/getting-started/deploying-polaris/cloud-deploy/deploy-aws/index.html
+++ b/in-dev/unreleased/getting-started/deploying-polaris/cloud-deploy/deploy-aws/index.html
@@ -1,12 +1,12 @@
<!doctype html><html itemscope itemtype=http://schema.org/WebPage lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon.png sizes=100x100><link rel=icon type=image/png href=/favicons/android-ch [...]
The requirements to run the script below are:
-There must be at least two subnets created in the VPC and region in which your EC2 instance reside. The span of subnets MUST include at least 2 availability zones (AZs) within the same region. Your EC2 instance must be enabled with IMDSv1 or IMDSv2 with 2+ hop limit. The AWS identity that you will use to run this script must have the following AWS permissions: “ec2:DescribeInstances” “rds:CreateDBInstance” “rds:DescribeDBInstances” “rds:CreateDBSubnetGroup” “sts:AssumeRole” on the same r [...]
+There must be at least two subnets created in the VPC and region in which your EC2 instance reside. The span of subnets MUST include at least 2 availability zones (AZs) within the same region. Your EC2 instance must be enabled with IMDSv1 or IMDSv2 with 2+ hop limit. The AWS identity that you will use to run this script must have the following AWS permissions: “ec2:DescribeInstances” “rds:CreateDBInstance” “rds:DescribeDBInstances” “rds:CreateDBSubnetGroup” “sts:AssumeRole” on the same r [...]
The requirements to run the script below are:
-There must be at least two subnets created in the VPC and region in which your EC2 instance reside. The span of subnets MUST include at least 2 availability zones (AZs) within the same region. Your EC2 instance must be enabled with IMDSv1 or IMDSv2 with 2+ hop limit. The AWS identity that you will use to run this script must have the following AWS permissions: “ec2:DescribeInstances” “rds:CreateDBInstance” “rds:DescribeDBInstances” “rds:CreateDBSubnetGroup” “sts:AssumeRole” on the same r [...]
+There must be at least two subnets created in the VPC and region in which your EC2 instance reside. The span of subnets MUST include at least 2 availability zones (AZs) within the same region. Your EC2 instance must be enabled with IMDSv1 or IMDSv2 with 2+ hop limit. The AWS identity that you will use to run this script must have the following AWS permissions: “ec2:DescribeInstances” “rds:CreateDBInstance” “rds:DescribeDBInstances” “rds:CreateDBSubnetGroup” “sts:AssumeRole” on the same r [...]
The requirements to run the script below are:
-There must be at least two subnets created in the VPC and region in which your EC2 instance reside. The span of subnets MUST include at least 2 availability zones (AZs) within the same region. Your EC2 instance must be enabled with IMDSv1 or IMDSv2 with 2+ hop limit. The AWS identity that you will use to run this script must have the following AWS permissions: “ec2:DescribeInstances” “rds:CreateDBInstance” “rds:DescribeDBInstances” “rds:CreateDBSubnetGroup” “sts:AssumeRole” on the same r [...]
+There must be at least two subnets created in the VPC and region in which your EC2 instance reside. The span of subnets MUST include at least 2 availability zones (AZs) within the same region. Your EC2 instance must be enabled with IMDSv1 or IMDSv2 with 2+ hop limit. The AWS identity that you will use to run this script must have the following AWS permissions: “ec2:DescribeInstances” “rds:CreateDBInstance” “rds:DescribeDBInstances” “rds:CreateDBSubnetGroup” “sts:AssumeRole” on the same r [...]
The requirements to run the script below are:
-There must be at least two subnets created in the VPC and region in which your EC2 instance reside. The span of subnets MUST include at least 2 availability zones (AZs) within the same region. Your EC2 instance must be enabled with IMDSv1 or IMDSv2 with 2+ hop limit. The AWS identity that you will use to run this script must have the following AWS permissions: “ec2:DescribeInstances” “rds:CreateDBInstance” “rds:DescribeDBInstances” “rds:CreateDBSubnetGroup” “sts:AssumeRole” on the same r [...]
+There must be at least two subnets created in the VPC and region in which your EC2 instance reside. The span of subnets MUST include at least 2 availability zones (AZs) within the same region. Your EC2 instance must be enabled with IMDSv1 or IMDSv2 with 2+ hop limit. The AWS identity that you will use to run this script must have the following AWS permissions: “ec2:DescribeInstances” “rds:CreateDBInstance” “rds:DescribeDBInstances” “rds:CreateDBSubnetGroup” “sts:AssumeRole” on the same r [...]
<label for=m-in-devunreleased-check><a href=/in-dev/unreleased/ title="Apache Polaris Documentation (Unreleased)" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleased><span>Unreleased</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child active-path" id=m-in-devunreleasedgetting-started-li><input type=checkbox id=m-in-devunreleasedgetting-started-check checked>
<label for=m-in-devunreleasedgetting-started-check><a href=/in-dev/unreleased/getting-started/ title="Getting Started with Apache Polaris" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleasedgetting-started><span>Getting Started</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedquick-start-li><input type=checkbox id=m-in-devunreleasedgetting-star [...]
<label for=m-in-devunreleasedgetting-startedquick-start-check><a href=/in-dev/unreleased/getting-started/quick-start/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-in-devunreleasedgetting-startedquick-start><span>Quickstart</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedsetup-tools-li><input type=checkbox id=m-in-devunreleasedgetting-startedsetup-tools-check>
@@ -75,13 +75,13 @@ There must be at least two subnets created in the VPC and region in which your E
This content is unreleased and may change before the next Polaris release.
For stable user documentation, see the
<a href=/releases/latest/>latest release docs</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/docs/>Documentation</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/>Developer Docs</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/getting-started/>Getting Started</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/getting-started/deploying-polaris/>Deploying Polaris</a></li><li class=bread [...]
-Additionally, Polaris will be bootstrapped to use this database and Docker containers will be spun up for Spark SQL and Trino.</p><p>The requirements to run the script below are:</p><ul><li>There must be at least two subnets created in the VPC and region in which your EC2 instance reside. The span of subnets MUST include at least 2 availability zones (AZs) within the same region.</li><li>Your EC2 instance must be enabled with <a href=https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/co [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#204a87>export</span> <span style=color:#000>CLIENT_ID</span><span style=color:#ce5c00;font-weight:700>=</span>root
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span><span style=color:#204a87>export</span> <span style=color:#000>CLIENT_SECRET</span><span style=color:#ce5c00;font-weight:700>=</span>s3cr3t
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span><span style=color:#204a87>export</span> <span style=color:#000>POSTGRES_PASSWORD</span><span style=color:#ce5c00;font-weight:700>=</span>your_secure_password <span style=color:#8f5902;font-style:italic># Optional: If not set, a random password will be generated</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span>./getting-started/assets/cloud_providers/deploy-aws.sh
+Additionally, Polaris will be bootstrapped to use this database and Docker containers will be spun up for Spark SQL and Trino.</p><p>The requirements to run the script below are:</p><ul><li>There must be at least two subnets created in the VPC and region in which your EC2 instance reside. The span of subnets MUST include at least 2 availability zones (AZs) within the same region.</li><li>Your EC2 instance must be enabled with <a href=https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/co [...]
+</span></span><span style=display:flex><span><span style=color:#204a87>export</span> <span style=color:#000>CLIENT_ID</span><span style=color:#ce5c00;font-weight:700>=</span>root
+</span></span><span style=display:flex><span><span style=color:#204a87>export</span> <span style=color:#000>CLIENT_SECRET</span><span style=color:#ce5c00;font-weight:700>=</span>s3cr3t
+</span></span><span style=display:flex><span><span style=color:#204a87>export</span> <span style=color:#000>POSTGRES_PASSWORD</span><span style=color:#ce5c00;font-weight:700>=</span>your_secure_password <span style=color:#8f5902;font-style:italic># Optional: If not set, a random password will be generated</span>
+</span></span><span style=display:flex><span>./getting-started/assets/cloud_providers/deploy-aws.sh
</span></span></code></pre></div><h3 id=environment-variables id=environment-variables>Environment Variables<a class=heading-anchor href=#environment-variables aria-label=Anchor>🔗</a></h3><p>The deployment script accepts the following environment variables:</p><ul><li><strong><code>ASSETS_PATH</code></strong> (required): Path to the getting-started assets directory</li><li><strong><code>CLIENT_ID</code></strong> (required): Client ID for Polaris authentication</li><li><strong><code>CLIEN [...]
check out the <a href=https://polaris.apache.org/in-dev/unreleased/getting-started/creating-a-catalog/>Creating a Catalog</a> and
-<a href=/in-dev/unreleased/getting-started/using-polaris/>Using Polaris</a> pages.</p><h2 id=cleanup-instructions id=cleanup-instructions>Cleanup Instructions<a class=heading-anchor href=#cleanup-instructions aria-label=Anchor>🔗</a></h2><p>To shut down the Polaris server, run the following commands:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span>docker compose -p polaris -f getting-started/jdbc/docker-compose.yml down
+<a href=/in-dev/unreleased/getting-started/using-polaris/>Using Polaris</a> pages.</p><h2 id=cleanup-instructions id=cleanup-instructions>Cleanup Instructions<a class=heading-anchor href=#cleanup-instructions aria-label=Anchor>🔗</a></h2><p>To shut down the Polaris server, run the following commands:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span [...]
+</span></span><span style=display:flex><span>docker compose -p polaris -f getting-started/jdbc/docker-compose.yml down
</span></span></code></pre></div><p>To deploy Polaris in a production setting, please review further recommendations at the <a href=/in-dev/unreleased/configuration/configuring-polaris-for-production/>Configuring Polaris for Production</a> page.</p></div></main></div></div><footer class="td-footer row d-print-none"><div class=container-fluid><div class="row mx-md-2"><div class="td-footer__left col-6 col-sm-4 order-sm-1"><ul class=td-footer__links-list><li class=td-footer__links-item data [...]
\ No newline at end of file
diff --git a/in-dev/unreleased/getting-started/deploying-polaris/cloud-deploy/deploy-azure/index.html b/in-dev/unreleased/getting-started/deploying-polaris/cloud-deploy/deploy-azure/index.html
index e16484e0df..dc07e490a5 100644
--- a/in-dev/unreleased/getting-started/deploying-polaris/cloud-deploy/deploy-azure/index.html
+++ b/in-dev/unreleased/getting-started/deploying-polaris/cloud-deploy/deploy-azure/index.html
@@ -2,7 +2,7 @@
The requirements to run the script below are:"><meta property="og:url" content="https://polaris.apache.org/in-dev/unreleased/getting-started/deploying-polaris/cloud-deploy/deploy-azure/"><meta property="og:site_name" content="Apache Polaris"><meta property="og:title" content="Deploying Polaris on Azure"><meta property="og:description" content="Build and launch Polaris using the Azure Startup Script at the location provided in the command below. This script will start an Azure Database fo [...]
The requirements to run the script below are:"><meta property="og:locale" content="en_us"><meta property="og:type" content="article"><meta property="article:section" content="in-dev"><meta itemprop=name content="Deploying Polaris on Azure"><meta itemprop=description content="Build and launch Polaris using the Azure Startup Script at the location provided in the command below. This script will start an Azure Database for PostgreSQL - Flexible Server instance, which will be used as the bac [...]
The requirements to run the script below are:"><meta itemprop=wordCount content="284"><meta name=twitter:card content="summary"><meta name=twitter:title content="Deploying Polaris on Azure"><meta name=twitter:description content="Build and launch Polaris using the Azure Startup Script at the location provided in the command below. This script will start an Azure Database for PostgreSQL - Flexible Server instance, which will be used as the backend Postgres instance holding all Polaris dat [...]
-The requirements to run the script below are:"><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css rel=stylesheet integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><script src=/jquery-3.7.1.min_12321606798608477 [...]
+The requirements to run the script below are:"><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css rel=stylesheet integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><script src=/jquery-3.7.1.min_12321606798608477 [...]
<label for=m-in-devunreleased-check><a href=/in-dev/unreleased/ title="Apache Polaris Documentation (Unreleased)" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleased><span>Unreleased</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child active-path" id=m-in-devunreleasedgetting-started-li><input type=checkbox id=m-in-devunreleasedgetting-started-check checked>
<label for=m-in-devunreleasedgetting-started-check><a href=/in-dev/unreleased/getting-started/ title="Getting Started with Apache Polaris" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleasedgetting-started><span>Getting Started</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedquick-start-li><input type=checkbox id=m-in-devunreleasedgetting-star [...]
<label for=m-in-devunreleasedgetting-startedquick-start-check><a href=/in-dev/unreleased/getting-started/quick-start/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-in-devunreleasedgetting-startedquick-start><span>Quickstart</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedsetup-tools-li><input type=checkbox id=m-in-devunreleasedgetting-startedsetup-tools-check>
@@ -71,13 +71,13 @@ The requirements to run the script below are:"><link rel=preload href=/scss/main
This content is unreleased and may change before the next Polaris release.
For stable user documentation, see the
<a href=/releases/latest/>latest release docs</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/docs/>Documentation</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/>Developer Docs</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/getting-started/>Getting Started</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/getting-started/deploying-polaris/>Deploying Polaris</a></li><li class=bread [...]
-Additionally, Polaris will be bootstrapped to use this database and Docker containers will be spun up for Spark SQL and Trino.</p><p>The requirements to run the script below are:</p><ul><li>Install the AZ CLI, if it is not already installed on the Azure VM. Instructions to download the AZ CLI can be found <a href=https://learn.microsoft.com/en-us/cli/azure/install-azure-cli>here</a>.</li><li>You must be logged into the AZ CLI. Please run <code>az account show</code> to ensure that you ar [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#204a87>export</span> <span style=color:#000>CLIENT_ID</span><span style=color:#ce5c00;font-weight:700>=</span>root
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span><span style=color:#204a87>export</span> <span style=color:#000>CLIENT_SECRET</span><span style=color:#ce5c00;font-weight:700>=</span>s3cr3t
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span><span style=color:#204a87>export</span> <span style=color:#000>POSTGRES_PASSWORD</span><span style=color:#ce5c00;font-weight:700>=</span>your_secure_password <span style=color:#8f5902;font-style:italic># Optional: If not set, a random password will be generated</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span>./getting-started/assets/cloud_providers/deploy-azure.sh
+Additionally, Polaris will be bootstrapped to use this database and Docker containers will be spun up for Spark SQL and Trino.</p><p>The requirements to run the script below are:</p><ul><li>Install the AZ CLI, if it is not already installed on the Azure VM. Instructions to download the AZ CLI can be found <a href=https://learn.microsoft.com/en-us/cli/azure/install-azure-cli>here</a>.</li><li>You must be logged into the AZ CLI. Please run <code>az account show</code> to ensure that you ar [...]
+</span></span><span style=display:flex><span><span style=color:#204a87>export</span> <span style=color:#000>CLIENT_ID</span><span style=color:#ce5c00;font-weight:700>=</span>root
+</span></span><span style=display:flex><span><span style=color:#204a87>export</span> <span style=color:#000>CLIENT_SECRET</span><span style=color:#ce5c00;font-weight:700>=</span>s3cr3t
+</span></span><span style=display:flex><span><span style=color:#204a87>export</span> <span style=color:#000>POSTGRES_PASSWORD</span><span style=color:#ce5c00;font-weight:700>=</span>your_secure_password <span style=color:#8f5902;font-style:italic># Optional: If not set, a random password will be generated</span>
+</span></span><span style=display:flex><span>./getting-started/assets/cloud_providers/deploy-azure.sh
</span></span></code></pre></div><h3 id=environment-variables id=environment-variables>Environment Variables<a class=heading-anchor href=#environment-variables aria-label=Anchor>🔗</a></h3><p>The deployment script accepts the following environment variables:</p><ul><li><strong><code>ASSETS_PATH</code></strong> (required): Path to the getting-started assets directory</li><li><strong><code>CLIENT_ID</code></strong> (required): Client ID for Polaris authentication</li><li><strong><code>CLIEN [...]
check out the <a href=https://polaris.apache.org/in-dev/unreleased/getting-started/creating-a-catalog/>Creating a Catalog</a> and
-<a href=/in-dev/unreleased/getting-started/using-polaris/>Using Polaris</a> pages.</p><h2 id=cleanup-instructions id=cleanup-instructions>Cleanup Instructions<a class=heading-anchor href=#cleanup-instructions aria-label=Anchor>🔗</a></h2><p>To shut down the Polaris server, run the following commands:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span>docker compose -p polaris -f getting-started/jdbc/docker-compose.yml down
+<a href=/in-dev/unreleased/getting-started/using-polaris/>Using Polaris</a> pages.</p><h2 id=cleanup-instructions id=cleanup-instructions>Cleanup Instructions<a class=heading-anchor href=#cleanup-instructions aria-label=Anchor>🔗</a></h2><p>To shut down the Polaris server, run the following commands:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span [...]
+</span></span><span style=display:flex><span>docker compose -p polaris -f getting-started/jdbc/docker-compose.yml down
</span></span></code></pre></div><p>To deploy Polaris in a production setting, please review further recommendations at the <a href=/in-dev/unreleased/configuration/configuring-polaris-for-production/>Configuring Polaris for Production</a> page.</p></div></main></div></div><footer class="td-footer row d-print-none"><div class=container-fluid><div class="row mx-md-2"><div class="td-footer__left col-6 col-sm-4 order-sm-1"><ul class=td-footer__links-list><li class=td-footer__links-item data [...]
\ No newline at end of file
diff --git a/in-dev/unreleased/getting-started/deploying-polaris/cloud-deploy/deploy-gcp/index.html b/in-dev/unreleased/getting-started/deploying-polaris/cloud-deploy/deploy-gcp/index.html
index e1596c5c88..1c03e1696b 100644
--- a/in-dev/unreleased/getting-started/deploying-polaris/cloud-deploy/deploy-gcp/index.html
+++ b/in-dev/unreleased/getting-started/deploying-polaris/cloud-deploy/deploy-gcp/index.html
@@ -1,12 +1,12 @@
<!doctype html><html itemscope itemtype=http://schema.org/WebPage lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon.png sizes=100x100><link rel=icon type=image/png href=/favicons/android-ch [...]
The requirements to run the script below are:
-Install the gcloud CLI, if it is not already installed on the GCP VM. Instructions to download the gcloud CLI can be found here. Ensure the Cloud SQL Admin API has been enabled in your project and that your VM’s Principal has access to the correct role: roles/cloudsql.admin. Ensure the VM’s Principal has access to at least Read-only scope on Compute Engine: compute.readonly. 1export ASSETS_PATH=$(pwd)/getting-started/assets/ 2export CLIENT_ID=root 3export CLIENT_SECRET=s3cr3t 4export POS [...]
+Install the gcloud CLI, if it is not already installed on the GCP VM. Instructions to download the gcloud CLI can be found here. Ensure the Cloud SQL Admin API has been enabled in your project and that your VM’s Principal has access to the correct role: roles/cloudsql.admin. Ensure the VM’s Principal has access to at least Read-only scope on Compute Engine: compute.readonly. export ASSETS_PATH=$(pwd)/getting-started/assets/ export CLIENT_ID=root export CLIENT_SECRET=s3cr3t export POSTGRE [...]
The requirements to run the script below are:
-Install the gcloud CLI, if it is not already installed on the GCP VM. Instructions to download the gcloud CLI can be found here. Ensure the Cloud SQL Admin API has been enabled in your project and that your VM’s Principal has access to the correct role: roles/cloudsql.admin. Ensure the VM’s Principal has access to at least Read-only scope on Compute Engine: compute.readonly. 1export ASSETS_PATH=$(pwd)/getting-started/assets/ 2export CLIENT_ID=root 3export CLIENT_SECRET=s3cr3t 4export POS [...]
+Install the gcloud CLI, if it is not already installed on the GCP VM. Instructions to download the gcloud CLI can be found here. Ensure the Cloud SQL Admin API has been enabled in your project and that your VM’s Principal has access to the correct role: roles/cloudsql.admin. Ensure the VM’s Principal has access to at least Read-only scope on Compute Engine: compute.readonly. export ASSETS_PATH=$(pwd)/getting-started/assets/ export CLIENT_ID=root export CLIENT_SECRET=s3cr3t export POSTGRE [...]
The requirements to run the script below are:
-Install the gcloud CLI, if it is not already installed on the GCP VM. Instructions to download the gcloud CLI can be found here. Ensure the Cloud SQL Admin API has been enabled in your project and that your VM’s Principal has access to the correct role: roles/cloudsql.admin. Ensure the VM’s Principal has access to at least Read-only scope on Compute Engine: compute.readonly. 1export ASSETS_PATH=$(pwd)/getting-started/assets/ 2export CLIENT_ID=root 3export CLIENT_SECRET=s3cr3t 4export POS [...]
+Install the gcloud CLI, if it is not already installed on the GCP VM. Instructions to download the gcloud CLI can be found here. Ensure the Cloud SQL Admin API has been enabled in your project and that your VM’s Principal has access to the correct role: roles/cloudsql.admin. Ensure the VM’s Principal has access to at least Read-only scope on Compute Engine: compute.readonly. export ASSETS_PATH=$(pwd)/getting-started/assets/ export CLIENT_ID=root export CLIENT_SECRET=s3cr3t export POSTGRE [...]
The requirements to run the script below are:
-Install the gcloud CLI, if it is not already installed on the GCP VM. Instructions to download the gcloud CLI can be found here. Ensure the Cloud SQL Admin API has been enabled in your project and that your VM’s Principal has access to the correct role: roles/cloudsql.admin. Ensure the VM’s Principal has access to at least Read-only scope on Compute Engine: compute.readonly. 1export ASSETS_PATH=$(pwd)/getting-started/assets/ 2export CLIENT_ID=root 3export CLIENT_SECRET=s3cr3t 4export POS [...]
+Install the gcloud CLI, if it is not already installed on the GCP VM. Instructions to download the gcloud CLI can be found here. Ensure the Cloud SQL Admin API has been enabled in your project and that your VM’s Principal has access to the correct role: roles/cloudsql.admin. Ensure the VM’s Principal has access to at least Read-only scope on Compute Engine: compute.readonly. export ASSETS_PATH=$(pwd)/getting-started/assets/ export CLIENT_ID=root export CLIENT_SECRET=s3cr3t export POSTGRE [...]
<label for=m-in-devunreleased-check><a href=/in-dev/unreleased/ title="Apache Polaris Documentation (Unreleased)" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleased><span>Unreleased</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child active-path" id=m-in-devunreleasedgetting-started-li><input type=checkbox id=m-in-devunreleasedgetting-started-check checked>
<label for=m-in-devunreleasedgetting-started-check><a href=/in-dev/unreleased/getting-started/ title="Getting Started with Apache Polaris" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleasedgetting-started><span>Getting Started</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedquick-start-li><input type=checkbox id=m-in-devunreleasedgetting-star [...]
<label for=m-in-devunreleasedgetting-startedquick-start-check><a href=/in-dev/unreleased/getting-started/quick-start/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-in-devunreleasedgetting-startedquick-start><span>Quickstart</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedsetup-tools-li><input type=checkbox id=m-in-devunreleasedgetting-startedsetup-tools-check>
@@ -75,13 +75,13 @@ Install the gcloud CLI, if it is not already installed on the GCP VM. Instructio
This content is unreleased and may change before the next Polaris release.
For stable user documentation, see the
<a href=/releases/latest/>latest release docs</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/docs/>Documentation</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/>Developer Docs</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/getting-started/>Getting Started</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/getting-started/deploying-polaris/>Deploying Polaris</a></li><li class=bread [...]
-Additionally, Polaris will be bootstrapped to use this database and Docker containers will be spun up for Spark SQL and Trino.</p><p>The requirements to run the script below are:</p><ul><li>Install the <code>gcloud</code> CLI, if it is not already installed on the GCP VM. Instructions to download the <code>gcloud</code> CLI can be found <a href=https://cloud.google.com/sdk/docs/install>here</a>.</li><li>Ensure the <code>Cloud SQL Admin API</code> has been enabled in your project and that [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#204a87>export</span> <span style=color:#000>CLIENT_ID</span><span style=color:#ce5c00;font-weight:700>=</span>root
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span><span style=color:#204a87>export</span> <span style=color:#000>CLIENT_SECRET</span><span style=color:#ce5c00;font-weight:700>=</span>s3cr3t
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span><span style=color:#204a87>export</span> <span style=color:#000>POSTGRES_PASSWORD</span><span style=color:#ce5c00;font-weight:700>=</span>your_secure_password <span style=color:#8f5902;font-style:italic># Optional: If not set, a random password will be generated</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span>./getting-started/assets/cloud_providers/deploy-gcp.sh
+Additionally, Polaris will be bootstrapped to use this database and Docker containers will be spun up for Spark SQL and Trino.</p><p>The requirements to run the script below are:</p><ul><li>Install the <code>gcloud</code> CLI, if it is not already installed on the GCP VM. Instructions to download the <code>gcloud</code> CLI can be found <a href=https://cloud.google.com/sdk/docs/install>here</a>.</li><li>Ensure the <code>Cloud SQL Admin API</code> has been enabled in your project and that [...]
+</span></span><span style=display:flex><span><span style=color:#204a87>export</span> <span style=color:#000>CLIENT_ID</span><span style=color:#ce5c00;font-weight:700>=</span>root
+</span></span><span style=display:flex><span><span style=color:#204a87>export</span> <span style=color:#000>CLIENT_SECRET</span><span style=color:#ce5c00;font-weight:700>=</span>s3cr3t
+</span></span><span style=display:flex><span><span style=color:#204a87>export</span> <span style=color:#000>POSTGRES_PASSWORD</span><span style=color:#ce5c00;font-weight:700>=</span>your_secure_password <span style=color:#8f5902;font-style:italic># Optional: If not set, a random password will be generated</span>
+</span></span><span style=display:flex><span>./getting-started/assets/cloud_providers/deploy-gcp.sh
</span></span></code></pre></div><h3 id=environment-variables id=environment-variables>Environment Variables<a class=heading-anchor href=#environment-variables aria-label=Anchor>🔗</a></h3><p>The deployment script accepts the following environment variables:</p><ul><li><strong><code>ASSETS_PATH</code></strong> (required): Path to the getting-started assets directory</li><li><strong><code>CLIENT_ID</code></strong> (required): Client ID for Polaris authentication</li><li><strong><code>CLIEN [...]
check out the <a href=https://polaris.apache.org/in-dev/unreleased/getting-started/creating-a-catalog/>Creating a Catalog</a> and
-<a href=/in-dev/unreleased/getting-started/using-polaris/>Using Polaris</a> pages.</p><h2 id=cleanup-instructions id=cleanup-instructions>Cleanup Instructions<a class=heading-anchor href=#cleanup-instructions aria-label=Anchor>🔗</a></h2><p>To shut down the Polaris server, run the following commands:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span>docker compose -p polaris -f getting-started/jdbc/docker-compose.yml down
+<a href=/in-dev/unreleased/getting-started/using-polaris/>Using Polaris</a> pages.</p><h2 id=cleanup-instructions id=cleanup-instructions>Cleanup Instructions<a class=heading-anchor href=#cleanup-instructions aria-label=Anchor>🔗</a></h2><p>To shut down the Polaris server, run the following commands:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span [...]
+</span></span><span style=display:flex><span>docker compose -p polaris -f getting-started/jdbc/docker-compose.yml down
</span></span></code></pre></div><p>To deploy Polaris in a production setting, please review further recommendations at the <a href=/in-dev/unreleased/configuration/configuring-polaris-for-production/>Configuring Polaris for Production</a> page.</p></div></main></div></div><footer class="td-footer row d-print-none"><div class=container-fluid><div class="row mx-md-2"><div class="td-footer__left col-6 col-sm-4 order-sm-1"><ul class=td-footer__links-list><li class=td-footer__links-item data [...]
\ No newline at end of file
diff --git a/in-dev/unreleased/getting-started/deploying-polaris/cloud-deploy/index.html b/in-dev/unreleased/getting-started/deploying-polaris/cloud-deploy/index.html
index e75a2506a4..4d77dc163a 100644
--- a/in-dev/unreleased/getting-started/deploying-polaris/cloud-deploy/index.html
+++ b/in-dev/unreleased/getting-started/deploying-polaris/cloud-deploy/index.html
@@ -1,4 +1,4 @@
-<!doctype html><html itemscope itemtype=http://schema.org/WebPage lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><link rel=alternate type=application/rss+xml href=https://polaris.apache.org/in-dev/unreleased/getting-started/deploying-polaris/cloud-deploy/index.xml><meta name=robots content="index, follow"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-tou [...]
+<!doctype html><html itemscope itemtype=http://schema.org/WebPage lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><link rel=alternate type=application/rss+xml href=https://polaris.apache.org/in-dev/unreleased/getting-started/deploying-polaris/cloud-deploy/index.xml><meta name=robots content="index, follow"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-tou [...]
<label for=m-in-devunreleased-check><a href=/in-dev/unreleased/ title="Apache Polaris Documentation (Unreleased)" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleased><span>Unreleased</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child active-path" id=m-in-devunreleasedgetting-started-li><input type=checkbox id=m-in-devunreleasedgetting-started-check checked>
<label for=m-in-devunreleasedgetting-started-check><a href=/in-dev/unreleased/getting-started/ title="Getting Started with Apache Polaris" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleasedgetting-started><span>Getting Started</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedquick-start-li><input type=checkbox id=m-in-devunreleasedgetting-star [...]
<label for=m-in-devunreleasedgetting-startedquick-start-check><a href=/in-dev/unreleased/getting-started/quick-start/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-in-devunreleasedgetting-startedquick-start><span>Quickstart</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedsetup-tools-li><input type=checkbox id=m-in-devunreleasedgetting-startedsetup-tools-check>
diff --git a/in-dev/unreleased/getting-started/deploying-polaris/cloud-deploy/index.xml b/in-dev/unreleased/getting-started/deploying-polaris/cloud-deploy/index.xml
index 56c7729f9d..70fbdce91d 100644
--- a/in-dev/unreleased/getting-started/deploying-polaris/cloud-deploy/index.xml
+++ b/in-dev/unreleased/getting-started/deploying-polaris/cloud-deploy/index.xml
@@ -14,11 +14,11 @@ Additionally, Polaris will be bootstrapped to use this database and Docker conta
</ul>
</li>
</ul>
-<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1</span><span><span style="color:#204a87">export</span> <span style="color:#000">A [...]
-</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">2</span><span><span style="color:#204a87">export</span> <span style="color:#000">CLIENT_ID</span><span style="color:#ce5c00;font-weight:bold">=</span>root
-</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">3</span><span><span style="color:#204a87">export</span> <span style="color:#000">CLIENT_SECRET</span><span style="color:#ce5c00;font-weight:bold">=</span>s3cr3t
-</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">4</span><span><span style="color:#204a87">export</span> <span style="color:#000">POSTGRES_PASSWORD</span><span style="color:#ce5c00;font-weight:bold">=</span>your_secure_password <span style="color:#8f5902;font-style:italic"># Optional: If not [...]
-</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">5</span><span>./getting-started/assets/cloud_providers/deploy-aws.sh
+<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span><span style="color:#204a87">export</span> <span style="color:#000">ASSETS_PATH</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#204a87;font-weight:bold">$(</spa [...]
+</span></span><span style="display:flex;"><span><span style="color:#204a87">export</span> <span style="color:#000">CLIENT_ID</span><span style="color:#ce5c00;font-weight:bold">=</span>root
+</span></span><span style="display:flex;"><span><span style="color:#204a87">export</span> <span style="color:#000">CLIENT_SECRET</span><span style="color:#ce5c00;font-weight:bold">=</span>s3cr3t
+</span></span><span style="display:flex;"><span><span style="color:#204a87">export</span> <span style="color:#000">POSTGRES_PASSWORD</span><span style="color:#ce5c00;font-weight:bold">=</span>your_secure_password <span style="color:#8f5902;font-style:italic"># Optional: If not set, a random password will be generated</span>
+</span></span><span style="display:flex;"><span>./getting-started/assets/cloud_providers/deploy-aws.sh
</span></span></code></pre></div><h3 id="environment-variables" id="environment-variables">Environment Variables<a class="heading-anchor" href="#environment-variables" aria-label="Anchor">🔗</a>
</h3>
<p>The deployment script accepts the following environment variables:</p></description></item><item><title>Deploying Polaris on Azure</title><link>https://polaris.apache.org/in-dev/unreleased/getting-started/deploying-polaris/cloud-deploy/deploy-azure/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://polaris.apache.org/in-dev/unreleased/getting-started/deploying-polaris/cloud-deploy/deploy-azure/</guid><description><p>Build and launch Polaris using [...]
@@ -31,11 +31,11 @@ Additionally, Polaris will be bootstrapped to use this database and Docker conta
<li>Ensure the <code>Cloud SQL Admin API</code> has been enabled in your project and that your VM&rsquo;s Principal has access to the correct role: <code>roles/cloudsql.admin</code>.</li>
<li>Ensure the VM&rsquo;s Principal has access to at least Read-only scope on Compute Engine: <code>compute.readonly</code>.</li>
</ul>
-<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1</span><span><span style="color:#204a87">export</span> <span style="color:#000">A [...]
-</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">2</span><span><span style="color:#204a87">export</span> <span style="color:#000">CLIENT_ID</span><span style="color:#ce5c00;font-weight:bold">=</span>root
-</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">3</span><span><span style="color:#204a87">export</span> <span style="color:#000">CLIENT_SECRET</span><span style="color:#ce5c00;font-weight:bold">=</span>s3cr3t
-</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">4</span><span><span style="color:#204a87">export</span> <span style="color:#000">POSTGRES_PASSWORD</span><span style="color:#ce5c00;font-weight:bold">=</span>your_secure_password <span style="color:#8f5902;font-style:italic"># Optional: If not [...]
-</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">5</span><span>./getting-started/assets/cloud_providers/deploy-gcp.sh
+<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span><span style="color:#204a87">export</span> <span style="color:#000">ASSETS_PATH</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#204a87;font-weight:bold">$(</spa [...]
+</span></span><span style="display:flex;"><span><span style="color:#204a87">export</span> <span style="color:#000">CLIENT_ID</span><span style="color:#ce5c00;font-weight:bold">=</span>root
+</span></span><span style="display:flex;"><span><span style="color:#204a87">export</span> <span style="color:#000">CLIENT_SECRET</span><span style="color:#ce5c00;font-weight:bold">=</span>s3cr3t
+</span></span><span style="display:flex;"><span><span style="color:#204a87">export</span> <span style="color:#000">POSTGRES_PASSWORD</span><span style="color:#ce5c00;font-weight:bold">=</span>your_secure_password <span style="color:#8f5902;font-style:italic"># Optional: If not set, a random password will be generated</span>
+</span></span><span style="display:flex;"><span>./getting-started/assets/cloud_providers/deploy-gcp.sh
</span></span></code></pre></div><h3 id="environment-variables" id="environment-variables">Environment Variables<a class="heading-anchor" href="#environment-variables" aria-label="Anchor">🔗</a>
</h3>
<p>The deployment script accepts the following environment variables:</p></description></item></channel></rss>
\ No newline at end of file
diff --git a/in-dev/unreleased/getting-started/deploying-polaris/index.html b/in-dev/unreleased/getting-started/deploying-polaris/index.html
index 7eb9eabd20..93ad0d15e9 100644
--- a/in-dev/unreleased/getting-started/deploying-polaris/index.html
+++ b/in-dev/unreleased/getting-started/deploying-polaris/index.html
@@ -2,7 +2,7 @@
Locally, Polaris can be deployed using both docker and local build. On the cloud, the following tutorials will deploy Polaris using docker environment."><meta property="og:url" content="https://polaris.apache.org/in-dev/unreleased/getting-started/deploying-polaris/"><meta property="og:site_name" content="Apache Polaris"><meta property="og:title" content="Deploying Polaris"><meta property="og:description" content="Here you can find the guides of how to deploy Polaris locally, as well as w [...]
Locally, Polaris can be deployed using both docker and local build. On the cloud, the following tutorials will deploy Polaris using docker environment."><meta property="og:locale" content="en_us"><meta property="og:type" content="website"><meta itemprop=name content="Deploying Polaris"><meta itemprop=description content="Here you can find the guides of how to deploy Polaris locally, as well as with all supported Cloud Providers: Amazon Web Services (AWS), Azure, and Google Cloud Platform (GCP).
Locally, Polaris can be deployed using both docker and local build. On the cloud, the following tutorials will deploy Polaris using docker environment."><meta itemprop=wordCount content="53"><meta name=twitter:card content="summary"><meta name=twitter:title content="Deploying Polaris"><meta name=twitter:description content="Here you can find the guides of how to deploy Polaris locally, as well as with all supported Cloud Providers: Amazon Web Services (AWS), Azure, and Google Cloud Platf [...]
-Locally, Polaris can be deployed using both docker and local build. On the cloud, the following tutorials will deploy Polaris using docker environment."><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css rel=stylesheet integrity="sha256-PXPPJ8EAm [...]
+Locally, Polaris can be deployed using both docker and local build. On the cloud, the following tutorials will deploy Polaris using docker environment."><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css rel=stylesheet integrity="sha256-PXPPJ8EAm [...]
<label for=m-in-devunreleased-check><a href=/in-dev/unreleased/ title="Apache Polaris Documentation (Unreleased)" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleased><span>Unreleased</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child active-path" id=m-in-devunreleasedgetting-started-li><input type=checkbox id=m-in-devunreleasedgetting-started-check checked>
<label for=m-in-devunreleasedgetting-started-check><a href=/in-dev/unreleased/getting-started/ title="Getting Started with Apache Polaris" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleasedgetting-started><span>Getting Started</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedquick-start-li><input type=checkbox id=m-in-devunreleasedgetting-star [...]
<label for=m-in-devunreleasedgetting-startedquick-start-check><a href=/in-dev/unreleased/getting-started/quick-start/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-in-devunreleasedgetting-startedquick-start><span>Quickstart</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedsetup-tools-li><input type=checkbox id=m-in-devunreleasedgetting-startedsetup-tools-check>
diff --git a/in-dev/unreleased/getting-started/deploying-polaris/index.xml b/in-dev/unreleased/getting-started/deploying-polaris/index.xml
index 52e538387f..ec37ad51a9 100644
--- a/in-dev/unreleased/getting-started/deploying-polaris/index.xml
+++ b/in-dev/unreleased/getting-started/deploying-polaris/index.xml
@@ -5,13 +5,13 @@
<ol>
<li><strong>Build Polaris</strong></li>
</ol>
-<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1</span><span><span style="color:#204a87">cd</span> ~/polaris
-</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">2</span><span>./gradlew <span style="color:#4e9a06">\
-</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">3</span><span> :polaris-server:assemble <span style="color:#4e9a06">\
-</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">4</span><span> :polaris-server:quarkusAppPartsBuild --rerun <span style="color:#4e9a06">\
-</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">5</span><span> :polaris-admin:assemble <span style="color:#4e9a06">\
-</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">6</span><span> :polaris-admin:quarkusAppPartsBuild --rerun <span style="color:#4e9a06">\
-</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">7</span><span> -Dquarkus.container-image.build<span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#204a87">true</span>
+<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span><span style="color:#204a87">cd</span> ~/polaris
+</span></span><span style="display:flex;"><span>./gradlew <span style="color:#4e9a06">\
+</span></span></span><span style="display:flex;"><span> :polaris-server:assemble <span style="color:#4e9a06">\
+</span></span></span><span style="display:flex;"><span> :polaris-server:quarkusAppPartsBuild --rerun <span style="color:#4e9a06">\
+</span></span></span><span style="display:flex;"><span> :polaris-admin:assemble <span style="color:#4e9a06">\
+</span></span></span><span style="display:flex;"><span> :polaris-admin:quarkusAppPartsBuild --rerun <span style="color:#4e9a06">\
+</span></span></span><span style="display:flex;"><span> -Dquarkus.container-image.build<span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#204a87">true</span>
</span></span></code></pre></div><ul>
<li><strong>For standalone</strong>: Omit the <code>-Dquarkus.container-image.tag</code> and <code>-Dquarkus.container-image.build</code> options if you do not need to build a Docker image.</li>
</ul>
diff --git a/in-dev/unreleased/getting-started/deploying-polaris/local-deploy/index.html b/in-dev/unreleased/getting-started/deploying-polaris/local-deploy/index.html
index 60934b3a05..e8f26d88a2 100644
--- a/in-dev/unreleased/getting-started/deploying-polaris/local-deploy/index.html
+++ b/in-dev/unreleased/getting-started/deploying-polaris/local-deploy/index.html
@@ -1,12 +1,12 @@
<!doctype html><html itemscope itemtype=http://schema.org/WebPage lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon.png sizes=100x100><link rel=icon type=image/png href=/favicons/android-ch [...]
Common Setup🔗 Before running Polaris, ensure you have completed the following setup steps:
-Build Polaris 1cd ~/polaris 2./gradlew \ 3 :polaris-server:assemble \ 4 :polaris-server:quarkusAppPartsBuild --rerun \ 5 :polaris-admin:assemble \ 6 :polaris-admin:quarkusAppPartsBuild --rerun \ 7 -Dquarkus.container-image.build=true For standalone: Omit the -Dquarkus.container-image.tag and -Dquarkus.container-image.build options if you do not need to build a Docker image. Running Polaris with Docker🔗 To start using Polaris in Docker and launch Polaris, which is packaged with a Postgres [...]
+Build Polaris cd ~/polaris ./gradlew \ :polaris-server:assemble \ :polaris-server:quarkusAppPartsBuild --rerun \ :polaris-admin:assemble \ :polaris-admin:quarkusAppPartsBuild --rerun \ -Dquarkus.container-image.build=true For standalone: Omit the -Dquarkus.container-image.tag and -Dquarkus.container-image.build options if you do not need to build a Docker image. Running Polaris with Docker🔗 To start using Polaris in Docker and launch Polaris, which is packaged with a Postgres instance, A [...]
Common Setup🔗 Before running Polaris, ensure you have completed the following setup steps:
-Build Polaris 1cd ~/polaris 2./gradlew \ 3 :polaris-server:assemble \ 4 :polaris-server:quarkusAppPartsBuild --rerun \ 5 :polaris-admin:assemble \ 6 :polaris-admin:quarkusAppPartsBuild --rerun \ 7 -Dquarkus.container-image.build=true For standalone: Omit the -Dquarkus.container-image.tag and -Dquarkus.container-image.build options if you do not need to build a Docker image. Running Polaris with Docker🔗 To start using Polaris in Docker and launch Polaris, which is packaged with a Postgres [...]
+Build Polaris cd ~/polaris ./gradlew \ :polaris-server:assemble \ :polaris-server:quarkusAppPartsBuild --rerun \ :polaris-admin:assemble \ :polaris-admin:quarkusAppPartsBuild --rerun \ -Dquarkus.container-image.build=true For standalone: Omit the -Dquarkus.container-image.tag and -Dquarkus.container-image.build options if you do not need to build a Docker image. Running Polaris with Docker🔗 To start using Polaris in Docker and launch Polaris, which is packaged with a Postgres instance, A [...]
Common Setup🔗 Before running Polaris, ensure you have completed the following setup steps:
-Build Polaris 1cd ~/polaris 2./gradlew \ 3 :polaris-server:assemble \ 4 :polaris-server:quarkusAppPartsBuild --rerun \ 5 :polaris-admin:assemble \ 6 :polaris-admin:quarkusAppPartsBuild --rerun \ 7 -Dquarkus.container-image.build=true For standalone: Omit the -Dquarkus.container-image.tag and -Dquarkus.container-image.build options if you do not need to build a Docker image. Running Polaris with Docker🔗 To start using Polaris in Docker and launch Polaris, which is packaged with a Postgres [...]
+Build Polaris cd ~/polaris ./gradlew \ :polaris-server:assemble \ :polaris-server:quarkusAppPartsBuild --rerun \ :polaris-admin:assemble \ :polaris-admin:quarkusAppPartsBuild --rerun \ -Dquarkus.container-image.build=true For standalone: Omit the -Dquarkus.container-image.tag and -Dquarkus.container-image.build options if you do not need to build a Docker image. Running Polaris with Docker🔗 To start using Polaris in Docker and launch Polaris, which is packaged with a Postgres instance, A [...]
Common Setup🔗 Before running Polaris, ensure you have completed the following setup steps:
-Build Polaris 1cd ~/polaris 2./gradlew \ 3 :polaris-server:assemble \ 4 :polaris-server:quarkusAppPartsBuild --rerun \ 5 :polaris-admin:assemble \ 6 :polaris-admin:quarkusAppPartsBuild --rerun \ 7 -Dquarkus.container-image.build=true For standalone: Omit the -Dquarkus.container-image.tag and -Dquarkus.container-image.build options if you do not need to build a Docker image. Running Polaris with Docker🔗 To start using Polaris in Docker and launch Polaris, which is packaged with a Postgres [...]
+Build Polaris cd ~/polaris ./gradlew \ :polaris-server:assemble \ :polaris-server:quarkusAppPartsBuild --rerun \ :polaris-admin:assemble \ :polaris-admin:quarkusAppPartsBuild --rerun \ -Dquarkus.container-image.build=true For standalone: Omit the -Dquarkus.container-image.tag and -Dquarkus.container-image.build options if you do not need to build a Docker image. Running Polaris with Docker🔗 To start using Polaris in Docker and launch Polaris, which is packaged with a Postgres instance, A [...]
<label for=m-in-devunreleased-check><a href=/in-dev/unreleased/ title="Apache Polaris Documentation (Unreleased)" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleased><span>Unreleased</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child active-path" id=m-in-devunreleasedgetting-started-li><input type=checkbox id=m-in-devunreleasedgetting-started-check checked>
<label for=m-in-devunreleasedgetting-started-check><a href=/in-dev/unreleased/getting-started/ title="Getting Started with Apache Polaris" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleasedgetting-started><span>Getting Started</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedquick-start-li><input type=checkbox id=m-in-devunreleasedgetting-star [...]
<label for=m-in-devunreleasedgetting-startedquick-start-check><a href=/in-dev/unreleased/getting-started/quick-start/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-in-devunreleasedgetting-startedquick-start><span>Quickstart</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedsetup-tools-li><input type=checkbox id=m-in-devunreleasedgetting-startedsetup-tools-check>
@@ -74,33 +74,33 @@ Build Polaris 1cd ~/polaris 2./gradlew \ 3 :polaris-server:assemble \ 4 :polaris
<a class=td-toc-title__link title="Top of page" href=#></a></div><nav id=TableOfContents><ul><li><a href=#common-setup>Common Setup</a></li><li><a href=#running-polaris-with-docker>Running Polaris with Docker</a></li><li><a href=#running-polaris-as-a-standalone-process>Running Polaris as a Standalone Process</a><ul><li><a href=#installing-apache-spark-and-trino-locally-for-testing>Installing Apache Spark and Trino Locally for Testing</a></li></ul></li><li><a href=#next-steps>Next Steps</ [...]
This content is unreleased and may change before the next Polaris release.
For stable user documentation, see the
-<a href=/releases/latest/>latest release docs</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/docs/>Documentation</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/>Developer Docs</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/getting-started/>Getting Started</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/getting-started/deploying-polaris/>Deploying Polaris</a></li><li class="brea [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span>./gradlew <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> :polaris-server:assemble <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> :polaris-server:quarkusAppPartsBuild --rerun <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span> :polaris-admin:assemble <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">6</span><span> :polaris-admin:quarkusAppPartsBuild --rerun <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">7</span><span> -Dquarkus.container-image.build<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#204a87>true</span>
-</span></span></code></pre></div><ul><li><strong>For standalone</strong>: Omit the <code>-Dquarkus.container-image.tag</code> and <code>-Dquarkus.container-image.build</code> options if you do not need to build a Docker image.</li></ul><h2 id=running-polaris-with-docker id=running-polaris-with-docker>Running Polaris with Docker<a class=heading-anchor href=#running-polaris-with-docker aria-label=Anchor>🔗</a></h2><p>To start using Polaris in Docker and launch Polaris, which is packaged wit [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#204a87>export</span> <span style=color:#000>QUARKUS_DATASOURCE_JDBC_URL</span><span style=color:#ce5c00;font-weight:700>=</span>jdbc:postgresql://postgres:5432/POLARIS
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span><span style=color:#204a87>export</span> <span style=color:#000>QUARKUS_DATASOURCE_USERNAME</span><span style=color:#ce5c00;font-weight:700>=</span>postgres
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span><span style=color:#204a87>export</span> <span style=color:#000>QUARKUS_DATASOURCE_PASSWORD</span><span style=color:#ce5c00;font-weight:700>=</span>postgres
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span><span style=color:#204a87>export</span> <span style=color:#000>CLIENT_ID</span><span style=color:#ce5c00;font-weight:700>=</span>root
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">6</span><span><span style=color:#204a87>export</span> <span style=color:#000>CLIENT_SECRET</span><span style=color:#ce5c00;font-weight:700>=</span>s3cr3t
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">7</span><span>docker compose -p polaris -f getting-started/assets/postgres/docker-compose-postgres.yml <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">8</span><span> -f getting-started/jdbc/docker-compose-bootstrap-db.yml <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">9</span><span> -f getting-started/jdbc/docker-compose.yml up -d
+<a href=/releases/latest/>latest release docs</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/docs/>Documentation</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/>Developer Docs</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/getting-started/>Getting Started</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/getting-started/deploying-polaris/>Deploying Polaris</a></li><li class="brea [...]
+</span></span><span style=display:flex><span>./gradlew <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> :polaris-server:assemble <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> :polaris-server:quarkusAppPartsBuild --rerun <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> :polaris-admin:assemble <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> :polaris-admin:quarkusAppPartsBuild --rerun <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -Dquarkus.container-image.build<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#204a87>true</span>
+</span></span></code></pre></div><ul><li><strong>For standalone</strong>: Omit the <code>-Dquarkus.container-image.tag</code> and <code>-Dquarkus.container-image.build</code> options if you do not need to build a Docker image.</li></ul><h2 id=running-polaris-with-docker id=running-polaris-with-docker>Running Polaris with Docker<a class=heading-anchor href=#running-polaris-with-docker aria-label=Anchor>🔗</a></h2><p>To start using Polaris in Docker and launch Polaris, which is packaged wit [...]
+</span></span><span style=display:flex><span><span style=color:#204a87>export</span> <span style=color:#000>QUARKUS_DATASOURCE_JDBC_URL</span><span style=color:#ce5c00;font-weight:700>=</span>jdbc:postgresql://postgres:5432/POLARIS
+</span></span><span style=display:flex><span><span style=color:#204a87>export</span> <span style=color:#000>QUARKUS_DATASOURCE_USERNAME</span><span style=color:#ce5c00;font-weight:700>=</span>postgres
+</span></span><span style=display:flex><span><span style=color:#204a87>export</span> <span style=color:#000>QUARKUS_DATASOURCE_PASSWORD</span><span style=color:#ce5c00;font-weight:700>=</span>postgres
+</span></span><span style=display:flex><span><span style=color:#204a87>export</span> <span style=color:#000>CLIENT_ID</span><span style=color:#ce5c00;font-weight:700>=</span>root
+</span></span><span style=display:flex><span><span style=color:#204a87>export</span> <span style=color:#000>CLIENT_SECRET</span><span style=color:#ce5c00;font-weight:700>=</span>s3cr3t
+</span></span><span style=display:flex><span>docker compose -p polaris -f getting-started/assets/postgres/docker-compose-postgres.yml <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -f getting-started/jdbc/docker-compose-bootstrap-db.yml <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -f getting-started/jdbc/docker-compose.yml up -d
</span></span></code></pre></div><p>You should see output for some time as Polaris, Spark, and Trino build and start up. Eventually, you won’t see any more logs and see some logs relating to Spark, resembling the following:</p><pre tabindex=0><code>spark-sql-1 | Spark Web UI available at http://8bc4de8ed854:4040
spark-sql-1 | Spark master: local[*], Application Id: local-1743745174604
spark-sql-1 | 25/04/04 05:39:38 WARN SparkSQLCLIDriver: WARNING: Directory for Hive history file: /home/spark does not exist. History will not be available during this session.
spark-sql-1 | 25/04/04 05:39:39 WARN RESTSessionCatalog: Iceberg REST client is missing the OAuth2 server URI configuration and defaults to http://polaris:8181/api/catalogv1/oauth/tokens. This automatic fallback will be removed in a future Iceberg release.It is recommended to configure the OAuth2 endpoint using the 'oauth2-server-uri' property to be prepared. This warning will disappear if the OAuth2 endpoint is explicitly configured. See https://github.com/apache/iceber [...]
-</code></pre><p>The Docker image pre-configures a sample catalog called <code>quickstart_catalog</code> that uses a local file system.</p><h2 id=running-polaris-as-a-standalone-process id=running-polaris-as-a-standalone-process>Running Polaris as a Standalone Process<a class=heading-anchor href=#running-polaris-as-a-standalone-process aria-label=Anchor>🔗</a></h2><p>You can also start Polaris through Gradle (packaged within the Polaris repository):</p><p>Run the following command to start [...]
+</code></pre><p>The Docker image pre-configures a sample catalog called <code>quickstart_catalog</code> that uses a local file system.</p><h2 id=running-polaris-as-a-standalone-process id=running-polaris-as-a-standalone-process>Running Polaris as a Standalone Process<a class=heading-anchor href=#running-polaris-as-a-standalone-process aria-label=Anchor>🔗</a></h2><p>You can also start Polaris through Gradle (packaged within the Polaris repository):</p><p>Run the following command to start [...]
</span></span></code></pre></div><p>You should see output for some time as Polaris builds and starts up. Eventually, you won’t see any more logs and should see messages that resemble the following:</p><pre tabindex=0><code>INFO [io.quarkus] [,] [,,,] (main) Apache Polaris Server <version> on JVM (powered by Quarkus <version>) started in 1.911s. Listening on: http://0.0.0.0:8181. Management interface listening on http://0.0.0.0:8182.
INFO [io.quarkus] [,] [,,,] (main) Profile prod activated.
INFO [io.quarkus] [,] [,,,] (main) Installed features: [...]
</code></pre><p>At this point, Polaris is running.</p><p>When using a Gradle-launched Polaris instance in this tutorial, we’ll launch an instance of Polaris that stores entities only in-memory. This means that any entities that you define will be destroyed when Polaris is shut down.
-For more information on how to configure Polaris for production usage, see the <a href=/in-dev/unreleased/configuration/configuring-polaris-for-production/>docs</a>.</p><p>When Polaris is run using the <code>./gradlew run</code> command, the root principal credentials are <code>root</code> and <code>s3cr3t</code> for the <code>CLIENT_ID</code> and <code>CLIENT_SECRET</code>, respectively.</p><h3 id=installing-apache-spark-and-trino-locally-for-testing id=installing-apache-spark-and-trino [...]
-</span></span></code></pre></div><h4 id=trino id=trino>Trino<a class=heading-anchor href=#trino aria-label=Anchor>🔗</a></h4><p>If you want to connect to Polaris with <a href=https://trino.io/>Trino</a>, it is recommended to set up a test instance of Trino using Docker. As in the <a href=https://polaris.apache.org/in-dev/unreleased/getting-started/install-dependencies/#docker>prerequisites</a>, make sure <a href=https://www.docker.com/>Docker</a> is installed first</p><div class=highlight [...]
+For more information on how to configure Polaris for production usage, see the <a href=/in-dev/unreleased/configuration/configuring-polaris-for-production/>docs</a>.</p><p>When Polaris is run using the <code>./gradlew run</code> command, the root principal credentials are <code>root</code> and <code>s3cr3t</code> for the <code>CLIENT_ID</code> and <code>CLIENT_SECRET</code>, respectively.</p><h3 id=installing-apache-spark-and-trino-locally-for-testing id=installing-apache-spark-and-trino [...]
+</span></span></code></pre></div><h4 id=trino id=trino>Trino<a class=heading-anchor href=#trino aria-label=Anchor>🔗</a></h4><p>If you want to connect to Polaris with <a href=https://trino.io/>Trino</a>, it is recommended to set up a test instance of Trino using Docker. As in the <a href=https://polaris.apache.org/in-dev/unreleased/getting-started/install-dependencies/#docker>prerequisites</a>, make sure <a href=https://www.docker.com/>Docker</a> is installed first</p><div class=highlight [...]
</span></span></code></pre></div><h2 id=next-steps id=next-steps>Next Steps<a class=heading-anchor href=#next-steps aria-label=Anchor>🔗</a></h2><p>Congrats, you now have a running instance of Polaris! For further information regarding how to use Polaris,
check out the <a href=https://polaris.apache.org/in-dev/unreleased/getting-started/creating-a-catalog/>Creating a Catalog</a> and
<a href=https://polaris.apache.org/in-dev/unreleased/getting-started/using-polaris/>Using Polaris</a> pages.</p></div></main></div></div><footer class="td-footer row d-print-none"><div class=container-fluid><div class="row mx-md-2"><div class="td-footer__left col-6 col-sm-4 order-sm-1"><ul class=td-footer__links-list><li class=td-footer__links-item data-bs-toggle=tooltip title=Slack aria-label=Slack><a target=_blank rel=noopener href=https://apache-polaris.slack.com/ aria-label=Slack><i [...]
\ No newline at end of file
diff --git a/in-dev/unreleased/getting-started/deploying-polaris/storage-tls/index.html b/in-dev/unreleased/getting-started/deploying-polaris/storage-tls/index.html
index 5b03d1c396..30402634ae 100644
--- a/in-dev/unreleased/getting-started/deploying-polaris/storage-tls/index.html
+++ b/in-dev/unreleased/getting-started/deploying-polaris/storage-tls/index.html
@@ -4,9 +4,9 @@ The example below assumes using a self-signed certificate for storage and docker
In this situation the JVM inside the Polaris Server will need to be configured with a custom trust store containing the self-signed certificate or its CA certificate.
The example below assumes using a self-signed certificate for storage and docker for running Polaris."><meta property="og:locale" content="en_us"><meta property="og:type" content="article"><meta property="article:section" content="in-dev"><meta itemprop=name content="Accessing Storage with TLS and Self-Signed Certificates"><meta itemprop=description content="Sometimes the storage targeted by the Polaris Server is expected to be accessed over TLS but the storage system’s certificate does [...]
In this situation the JVM inside the Polaris Server will need to be configured with a custom trust store containing the self-signed certificate or its CA certificate.
-The example below assumes using a self-signed certificate for storage and docker for running Polaris."><meta itemprop=wordCount content="225"><meta name=twitter:card content="summary"><meta name=twitter:title content="Accessing Storage with TLS and Self-Signed Certificates"><meta name=twitter:description content="Sometimes the storage targeted by the Polaris Server is expected to be accessed over TLS but the storage system’s certificate does not have a trust chain leading to a well-known [...]
+The example below assumes using a self-signed certificate for storage and docker for running Polaris."><meta itemprop=wordCount content="222"><meta name=twitter:card content="summary"><meta name=twitter:title content="Accessing Storage with TLS and Self-Signed Certificates"><meta name=twitter:description content="Sometimes the storage targeted by the Polaris Server is expected to be accessed over TLS but the storage system’s certificate does not have a trust chain leading to a well-known [...]
In this situation the JVM inside the Polaris Server will need to be configured with a custom trust store containing the self-signed certificate or its CA certificate.
-The example below assumes using a self-signed certificate for storage and docker for running Polaris."><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css rel=stylesheet integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=a [...]
+The example below assumes using a self-signed certificate for storage and docker for running Polaris."><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css rel=stylesheet integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=a [...]
<label for=m-in-devunreleased-check><a href=/in-dev/unreleased/ title="Apache Polaris Documentation (Unreleased)" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleased><span>Unreleased</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child active-path" id=m-in-devunreleasedgetting-started-li><input type=checkbox id=m-in-devunreleasedgetting-started-check checked>
<label for=m-in-devunreleasedgetting-started-check><a href=/in-dev/unreleased/getting-started/ title="Getting Started with Apache Polaris" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleasedgetting-started><span>Getting Started</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedquick-start-li><input type=checkbox id=m-in-devunreleasedgetting-star [...]
<label for=m-in-devunreleasedgetting-startedquick-start-check><a href=/in-dev/unreleased/getting-started/quick-start/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-in-devunreleasedgetting-startedquick-start><span>Quickstart</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedsetup-tools-li><input type=checkbox id=m-in-devunreleasedgetting-startedsetup-tools-check>
@@ -76,11 +76,11 @@ For stable user documentation, see the
<a href=/releases/latest/>latest release docs</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/docs/>Documentation</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/>Developer Docs</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/getting-started/>Getting Started</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/getting-started/deploying-polaris/>Deploying Polaris</a></li><li class="brea [...]
storage system’s certificate does not have a trust chain leading to a well-known root. Often
such a certificate is simply self-signed.</p><p>In this situation the JVM inside the Polaris Server will need to be configured with a custom
-trust store containing the self-signed certificate or its CA certificate.</p><p>The example below assumes using a self-signed certificate for storage and <code>docker</code> for running Polaris.</p><h1 id=creating-a-custom-trust-store id=creating-a-custom-trust-store>Creating a Custom Trust Store<a class=heading-anchor href=#creating-a-custom-trust-store aria-label=Anchor>🔗</a></h1><ul><li>Take an existing java trust store (with the usual root certificates) and make a local copy.</li><li [...]
+trust store containing the self-signed certificate or its CA certificate.</p><p>The example below assumes using a self-signed certificate for storage and <code>docker</code> for running Polaris.</p><h1 id=creating-a-custom-trust-store id=creating-a-custom-trust-store>Creating a Custom Trust Store<a class=heading-anchor href=#creating-a-custom-trust-store aria-label=Anchor>🔗</a></h1><ul><li>Take an existing java trust store (with the usual root certificates) and make a local copy.</li><li [...]
</span></span></code></pre></div><p>Here, <code>STORAGE_CERT.pem</code> is the file containing the storage system’s certificate; <code>cacerts</code> is the name of a custom
-trust store file to be used by Polaris.</p><h1 id=running-polaris-with-a-custom-trust-store id=running-polaris-with-a-custom-trust-store>Running Polaris with a Custom Trust Store<a class=heading-anchor href=#running-polaris-with-a-custom-trust-store aria-label=Anchor>🔗</a></h1><p>Map the location of the custom trust store to a local path inside the Polaris container and instruct the Polaris JVM to use it.</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-siz [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> -v /path/to/dir-containing-cacerts:/opt/tls <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> -e <span style=color:#000>JAVA_OPTS_APPEND</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>'-Djavax.net.ssl.trustStore=/opt/tls/cacerts'</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> apache/polaris:latest
+trust store file to be used by Polaris.</p><h1 id=running-polaris-with-a-custom-trust-store id=running-polaris-with-a-custom-trust-store>Running Polaris with a Custom Trust Store<a class=heading-anchor href=#running-polaris-with-a-custom-trust-store aria-label=Anchor>🔗</a></h1><p>Map the location of the custom trust store to a local path inside the Polaris container and instruct the Polaris JVM to use it.</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-siz [...]
+</span></span></span><span style=display:flex><span> -v /path/to/dir-containing-cacerts:/opt/tls <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -e <span style=color:#000>JAVA_OPTS_APPEND</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>'-Djavax.net.ssl.trustStore=/opt/tls/cacerts'</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> apache/polaris:latest
</span></span></code></pre></div><p>Of course, add other Polaris and/or docker options as appropriate for your environment.</p><p>After this, create a Polaris catalog as usual. Note that the storage <code>endpoint</code> property in the catalog probably needs
to use the <code>https</code> URI scheme.</p></div></main></div></div><footer class="td-footer row d-print-none"><div class=container-fluid><div class="row mx-md-2"><div class="td-footer__left col-6 col-sm-4 order-sm-1"><ul class=td-footer__links-list><li class=td-footer__links-item data-bs-toggle=tooltip title=Slack aria-label=Slack><a target=_blank rel=noopener href=https://apache-polaris.slack.com/ aria-label=Slack><i class="fa-regular fa-comment-dots"></i></a></li><li class=td-footer [...]
\ No newline at end of file
diff --git a/in-dev/unreleased/getting-started/index.html b/in-dev/unreleased/getting-started/index.html
index 8b0a7be772..6ae0a71f77 100644
--- a/in-dev/unreleased/getting-started/index.html
+++ b/in-dev/unreleased/getting-started/index.html
@@ -14,7 +14,7 @@ Setup Tools: Use infrastructure-as-code to manage Polaris configuration at scale
Quick Start Options🔗 Choose the method that best fits your needs:
Binary Distribution: Download and run the pre-built binary distribution. This is the fastest way to get started with Polaris.
Quickstart: Use Docker Compose to quickly start Polaris with a pre-configured setup. This is ideal for trying out Polaris without installing dependencies.
-Setup Tools: Use infrastructure-as-code to manage Polaris configuration at scale."><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css rel=stylesheet integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><script src [...]
+Setup Tools: Use infrastructure-as-code to manage Polaris configuration at scale."><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css rel=stylesheet integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><script src [...]
<label for=m-in-devunreleased-check><a href=/in-dev/unreleased/ title="Apache Polaris Documentation (Unreleased)" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleased><span>Unreleased</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child active-path" id=m-in-devunreleasedgetting-started-li><input type=checkbox id=m-in-devunreleasedgetting-started-check checked>
<label for=m-in-devunreleasedgetting-started-check><a href=/in-dev/unreleased/getting-started/ title="Getting Started with Apache Polaris" class="align-left ps-0 active td-sidebar-link td-sidebar-link__section" id=m-in-devunreleasedgetting-started><span class=td-sidebar-nav-active-item>Getting Started</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedquick-start-li><input type=ch [...]
<label for=m-in-devunreleasedgetting-startedquick-start-check><a href=/in-dev/unreleased/getting-started/quick-start/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-in-devunreleasedgetting-startedquick-start><span>Quickstart</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedsetup-tools-li><input type=checkbox id=m-in-devunreleasedgetting-startedsetup-tools-check>
diff --git a/in-dev/unreleased/getting-started/index.xml b/in-dev/unreleased/getting-started/index.xml
index f25fd1934a..8ee09e0a4c 100644
--- a/in-dev/unreleased/getting-started/index.xml
+++ b/in-dev/unreleased/getting-started/index.xml
@@ -12,11 +12,11 @@
<h2 id="running" id="running">Running<a class="heading-anchor" href="#running" aria-label="Anchor">🔗</a>
</h2>
<p>Download the <a href="https://polaris.apache.org/downloads/latest/">latest release</a> and extract the binary distribution:</p>
-<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1</span><span><span style="color:#000">POLARIS_VERSION</span><span style="color:#ce5c00 [...]
-</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">2</span><span>curl -Lf https://downloads.apache.org/polaris/<span style="color:#4e9a06">${</span><span style="color:#000">POLARIS_VERSION</span><span style="color:#4e9a06">}</span>/polaris-bin-<span style="color:#4e9a06">${</span><spa [...]
-</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">3</span><span><span style="color:#204a87">cd</span> polaris-bin-<span style="color:#4e9a06">${</span><span style="color:#000">POLARIS_VERSION</span><span style="color:#4e9a06">}</span>
+<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#000">POLARIS_VERSION</span><span style="color:#ce5c00;font-weight:bold">=</span>1.5.0
+</span></span><span style="display:flex;"><span>curl -Lf https://downloads.apache.org/polaris/<span style="color:#4e9a06">${</span><span style="color:#000">POLARIS_VERSION</span><span style="color:#4e9a06">}</span>/polaris-bin-<span style="color:#4e9a06">${</span><span style="color:#000">POLARIS_VERSION</span><span style="color:#4e9a06">}</span>.tgz <span style="color:#000;font-weight:bold" [...]
+</span></span><span style="display:flex;"><span><span style="color:#204a87">cd</span> polaris-bin-<span style="color:#4e9a06">${</span><span style="color:#000">POLARIS_VERSION</span><span style="color:#4e9a06">}</span>
</span></span></code></pre></div><p>Start the Polaris server:</p>
-<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1</span><span>bin/server
+<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>bin/server
</span></span></code></pre></div><p>The server will start and listen on http://localhost:8181 (main REST APIs) and http://localhost:8182 (management interface, for health checks and metrics).</p></description></item><item><title>Installing Dependencies</title><link>https://polaris.apache.org/in-dev/unreleased/getting-started/install-dependencies/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://polaris.apache.org/in-dev/unrel [...]
<h1 id="prerequisites" id="prerequisites">Prerequisites<a class="heading-anchor" href="#prerequisites" aria-label="Anchor">🔗</a>
</h1>
diff --git a/in-dev/unreleased/getting-started/install-dependencies/index.html b/in-dev/unreleased/getting-started/install-dependencies/index.html
index ef50c0fec1..ffc83f815b 100644
--- a/in-dev/unreleased/getting-started/install-dependencies/index.html
+++ b/in-dev/unreleased/getting-started/install-dependencies/index.html
@@ -2,7 +2,7 @@
Prerequisites🔗 This guide covers building Polaris, deploying it locally or via Docker, and interacting with it using the command-line interface and Apache Spark. Before proceeding with Polaris, be sure to satisfy the relevant prerequisites listed here."><meta property="og:url" content="https://polaris.apache.org/in-dev/unreleased/getting-started/install-dependencies/"><meta property="og:site_name" content="Apache Polaris"><meta property="og:title" content="Installing Dependencies"><meta [...]
Prerequisites🔗 This guide covers building Polaris, deploying it locally or via Docker, and interacting with it using the command-line interface and Apache Spark. Before proceeding with Polaris, be sure to satisfy the relevant prerequisites listed here."><meta property="og:locale" content="en_us"><meta property="og:type" content="article"><meta property="article:section" content="in-dev"><meta itemprop=name content="Installing Dependencies"><meta itemprop=description content="This guide s [...]
Prerequisites🔗 This guide covers building Polaris, deploying it locally or via Docker, and interacting with it using the command-line interface and Apache Spark. Before proceeding with Polaris, be sure to satisfy the relevant prerequisites listed here."><meta itemprop=wordCount content="500"><meta name=twitter:card content="summary"><meta name=twitter:title content="Installing Dependencies"><meta name=twitter:description content="This guide serves as an introduction to several key entiti [...]
-Prerequisites🔗 This guide covers building Polaris, deploying it locally or via Docker, and interacting with it using the command-line interface and Apache Spark. Before proceeding with Polaris, be sure to satisfy the relevant prerequisites listed here."><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27c1 [...]
+Prerequisites🔗 This guide covers building Polaris, deploying it locally or via Docker, and interacting with it using the command-line interface and Apache Spark. Before proceeding with Polaris, be sure to satisfy the relevant prerequisites listed here."><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27c1 [...]
<label for=m-in-devunreleased-check><a href=/in-dev/unreleased/ title="Apache Polaris Documentation (Unreleased)" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleased><span>Unreleased</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child active-path" id=m-in-devunreleasedgetting-started-li><input type=checkbox id=m-in-devunreleasedgetting-started-check checked>
<label for=m-in-devunreleasedgetting-started-check><a href=/in-dev/unreleased/getting-started/ title="Getting Started with Apache Polaris" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleasedgetting-started><span>Getting Started</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedquick-start-li><input type=checkbox id=m-in-devunreleasedgetting-star [...]
<label for=m-in-devunreleasedgetting-startedquick-start-check><a href=/in-dev/unreleased/getting-started/quick-start/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-in-devunreleasedgetting-startedquick-start><span>Quickstart</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedsetup-tools-li><input type=checkbox id=m-in-devunreleasedgetting-startedsetup-tools-check>
@@ -70,27 +70,27 @@ Prerequisites🔗 This guide covers building Polaris, deploying it locally or vi
<a class=td-toc-title__link title="Top of page" href=#></a></div><nav id=TableOfContents><ul><li><a href=#git>Git</a></li><li><a href=#docker>Docker</a><ul><li><a href=#docker-on-macos>Docker on MacOS</a></li><li><a href=#docker-on-amazon-linux>Docker on Amazon Linux</a></li><li><a href=#confirm-docker-installation>Confirm Docker Installation</a></li></ul></li><li><a href=#java>Java</a></li><li><a href=#jq>jq</a></li></ul></nav></div></aside><main class="col-12 col-md-9 col-xl-8 ps-md-5" [...]
This content is unreleased and may change before the next Polaris release.
For stable user documentation, see the
-<a href=/releases/latest/>latest release docs</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/docs/>Documentation</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/>Developer Docs</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/getting-started/>Getting Started</a></li><li class="breadcrumb-item active" aria-current=page>Installing Dependencies</li></ol></nav><div class=td-content><h1>Installing [...]
-</span></span></code></pre></div><p>Please follow instructions from the <a href=https://git-scm.com/book/en/v2/Getting-Started-Installing-Git>Git Documentation</a> for instructions on installing Git on other platforms.</p><p>Then, use git to clone the Polaris repo:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span style="whi [...]
-</span></span></code></pre></div><h2 id=docker id=docker>Docker<a class=heading-anchor href=#docker aria-label=Anchor>🔗</a></h2><p>It is recommended to deploy Polaris inside <a href=https://www.docker.com/>Docker</a> for the Quickstart workflow. Instructions for deploying the Quickstart workflow on the supported Cloud Providers (AWS, Azure, GCP) will be provided only with Docker. However, non-Docker deployment instructions for local deployments can also be followed on Cloud Providers.</p [...]
-</span></span></code></pre></div><p>There could be a <a href=https://github.com/apache/polaris/pull/971>Docker permission issues</a> related to seccomp configuration. To resolve these issues, set the <code>seccomp</code> profile to “unconfined” when running a container. For example:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style [...]
-</span></span></code></pre></div><p>Note: Setting the seccomp profile to “unconfined” disables the default system call filtering, which may pose security risks. Use this configuration with caution, especially in production environments.</p><h3 id=docker-on-amazon-linux id=docker-on-amazon-linux>Docker on Amazon Linux<a class=heading-anchor href=#docker-on-amazon-linux aria-label=Anchor>🔗</a></h3><p>Docker can be installed using a modification to the CentOS instructions. For e [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span><span style=color:#8f5902;font-style:italic># Remove old version</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span>sudo dnf remove -y docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span><span style=color:#8f5902;font-style:italic># Install dnf plugin</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span>sudo dnf -y install dnf-plugins-core
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span><span style=color:#8f5902;font-style:italic># Add CentOS repository</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span>sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span><span style=color:#8f5902;font-style:italic># Adjust release server version in the path as it will not match with Amazon Linux 2023</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span>sudo sed -i <span style=color:#4e9a06>'s/$releasever/9/g'</span> /etc/yum.repos.d/docker-ce.repo
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">10</span><span><span style=color:#8f5902;font-style:italic># Install as usual</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">11</span><span>sudo dnf -y install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
-</span></span></code></pre></div><h3 id=confirm-docker-installation id=confirm-docker-installation>Confirm Docker Installation<a class=heading-anchor href=#confirm-docker-installation aria-label=Anchor>🔗</a></h3><p>Once installed, make sure that both Docker and the Docker Compose plugin are installed:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><spa [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span>docker compose version
-</span></span></code></pre></div><p>Also make sure Docker is running and is able to run a sample Docker container:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span>docker run hello-world
-</span></span></code></pre></div><h2 id=java id=java>Java<a class=heading-anchor href=#java aria-label=Anchor>🔗</a></h2><p>If you plan to build Polaris from source yourself or using this tutorial’s instructions on a Cloud Provider, you will need to satisfy a few prerequisites first.</p><p>Polaris is built using <a href=https://gradle.org/>gradle</a> and is compatible with Java 21. We recommend the use of <a href=https://www.jenv.be/>jenv</a> to manage multiple Java versions. For ex [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span>brew install openjdk@21 jenv
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span>jenv add <span style=color:#204a87;font-weight:700>$(</span>brew --prefix openjdk@21<span style=color:#204a87;font-weight:700>)</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span>jenv <span style=color:#204a87>local</span> <span style=color:#0000cf;font-weight:700>21</span>
-</span></span></code></pre></div><p>Ensure that <code>java --version</code> and <code>javac</code> both return non-zero responses.</p><h2 id=jq id=jq>jq<a class=heading-anchor href=#jq aria-label=Anchor>🔗</a></h2><p>Most Polaris Quickstart scripts require <a href=(https://jqlang.org/download/)>jq</a>. You can install jq using <a href=https://brew.sh/>homebrew</a>:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text- [...]
+<a href=/releases/latest/>latest release docs</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/docs/>Documentation</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/>Developer Docs</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/getting-started/>Getting Started</a></li><li class="breadcrumb-item active" aria-current=page>Installing Dependencies</li></ol></nav><div class=td-content><h1>Installing [...]
+</span></span></code></pre></div><p>Please follow instructions from the <a href=https://git-scm.com/book/en/v2/Getting-Started-Installing-Git>Git Documentation</a> for instructions on installing Git on other platforms.</p><p>Then, use git to clone the Polaris repo:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span>git clone [...]
+</span></span></code></pre></div><h2 id=docker id=docker>Docker<a class=heading-anchor href=#docker aria-label=Anchor>🔗</a></h2><p>It is recommended to deploy Polaris inside <a href=https://www.docker.com/>Docker</a> for the Quickstart workflow. Instructions for deploying the Quickstart workflow on the supported Cloud Providers (AWS, Azure, GCP) will be provided only with Docker. However, non-Docker deployment instructions for local deployments can also be followed on Cloud Providers.</p [...]
+</span></span></code></pre></div><p>There could be a <a href=https://github.com/apache/polaris/pull/971>Docker permission issues</a> related to seccomp configuration. To resolve these issues, set the <code>seccomp</code> profile to “unconfined” when running a container. For example:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style [...]
+</span></span></code></pre></div><p>Note: Setting the seccomp profile to “unconfined” disables the default system call filtering, which may pose security risks. Use this configuration with caution, especially in production environments.</p><h3 id=docker-on-amazon-linux id=docker-on-amazon-linux>Docker on Amazon Linux<a class=heading-anchor href=#docker-on-amazon-linux aria-label=Anchor>🔗</a></h3><p>Docker can be installed using a modification to the CentOS instructions. For e [...]
+</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># Remove old version</span>
+</span></span><span style=display:flex><span>sudo dnf remove -y docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
+</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># Install dnf plugin</span>
+</span></span><span style=display:flex><span>sudo dnf -y install dnf-plugins-core
+</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># Add CentOS repository</span>
+</span></span><span style=display:flex><span>sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
+</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># Adjust release server version in the path as it will not match with Amazon Linux 2023</span>
+</span></span><span style=display:flex><span>sudo sed -i <span style=color:#4e9a06>'s/$releasever/9/g'</span> /etc/yum.repos.d/docker-ce.repo
+</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># Install as usual</span>
+</span></span><span style=display:flex><span>sudo dnf -y install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
+</span></span></code></pre></div><h3 id=confirm-docker-installation id=confirm-docker-installation>Confirm Docker Installation<a class=heading-anchor href=#confirm-docker-installation aria-label=Anchor>🔗</a></h3><p>Once installed, make sure that both Docker and the Docker Compose plugin are installed:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><spa [...]
+</span></span><span style=display:flex><span>docker compose version
+</span></span></code></pre></div><p>Also make sure Docker is running and is able to run a sample Docker container:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span>docker run hello-world
+</span></span></code></pre></div><h2 id=java id=java>Java<a class=heading-anchor href=#java aria-label=Anchor>🔗</a></h2><p>If you plan to build Polaris from source yourself or using this tutorial’s instructions on a Cloud Provider, you will need to satisfy a few prerequisites first.</p><p>Polaris is built using <a href=https://gradle.org/>gradle</a> and is compatible with Java 21. We recommend the use of <a href=https://www.jenv.be/>jenv</a> to manage multiple Java versions. For ex [...]
+</span></span><span style=display:flex><span>brew install openjdk@21 jenv
+</span></span><span style=display:flex><span>jenv add <span style=color:#204a87;font-weight:700>$(</span>brew --prefix openjdk@21<span style=color:#204a87;font-weight:700>)</span>
+</span></span><span style=display:flex><span>jenv <span style=color:#204a87>local</span> <span style=color:#0000cf;font-weight:700>21</span>
+</span></span></code></pre></div><p>Ensure that <code>java --version</code> and <code>javac</code> both return non-zero responses.</p><h2 id=jq id=jq>jq<a class=heading-anchor href=#jq aria-label=Anchor>🔗</a></h2><p>Most Polaris Quickstart scripts require <a href=(https://jqlang.org/download/)>jq</a>. You can install jq using <a href=https://brew.sh/>homebrew</a>:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text- [...]
</span></span></code></pre></div></div></main></div></div><footer class="td-footer row d-print-none"><div class=container-fluid><div class="row mx-md-2"><div class="td-footer__left col-6 col-sm-4 order-sm-1"><ul class=td-footer__links-list><li class=td-footer__links-item data-bs-toggle=tooltip title=Slack aria-label=Slack><a target=_blank rel=noopener href=https://apache-polaris.slack.com/ aria-label=Slack><i class="fa-regular fa-comment-dots"></i></a></li><li class=td-footer__links-item [...]
\ No newline at end of file
diff --git a/in-dev/unreleased/getting-started/quick-start/index.html b/in-dev/unreleased/getting-started/quick-start/index.html
index c7ad424512..4e75c2714b 100644
--- a/in-dev/unreleased/getting-started/quick-start/index.html
+++ b/in-dev/unreleased/getting-started/quick-start/index.html
@@ -2,7 +2,7 @@
This setup is not intended for production use."><meta property="og:url" content="https://polaris.apache.org/in-dev/unreleased/getting-started/quick-start/"><meta property="og:site_name" content="Apache Polaris"><meta property="og:title" content="Quickstart"><meta property="og:description" content="Use the Quickstart guide for running Polaris locally with Docker Compose: prerequisites, the one-liner command, default catalog and principal, service URLs, and suggested next steps.
This setup is not intended for production use."><meta property="og:locale" content="en_us"><meta property="og:type" content="article"><meta property="article:section" content="in-dev"><meta itemprop=name content="Quickstart"><meta itemprop=description content="Use the Quickstart guide for running Polaris locally with Docker Compose: prerequisites, the one-liner command, default catalog and principal, service URLs, and suggested next steps.
This setup is not intended for production use."><meta itemprop=wordCount content="33"><meta name=twitter:card content="summary"><meta name=twitter:title content="Quickstart"><meta name=twitter:description content="Use the Quickstart guide for running Polaris locally with Docker Compose: prerequisites, the one-liner command, default catalog and principal, service URLs, and suggested next steps.
-This setup is not intended for production use."><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css rel=stylesheet integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><script src=/jquery-3.7.1.min_1232160679860847 [...]
+This setup is not intended for production use."><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css rel=stylesheet integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><script src=/jquery-3.7.1.min_1232160679860847 [...]
<label for=m-in-devunreleased-check><a href=/in-dev/unreleased/ title="Apache Polaris Documentation (Unreleased)" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleased><span>Unreleased</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child active-path" id=m-in-devunreleasedgetting-started-li><input type=checkbox id=m-in-devunreleasedgetting-started-check checked>
<label for=m-in-devunreleasedgetting-started-check><a href=/in-dev/unreleased/getting-started/ title="Getting Started with Apache Polaris" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleasedgetting-started><span>Getting Started</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child active-path" id=m-in-devunreleasedgetting-startedquick-start-li><input type=checkbox id=m-in-devunreleased [...]
<label for=m-in-devunreleasedgetting-startedquick-start-check><a href=/in-dev/unreleased/getting-started/quick-start/ class="align-left ps-0 active td-sidebar-link td-sidebar-link__page" id=m-in-devunreleasedgetting-startedquick-start><span class=td-sidebar-nav-active-item>Quickstart</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedsetup-tools-li><input type=checkbox id=m-in-devunreleasedgetting-sta [...]
diff --git a/in-dev/unreleased/getting-started/setup-tools/index.html b/in-dev/unreleased/getting-started/setup-tools/index.html
index 17b31c77b5..8227b6610e 100644
--- a/in-dev/unreleased/getting-started/setup-tools/index.html
+++ b/in-dev/unreleased/getting-started/setup-tools/index.html
@@ -4,9 +4,9 @@ Exporting Your Configuration🔗 If you already have an Apache Polaris environme
This command supports bootstrapping new environments and exporting existing configurations for reuse or version control.
Exporting Your Configuration🔗 If you already have an Apache Polaris environment, you can export its current state to a YAML file using the export subcommand:"><meta property="og:locale" content="en_us"><meta property="og:type" content="article"><meta property="article:section" content="in-dev"><meta itemprop=name content="Setup Tools"><meta itemprop=description content="This guide describes how to use the setup command to manage Apache Polaris configuration using an infrastructure-as-cod [...]
This command supports bootstrapping new environments and exporting existing configurations for reuse or version control.
-Exporting Your Configuration🔗 If you already have an Apache Polaris environment, you can export its current state to a YAML file using the export subcommand:"><meta itemprop=wordCount content="358"><meta name=twitter:card content="summary"><meta name=twitter:title content="Setup Tools"><meta name=twitter:description content="This guide describes how to use the setup command to manage Apache Polaris configuration using an infrastructure-as-code approach. Define your Polaris configuration [...]
+Exporting Your Configuration🔗 If you already have an Apache Polaris environment, you can export its current state to a YAML file using the export subcommand:"><meta itemprop=wordCount content="338"><meta name=twitter:card content="summary"><meta name=twitter:title content="Setup Tools"><meta name=twitter:description content="This guide describes how to use the setup command to manage Apache Polaris configuration using an infrastructure-as-code approach. Define your Polaris configuration [...]
This command supports bootstrapping new environments and exporting existing configurations for reuse or version control.
-Exporting Your Configuration🔗 If you already have an Apache Polaris environment, you can export its current state to a YAML file using the export subcommand:"><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css rel=stylesheet integrity="sha256-PXP [...]
+Exporting Your Configuration🔗 If you already have an Apache Polaris environment, you can export its current state to a YAML file using the export subcommand:"><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css rel=stylesheet integrity="sha256-PXP [...]
<label for=m-in-devunreleased-check><a href=/in-dev/unreleased/ title="Apache Polaris Documentation (Unreleased)" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleased><span>Unreleased</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child active-path" id=m-in-devunreleasedgetting-started-li><input type=checkbox id=m-in-devunreleasedgetting-started-check checked>
<label for=m-in-devunreleasedgetting-started-check><a href=/in-dev/unreleased/getting-started/ title="Getting Started with Apache Polaris" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleasedgetting-started><span>Getting Started</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedquick-start-li><input type=checkbox id=m-in-devunreleasedgetting-star [...]
<label for=m-in-devunreleasedgetting-startedquick-start-check><a href=/in-dev/unreleased/getting-started/quick-start/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-in-devunreleasedgetting-startedquick-start><span>Quickstart</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child active-path" id=m-in-devunreleasedgetting-startedsetup-tools-li><input type=checkbox id=m-in-devunreleasedgetting-startedsetup-tools-check checked>
@@ -74,36 +74,36 @@ Exporting Your Configuration🔗 If you already have an Apache Polaris environme
<a class=td-toc-title__link title="Top of page" href=#></a></div><nav id=TableOfContents><ul><li><a href=#exporting-your-configuration>Exporting Your Configuration</a></li><li><a href=#applying-a-configuration>Applying a Configuration</a><ul><li><a href=#example-configuration>Example Configuration</a></li><li><a href=#applying-the-setup>Applying the Setup</a></li></ul></li><li><a href=#known-limitations>Known Limitations</a></li></ul></nav></div></aside><main class="col-12 col-md-9 col-x [...]
This content is unreleased and may change before the next Polaris release.
For stable user documentation, see the
-<a href=/releases/latest/>latest release docs</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/docs/>Documentation</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/>Developer Docs</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/getting-started/>Getting Started</a></li><li class="breadcrumb-item active" aria-current=page>Setup Tools</li></ol></nav><div class=td-content><h1>Setup Tools</h1><header [...]
-</span></span></code></pre></div><p>This generates a readable YAML file containing principals, principal roles, catalogs, and their associated namespaces and catalog roles.</p><h2 id=applying-a-configuration id=applying-a-configuration>Applying a Configuration<a class=heading-anchor href=#applying-a-configuration aria-label=Anchor>🔗</a></h2><p>Use the <code>apply</code> subcommand to bootstrap a new environment or extend an existing one. The command reads your YAML file and performs the [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span><span style=color:#8f5902;font-style:italic># Global Entities</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span><span style=color:#8f5902;font-style:italic># ==================================</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span><span style=color:#204a87;font-weight:700>principals</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>quickstart_user</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>roles</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span><span style=color:#f8f8f8> </span>- <span style=color:#000>quickstart_user_role</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span><span style=color:#204a87;font-weight:700>principal_roles</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">10</span><span><span style=color:#f8f8f8> </span>- <span style=color:#000>quickstart_user_role</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">11</span><span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">12</span><span><span style=color:#8f5902;font-style:italic># ==================================</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">13</span><span><span style=color:#8f5902;font-style:italic># Catalog-Specific Entities</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">14</span><span><span style=color:#8f5902;font-style:italic># ==================================</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">15</span><span><span style=color:#204a87;font-weight:700>catalogs</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">16</span><span><span style=color:#f8f8f8> </span>- <span style=color:#204a87;font-weight:700>name</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"quickstart_catalog"</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">17</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>storage_type</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"file"</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">18</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>default_base_location</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"file:///var/tmp/quickstart_catalog/"</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">19</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>allowed_locations</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">20</span><span><span style=color:#f8f8f8> </span>- <span style=color:#4e9a06>"file:///var/tmp/quickstart_catalog/"</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">21</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>roles</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">22</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>quickstart_catalog_role</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">23</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>assign_to</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">24</span><span><span style=color:#f8f8f8> </span>- <span style=color:#000>quickstart_user_role</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">25</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>privileges</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">26</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>catalog</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">27</span><span><span style=color:#f8f8f8> </span>- <span style=color:#000>CATALOG_MANAGE_CONTENT</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">28</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>namespaces</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">29</span><span><span style=color:#f8f8f8> </span>- <span style=color:#000>dev_namespace</span><span style=color:#f8f8f8>
-</span></span></span></code></pre></div><h3 id=applying-the-setup id=applying-the-setup>Applying the Setup<a class=heading-anchor href=#applying-the-setup aria-label=Anchor>🔗</a></h3><p>Before making any changes, you can preview what will be executed using the <code>--dry-run</code> flag:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display [...]
-</span></span></code></pre></div><p>Once satisfied, run the command to apply the changes:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span>polaris setup apply site/content/guides/assets/polaris/simple [...]
+<a href=/releases/latest/>latest release docs</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/docs/>Documentation</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/>Developer Docs</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/getting-started/>Getting Started</a></li><li class="breadcrumb-item active" aria-current=page>Setup Tools</li></ol></nav><div class=td-content><h1>Setup Tools</h1><header [...]
+</span></span></code></pre></div><p>This generates a readable YAML file containing principals, principal roles, catalogs, and their associated namespaces and catalog roles.</p><h2 id=applying-a-configuration id=applying-a-configuration>Applying a Configuration<a class=heading-anchor href=#applying-a-configuration aria-label=Anchor>🔗</a></h2><p>Use the <code>apply</code> subcommand to bootstrap a new environment or extend an existing one. The command reads your YAML file and performs the [...]
+</span></span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># Global Entities</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># ==================================</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>principals</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>quickstart_user</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>roles</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span>- <span style=color:#000>quickstart_user_role</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>principal_roles</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span>- <span style=color:#000>quickstart_user_role</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># ==================================</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># Catalog-Specific Entities</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># ==================================</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>catalogs</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span>- <span style=color:#204a87;font-weight:700>name</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"quickstart_catalog"</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>storage_type</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"file"</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>default_base_location</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"file:///var/tmp/quickstart_catalog/"</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>allowed_locations</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span>- <span style=color:#4e9a06>"file:///var/tmp/quickstart_catalog/"</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>roles</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>quickstart_catalog_role</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>assign_to</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span>- <span style=color:#000>quickstart_user_role</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>privileges</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>catalog</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span>- <span style=color:#000>CATALOG_MANAGE_CONTENT</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>namespaces</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span>- <span style=color:#000>dev_namespace</span><span style=color:#f8f8f8>
+</span></span></span></code></pre></div><h3 id=applying-the-setup id=applying-the-setup>Applying the Setup<a class=heading-anchor href=#applying-the-setup aria-label=Anchor>🔗</a></h3><p>Before making any changes, you can preview what will be executed using the <code>--dry-run</code> flag:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display [...]
+</span></span></code></pre></div><p>Once satisfied, run the command to apply the changes:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span>polaris setup apply site/content/guides/assets/polaris/simple-setup-config.yaml
</span></span></code></pre></div><h2 id=known-limitations id=known-limitations>Known Limitations<a class=heading-anchor href=#known-limitations aria-label=Anchor>🔗</a></h2><p>The current implementation focuses on simplifying initial setup, with a few limitations to be aware of:</p><ul><li><strong>Non-declarative updates</strong>: The command is create-only. If an entity already exists, it will be skipped rather than updated. There is no state reconciliation yet.</li><li><strong>Policy at [...]
\ No newline at end of file
diff --git a/in-dev/unreleased/getting-started/using-polaris/index.html b/in-dev/unreleased/getting-started/using-polaris/index.html
index 99237bc132..0e628e9be1 100644
--- a/in-dev/unreleased/getting-started/using-polaris/index.html
+++ b/in-dev/unreleased/getting-started/using-polaris/index.html
@@ -1,12 +1,16 @@
<!doctype html><html itemscope itemtype=http://schema.org/WebPage lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><link rel=alternate type=application/rss+xml href=https://polaris.apache.org/in-dev/unreleased/getting-started/using-polaris/index.xml><meta name=robots content="index, follow"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon.png sizes [...]
-1export CLIENT_ID=YOUR_CLIENT_ID 2export CLIENT_SECRET=YOUR_CLIENT_SECRET Refer to the Creating a Catalog page for instructions on defining a catalog for your specific storage type. The following examples assume the catalog’s name is quickstart_catalog.
-In Polaris, the catalog is the top-level entity that objects like tables and views are organized under."><meta property="og:url" content="https://polaris.apache.org/in-dev/unreleased/getting-started/using-polaris/"><meta property="og:site_name" content="Apache Polaris"><meta property="og:title" content="Using Polaris"><meta property="og:description" content="Setup🔗 Ensure your CLIENT_ID & CLIENT_SECRET variables are already defined, as they were required for starting the Polaris server earlier.
-1export CLIENT_ID=YOUR_CLIENT_ID 2export CLIENT_SECRET=YOUR_CLIENT_SECRET Refer to the Creating a Catalog page for instructions on defining a catalog for your specific storage type. The following examples assume the catalog’s name is quickstart_catalog.
-In Polaris, the catalog is the top-level entity that objects like tables and views are organized under."><meta property="og:locale" content="en_us"><meta property="og:type" content="website"><meta itemprop=name content="Using Polaris"><meta itemprop=description content="Setup🔗 Ensure your CLIENT_ID & CLIENT_SECRET variables are already defined, as they were required for starting the Polaris server earlier.
-1export CLIENT_ID=YOUR_CLIENT_ID 2export CLIENT_SECRET=YOUR_CLIENT_SECRET Refer to the Creating a Catalog page for instructions on defining a catalog for your specific storage type. The following examples assume the catalog’s name is quickstart_catalog.
-In Polaris, the catalog is the top-level entity that objects like tables and views are organized under."><meta itemprop=wordCount content="1395"><meta name=twitter:card content="summary"><meta name=twitter:title content="Using Polaris"><meta name=twitter:description content="Setup🔗 Ensure your CLIENT_ID & CLIENT_SECRET variables are already defined, as they were required for starting the Polaris server earlier.
-1export CLIENT_ID=YOUR_CLIENT_ID 2export CLIENT_SECRET=YOUR_CLIENT_SECRET Refer to the Creating a Catalog page for instructions on defining a catalog for your specific storage type. The following examples assume the catalog’s name is quickstart_catalog.
-In Polaris, the catalog is the top-level entity that objects like tables and views are organized under."><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css rel=stylesheet integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin [...]
+export CLIENT_ID=YOUR_CLIENT_ID export CLIENT_SECRET=YOUR_CLIENT_SECRET Refer to the Creating a Catalog page for instructions on defining a catalog for your specific storage type. The following examples assume the catalog’s name is quickstart_catalog.
+In Polaris, the catalog is the top-level entity that objects like tables and views are organized under.
+The DEFAULT_BASE_LOCATION value you provided at catalog creation time will be the default location that objects in this catalog should be stored in."><meta property="og:url" content="https://polaris.apache.org/in-dev/unreleased/getting-started/using-polaris/"><meta property="og:site_name" content="Apache Polaris"><meta property="og:title" content="Using Polaris"><meta property="og:description" content="Setup🔗 Ensure your CLIENT_ID & CLIENT_SECRET variables are already defined, as they we [...]
+export CLIENT_ID=YOUR_CLIENT_ID export CLIENT_SECRET=YOUR_CLIENT_SECRET Refer to the Creating a Catalog page for instructions on defining a catalog for your specific storage type. The following examples assume the catalog’s name is quickstart_catalog.
+In Polaris, the catalog is the top-level entity that objects like tables and views are organized under.
+The DEFAULT_BASE_LOCATION value you provided at catalog creation time will be the default location that objects in this catalog should be stored in."><meta property="og:locale" content="en_us"><meta property="og:type" content="website"><meta itemprop=name content="Using Polaris"><meta itemprop=description content="Setup🔗 Ensure your CLIENT_ID & CLIENT_SECRET variables are already defined, as they were required for starting the Polaris server earlier.
+export CLIENT_ID=YOUR_CLIENT_ID export CLIENT_SECRET=YOUR_CLIENT_SECRET Refer to the Creating a Catalog page for instructions on defining a catalog for your specific storage type. The following examples assume the catalog’s name is quickstart_catalog.
+In Polaris, the catalog is the top-level entity that objects like tables and views are organized under.
+The DEFAULT_BASE_LOCATION value you provided at catalog creation time will be the default location that objects in this catalog should be stored in."><meta itemprop=wordCount content="1312"><meta name=twitter:card content="summary"><meta name=twitter:title content="Using Polaris"><meta name=twitter:description content="Setup🔗 Ensure your CLIENT_ID & CLIENT_SECRET variables are already defined, as they were required for starting the Polaris server earlier.
+export CLIENT_ID=YOUR_CLIENT_ID export CLIENT_SECRET=YOUR_CLIENT_SECRET Refer to the Creating a Catalog page for instructions on defining a catalog for your specific storage type. The following examples assume the catalog’s name is quickstart_catalog.
+In Polaris, the catalog is the top-level entity that objects like tables and views are organized under.
+The DEFAULT_BASE_LOCATION value you provided at catalog creation time will be the default location that objects in this catalog should be stored in."><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css rel=stylesheet integrity="sha256-PXPPJ8EAmx3J [...]
<label for=m-in-devunreleased-check><a href=/in-dev/unreleased/ title="Apache Polaris Documentation (Unreleased)" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleased><span>Unreleased</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child active-path" id=m-in-devunreleasedgetting-started-li><input type=checkbox id=m-in-devunreleasedgetting-started-check checked>
<label for=m-in-devunreleasedgetting-started-check><a href=/in-dev/unreleased/getting-started/ title="Getting Started with Apache Polaris" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleasedgetting-started><span>Getting Started</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedquick-start-li><input type=checkbox id=m-in-devunreleasedgetting-star [...]
<label for=m-in-devunreleasedgetting-startedquick-start-check><a href=/in-dev/unreleased/getting-started/quick-start/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-in-devunreleasedgetting-startedquick-start><span>Quickstart</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedsetup-tools-li><input type=checkbox id=m-in-devunreleasedgetting-startedsetup-tools-check>
@@ -74,81 +78,81 @@ In Polaris, the catalog is the top-level entity that objects like tables and vie
<a class=td-toc-title__link title="Top of page" href=#></a></div><nav id=TableOfContents><ul><li><a href=#setup>Setup</a><ul><li><a href=#creating-a-principal-and-assigning-it-privileges>Creating a Principal and Assigning it Privileges</a></li></ul></li><li><a href=#using-iceberg--polaris>Using Iceberg & Polaris</a><ul><li><a href=#connecting-with-spark>Connecting with Spark</a></li><li><a href=#connecting-with-trino>Connecting with Trino</a></li><li><a href=#connecting-with-pyiceberg>Co [...]
This content is unreleased and may change before the next Polaris release.
For stable user documentation, see the
-<a href=/releases/latest/>latest release docs</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/docs/>Documentation</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/>Developer Docs</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/getting-started/>Getting Started</a></li><li class="breadcrumb-item active" aria-current=page>Using Polaris</li></ol></nav><div class=td-content><h1>Using Polaris</h1><he [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#204a87>export</span> <span style=color:#000>CLIENT_SECRET</span><span style=color:#ce5c00;font-weight:700>=</span>YOUR_CLIENT_SECRET
+<a href=/releases/latest/>latest release docs</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/docs/>Documentation</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/>Developer Docs</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/getting-started/>Getting Started</a></li><li class="breadcrumb-item active" aria-current=page>Using Polaris</li></ol></nav><div class=td-content><h1>Using Polaris</h1><he [...]
+</span></span><span style=display:flex><span><span style=color:#204a87>export</span> <span style=color:#000>CLIENT_SECRET</span><span style=color:#ce5c00;font-weight:700>=</span>YOUR_CLIENT_SECRET
</span></span></code></pre></div><p>Refer to the <a href=https://polaris.apache.org/in-dev/unreleased/getting-started/creating-a-catalog/>Creating a Catalog</a> page for instructions on defining a
catalog for your specific storage type. The following examples assume the catalog’s name is <code>quickstart_catalog</code>.</p><p>In Polaris, the <a href=/in-dev/unreleased/entities/#catalog>catalog</a> is the top-level entity that objects like <a href=/in-dev/unreleased/entities/#table>tables</a> and <a href=/in-dev/unreleased/entities/#view>views</a> are organized under.</p><p>The <code>DEFAULT_BASE_LOCATION</code> value you provided at catalog creation time will be the default [...]
-this catalog should be stored in.</p><p>Additionally, if Polaris is running somewhere other than <code>localhost:8181</code>, you can specify the correct hostname and port by providing <code>--host</code> and <code>--port</code> flags. For the full set of options supported by the CLI, please refer to the <a href=/in-dev/unreleased/command-line-interface/>docs</a>.</p><h3 id=creating-a-principal-and-assigning-it-privileges id=creating-a-principal-and-assigning-it-privileges>Creating a Pri [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span> --client-id <span style=color:#4e9a06>${</span><span style=color:#000>CLIENT_ID</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span> --client-secret <span style=color:#4e9a06>${</span><span style=color:#000>CLIENT_SECRET</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span> principals <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span> create <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span> quickstart_user
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span>./polaris <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span> --client-id <span style=color:#4e9a06>${</span><span style=color:#000>CLIENT_ID</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">10</span><span> --client-secret <span style=color:#4e9a06>${</span><span style=color:#000>CLIENT_SECRET</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">11</span><span> principal-roles <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">12</span><span> create <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">13</span><span> quickstart_user_role
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">14</span><span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">15</span><span>./polaris <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">16</span><span> --client-id <span style=color:#4e9a06>${</span><span style=color:#000>CLIENT_ID</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">17</span><span> --client-secret <span style=color:#4e9a06>${</span><span style=color:#000>CLIENT_SECRET</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">18</span><span> catalog-roles <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">19</span><span> create <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">20</span><span> --catalog quickstart_catalog <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">21</span><span> quickstart_catalog_role
-</span></span></code></pre></div><p>Be sure to provide the necessary credentials, hostname, and port as before.</p><p>When the <code>principals create</code> command completes successfully, it will return the credentials for this new principal. Export them for future use. For example:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:f [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#ce5c00;font-weight:700>{</span><span style=color:#4e9a06>"clientId"</span>: <span style=color:#4e9a06>"XXXX"</span>, <span style=color:#4e9a06>"clientSecret"</span>: <span style=color:#4e9a06>"YYYY"</span><span style=color:#ce5c00;font-weight:700>}</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span><span style=color:#204a87>export</span> <span style=color:#000>USER_CLIENT_ID</span><span style=color:#ce5c00;font-weight:700>=</span>XXXX
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span><span style=color:#204a87>export</span> <span style=color:#000>USER_CLIENT_SECRET</span><span style=color:#ce5c00;font-weight:700>=</span>YYYY
-</span></span></code></pre></div><p>Now, we grant the principal the <a href=/in-dev/unreleased/entities/#principal-role>principal role</a> we created, and grant the <a href=/in-dev/unreleased/entities/#catalog-role>catalog role</a> the principal role we created. For more information on these entities, please refer to the linked documentation.</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span> --client-id <span style=color:#4e9a06>${</span><span style=color:#000>CLIENT_ID</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span> --client-secret <span style=color:#4e9a06>${</span><span style=color:#000>CLIENT_SECRET</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span> principal-roles <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span> grant <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span> --principal quickstart_user <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span> quickstart_user_role
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span>./polaris <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">10</span><span> --client-id <span style=color:#4e9a06>${</span><span style=color:#000>CLIENT_ID</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">11</span><span> --client-secret <span style=color:#4e9a06>${</span><span style=color:#000>CLIENT_SECRET</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">12</span><span> catalog-roles <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">13</span><span> grant <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">14</span><span> --catalog quickstart_catalog <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">15</span><span> --principal-role quickstart_user_role <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">16</span><span> quickstart_catalog_role
-</span></span></code></pre></div><p>Now, we’ve linked our principal to the catalog via roles like so:</p><p><img src=/img/quickstart/privilege-illustration-1.png alt="Principal to Catalog" title="Principal to Catalog"></p><p>In order to give this principal the ability to interact with the catalog, we must assign some <a href=/in-dev/unreleased/entities/#privilege>privileges</a>. For the time being, we will give this principal the ability to fully manage content in our new catalog. We can [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> --client-id <span style=color:#4e9a06>${</span><span style=color:#000>CLIENT_ID</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> --client-secret <span style=color:#4e9a06>${</span><span style=color:#000>CLIENT_SECRET</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> privileges <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span> catalog <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">6</span><span> grant <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">7</span><span> --catalog quickstart_catalog <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">8</span><span> --catalog-role quickstart_catalog_role <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">9</span><span> CATALOG_MANAGE_CONTENT
-</span></span></code></pre></div><p>This grants the <a href=/in-dev/unreleased/entities/#privilege>catalog privileges</a> <code>CATALOG_MANAGE_CONTENT</code> to our catalog role, linking everything together like so:</p><p><img src=/img/quickstart/privilege-illustration-2.png alt="Principal to Catalog with Catalog Role" title="Principal to Catalog with Catalog Role"></p><p><code>CATALOG_MANAGE_CONTENT</code> has create/list/read/write privileges on all entities within the catalog. The sam [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span>--packages org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:1.10.0,org.apache.iceberg:iceberg-aws-bundle:1.10.0 <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span>--conf spark.sql.extensions<span style=color:#ce5c00;font-weight:700>=</span>org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span>--conf spark.sql.catalog.quickstart_catalog.warehouse<span style=color:#ce5c00;font-weight:700>=</span>quickstart_catalog <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span>--conf spark.sql.catalog.quickstart_catalog.header.X-Iceberg-Access-Delegation<span style=color:#ce5c00;font-weight:700>=</span>vended-credentials <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span>--conf spark.sql.catalog.quickstart_catalog<span style=color:#ce5c00;font-weight:700>=</span>org.apache.iceberg.spark.SparkCatalog <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span>--conf spark.sql.catalog.quickstart_catalog.catalog-impl<span style=color:#ce5c00;font-weight:700>=</span>org.apache.iceberg.rest.RESTCatalog <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span>--conf spark.sql.catalog.quickstart_catalog.uri<span style=color:#ce5c00;font-weight:700>=</span>http://localhost:8181/api/catalog <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span>--conf spark.sql.catalog.quickstart_catalog.credential<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>${</span><span style=color:#000>USER_CLIENT_ID</span><span style=color:#4e9a06>}</span>:<span style=color:#4e9a06>${</span><span style=color:#000>USER_CLIENT_SECRET</span><span style [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">10</span><span>--conf spark.sql.catalog.quickstart_catalog.scope<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>'PRINCIPAL_ROLE:ALL'</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">11</span><span>--conf spark.sql.catalog.quickstart_catalog.token-refresh-enabled<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#204a87>true</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">12</span><span>--conf spark.sql.catalog.quickstart_catalog.client.region<span style=color:#ce5c00;font-weight:700>=</span>us-west-2
-</span></span></code></pre></div><p>Similar to the CLI commands above, this configures Spark to use the Polaris running at <code>localhost:8181</code>. If your Polaris server is running elsewhere, but sure to update the configuration appropriately.</p><p>Finally, note that we include the <code>iceberg-aws-bundle</code> package here. If your table is using a different filesystem, be sure to include the appropriate dependency.</p><h4 id=using-spark-sql-from-a-docker-container id=using-spar [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span>docker compose -p polaris -f getting-started/jdbc/docker-compose.yml rm -f spark-sql
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span>docker compose -p polaris -f getting-started/jdbc/docker-compose.yml up -d --no-deps spark-sql
-</span></span></code></pre></div><p>Attach to the running spark-sql container:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span>docker attach <span style=color:#204a87;font-weight:700>$(</span>docke [...]
-</span></span></code></pre></div><h4 id=sample-commands id=sample-commands>Sample Commands<a class=heading-anchor href=#sample-commands aria-label=Anchor>🔗</a></h4><p>Once the Spark session starts, we can create a namespace and table within the catalog:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-sql data-lang=sql><span style=display:flex><span style="white-space:pre;-we [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#204a87;font-weight:700>CREATE</span><span style=color:#f8f8f8> </span><span style=color:#000>NAMESPACE</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>IF</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>NOT</span><span style=co [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span><span style=color:#204a87;font-weight:700>CREATE</span><span style=color:#f8f8f8> </span><span style=color:#000>NAMESPACE</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>IF</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>NOT</span><span style=co [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span><span style=color:#000>USE</span><span style=color:#f8f8f8> </span><span style=color:#000>NAMESPACE</span><span style=color:#f8f8f8> </span><span style=color:#000>quickstart_namespace</span><span style=color:#000;font-weight:700>.</span><span style=color:#204a87;font-weight:700>schema</span><span style=color:#00 [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span><span style=color:#204a87;font-weight:700>CREATE</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>TABLE</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>IF</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>NOT</span [...]
+this catalog should be stored in.</p><p>Additionally, if Polaris is running somewhere other than <code>localhost:8181</code>, you can specify the correct hostname and port by providing <code>--host</code> and <code>--port</code> flags. For the full set of options supported by the CLI, please refer to the <a href=/in-dev/unreleased/command-line-interface/>docs</a>.</p><h3 id=creating-a-principal-and-assigning-it-privileges id=creating-a-principal-and-assigning-it-privileges>Creating a Pri [...]
+</span></span></span><span style=display:flex><span> --client-id <span style=color:#4e9a06>${</span><span style=color:#000>CLIENT_ID</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --client-secret <span style=color:#4e9a06>${</span><span style=color:#000>CLIENT_SECRET</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> principals <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> create <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> quickstart_user
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span>./polaris <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --client-id <span style=color:#4e9a06>${</span><span style=color:#000>CLIENT_ID</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --client-secret <span style=color:#4e9a06>${</span><span style=color:#000>CLIENT_SECRET</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> principal-roles <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> create <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> quickstart_user_role
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span>./polaris <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --client-id <span style=color:#4e9a06>${</span><span style=color:#000>CLIENT_ID</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --client-secret <span style=color:#4e9a06>${</span><span style=color:#000>CLIENT_SECRET</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> catalog-roles <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> create <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --catalog quickstart_catalog <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> quickstart_catalog_role
+</span></span></code></pre></div><p>Be sure to provide the necessary credentials, hostname, and port as before.</p><p>When the <code>principals create</code> command completes successfully, it will return the credentials for this new principal. Export them for future use. For example:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:f [...]
+</span></span><span style=display:flex><span><span style=color:#ce5c00;font-weight:700>{</span><span style=color:#4e9a06>"clientId"</span>: <span style=color:#4e9a06>"XXXX"</span>, <span style=color:#4e9a06>"clientSecret"</span>: <span style=color:#4e9a06>"YYYY"</span><span style=color:#ce5c00;font-weight:700>}</span>
+</span></span><span style=display:flex><span><span style=color:#204a87>export</span> <span style=color:#000>USER_CLIENT_ID</span><span style=color:#ce5c00;font-weight:700>=</span>XXXX
+</span></span><span style=display:flex><span><span style=color:#204a87>export</span> <span style=color:#000>USER_CLIENT_SECRET</span><span style=color:#ce5c00;font-weight:700>=</span>YYYY
+</span></span></code></pre></div><p>Now, we grant the principal the <a href=/in-dev/unreleased/entities/#principal-role>principal role</a> we created, and grant the <a href=/in-dev/unreleased/entities/#catalog-role>catalog role</a> the principal role we created. For more information on these entities, please refer to the linked documentation.</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code [...]
+</span></span></span><span style=display:flex><span> --client-id <span style=color:#4e9a06>${</span><span style=color:#000>CLIENT_ID</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --client-secret <span style=color:#4e9a06>${</span><span style=color:#000>CLIENT_SECRET</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> principal-roles <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> grant <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --principal quickstart_user <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> quickstart_user_role
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span>./polaris <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --client-id <span style=color:#4e9a06>${</span><span style=color:#000>CLIENT_ID</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --client-secret <span style=color:#4e9a06>${</span><span style=color:#000>CLIENT_SECRET</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> catalog-roles <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> grant <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --catalog quickstart_catalog <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --principal-role quickstart_user_role <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> quickstart_catalog_role
+</span></span></code></pre></div><p>Now, we’ve linked our principal to the catalog via roles like so:</p><p><img src=/img/quickstart/privilege-illustration-1.png alt="Principal to Catalog" title="Principal to Catalog"></p><p>In order to give this principal the ability to interact with the catalog, we must assign some <a href=/in-dev/unreleased/entities/#privilege>privileges</a>. For the time being, we will give this principal the ability to fully manage content in our new catalog. We can [...]
+</span></span></span><span style=display:flex><span> --client-id <span style=color:#4e9a06>${</span><span style=color:#000>CLIENT_ID</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --client-secret <span style=color:#4e9a06>${</span><span style=color:#000>CLIENT_SECRET</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> privileges <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> catalog <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> grant <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --catalog quickstart_catalog <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --catalog-role quickstart_catalog_role <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> CATALOG_MANAGE_CONTENT
+</span></span></code></pre></div><p>This grants the <a href=/in-dev/unreleased/entities/#privilege>catalog privileges</a> <code>CATALOG_MANAGE_CONTENT</code> to our catalog role, linking everything together like so:</p><p><img src=/img/quickstart/privilege-illustration-2.png alt="Principal to Catalog with Catalog Role" title="Principal to Catalog with Catalog Role"></p><p><code>CATALOG_MANAGE_CONTENT</code> has create/list/read/write privileges on all entities within the catalog. The sam [...]
+</span></span></span><span style=display:flex><span>--packages org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:1.10.0,org.apache.iceberg:iceberg-aws-bundle:1.10.0 <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span>--conf spark.sql.extensions<span style=color:#ce5c00;font-weight:700>=</span>org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span>--conf spark.sql.catalog.quickstart_catalog.warehouse<span style=color:#ce5c00;font-weight:700>=</span>quickstart_catalog <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span>--conf spark.sql.catalog.quickstart_catalog.header.X-Iceberg-Access-Delegation<span style=color:#ce5c00;font-weight:700>=</span>vended-credentials <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span>--conf spark.sql.catalog.quickstart_catalog<span style=color:#ce5c00;font-weight:700>=</span>org.apache.iceberg.spark.SparkCatalog <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span>--conf spark.sql.catalog.quickstart_catalog.catalog-impl<span style=color:#ce5c00;font-weight:700>=</span>org.apache.iceberg.rest.RESTCatalog <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span>--conf spark.sql.catalog.quickstart_catalog.uri<span style=color:#ce5c00;font-weight:700>=</span>http://localhost:8181/api/catalog <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span>--conf spark.sql.catalog.quickstart_catalog.credential<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>${</span><span style=color:#000>USER_CLIENT_ID</span><span style=color:#4e9a06>}</span>:<span style=color:#4e9a06>${</span><span style=color:#000>USER_CLIENT_SECRET</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span>--conf spark.sql.catalog.quickstart_catalog.scope<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>'PRINCIPAL_ROLE:ALL'</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span>--conf spark.sql.catalog.quickstart_catalog.token-refresh-enabled<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#204a87>true</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span>--conf spark.sql.catalog.quickstart_catalog.client.region<span style=color:#ce5c00;font-weight:700>=</span>us-west-2
+</span></span></code></pre></div><p>Similar to the CLI commands above, this configures Spark to use the Polaris running at <code>localhost:8181</code>. If your Polaris server is running elsewhere, but sure to update the configuration appropriately.</p><p>Finally, note that we include the <code>iceberg-aws-bundle</code> package here. If your table is using a different filesystem, be sure to include the appropriate dependency.</p><h4 id=using-spark-sql-from-a-docker-container id=using-spar [...]
+</span></span><span style=display:flex><span>docker compose -p polaris -f getting-started/jdbc/docker-compose.yml rm -f spark-sql
+</span></span><span style=display:flex><span>docker compose -p polaris -f getting-started/jdbc/docker-compose.yml up -d --no-deps spark-sql
+</span></span></code></pre></div><p>Attach to the running spark-sql container:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span>docker attach <span style=color:#204a87;font-weight:700>$(</span>docker ps -q --filter <span style=color:#000>name</span><span style=color:#ce5c00;font-weight:700>=</span>spark-sql<span style=color [...]
+</span></span></code></pre></div><h4 id=sample-commands id=sample-commands>Sample Commands<a class=heading-anchor href=#sample-commands aria-label=Anchor>🔗</a></h4><p>Once the Spark session starts, we can create a namespace and table within the catalog:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-sql data-lang=sql><span style=display:flex><span><span style=color:#000>USE [...]
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>CREATE</span><span style=color:#f8f8f8> </span><span style=color:#000>NAMESPACE</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>IF</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>NOT</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>EXISTS</span><span style=color:#f8f8f8> </span><span style=color: [...]
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>CREATE</span><span style=color:#f8f8f8> </span><span style=color:#000>NAMESPACE</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>IF</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>NOT</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>EXISTS</span><span style=color:#f8f8f8> </span><span style=color: [...]
+</span></span></span><span style=display:flex><span><span style=color:#000>USE</span><span style=color:#f8f8f8> </span><span style=color:#000>NAMESPACE</span><span style=color:#f8f8f8> </span><span style=color:#000>quickstart_namespace</span><span style=color:#000;font-weight:700>.</span><span style=color:#204a87;font-weight:700>schema</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>CREATE</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>TABLE</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>IF</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>NOT</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>EXISTS</span><span style=color:#f8f8f8> </span><sp [...]
</span></span></span></code></pre></div><p>We can now use this table like any other:</p><pre tabindex=0><code>INSERT INTO quickstart_table VALUES (1, 'some data');
SELECT * FROM quickstart_table;
. . .
@@ -157,78 +161,78 @@ SELECT * FROM quickstart_table;
+---+---------+
|1 |some data|
+---+---------+
-</code></pre><p>If at any time access is revoked…</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span>./polaris <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> --client-id <span style=color:#4e9a06>${</span><span style=color:#000>CLIENT_ID</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> --client-secret <span style=color:#4e9a06>${</span><span style=color:#000>CLIENT_SECRET</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> privileges <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span> catalog <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">6</span><span> revoke <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">7</span><span> --catalog quickstart_catalog <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">8</span><span> --catalog-role quickstart_catalog_role <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">9</span><span> CATALOG_MANAGE_CONTENT
+</code></pre><p>If at any time access is revoked…</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span>./polaris <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --client-id <span style=color:#4e9a06>${</span><span style=color:#000>CLIENT_ID</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --client-secret <span style=color:#4e9a06>${</span><span style=color:#000>CLIENT_SECRET</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> privileges <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> catalog <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> revoke <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --catalog quickstart_catalog <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --catalog-role quickstart_catalog_role <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> CATALOG_MANAGE_CONTENT
</span></span></code></pre></div><p>Spark will lose access to the table:</p><pre tabindex=0><code>INSERT INTO quickstart_table VALUES (1, 'some data');
org.apache.iceberg.exceptions.ForbiddenException: Forbidden: Principal 'quickstart_user' with activated PrincipalRoles '[]' and activated grants via '[quickstart_catalog_role, quickstart_user_role]' is not authorized for op LOAD_TABLE_WITH_READ_DELEGATION
-</code></pre><h3 id=connecting-with-trino id=connecting-with-trino>Connecting with Trino<a class=heading-anchor href=#connecting-with-trino aria-label=Anchor>🔗</a></h3><p>Refresh the Docker container with the user’s credentials:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span style="white-space:pre;-webkit-user-selec [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span>docker compose -p polaris -f getting-started/jdbc/docker-compose.yml rm -f trino
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span>docker compose -p polaris -f getting-started/jdbc/docker-compose.yml up -d --no-deps trino
-</span></span></code></pre></div><p>Attach to the running Trino container:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span>docker <span style=color:#204a87>exec</span> -it <span style=color:#204a87 [...]
-</span></span></code></pre></div><p>You may not see Trino’s prompt immediately, type ENTER to see it. A few commands that you can try:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-sql data-lang=sql><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span><span style= [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#204a87;font-weight:700>SHOW</span><span style=color:#f8f8f8> </span><span style=color:#000>SCHEMAS</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>FROM</span><span style=color:#f8f8f8> </span><span style=color:#000>iceberg</span><span style=color:#000;font-wei [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span><span style=color:#204a87;font-weight:700>CREATE</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>SCHEMA</span><span style=color:#f8f8f8> </span><span style=color:#000>iceberg</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>quickstart_schema</span><spa [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span><span style=color:#204a87;font-weight:700>CREATE</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>TABLE</span><span style=color:#f8f8f8> </span><span style=color:#000>iceberg</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>quickstart_schema</span><span [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span><span style=color:#204a87;font-weight:700>SELECT</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>*</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>FROM</span><span style=color:#f8f8f8> </span><span style=color:#000>iceberg</span><span style=colo [...]
-</span></span></span></code></pre></div><p>If at any time access is revoked…</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span>./polaris <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> --client-id <span style=color:#4e9a06>${</span><span style=color:#000>CLIENT_ID</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> --client-secret <span style=color:#4e9a06>${</span><span style=color:#000>CLIENT_SECRET</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> privileges <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span> catalog <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">6</span><span> revoke <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">7</span><span> --catalog quickstart_catalog <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">8</span><span> --catalog-role quickstart_catalog_role <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">9</span><span> CATALOG_MANAGE_CONTENT
-</span></span></code></pre></div><p>Trino will lose access to the table:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-sql data-lang=sql><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span><span style=color:#204a87;font-weight:700>SELECT</span><span style=color:#f8f8f8 [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span><span style=color:#000>org</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>apache</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>iceberg</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>exceptions</span><span style=color:#000;fon [...]
-</span></span></span></code></pre></div><h3 id=connecting-with-pyiceberg id=connecting-with-pyiceberg>Connecting with PyIceberg<a class=heading-anchor href=#connecting-with-pyiceberg aria-label=Anchor>🔗</a></h3><h4 id=using-credentials id=using-credentials>Using Credentials<a class=heading-anchor href=#using-credentials aria-label=Anchor>🔗</a></h4><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><co [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span><span style=color:#000>catalog</span> <span style=color:#ce5c00;font-weight:700>=</span> <span style=color:#000>load_catalog</span><span style=color:#000;font-weight:700>(</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> <span style=color:#204a87>type</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>'rest'</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span> <span style=color:#000>uri</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>'http://localhost:8181/api/catalog'</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">6</span><span> <span style=color:#000>warehouse</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>'quickstart_catalog'</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">7</span><span> <span style=color:#000>scope</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"PRINCIPAL_ROLE:ALL"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">8</span><span> <span style=color:#000>credential</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>f</span><span style=color:#4e9a06>"</span><span style=color:#4e9a06>{</span><span style=color:#000>CLIENT_ID</span><span style=color:#4e9a06>}</span><span style=color:#4e9a06>:</span><span style=c [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">9</span><span><span style=color:#000;font-weight:700>)</span>
-</span></span></code></pre></div><p>If the <code>load_catalog</code> function is used with credentials, then PyIceberg will automatically request an authorization token from the <code>v1/oauth/tokens</code> endpoint, and will later use this token to prove its identity to the Polaris Catalog.</p><h4 id=using-a-token id=using-a-token>Using a Token<a class=heading-anchor href=#using-a-token aria-label=Anchor>🔗</a></h4><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz- [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span><span style=color:#204a87;font-weight:700>import</span> <span style=color:#000>requests</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span><span style=color:#8f5902;font-style:italic># Step 1: Get OAuth token</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span><span style=color:#000>response</span> <span style=color:#ce5c00;font-weight:700>=</span> <span style=color:#000>requests</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>post</span><span style=color:#000;font-weight:700>(</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span> <span style=color:#4e9a06>"http://localhost:8181/api/catalog/v1/oauth/tokens"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span> <span style=color:#000>auth</span> <span style=color:#ce5c00;font-weight:700>=</span><span style=color:#000;font-weight:700>(</span><span style=color:#000>CLIENT_ID</span><span style=color:#000;font-weight:700>,</span> <span style=color:#000>CLIENT_SECRET</span><span style=color:#000;font-weight:700>),</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span> <span style=color:#000>data</span> <span style=color:#ce5c00;font-weight:700>=</span> <span style=color:#000;font-weight:700>{</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span> <span style=color:#4e9a06>"grant_type"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"client_credentials"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">10</span><span> <span style=color:#4e9a06>"scope"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"PRINCIPAL_ROLE:ALL"</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">11</span><span> <span style=color:#000;font-weight:700>})</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">12</span><span><span style=color:#000>token</span> <span style=color:#ce5c00;font-weight:700>=</span> <span style=color:#000>response</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>json</span><span style=color:#000;font-weight:700>()[</span><span style=color:#4e9a06>"access_token"</span><span [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">13</span><span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">14</span><span><span style=color:#8f5902;font-style:italic># Step 2: Load the catalog using the token</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">15</span><span><span style=color:#000>catalog</span> <span style=color:#ce5c00;font-weight:700>=</span> <span style=color:#000>load_catalog</span><span style=color:#000;font-weight:700>(</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">16</span><span> <span style=color:#204a87>type</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>'rest'</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">17</span><span> <span style=color:#000>uri</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>'http://localhost:8181/api/catalog'</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">18</span><span> <span style=color:#000>warehouse</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>'quickstart_catalog'</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">19</span><span> <span style=color:#000>token</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#000>token</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">20</span><span><span style=color:#000;font-weight:700>)</span>
-</span></span></code></pre></div><p>It is possible to use <code>load_catalog</code> function by providing an authorization token directly. This method is useful when using an external identity provider (e.g. Google Identity).</p><h3 id=connecting-using-rest-apis id=connecting-using-rest-apis>Connecting Using REST APIs<a class=heading-anchor href=#connecting-using-rest-apis aria-label=Anchor>🔗</a></h3><p>To access Polaris from the host machine, first request an access token:</p><div class [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> --resolve polaris:8181:127.0.0.1 <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> --user <span style=color:#4e9a06>${</span><span style=color:#000>CLIENT_ID</span><span style=color:#4e9a06>}</span>:<span style=color:#4e9a06>${</span><span style=color:#000>CLIENT_SECRET</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> -d <span style=color:#4e9a06>'grant_type=client_credentials'</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span> -d <span style=color:#4e9a06>'scope=PRINCIPAL_ROLE:ALL'</span> <span style=color:#000;font-weight:700>|</span> jq -r .access_token<span style=color:#204a87;font-weight:700>)</span>
-</span></span></code></pre></div><p>Then, use the access token in the Authorization header when accessing Polaris:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span>curl -v http://127.0.0.1:8181/api/ [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span>curl -v http://127.0.0.1:8181/api/management/v1/catalogs/quickstart_catalog -H <span style=color:#4e9a06>"Authorization: Bearer </span><span style=color:#000>$POLARIS_TOKEN</span><span style=color:#4e9a06>"</span>
-</span></span></code></pre></div><h2 id=next-steps id=next-steps>Next Steps<a class=heading-anchor href=#next-steps aria-label=Anchor>🔗</a></h2><ul><li>Visit <a href=/in-dev/unreleased/getting-started/using-polaris/keycloak-idp/>Using Keycloak as the external identity provider</a>.</li><li>Visit <a href=/in-dev/unreleased/getting-started/using-polaris/telemetry-tools/>Using Polaris with telemetry tools</a>.</li><li>Visit <a href=/in-dev/unreleased/configuration/configuring-polaris-for-pr [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> -f getting-started/assets/postgres/docker-compose-postgres.yml <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> -f getting-started/jdbc/docker-compose-bootstrap-db.yml <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> -f getting-started/jdbc/docker-compose.yml <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span> down
+</code></pre><h3 id=connecting-with-trino id=connecting-with-trino>Connecting with Trino<a class=heading-anchor href=#connecting-with-trino aria-label=Anchor>🔗</a></h3><p>Refresh the Docker container with the user’s credentials:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span>docker compose -p polaris -f getting-star [...]
+</span></span><span style=display:flex><span>docker compose -p polaris -f getting-started/jdbc/docker-compose.yml rm -f trino
+</span></span><span style=display:flex><span>docker compose -p polaris -f getting-started/jdbc/docker-compose.yml up -d --no-deps trino
+</span></span></code></pre></div><p>Attach to the running Trino container:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span>docker <span style=color:#204a87>exec</span> -it <span style=color:#204a87;font-weight:700>$(</span>docker ps -q --filter <span style=color:#000>name</span><span style=color:#ce5c00;font-weight:700>=</ [...]
+</span></span></code></pre></div><p>You may not see Trino’s prompt immediately, type ENTER to see it. A few commands that you can try:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-sql data-lang=sql><span style=display:flex><span><span style=color:#204a87;font-weight:700>SHOW</span><span style=color:#f8f8f8> </span><span style=color:#000>CATALOGS</span><span style=co [...]
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>SHOW</span><span style=color:#f8f8f8> </span><span style=color:#000>SCHEMAS</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>FROM</span><span style=color:#f8f8f8> </span><span style=color:#000>iceberg</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>CREATE</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>SCHEMA</span><span style=color:#f8f8f8> </span><span style=color:#000>iceberg</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>quickstart_schema</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>CREATE</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>TABLE</span><span style=color:#f8f8f8> </span><span style=color:#000>iceberg</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>quickstart_schema</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>quickstart_table</span><span style=color:#f8f8f8> </span><span [...]
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>SELECT</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>*</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>FROM</span><span style=color:#f8f8f8> </span><span style=color:#000>iceberg</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>quickstart_schema</span><span style=color:#000;font-weight:700>.</span><s [...]
+</span></span></span></code></pre></div><p>If at any time access is revoked…</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span>./polaris <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --client-id <span style=color:#4e9a06>${</span><span style=color:#000>CLIENT_ID</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --client-secret <span style=color:#4e9a06>${</span><span style=color:#000>CLIENT_SECRET</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> privileges <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> catalog <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> revoke <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --catalog quickstart_catalog <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --catalog-role quickstart_catalog_role <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> CATALOG_MANAGE_CONTENT
+</span></span></code></pre></div><p>Trino will lose access to the table:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-sql data-lang=sql><span style=display:flex><span><span style=color:#204a87;font-weight:700>SELECT</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>*</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-wei [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#000>org</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>apache</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>iceberg</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>exceptions</span><span style=color:#000;font-weight:700>.</span><span style=color:#000>ForbiddenException</span><span style=color:#000;font-weight:700>:</span><span style [...]
+</span></span></span></code></pre></div><h3 id=connecting-with-pyiceberg id=connecting-with-pyiceberg>Connecting with PyIceberg<a class=heading-anchor href=#connecting-with-pyiceberg aria-label=Anchor>🔗</a></h3><h4 id=using-credentials id=using-credentials>Using Credentials<a class=heading-anchor href=#using-credentials aria-label=Anchor>🔗</a></h4><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><co [...]
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span><span style=color:#000>catalog</span> <span style=color:#ce5c00;font-weight:700>=</span> <span style=color:#000>load_catalog</span><span style=color:#000;font-weight:700>(</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87>type</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>'rest'</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#000>uri</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>'http://localhost:8181/api/catalog'</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#000>warehouse</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>'quickstart_catalog'</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#000>scope</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"PRINCIPAL_ROLE:ALL"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#000>credential</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>f</span><span style=color:#4e9a06>"</span><span style=color:#4e9a06>{</span><span style=color:#000>CLIENT_ID</span><span style=color:#4e9a06>}</span><span style=color:#4e9a06>:</span><span style=color:#4e9a06>{</span><span style=color:#000>CLIENT_SECRET</span><span style=color:#4e9a06>}</span><span style=color:#4e9a06> [...]
+</span></span><span style=display:flex><span><span style=color:#000;font-weight:700>)</span>
+</span></span></code></pre></div><p>If the <code>load_catalog</code> function is used with credentials, then PyIceberg will automatically request an authorization token from the <code>v1/oauth/tokens</code> endpoint, and will later use this token to prove its identity to the Polaris Catalog.</p><h4 id=using-a-token id=using-a-token>Using a Token<a class=heading-anchor href=#using-a-token aria-label=Anchor>🔗</a></h4><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz- [...]
+</span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>import</span> <span style=color:#000>requests</span>
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># Step 1: Get OAuth token</span>
+</span></span><span style=display:flex><span><span style=color:#000>response</span> <span style=color:#ce5c00;font-weight:700>=</span> <span style=color:#000>requests</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>post</span><span style=color:#000;font-weight:700>(</span>
+</span></span><span style=display:flex><span> <span style=color:#4e9a06>"http://localhost:8181/api/catalog/v1/oauth/tokens"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#000>auth</span> <span style=color:#ce5c00;font-weight:700>=</span><span style=color:#000;font-weight:700>(</span><span style=color:#000>CLIENT_ID</span><span style=color:#000;font-weight:700>,</span> <span style=color:#000>CLIENT_SECRET</span><span style=color:#000;font-weight:700>),</span>
+</span></span><span style=display:flex><span> <span style=color:#000>data</span> <span style=color:#ce5c00;font-weight:700>=</span> <span style=color:#000;font-weight:700>{</span>
+</span></span><span style=display:flex><span> <span style=color:#4e9a06>"grant_type"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"client_credentials"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#4e9a06>"scope"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"PRINCIPAL_ROLE:ALL"</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>})</span>
+</span></span><span style=display:flex><span><span style=color:#000>token</span> <span style=color:#ce5c00;font-weight:700>=</span> <span style=color:#000>response</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>json</span><span style=color:#000;font-weight:700>()[</span><span style=color:#4e9a06>"access_token"</span><span style=color:#000;font-weight:700>]</span>
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># Step 2: Load the catalog using the token</span>
+</span></span><span style=display:flex><span><span style=color:#000>catalog</span> <span style=color:#ce5c00;font-weight:700>=</span> <span style=color:#000>load_catalog</span><span style=color:#000;font-weight:700>(</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87>type</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>'rest'</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#000>uri</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>'http://localhost:8181/api/catalog'</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#000>warehouse</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>'quickstart_catalog'</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#000>token</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#000>token</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span><span style=color:#000;font-weight:700>)</span>
+</span></span></code></pre></div><p>It is possible to use <code>load_catalog</code> function by providing an authorization token directly. This method is useful when using an external identity provider (e.g. Google Identity).</p><h3 id=connecting-using-rest-apis id=connecting-using-rest-apis>Connecting Using REST APIs<a class=heading-anchor href=#connecting-using-rest-apis aria-label=Anchor>🔗</a></h3><p>To access Polaris from the host machine, first request an access token:</p><div class [...]
+</span></span></span><span style=display:flex><span> --resolve polaris:8181:127.0.0.1 <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --user <span style=color:#4e9a06>${</span><span style=color:#000>CLIENT_ID</span><span style=color:#4e9a06>}</span>:<span style=color:#4e9a06>${</span><span style=color:#000>CLIENT_SECRET</span><span style=color:#4e9a06>}</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -d <span style=color:#4e9a06>'grant_type=client_credentials'</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -d <span style=color:#4e9a06>'scope=PRINCIPAL_ROLE:ALL'</span> <span style=color:#000;font-weight:700>|</span> jq -r .access_token<span style=color:#204a87;font-weight:700>)</span>
+</span></span></code></pre></div><p>Then, use the access token in the Authorization header when accessing Polaris:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span>curl -v http://127.0.0.1:8181/api/management/v1/principal-roles -H <span style=color:#4e9a06>"Authorization: Bearer </span><span style=color:#000>$POLARIS_TO [...]
+</span></span><span style=display:flex><span>curl -v http://127.0.0.1:8181/api/management/v1/catalogs/quickstart_catalog -H <span style=color:#4e9a06>"Authorization: Bearer </span><span style=color:#000>$POLARIS_TOKEN</span><span style=color:#4e9a06>"</span>
+</span></span></code></pre></div><h2 id=next-steps id=next-steps>Next Steps<a class=heading-anchor href=#next-steps aria-label=Anchor>🔗</a></h2><ul><li>Visit <a href=/in-dev/unreleased/getting-started/using-polaris/keycloak-idp/>Using Keycloak as the external identity provider</a>.</li><li>Visit <a href=/in-dev/unreleased/getting-started/using-polaris/telemetry-tools/>Using Polaris with telemetry tools</a>.</li><li>Visit <a href=/in-dev/unreleased/configuration/configuring-polaris-for-pr [...]
+</span></span></span><span style=display:flex><span> -f getting-started/assets/postgres/docker-compose-postgres.yml <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -f getting-started/jdbc/docker-compose-bootstrap-db.yml <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -f getting-started/jdbc/docker-compose.yml <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> down
</span></span></code></pre></div><div class=section-index></div></div></main></div></div><footer class="td-footer row d-print-none"><div class=container-fluid><div class="row mx-md-2"><div class="td-footer__left col-6 col-sm-4 order-sm-1"><ul class=td-footer__links-list><li class=td-footer__links-item data-bs-toggle=tooltip title=Slack aria-label=Slack><a target=_blank rel=noopener href=https://apache-polaris.slack.com/ aria-label=Slack><i class="fa-regular fa-comment-dots"></i></a></li> [...]
\ No newline at end of file
diff --git a/in-dev/unreleased/getting-started/using-polaris/index.xml b/in-dev/unreleased/getting-started/using-polaris/index.xml
index 20a2f6720d..b2ab5b47cf 100644
--- a/in-dev/unreleased/getting-started/using-polaris/index.xml
+++ b/in-dev/unreleased/getting-started/using-polaris/index.xml
@@ -16,14 +16,22 @@ Polaris beforehand, and the principal ID, name and roles must match the ones ret
<ol>
<li>
<p>Build the Polaris image if it&rsquo;s not already present locally:</p>
-<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1</span><span>./gradlew <span style="color:#4e9a06">\
-</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">2</span><span> :polaris-server:assemble <span style="color:#4e9a06">\
-</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">3</span><span> :polaris-server:quarkusAppPartsBuild --rerun <span style="color:#4e9a06">\
-</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">4</span><span> -Dquarkus.container-image.build<span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#204a87">true</span>
+<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>./gradlew <span style="color:#4e9a06">\
+</span></span></span><span style="display:flex;"><span> :polaris-server:assemble <span style="color:#4e9a06">\
+</span></span></span><span style="display:flex;"><span> :polaris-server:quarkusAppPartsBuild --rerun <span style="color:#4e9a06">\
+</span></span></span><span style="display:flex;"><span> -Dquarkus.container-image.build<span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#204a87">true</span>
</span></span></code></pre></div></li>
<li>
<p>Start the docker compose group by running the following command from the root of the repository:</p>
-<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1</span><span>docker compose -f getting-started/telemetry/docker-compose.yml up
+<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>docker compose -f getting-started/telemetry/docker-compose.yml up
</span></span></code></pre></div></li>
<li>
-<p>To access Polaris from the host machine, first request an access token:</p></description></item></channel></rss>
\ No newline at end of file
+<p>To access Polaris from the host machine, first request an access token:</p>
+<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span><span style="color:#204a87">export</span> <span style="color:#000">POLARIS_TOKEN</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#204a87;font-weight:bold">$(</s [...]
+</span></span></span><span style="display:flex;"><span> --user root:s3cr3t <span style="color:#4e9a06">\
+</span></span></span><span style="display:flex;"><span> -d <span style="color:#4e9a06">&#39;grant_type=client_credentials&#39;</span> <span style="color:#4e9a06">\
+</span></span></span><span style="display:flex;"><span> -d <span style="color:#4e9a06">&#39;scope=PRINCIPAL_ROLE:ALL&#39;</span> <span style="color:#000;font-weight:bold">|</span> jq -r .access_token<span style="color:#204a87;font-weight:bold">)</span>
+</span></span></code></pre></div></li>
+<li>
+<p>Then, use the access token in the Authorization header when accessing Polaris; you can also test
+the <code>X-Request-ID</code> header; you should see it in all logs and traces:</p></description></item></channel></rss>
\ No newline at end of file
diff --git a/in-dev/unreleased/getting-started/using-polaris/keycloak-idp/index.html b/in-dev/unreleased/getting-started/using-polaris/keycloak-idp/index.html
index a8bc9cdaa0..7c94d408ff 100644
--- a/in-dev/unreleased/getting-started/using-polaris/keycloak-idp/index.html
+++ b/in-dev/unreleased/getting-started/using-polaris/keycloak-idp/index.html
@@ -4,9 +4,9 @@ principal_id: the principal ID of the user. It is always set to zero (0) in this
This Keycloak realm contains 1 client definition: client1:s3cr3t. It is configured to return tokens with the following fixed claims:
principal_id: the principal ID of the user. It is always set to zero (0) in this example. principal_name: the principal name of the user. It is always set to “root” in this example. principal_roles: the principal roles of the user. It is always set to ["server_admin", "catalog_admin"] in this example. This is obviously not a realistic configuration. In a real-world scenario, you would configure Keycloak to return the actual principal ID, name and roles of the user. Note that principals a [...]
This Keycloak realm contains 1 client definition: client1:s3cr3t. It is configured to return tokens with the following fixed claims:
-principal_id: the principal ID of the user. It is always set to zero (0) in this example. principal_name: the principal name of the user. It is always set to “root” in this example. principal_roles: the principal roles of the user. It is always set to ["server_admin", "catalog_admin"] in this example. This is obviously not a realistic configuration. In a real-world scenario, you would configure Keycloak to return the actual principal ID, name and roles of the user. Note that principals a [...]
+principal_id: the principal ID of the user. It is always set to zero (0) in this example. principal_name: the principal name of the user. It is always set to “root” in this example. principal_roles: the principal roles of the user. It is always set to ["server_admin", "catalog_admin"] in this example. This is obviously not a realistic configuration. In a real-world scenario, you would configure Keycloak to return the actual principal ID, name and roles of the user. Note that principals a [...]
This Keycloak realm contains 1 client definition: client1:s3cr3t. It is configured to return tokens with the following fixed claims:
-principal_id: the principal ID of the user. It is always set to zero (0) in this example. principal_name: the principal name of the user. It is always set to “root” in this example. principal_roles: the principal roles of the user. It is always set to ["server_admin", "catalog_admin"] in this example. This is obviously not a realistic configuration. In a real-world scenario, you would configure Keycloak to return the actual principal ID, name and roles of the user. Note that principals a [...]
+principal_id: the principal ID of the user. It is always set to zero (0) in this example. principal_name: the principal name of the user. It is always set to “root” in this example. principal_roles: the principal roles of the user. It is always set to ["server_admin", "catalog_admin"] in this example. This is obviously not a realistic configuration. In a real-world scenario, you would configure Keycloak to return the actual principal ID, name and roles of the user. Note that principals a [...]
<label for=m-in-devunreleased-check><a href=/in-dev/unreleased/ title="Apache Polaris Documentation (Unreleased)" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleased><span>Unreleased</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child active-path" id=m-in-devunreleasedgetting-started-li><input type=checkbox id=m-in-devunreleasedgetting-started-check checked>
<label for=m-in-devunreleasedgetting-started-check><a href=/in-dev/unreleased/getting-started/ title="Getting Started with Apache Polaris" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleasedgetting-started><span>Getting Started</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedquick-start-li><input type=checkbox id=m-in-devunreleasedgetting-star [...]
<label for=m-in-devunreleasedgetting-startedquick-start-check><a href=/in-dev/unreleased/getting-started/quick-start/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-in-devunreleasedgetting-startedquick-start><span>Quickstart</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedsetup-tools-li><input type=checkbox id=m-in-devunreleasedgetting-startedsetup-tools-check>
@@ -83,61 +83,61 @@ Polaris beforehand, and the principal ID, name and roles must match the ones ret
token issues by Polaris itself only.</li><li><code>realm-external</code>: This realm is configured to use an external identity provider (IDP) for authentication only. It
accepts tokens issued by Keycloak only.</li><li><code>realm-mixed</code>: This realm is configured to use both the internal and external authentication. It accepts tokens
issued by both Polaris and Keycloak.</li></ul><p>For more information about how to configure Polaris with external authentication, see the
-<a href=/in-dev/unreleased/managing-security/external-idp/>IDP integration documentation</a>.</p><h2 id=starting-the-example id=starting-the-example>Starting the Example<a class=heading-anchor href=#starting-the-example aria-label=Anchor>🔗</a></h2><ol><li><p>Build the Polaris server image if it’s not already present locally:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=langu [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> :polaris-server:assemble <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> :polaris-server:quarkusAppPartsBuild --rerun <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> -Dquarkus.container-image.build<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#204a87>true</span>
-</span></span></code></pre></div></li><li><p>Start the docker compose group by running the following command from the root of the repository:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span>docker [...]
-</span></span></code></pre></div></li></ol><h2 id=requesting-a-token id=requesting-a-token>Requesting a Token<a class=heading-anchor href=#requesting-a-token aria-label=Anchor>🔗</a></h2><p>Note: the commands below require <code>jq</code> to be installed on your machine.</p><h3 id=from-polaris id=from-polaris>From Polaris<a class=heading-anchor href=#from-polaris aria-label=Anchor>🔗</a></h3><p>You can request a token from Polaris for realms <code>realm-internal</code> and <code>realm-mixe [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> --user root:s3cr3t <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> -H <span style=color:#4e9a06>'Polaris-Realm: realm-internal'</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> -d <span style=color:#4e9a06>'grant_type=client_credentials'</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span> -d <span style=color:#4e9a06>'scope=PRINCIPAL_ROLE:ALL'</span> <span style=color:#000;font-weight:700>|</span> jq -r .access_token<span style=color:#204a87;font-weight:700>)</span>
-</span></span></code></pre></div><p>This token is valid only for the <code>realm-internal</code> realm.</p></li><li><p>Open a terminal and run the following command to request an access token for the <code>realm-mixed</code> realm:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span style="white-space:pre;-webkit-user-select:n [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> --user root:s3cr3t <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> -H <span style=color:#4e9a06>'Polaris-Realm: realm-mixed'</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> -d <span style=color:#4e9a06>'grant_type=client_credentials'</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span> -d <span style=color:#4e9a06>'scope=PRINCIPAL_ROLE:ALL'</span> <span style=color:#000;font-weight:700>|</span> jq -r .access_token<span style=color:#204a87;font-weight:700>)</span>
+<a href=/in-dev/unreleased/managing-security/external-idp/>IDP integration documentation</a>.</p><h2 id=starting-the-example id=starting-the-example>Starting the Example<a class=heading-anchor href=#starting-the-example aria-label=Anchor>🔗</a></h2><ol><li><p>Build the Polaris server image if it’s not already present locally:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=langu [...]
+</span></span></span><span style=display:flex><span> :polaris-server:assemble <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> :polaris-server:quarkusAppPartsBuild --rerun <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -Dquarkus.container-image.build<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#204a87>true</span>
+</span></span></code></pre></div></li><li><p>Start the docker compose group by running the following command from the root of the repository:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span>docker compose -f getting-started/keycloak/docker-compose.yml up
+</span></span></code></pre></div></li></ol><h2 id=requesting-a-token id=requesting-a-token>Requesting a Token<a class=heading-anchor href=#requesting-a-token aria-label=Anchor>🔗</a></h2><p>Note: the commands below require <code>jq</code> to be installed on your machine.</p><h3 id=from-polaris id=from-polaris>From Polaris<a class=heading-anchor href=#from-polaris aria-label=Anchor>🔗</a></h3><p>You can request a token from Polaris for realms <code>realm-internal</code> and <code>realm-mixe [...]
+</span></span></span><span style=display:flex><span> --user root:s3cr3t <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -H <span style=color:#4e9a06>'Polaris-Realm: realm-internal'</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -d <span style=color:#4e9a06>'grant_type=client_credentials'</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -d <span style=color:#4e9a06>'scope=PRINCIPAL_ROLE:ALL'</span> <span style=color:#000;font-weight:700>|</span> jq -r .access_token<span style=color:#204a87;font-weight:700>)</span>
+</span></span></code></pre></div><p>This token is valid only for the <code>realm-internal</code> realm.</p></li><li><p>Open a terminal and run the following command to request an access token for the <code>realm-mixed</code> realm:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span><span style=color:#000>polaris_token_realm_m [...]
+</span></span></span><span style=display:flex><span> --user root:s3cr3t <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -H <span style=color:#4e9a06>'Polaris-Realm: realm-mixed'</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -d <span style=color:#4e9a06>'grant_type=client_credentials'</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -d <span style=color:#4e9a06>'scope=PRINCIPAL_ROLE:ALL'</span> <span style=color:#000;font-weight:700>|</span> jq -r .access_token<span style=color:#204a87;font-weight:700>)</span>
</span></span></code></pre></div><p>This token is valid only for the <code>realm-mixed</code> realm.</p></li></ol><p>Polaris tokens are valid for 1 hour.</p><p>Note: if you request a Polaris token for the <code>realm-external</code> realm, it will not work because Polaris won’t issue tokens
-for this realm:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span>curl -v http://localhost:8181/api/catalog/v1/oauth/tokens <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> --user root:s3cr3t <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> -H <span style=color:#4e9a06>'Polaris-Realm: realm-external'</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> -d <span style=color:#4e9a06>'grant_type=client_credentials'</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span> -d <span style=color:#4e9a06>'scope=PRINCIPAL_ROLE:ALL'</span>
-</span></span></code></pre></div><p>This will return a <code>501 Not Implemented</code> error because for this realm, the internal token endpoint has been deactivated.</p><h3 id=from-keycloak id=from-keycloak>From Keycloak<a class=heading-anchor href=#from-keycloak aria-label=Anchor>🔗</a></h3><p>You can request a token from Keycloak for the <code>realm-external</code> and <code>realm-mixed</code> realms:</p><ol><li><p>Open a terminal and run the following command to request an access tok [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> --resolve keycloak:8080:127.0.0.1 <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> --user client1:s3cr3t <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> -d <span style=color:#4e9a06>'grant_type=client_credentials'</span> <span style=color:#000;font-weight:700>|</span> jq -r .access_token<span style=color:#204a87;font-weight:700>)</span>
+for this realm:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span>curl -v http://localhost:8181/api/catalog/v1/oauth/tokens <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --user root:s3cr3t <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -H <span style=color:#4e9a06>'Polaris-Realm: realm-external'</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -d <span style=color:#4e9a06>'grant_type=client_credentials'</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -d <span style=color:#4e9a06>'scope=PRINCIPAL_ROLE:ALL'</span>
+</span></span></code></pre></div><p>This will return a <code>501 Not Implemented</code> error because for this realm, the internal token endpoint has been deactivated.</p><h3 id=from-keycloak id=from-keycloak>From Keycloak<a class=heading-anchor href=#from-keycloak aria-label=Anchor>🔗</a></h3><p>You can request a token from Keycloak for the <code>realm-external</code> and <code>realm-mixed</code> realms:</p><ol><li><p>Open a terminal and run the following command to request an access tok [...]
+</span></span></span><span style=display:flex><span> --resolve keycloak:8080:127.0.0.1 <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --user client1:s3cr3t <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -d <span style=color:#4e9a06>'grant_type=client_credentials'</span> <span style=color:#000;font-weight:700>|</span> jq -r .access_token<span style=color:#204a87;font-weight:700>)</span>
</span></span></code></pre></div></li></ol><p>Note the <code>--resolve</code> option: it is used to send the request with the <code>Host</code> header set to <code>keycloak</code>. This is necessary
because Keycloak issues tokens with the <code>iss</code> claim matching the request’s <code>Host</code> header; without this, the token would
not be valid when used against Polaris because the <code>iss</code> claim would be <code>127.0.0.1</code>, but Polaris expects it to be
<code>keycloak</code>, since that’s Keycloak’s hostname within the Docker network.</p><p>Tokens issued by Keycloak can be used to access Polaris with the <code>realm-external</code> or <code>realm-mixed</code> realms. Access tokens
are valid for 1 hour.</p><p>You can also access the Keycloak admin console. Open a browser and go to <a href=http://localhost:8080>http://localhost:8080</a>,
then log in with the username <code>admin</code> and password <code>admin</code> (you can change this in the docker-compose file).</p><h2 id=accessing-polaris-with-the-tokens id=accessing-polaris-with-the-tokens>Accessing Polaris with the Tokens<a class=heading-anchor href=#accessing-polaris-with-the-tokens aria-label=Anchor>🔗</a></h2><p>You can access Polaris using the tokens you obtained above. The following examples show how to use the tokens with
-<code>curl</code>:</p><h3 id=using-the-polaris-token id=using-the-polaris-token>Using the Polaris Token<a class=heading-anchor href=#using-the-polaris-token aria-label=Anchor>🔗</a></h3><ol><li><p>Open a terminal and run the following command to list the principal roles in the <code>realm-internal</code> realm:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=s [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> -H <span style=color:#4e9a06>"Authorization: Bearer </span><span style=color:#000>$polaris_token_realm_internal</span><span style=color:#4e9a06>"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> -H <span style=color:#4e9a06>'Polaris-Realm: realm-internal'</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> -H <span style=color:#4e9a06>'Accept: application/json'</span>
-</span></span></code></pre></div></li><li><p>Open a terminal and run the following command to list the principal roles in the <code>realm-mixed</code> realm:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</sp [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> -H <span style=color:#4e9a06>"Authorization: Bearer </span><span style=color:#000>$polaris_token_realm_mixed</span><span style=color:#4e9a06>"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> -H <span style=color:#4e9a06>'Polaris-Realm: realm-mixed'</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> -H <span style=color:#4e9a06>'Accept: application/json'</span>
+<code>curl</code>:</p><h3 id=using-the-polaris-token id=using-the-polaris-token>Using the Polaris Token<a class=heading-anchor href=#using-the-polaris-token aria-label=Anchor>🔗</a></h3><ol><li><p>Open a terminal and run the following command to list the principal roles in the <code>realm-internal</code> realm:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=s [...]
+</span></span></span><span style=display:flex><span> -H <span style=color:#4e9a06>"Authorization: Bearer </span><span style=color:#000>$polaris_token_realm_internal</span><span style=color:#4e9a06>"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -H <span style=color:#4e9a06>'Polaris-Realm: realm-internal'</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -H <span style=color:#4e9a06>'Accept: application/json'</span>
+</span></span></code></pre></div></li><li><p>Open a terminal and run the following command to list the principal roles in the <code>realm-mixed</code> realm:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span>curl -v http://localhost:8181/api/management/v1/catalogs <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -H <span style=color:#4e9a06>"Authorization: Bearer </span><span style=color:#000>$polaris_token_realm_mixed</span><span style=color:#4e9a06>"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -H <span style=color:#4e9a06>'Polaris-Realm: realm-mixed'</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -H <span style=color:#4e9a06>'Accept: application/json'</span>
</span></span></code></pre></div></li></ol><p>Note: you cannot mix tokens from different realms. For example, you cannot use a token from the <code>realm-internal</code> realm to access
-the <code>realm-mixed</code> realm:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span>curl -v http://localhost:8181/api/management/v1/catalogs <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> -H <span style=color:#4e9a06>"Authorization: Bearer </span><span style=color:#000>$polaris_token_realm_internal</span><span style=color:#4e9a06>"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> -H <span style=color:#4e9a06>'Polaris-Realm: realm-mixed'</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> -H <span style=color:#4e9a06>'Accept: application/json'</span>
+the <code>realm-mixed</code> realm:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span>curl -v http://localhost:8181/api/management/v1/catalogs <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -H <span style=color:#4e9a06>"Authorization: Bearer </span><span style=color:#000>$polaris_token_realm_internal</span><span style=color:#4e9a06>"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -H <span style=color:#4e9a06>'Polaris-Realm: realm-mixed'</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -H <span style=color:#4e9a06>'Accept: application/json'</span>
</span></span></code></pre></div><p>This will return a <code>401 Unauthorized</code> error because the token is not valid for the <code>realm-mixed</code> realm.</p><h3 id=using-the-keycloak-token id=using-the-keycloak-token>Using the Keycloak Token<a class=heading-anchor href=#using-the-keycloak-token aria-label=Anchor>🔗</a></h3><p>The same Keycloak token can be used to access both the <code>realm-external</code> and <code>realm-mixed</code> realms, as it is valid for
-both (both realms share the same OIDC tenant configuration).</p><ol><li><p>Open a terminal and run the following command to list the principal roles in the <code>realm-external</code> realm:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;pa [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> -H <span style=color:#4e9a06>"Authorization: Bearer </span><span style=color:#000>$keycloak_token</span><span style=color:#4e9a06>"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> -H <span style=color:#4e9a06>'Polaris-Realm: realm-external'</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> -H <span style=color:#4e9a06>'Accept: application/json'</span>
-</span></span></code></pre></div></li><li><p>Open a terminal and run the following command to list the principal roles in the <code>realm-mixed</code> realm:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</sp [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> -H <span style=color:#4e9a06>"Authorization: Bearer </span><span style=color:#000>$keycloak_token</span><span style=color:#4e9a06>"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> -H <span style=color:#4e9a06>'Polaris-Realm: realm-mixed'</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> -H <span style=color:#4e9a06>'Accept: application/json'</span>
-</span></span></code></pre></div></li></ol><p>Note: you cannot use a Keycloak token to access the <code>realm-internal</code> realm:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span>curl -v http://l [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> -H <span style=color:#4e9a06>"Authorization: Bearer </span><span style=color:#000>$keycloak_token</span><span style=color:#4e9a06>"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> -H <span style=color:#4e9a06>'Polaris-Realm: realm-internal'</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> -H <span style=color:#4e9a06>'Accept: application/json'</span>
+both (both realms share the same OIDC tenant configuration).</p><ol><li><p>Open a terminal and run the following command to list the principal roles in the <code>realm-external</code> realm:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span>curl -v http://localhost:8181/api/management/v1/catalogs <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -H <span style=color:#4e9a06>"Authorization: Bearer </span><span style=color:#000>$keycloak_token</span><span style=color:#4e9a06>"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -H <span style=color:#4e9a06>'Polaris-Realm: realm-external'</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -H <span style=color:#4e9a06>'Accept: application/json'</span>
+</span></span></code></pre></div></li><li><p>Open a terminal and run the following command to list the principal roles in the <code>realm-mixed</code> realm:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span>curl -v http://localhost:8181/api/management/v1/catalogs <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -H <span style=color:#4e9a06>"Authorization: Bearer </span><span style=color:#000>$keycloak_token</span><span style=color:#4e9a06>"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -H <span style=color:#4e9a06>'Polaris-Realm: realm-mixed'</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -H <span style=color:#4e9a06>'Accept: application/json'</span>
+</span></span></code></pre></div></li></ol><p>Note: you cannot use a Keycloak token to access the <code>realm-internal</code> realm:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span>curl -v http://localhost:8181/api/management/v1/catalogs <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -H <span style=color:#4e9a06>"Authorization: Bearer </span><span style=color:#000>$keycloak_token</span><span style=color:#4e9a06>"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -H <span style=color:#4e9a06>'Polaris-Realm: realm-internal'</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -H <span style=color:#4e9a06>'Accept: application/json'</span>
</span></span></code></pre></div><p>This will return a <code>401 Unauthorized</code> error because the token is not valid for the <code>realm-internal</code> realm.</p></div></main></div></div><footer class="td-footer row d-print-none"><div class=container-fluid><div class="row mx-md-2"><div class="td-footer__left col-6 col-sm-4 order-sm-1"><ul class=td-footer__links-list><li class=td-footer__links-item data-bs-toggle=tooltip title=Slack aria-label=Slack><a target=_blank rel=noopener hre [...]
\ No newline at end of file
diff --git a/in-dev/unreleased/getting-started/using-polaris/telemetry-tools/index.html b/in-dev/unreleased/getting-started/using-polaris/telemetry-tools/index.html
index 537dc3898a..26084f701b 100644
--- a/in-dev/unreleased/getting-started/using-polaris/telemetry-tools/index.html
+++ b/in-dev/unreleased/getting-started/using-polaris/telemetry-tools/index.html
@@ -1,16 +1,20 @@
<!doctype html><html itemscope itemtype=http://schema.org/WebPage lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon.png sizes=100x100><link rel=icon type=image/png href=/favicons/android-ch [...]
Build the Polaris image if it’s not already present locally:
-1./gradlew \ 2 :polaris-server:assemble \ 3 :polaris-server:quarkusAppPartsBuild --rerun \ 4 -Dquarkus.container-image.build=true Start the docker compose group by running the following command from the root of the repository:
-1docker compose -f getting-started/telemetry/docker-compose.yml up To access Polaris from the host machine, first request an access token:"><meta property="og:url" content="https://polaris.apache.org/in-dev/unreleased/getting-started/using-polaris/telemetry-tools/"><meta property="og:site_name" content="Apache Polaris"><meta property="og:title" content="Getting Started with Apache Polaris, Prometheus and Jaeger"><meta property="og:description" content="This example requires jq to be inst [...]
+./gradlew \ :polaris-server:assemble \ :polaris-server:quarkusAppPartsBuild --rerun \ -Dquarkus.container-image.build=true Start the docker compose group by running the following command from the root of the repository:
+docker compose -f getting-started/telemetry/docker-compose.yml up To access Polaris from the host machine, first request an access token:
+export POLARIS_TOKEN=$(curl -s http://localhost:8181/api/catalog/v1/oauth/tokens \ --user root:s3cr3t \ -d 'grant_type=client_credentials' \ -d 'scope=PRINCIPAL_ROLE:ALL' | jq -r .access_token) Then, use the access token in the Authorization header when accessing Polaris; you can also test the X-Request-ID header; you should see it in all logs and traces:"><meta property="og:url" content="https://polaris.apache.org/in-dev/unreleased/getting-started/using-polaris/telemetry-tools/"><meta p [...]
Build the Polaris image if it’s not already present locally:
-1./gradlew \ 2 :polaris-server:assemble \ 3 :polaris-server:quarkusAppPartsBuild --rerun \ 4 -Dquarkus.container-image.build=true Start the docker compose group by running the following command from the root of the repository:
-1docker compose -f getting-started/telemetry/docker-compose.yml up To access Polaris from the host machine, first request an access token:"><meta property="og:locale" content="en_us"><meta property="og:type" content="article"><meta property="article:section" content="in-dev"><meta itemprop=name content="Getting Started with Apache Polaris, Prometheus and Jaeger"><meta itemprop=description content="This example requires jq to be installed on your machine.
+./gradlew \ :polaris-server:assemble \ :polaris-server:quarkusAppPartsBuild --rerun \ -Dquarkus.container-image.build=true Start the docker compose group by running the following command from the root of the repository:
+docker compose -f getting-started/telemetry/docker-compose.yml up To access Polaris from the host machine, first request an access token:
+export POLARIS_TOKEN=$(curl -s http://localhost:8181/api/catalog/v1/oauth/tokens \ --user root:s3cr3t \ -d 'grant_type=client_credentials' \ -d 'scope=PRINCIPAL_ROLE:ALL' | jq -r .access_token) Then, use the access token in the Authorization header when accessing Polaris; you can also test the X-Request-ID header; you should see it in all logs and traces:"><meta property="og:locale" content="en_us"><meta property="og:type" content="article"><meta property="article:section" content="in-de [...]
Build the Polaris image if it’s not already present locally:
-1./gradlew \ 2 :polaris-server:assemble \ 3 :polaris-server:quarkusAppPartsBuild --rerun \ 4 -Dquarkus.container-image.build=true Start the docker compose group by running the following command from the root of the repository:
-1docker compose -f getting-started/telemetry/docker-compose.yml up To access Polaris from the host machine, first request an access token:"><meta itemprop=wordCount content="160"><meta name=twitter:card content="summary"><meta name=twitter:title content="Getting Started with Apache Polaris, Prometheus and Jaeger"><meta name=twitter:description content="This example requires jq to be installed on your machine.
+./gradlew \ :polaris-server:assemble \ :polaris-server:quarkusAppPartsBuild --rerun \ -Dquarkus.container-image.build=true Start the docker compose group by running the following command from the root of the repository:
+docker compose -f getting-started/telemetry/docker-compose.yml up To access Polaris from the host machine, first request an access token:
+export POLARIS_TOKEN=$(curl -s http://localhost:8181/api/catalog/v1/oauth/tokens \ --user root:s3cr3t \ -d 'grant_type=client_credentials' \ -d 'scope=PRINCIPAL_ROLE:ALL' | jq -r .access_token) Then, use the access token in the Authorization header when accessing Polaris; you can also test the X-Request-ID header; you should see it in all logs and traces:"><meta itemprop=wordCount content="150"><meta name=twitter:card content="summary"><meta name=twitter:title content="Getting Started wi [...]
Build the Polaris image if it’s not already present locally:
-1./gradlew \ 2 :polaris-server:assemble \ 3 :polaris-server:quarkusAppPartsBuild --rerun \ 4 -Dquarkus.container-image.build=true Start the docker compose group by running the following command from the root of the repository:
-1docker compose -f getting-started/telemetry/docker-compose.yml up To access Polaris from the host machine, first request an access token:"><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css rel=stylesheet integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2 [...]
+./gradlew \ :polaris-server:assemble \ :polaris-server:quarkusAppPartsBuild --rerun \ -Dquarkus.container-image.build=true Start the docker compose group by running the following command from the root of the repository:
+docker compose -f getting-started/telemetry/docker-compose.yml up To access Polaris from the host machine, first request an access token:
+export POLARIS_TOKEN=$(curl -s http://localhost:8181/api/catalog/v1/oauth/tokens \ --user root:s3cr3t \ -d 'grant_type=client_credentials' \ -d 'scope=PRINCIPAL_ROLE:ALL' | jq -r .access_token) Then, use the access token in the Authorization header when accessing Polaris; you can also test the X-Request-ID header; you should see it in all logs and traces:"><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256 [...]
<label for=m-in-devunreleased-check><a href=/in-dev/unreleased/ title="Apache Polaris Documentation (Unreleased)" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleased><span>Unreleased</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child active-path" id=m-in-devunreleasedgetting-started-li><input type=checkbox id=m-in-devunreleasedgetting-started-check checked>
<label for=m-in-devunreleasedgetting-started-check><a href=/in-dev/unreleased/getting-started/ title="Getting Started with Apache Polaris" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleasedgetting-started><span>Getting Started</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedquick-start-li><input type=checkbox id=m-in-devunreleasedgetting-star [...]
<label for=m-in-devunreleasedgetting-startedquick-start-check><a href=/in-dev/unreleased/getting-started/quick-start/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-in-devunreleasedgetting-startedquick-start><span>Quickstart</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedsetup-tools-li><input type=checkbox id=m-in-devunreleasedgetting-startedsetup-tools-check>
@@ -77,20 +81,20 @@ Build the Polaris image if it’s not already present locally:
<label for=m-in-devunreleasedpolaris-api-specspolaris-catalog-api-check><a href=/in-dev/unreleased/polaris-api-specs/polaris-catalog-api/ title="Apache Polaris Catalog Service OpenAPI Specification" class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-in-devunreleasedpolaris-api-specspolaris-catalog-api><span>Catalog API ↗</span></a></label></li></ul></li></ul></li></ul></li></ul></nav></div></aside><aside class="d-none d-xl-block col-xl-2 td-sidebar-toc d-print-none"><div [...]
This content is unreleased and may change before the next Polaris release.
For stable user documentation, see the
-<a href=/releases/latest/>latest release docs</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/docs/>Documentation</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/>Developer Docs</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/getting-started/>Getting Started</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/getting-started/using-polaris/>Using Polaris</a></li><li class="breadcrumb-i [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> :polaris-server:assemble <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> :polaris-server:quarkusAppPartsBuild --rerun <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> -Dquarkus.container-image.build<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#204a87>true</span>
-</span></span></code></pre></div></li><li><p>Start the docker compose group by running the following command from the root of the repository:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span>docker [...]
-</span></span></code></pre></div></li><li><p>To access Polaris from the host machine, first request an access token:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span><span style=color:#204a87>export [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> --user root:s3cr3t <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> -d <span style=color:#4e9a06>'grant_type=client_credentials'</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> -d <span style=color:#4e9a06>'scope=PRINCIPAL_ROLE:ALL'</span> <span style=color:#000;font-weight:700>|</span> jq -r .access_token<span style=color:#204a87;font-weight:700>)</span>
+<a href=/releases/latest/>latest release docs</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/docs/>Documentation</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/>Developer Docs</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/getting-started/>Getting Started</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/getting-started/using-polaris/>Using Polaris</a></li><li class="breadcrumb-i [...]
+</span></span></span><span style=display:flex><span> :polaris-server:assemble <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> :polaris-server:quarkusAppPartsBuild --rerun <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -Dquarkus.container-image.build<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#204a87>true</span>
+</span></span></code></pre></div></li><li><p>Start the docker compose group by running the following command from the root of the repository:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span>docker compose -f getting-started/telemetry/docker-compose.yml up
+</span></span></code></pre></div></li><li><p>To access Polaris from the host machine, first request an access token:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span><span style=color:#204a87>export</span> <span style=color:#000>POLARIS_TOKEN</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#204a87; [...]
+</span></span></span><span style=display:flex><span> --user root:s3cr3t <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -d <span style=color:#4e9a06>'grant_type=client_credentials'</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -d <span style=color:#4e9a06>'scope=PRINCIPAL_ROLE:ALL'</span> <span style=color:#000;font-weight:700>|</span> jq -r .access_token<span style=color:#204a87;font-weight:700>)</span>
</span></span></code></pre></div></li><li><p>Then, use the access token in the Authorization header when accessing Polaris; you can also test
-the <code>X-Request-ID</code> header; you should see it in all logs and traces:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span>curl -v <span style=color:#4e9a06>'http://localhost:8181/api/mana [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> -H <span style=color:#4e9a06>"Authorization: Bearer </span><span style=color:#000>$POLARIS_TOKEN</span><span style=color:#4e9a06>"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> -H <span style=color:#4e9a06>"X-Request-ID: 1234"</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span>curl -v <span style=color:#4e9a06>'http://localhost:8181/api/catalog/v1/config?warehouse=quickstart_catalog'</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span> -H <span style=color:#4e9a06>"Authorization: Bearer </span><span style=color:#000>$POLARIS_TOKEN</span><span style=color:#4e9a06>"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">6</span><span> -H <span style=color:#4e9a06>"X-Request-ID: 5678"</span>
+the <code>X-Request-ID</code> header; you should see it in all logs and traces:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span>curl -v <span style=color:#4e9a06>'http://localhost:8181/api/management/v1/principal-roles'</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -H <span style=color:#4e9a06>"Authorization: Bearer </span><span style=color:#000>$POLARIS_TOKEN</span><span style=color:#4e9a06>"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -H <span style=color:#4e9a06>"X-Request-ID: 1234"</span>
+</span></span><span style=display:flex><span>curl -v <span style=color:#4e9a06>'http://localhost:8181/api/catalog/v1/config?warehouse=quickstart_catalog'</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -H <span style=color:#4e9a06>"Authorization: Bearer </span><span style=color:#000>$POLARIS_TOKEN</span><span style=color:#4e9a06>"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -H <span style=color:#4e9a06>"X-Request-ID: 5678"</span>
</span></span></code></pre></div></li><li><p>Access the following services:</p><ul><li>Prometheus UI: browse to http://localhost:9093 to view metrics.</li><li>Jaeger UI: browse to http://localhost:16686 to view traces.</li></ul></li></ol></div></main></div></div><footer class="td-footer row d-print-none"><div class=container-fluid><div class="row mx-md-2"><div class="td-footer__left col-6 col-sm-4 order-sm-1"><ul class=td-footer__links-list><li class=td-footer__links-item data-bs-toggle= [...]
\ No newline at end of file
diff --git a/in-dev/unreleased/helm-chart/authentication/index.html b/in-dev/unreleased/helm-chart/authentication/index.html
index 49ef9e41b7..964744a847 100644
--- a/in-dev/unreleased/helm-chart/authentication/index.html
+++ b/in-dev/unreleased/helm-chart/authentication/index.html
@@ -4,9 +4,9 @@ Mode Type Description Internal internal Polaris manages credentials and issues t
Overview🔗 Polaris supports three authentication modes:
Mode Type Description Internal internal Polaris manages credentials and issues tokens. Default mode. External external An external Identity Provider (IDP) issues tokens. Polaris validates them via OIDC. Mixed mixed Both internal and external authentication are enabled. For more information on authentication in Polaris, see the Identity Providers section of the documentation."><meta property="og:locale" content="en_us"><meta property="og:type" content="article"><meta property="article:sec [...]
Overview🔗 Polaris supports three authentication modes:
-Mode Type Description Internal internal Polaris manages credentials and issues tokens. Default mode. External external An external Identity Provider (IDP) issues tokens. Polaris validates them via OIDC. Mixed mixed Both internal and external authentication are enabled. For more information on authentication in Polaris, see the Identity Providers section of the documentation."><meta itemprop=wordCount content="776"><meta name=twitter:card content="summary"><meta name=twitter:title content [...]
+Mode Type Description Internal internal Polaris manages credentials and issues tokens. Default mode. External external An external Identity Provider (IDP) issues tokens. Polaris validates them via OIDC. Mixed mixed Both internal and external authentication are enabled. For more information on authentication in Polaris, see the Identity Providers section of the documentation."><meta itemprop=wordCount content="679"><meta name=twitter:card content="summary"><meta name=twitter:title content [...]
Overview🔗 Polaris supports three authentication modes:
-Mode Type Description Internal internal Polaris manages credentials and issues tokens. Default mode. External external An external Identity Provider (IDP) issues tokens. Polaris validates them via OIDC. Mixed mixed Both internal and external authentication are enabled. For more information on authentication in Polaris, see the Identity Providers section of the documentation."><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=sty [...]
+Mode Type Description Internal internal Polaris manages credentials and issues tokens. Default mode. External external An external Identity Provider (IDP) issues tokens. Polaris validates them via OIDC. Mixed mixed Both internal and external authentication are enabled. For more information on authentication in Polaris, see the Identity Providers section of the documentation."><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=sty [...]
<label for=m-in-devunreleased-check><a href=/in-dev/unreleased/ title="Apache Polaris Documentation (Unreleased)" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleased><span>Unreleased</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-in-devunreleasedgetting-started-li><input type=checkbox id=m-in-devunreleasedgetting-started-check>
<label for=m-in-devunreleasedgetting-started-check><a href=/in-dev/unreleased/getting-started/ title="Getting Started with Apache Polaris" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleasedgetting-started><span>Getting Started</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedquick-start-li><input type=checkbox id=m-in-devunreleasedgetting-star [...]
<label for=m-in-devunreleasedgetting-startedquick-start-check><a href=/in-dev/unreleased/getting-started/quick-start/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-in-devunreleasedgetting-startedquick-start><span>Quickstart</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedsetup-tools-li><input type=checkbox id=m-in-devunreleasedgetting-startedsetup-tools-check>
@@ -74,126 +74,126 @@ Mode Type Description Internal internal Polaris manages credentials and issues t
<a class=td-toc-title__link title="Top of page" href=#></a></div><nav id=TableOfContents><ul><li><a href=#overview>Overview</a></li><li><a href=#internal-authentication>Internal Authentication</a><ul><li><a href=#rsa-key-pair-recommended>RSA Key Pair (Recommended)</a></li><li><a href=#symmetric-key>Symmetric Key</a></li><li><a href=#token-lifetime>Token Lifetime</a></li></ul></li><li><a href=#external-authentication-oidc>External Authentication (OIDC)</a><ul><li><a href=#basic-configurat [...]
This content is unreleased and may change before the next Polaris release.
For stable user documentation, see the
-<a href=/releases/latest/>latest release docs</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/docs/>Documentation</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/>Developer Docs</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/helm-chart/>Helm Chart</a></li><li class="breadcrumb-item active" aria-current=page>Authentication</li></ol></nav><div class=td-content><h1>Authentication</h1><header cla [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span>openssl rsa -in private.pem -pubout -out public.pem
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span>kubectl create secret generic polaris-token-keys <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span> --namespace polaris <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">6</span><span> --from-file<span style=color:#ce5c00;font-weight:700>=</span>private.pem <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">7</span><span> --from-file<span style=color:#ce5c00;font-weight:700>=</span>public.pem
-</span></span></code></pre></div><p>Configure the chart to use the RSA key pair:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-yaml data-lang=yaml><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span><span style=color:#204a87;font-weight:700>authentication</span><span s [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>type</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>internal</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>tokenBroker</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>type</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>rsa-key-pair</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>secret</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">6</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>name</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"polaris-token-keys"</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">7</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>rsaKeyPair</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">8</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>publicKey</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"public.pem"</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">9</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>privateKey</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"private.pem"</span><span style=color:#f8f8f8>
-</span></span></span></code></pre></div><h3 id=symmetric-key id=symmetric-key>Symmetric Key<a class=heading-anchor href=#symmetric-key aria-label=Anchor>🔗</a></h3><p>Symmetric keys use the same secret for both signing and verification.</p><p>Generate a symmetric key and create a Kubernetes secret:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span styl [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span>kubectl create secret generic polaris-token-keys <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> --namespace polaris <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span> --from-file<span style=color:#ce5c00;font-weight:700>=</span>symmetric.key
-</span></span></code></pre></div><p>Configure the chart:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-yaml data-lang=yaml><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span><span style=color:#204a87;font-weight:700>authentication</span><span style=color:#000;font-wei [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>type</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>internal</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>tokenBroker</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>type</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>symmetric-key</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>secret</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">6</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>name</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"polaris-token-keys"</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">7</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>symmetricKey</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">8</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>secretKey</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"symmetric.key"</span><span style=color:#f8f8f8>
-</span></span></span></code></pre></div><h3 id=token-lifetime id=token-lifetime>Token Lifetime<a class=heading-anchor href=#token-lifetime aria-label=Anchor>🔗</a></h3><p>Configure the maximum token lifetime:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-yaml data-lang=yaml><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margi [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>tokenBroker</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>maxTokenGeneration</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>PT1H </span><span style=color:#f8f8f8> </span><span style=color:#8f5902;font-style:italic># 1 hour (ISO 8 [...]
-</span></span></span></code></pre></div><h2 id=external-authentication-oidc id=external-authentication-oidc>External Authentication (OIDC)<a class=heading-anchor href=#external-authentication-oidc aria-label=Anchor>🔗</a></h2><p>External authentication delegates token issuance to an external Identity Provider (IDP) that supports OpenID Connect (OIDC). Polaris validates tokens using the IDP’s public keys.</p><p>Polaris works with any OIDC-compliant identity provider.</p><h3 id=basic- [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>type</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>external</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span><span style=color:#204a87;font-weight:700>oidc</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>authServeUrl</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"https://your-idp.example.com/realms/polaris"</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">6</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>client</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">7</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>id</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>polaris</span><span style=color:#f8f8f8>
-</span></span></span></code></pre></div><h3 id=configuration-with-client-secret id=configuration-with-client-secret>Configuration with Client Secret<a class=heading-anchor href=#configuration-with-client-secret aria-label=Anchor>🔗</a></h3><p>If your IDP requires a client secret for token introspection:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> --namespace polaris <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> --from-literal<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#000>clientSecret</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>'your-client-secret'</span>
-</span></span></code></pre></div><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-yaml data-lang=yaml><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 1</span><span><span style=color:#204a87;font-weight:700>authentication</span><span style=color:#000;font-weight:700>:</span><span styl [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>type</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>external</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span><span style=color:#204a87;font-weight:700>oidc</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>authServeUrl</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"https://your-idp.example.com/realms/polaris"</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>client</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>id</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>polaris</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>secret</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>name</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"polaris-oidc-client"</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">10</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>key</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"clientSecret"</span><span style=color:#f8f8f8>
-</span></span></span></code></pre></div><h3 id=principal-mapping id=principal-mapping>Principal Mapping<a class=heading-anchor href=#principal-mapping aria-label=Anchor>🔗</a></h3><p>Configure how Polaris maps OIDC token claims to Polaris principals:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-yaml data-lang=yaml><span style=display:flex><span style="white-space:pre;-webk [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>principalMapper</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>type</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>default</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>idClaimPath</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"sub"</span><span style=color:#f8f8f8> </span><span style=color:#8f5902;font-style: [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>nameClaimPath</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"preferred_username"</span><span style=color:#f8f8f8> </span><span style=color:#8f5902;font-style: [...]
-</span></span></span></code></pre></div><p>For nested claims, use <code>/</code> as a separator:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-yaml data-lang=yaml><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span><span style=color:#204a87;font-weight:700>oidc</span>< [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>principalMapper</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>idClaimPath</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"polaris/principal_id"</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>nameClaimPath</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"polaris/principal_name"</span><span style=color:#f8f8f8>
-</span></span></span></code></pre></div><h3 id=role-mapping id=role-mapping>Role Mapping<a class=heading-anchor href=#role-mapping aria-label=Anchor>🔗</a></h3><p>Configure how Polaris maps OIDC token claims to Polaris roles:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-yaml data-lang=yaml><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user- [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>principalRolesMapper</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>type</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>default</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>rolesClaimPath</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"realm_access/roles"</span><span style=color:#f8f8f8> </span><span style=color:#8f5902;font-style [...]
-</span></span></span></code></pre></div><h4 id=role-filtering id=role-filtering>Role Filtering<a class=heading-anchor href=#role-filtering aria-label=Anchor>🔗</a></h4><p>Filter which roles from the token are passed to Polaris:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-yaml data-lang=yaml><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;use [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>principalRolesMapper</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>filter</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"^POLARIS_.*"</span><span style=color:#f8f8f8> </span><span style=color:#8f5902;font-style:italic># Only [...]
-</span></span></span></code></pre></div><h4 id=role-name-transformation id=role-name-transformation>Role Name Transformation<a class=heading-anchor href=#role-name-transformation aria-label=Anchor>🔗</a></h4><p>Transform role names from the IDP format to Polaris format using regex mappings:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-yaml data-lang=yaml><span style=displa [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>principalRolesMapper</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>mappings</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span><span style=color:#f8f8f8> </span>- <span style=color:#204a87;font-weight:700>regex</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"^role_(.*)"</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>replacement</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"PRINCIPAL_ROLE:$1"</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">6</span><span><span style=color:#f8f8f8> </span>- <span style=color:#204a87;font-weight:700>regex</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"^admin$"</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">7</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>replacement</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"PRINCIPAL_ROLE:service_admin"</span><span style=color:#f8f8f8>
-</span></span></span></code></pre></div><p>The default Polaris authenticator expects roles in the format <code>PRINCIPAL_ROLE:<role_name></code>.</p><h3 id=full-example id=full-example>Full Example<a class=heading-anchor href=#full-example aria-label=Anchor>🔗</a></h3><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-yaml data-lang=yaml><span style=display:flex><span style="whi [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>type</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>external</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span><span style=color:#204a87;font-weight:700>oidc</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>authServeUrl</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"https://keycloak.example.com/realms/polaris"</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>client</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>id</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>polaris</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>secret</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>name</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"polaris-oidc-client"</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">10</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>key</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"clientSecret"</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">11</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>principalMapper</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">12</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>idClaimPath</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"sub"</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">13</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>nameClaimPath</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"preferred_username"</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">14</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>principalRolesMapper</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">15</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>rolesClaimPath</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"realm_access/roles"</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">16</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>mappings</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">17</span><span><span style=color:#f8f8f8> </span>- <span style=color:#204a87;font-weight:700>regex</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"^polaris_(.*)"</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">18</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>replacement</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"PRINCIPAL_ROLE:$1"</span><span style=color:#f8f8f8>
-</span></span></span></code></pre></div><h2 id=mixed-authentication id=mixed-authentication>Mixed Authentication<a class=heading-anchor href=#mixed-authentication aria-label=Anchor>🔗</a></h2><p>Mixed mode enables both internal and external authentication simultaneously. This is useful during migration from internal to external authentication, or when some clients use internal credentials while others use external tokens.</p><div class=highlight><pre tabindex=0 style=background-color:#f8f [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>type</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>mixed</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>tokenBroker</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>type</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>rsa-key-pair</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>secret</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>name</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"polaris-token-keys"</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>rsaKeyPair</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>publicKey</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"public.pem"</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>privateKey</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"private.pem"</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">10</span><span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">11</span><span><span style=color:#204a87;font-weight:700>oidc</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">12</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>authServeUrl</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"https://your-idp.example.com/realms/polaris"</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">13</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>client</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">14</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>id</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>polaris</span><span style=color:#f8f8f8>
-</span></span></span></code></pre></div><h2 id=per-realm-authentication id=per-realm-authentication>Per-Realm Authentication<a class=heading-anchor href=#per-realm-authentication aria-label=Anchor>🔗</a></h2><p>You can configure different authentication settings for different realms:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-yaml data-lang=yaml><span style=display:flex> [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>type</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>internal </span><span style=color:#f8f8f8> </span><span style=color:#8f5902;font-style:italic># Default for all realms</s [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>realmOverrides</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>production</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>type</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>external</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">6</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>staging</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">7</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>type</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>mixed</span><span style=color:#f8f8f8>
-</span></span></span></code></pre></div><h2 id=advanced-configuration id=advanced-configuration>Advanced Configuration<a class=heading-anchor href=#advanced-configuration aria-label=Anchor>🔗</a></h2><p>For advanced OIDC configuration not covered by the chart values, use the <code>advancedConfig</code> section to pass Quarkus OIDC properties directly:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:no [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>quarkus.oidc.token.issuer</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"https://your-idp.example.com"</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>quarkus.oidc.token.audience</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"polaris-api"</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>quarkus.oidc.authentication.scopes</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"openid,profile,email"</span><span style=color:#f8f8f8>
-</span></span></span></code></pre></div><p>See the <a href=https://quarkus.io/guides/security-oidc-bearer-token-authentication>Quarkus OIDC configuration reference</a> for all available options.</p><h2 id=disabling-the-token-service id=disabling-the-token-service>Disabling the Token Service<a class=heading-anchor href=#disabling-the-token-service aria-label=Anchor>🔗</a></h2><p>When using external authentication exclusively, you can disable the internal token service:</p><div class=highli [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>type</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>external</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>tokenService</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>type</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>disabled</span><span style=color:#f8f8f8>
+<a href=/releases/latest/>latest release docs</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/docs/>Documentation</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/>Developer Docs</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/helm-chart/>Helm Chart</a></li><li class="breadcrumb-item active" aria-current=page>Authentication</li></ol></nav><div class=td-content><h1>Authentication</h1><header cla [...]
+</span></span><span style=display:flex><span>openssl rsa -in private.pem -pubout -out public.pem
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span>kubectl create secret generic polaris-token-keys <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --namespace polaris <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --from-file<span style=color:#ce5c00;font-weight:700>=</span>private.pem <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --from-file<span style=color:#ce5c00;font-weight:700>=</span>public.pem
+</span></span></code></pre></div><p>Configure the chart to use the RSA key pair:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-yaml data-lang=yaml><span style=display:flex><span><span style=color:#204a87;font-weight:700>authentication</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>type</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>internal</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>tokenBroker</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>type</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>rsa-key-pair</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>secret</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>name</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"polaris-token-keys"</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>rsaKeyPair</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>publicKey</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"public.pem"</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>privateKey</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"private.pem"</span><span style=color:#f8f8f8>
+</span></span></span></code></pre></div><h3 id=symmetric-key id=symmetric-key>Symmetric Key<a class=heading-anchor href=#symmetric-key aria-label=Anchor>🔗</a></h3><p>Symmetric keys use the same secret for both signing and verification.</p><p>Generate a symmetric key and create a Kubernetes secret:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span styl [...]
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span>kubectl create secret generic polaris-token-keys <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --namespace polaris <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --from-file<span style=color:#ce5c00;font-weight:700>=</span>symmetric.key
+</span></span></code></pre></div><p>Configure the chart:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-yaml data-lang=yaml><span style=display:flex><span><span style=color:#204a87;font-weight:700>authentication</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>type</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>internal</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>tokenBroker</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>type</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>symmetric-key</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>secret</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>name</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"polaris-token-keys"</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>symmetricKey</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>secretKey</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"symmetric.key"</span><span style=color:#f8f8f8>
+</span></span></span></code></pre></div><h3 id=token-lifetime id=token-lifetime>Token Lifetime<a class=heading-anchor href=#token-lifetime aria-label=Anchor>🔗</a></h3><p>Configure the maximum token lifetime:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-yaml data-lang=yaml><span style=display:flex><span><span style=color:#204a87;font-weight:700>authentication</span><span s [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>tokenBroker</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>maxTokenGeneration</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>PT1H </span><span style=color:#f8f8f8> </span><span style=color:#8f5902;font-style:italic># 1 hour (ISO 8601 duration)</span><span style=color:#f8f8f8>
+</span></span></span></code></pre></div><h2 id=external-authentication-oidc id=external-authentication-oidc>External Authentication (OIDC)<a class=heading-anchor href=#external-authentication-oidc aria-label=Anchor>🔗</a></h2><p>External authentication delegates token issuance to an external Identity Provider (IDP) that supports OpenID Connect (OIDC). Polaris validates tokens using the IDP’s public keys.</p><p>Polaris works with any OIDC-compliant identity provider.</p><h3 id=basic- [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>type</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>external</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>oidc</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>authServeUrl</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"https://your-idp.example.com/realms/polaris"</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>client</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>id</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>polaris</span><span style=color:#f8f8f8>
+</span></span></span></code></pre></div><h3 id=configuration-with-client-secret id=configuration-with-client-secret>Configuration with Client Secret<a class=heading-anchor href=#configuration-with-client-secret aria-label=Anchor>🔗</a></h3><p>If your IDP requires a client secret for token introspection:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span [...]
+</span></span></span><span style=display:flex><span> --namespace polaris <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --from-literal<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#000>clientSecret</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>'your-client-secret'</span>
+</span></span></code></pre></div><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-yaml data-lang=yaml><span style=display:flex><span><span style=color:#204a87;font-weight:700>authentication</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>type</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>external</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>oidc</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>authServeUrl</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"https://your-idp.example.com/realms/polaris"</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>client</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>id</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>polaris</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>secret</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>name</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"polaris-oidc-client"</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>key</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"clientSecret"</span><span style=color:#f8f8f8>
+</span></span></span></code></pre></div><h3 id=principal-mapping id=principal-mapping>Principal Mapping<a class=heading-anchor href=#principal-mapping aria-label=Anchor>🔗</a></h3><p>Configure how Polaris maps OIDC token claims to Polaris principals:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-yaml data-lang=yaml><span style=display:flex><span><span style=color:#204a87;fo [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>principalMapper</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>type</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>default</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>idClaimPath</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"sub"</span><span style=color:#f8f8f8> </span><span style=color:#8f5902;font-style:italic># Claim containing the principal ID</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>nameClaimPath</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"preferred_username"</span><span style=color:#f8f8f8> </span><span style=color:#8f5902;font-style:italic># Claim containing the principal name</span><span style=color:#f8f8f8>
+</span></span></span></code></pre></div><p>For nested claims, use <code>/</code> as a separator:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-yaml data-lang=yaml><span style=display:flex><span><span style=color:#204a87;font-weight:700>oidc</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>principalMapper</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>idClaimPath</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"polaris/principal_id"</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>nameClaimPath</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"polaris/principal_name"</span><span style=color:#f8f8f8>
+</span></span></span></code></pre></div><h3 id=role-mapping id=role-mapping>Role Mapping<a class=heading-anchor href=#role-mapping aria-label=Anchor>🔗</a></h3><p>Configure how Polaris maps OIDC token claims to Polaris roles:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-yaml data-lang=yaml><span style=display:flex><span><span style=color:#204a87;font-weight:700>oidc</span> [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>principalRolesMapper</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>type</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>default</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>rolesClaimPath</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"realm_access/roles"</span><span style=color:#f8f8f8> </span><span style=color:#8f5902;font-style:italic># Path to roles in the token</span><span style=color:#f8f8f8>
+</span></span></span></code></pre></div><h4 id=role-filtering id=role-filtering>Role Filtering<a class=heading-anchor href=#role-filtering aria-label=Anchor>🔗</a></h4><p>Filter which roles from the token are passed to Polaris:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-yaml data-lang=yaml><span style=display:flex><span><span style=color:#204a87;font-weight:700>oidc</spa [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>principalRolesMapper</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>filter</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"^POLARIS_.*"</span><span style=color:#f8f8f8> </span><span style=color:#8f5902;font-style:italic># Only include roles starting with POLARIS_</span><span style=color:#f8f8f8>
+</span></span></span></code></pre></div><h4 id=role-name-transformation id=role-name-transformation>Role Name Transformation<a class=heading-anchor href=#role-name-transformation aria-label=Anchor>🔗</a></h4><p>Transform role names from the IDP format to Polaris format using regex mappings:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-yaml data-lang=yaml><span style=displa [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>principalRolesMapper</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>mappings</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span>- <span style=color:#204a87;font-weight:700>regex</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"^role_(.*)"</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>replacement</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"PRINCIPAL_ROLE:$1"</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span>- <span style=color:#204a87;font-weight:700>regex</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"^admin$"</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>replacement</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"PRINCIPAL_ROLE:service_admin"</span><span style=color:#f8f8f8>
+</span></span></span></code></pre></div><p>The default Polaris authenticator expects roles in the format <code>PRINCIPAL_ROLE:<role_name></code>.</p><h3 id=full-example id=full-example>Full Example<a class=heading-anchor href=#full-example aria-label=Anchor>🔗</a></h3><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-yaml data-lang=yaml><span style=display:flex><span><span styl [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>type</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>external</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>oidc</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>authServeUrl</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"https://keycloak.example.com/realms/polaris"</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>client</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>id</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>polaris</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>secret</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>name</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"polaris-oidc-client"</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>key</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"clientSecret"</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>principalMapper</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>idClaimPath</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"sub"</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>nameClaimPath</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"preferred_username"</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>principalRolesMapper</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>rolesClaimPath</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"realm_access/roles"</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>mappings</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span>- <span style=color:#204a87;font-weight:700>regex</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"^polaris_(.*)"</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>replacement</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"PRINCIPAL_ROLE:$1"</span><span style=color:#f8f8f8>
+</span></span></span></code></pre></div><h2 id=mixed-authentication id=mixed-authentication>Mixed Authentication<a class=heading-anchor href=#mixed-authentication aria-label=Anchor>🔗</a></h2><p>Mixed mode enables both internal and external authentication simultaneously. This is useful during migration from internal to external authentication, or when some clients use internal credentials while others use external tokens.</p><div class=highlight><pre tabindex=0 style=background-color:#f8f [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>type</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>mixed</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>tokenBroker</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>type</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>rsa-key-pair</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>secret</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>name</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"polaris-token-keys"</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>rsaKeyPair</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>publicKey</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"public.pem"</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>privateKey</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"private.pem"</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>oidc</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>authServeUrl</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"https://your-idp.example.com/realms/polaris"</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>client</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>id</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>polaris</span><span style=color:#f8f8f8>
+</span></span></span></code></pre></div><h2 id=per-realm-authentication id=per-realm-authentication>Per-Realm Authentication<a class=heading-anchor href=#per-realm-authentication aria-label=Anchor>🔗</a></h2><p>You can configure different authentication settings for different realms:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-yaml data-lang=yaml><span style=display:flex> [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>type</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>internal </span><span style=color:#f8f8f8> </span><span style=color:#8f5902;font-style:italic># Default for all realms</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>realmOverrides</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>production</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>type</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>external</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>staging</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>type</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>mixed</span><span style=color:#f8f8f8>
+</span></span></span></code></pre></div><h2 id=advanced-configuration id=advanced-configuration>Advanced Configuration<a class=heading-anchor href=#advanced-configuration aria-label=Anchor>🔗</a></h2><p>For advanced OIDC configuration not covered by the chart values, use the <code>advancedConfig</code> section to pass Quarkus OIDC properties directly:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:no [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>quarkus.oidc.token.issuer</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"https://your-idp.example.com"</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>quarkus.oidc.token.audience</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"polaris-api"</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>quarkus.oidc.authentication.scopes</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"openid,profile,email"</span><span style=color:#f8f8f8>
+</span></span></span></code></pre></div><p>See the <a href=https://quarkus.io/guides/security-oidc-bearer-token-authentication>Quarkus OIDC configuration reference</a> for all available options.</p><h2 id=disabling-the-token-service id=disabling-the-token-service>Disabling the Token Service<a class=heading-anchor href=#disabling-the-token-service aria-label=Anchor>🔗</a></h2><p>When using external authentication exclusively, you can disable the internal token service:</p><div class=highli [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>type</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>external</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>tokenService</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>type</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>disabled</span><span style=color:#f8f8f8>
</span></span></span></code></pre></div><p>This prevents Polaris from issuing tokens and ensures all authentication goes through the external IDP.</p></div></main></div></div><footer class="td-footer row d-print-none"><div class=container-fluid><div class="row mx-md-2"><div class="td-footer__left col-6 col-sm-4 order-sm-1"><ul class=td-footer__links-list><li class=td-footer__links-item data-bs-toggle=tooltip title=Slack aria-label=Slack><a target=_blank rel=noopener href=https://apache-p [...]
\ No newline at end of file
diff --git a/in-dev/unreleased/helm-chart/dev/index.html b/in-dev/unreleased/helm-chart/dev/index.html
index cc204d4015..476071b1d2 100644
--- a/in-dev/unreleased/helm-chart/dev/index.html
+++ b/in-dev/unreleased/helm-chart/dev/index.html
@@ -1,12 +1,12 @@
<!doctype html><html itemscope itemtype=http://schema.org/WebPage lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon.png sizes=100x100><link rel=icon type=image/png href=/favicons/android-ch [...]
Local Development with Minikube🔗 Prerequisites🔗 Minikube installed Helm 3.x or 4.x installed kubectl installed Starting Minikube🔗 Start a local Minikube cluster:
-1minikube start Installing from the Official Repository🔗 Add the official Polaris Helm repository and install the chart:"><meta property="og:url" content="https://polaris.apache.org/in-dev/unreleased/helm-chart/dev/"><meta property="og:site_name" content="Apache Polaris"><meta property="og:title" content="Development & Testing"><meta property="og:description" content="This guide provides instructions for developers who want to work with the Polaris Helm chart locally, including setting u [...]
+minikube start Installing from the Official Repository🔗 Add the official Polaris Helm repository and install the chart:"><meta property="og:url" content="https://polaris.apache.org/in-dev/unreleased/helm-chart/dev/"><meta property="og:site_name" content="Apache Polaris"><meta property="og:title" content="Development & Testing"><meta property="og:description" content="This guide provides instructions for developers who want to work with the Polaris Helm chart locally, including setting up [...]
Local Development with Minikube🔗 Prerequisites🔗 Minikube installed Helm 3.x or 4.x installed kubectl installed Starting Minikube🔗 Start a local Minikube cluster:
-1minikube start Installing from the Official Repository🔗 Add the official Polaris Helm repository and install the chart:"><meta property="og:locale" content="en_us"><meta property="og:type" content="article"><meta property="article:section" content="in-dev"><meta itemprop=name content="Development & Testing"><meta itemprop=description content="This guide provides instructions for developers who want to work with the Polaris Helm chart locally, including setting up a local Kubernetes clus [...]
+minikube start Installing from the Official Repository🔗 Add the official Polaris Helm repository and install the chart:"><meta property="og:locale" content="en_us"><meta property="og:type" content="article"><meta property="article:section" content="in-dev"><meta itemprop=name content="Development & Testing"><meta itemprop=description content="This guide provides instructions for developers who want to work with the Polaris Helm chart locally, including setting up a local Kubernetes clust [...]
Local Development with Minikube🔗 Prerequisites🔗 Minikube installed Helm 3.x or 4.x installed kubectl installed Starting Minikube🔗 Start a local Minikube cluster:
-1minikube start Installing from the Official Repository🔗 Add the official Polaris Helm repository and install the chart:"><meta itemprop=wordCount content="836"><meta name=twitter:card content="summary"><meta name=twitter:title content="Development & Testing"><meta name=twitter:description content="This guide provides instructions for developers who want to work with the Polaris Helm chart locally, including setting up a local Kubernetes cluster, building from source, and running tests.
+minikube start Installing from the Official Repository🔗 Add the official Polaris Helm repository and install the chart:"><meta itemprop=wordCount content="808"><meta name=twitter:card content="summary"><meta name=twitter:title content="Development & Testing"><meta name=twitter:description content="This guide provides instructions for developers who want to work with the Polaris Helm chart locally, including setting up a local Kubernetes cluster, building from source, and running tests.
Local Development with Minikube🔗 Prerequisites🔗 Minikube installed Helm 3.x or 4.x installed kubectl installed Starting Minikube🔗 Start a local Minikube cluster:
-1minikube start Installing from the Official Repository🔗 Add the official Polaris Helm repository and install the chart:"><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css rel=stylesheet integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJf [...]
+minikube start Installing from the Official Repository🔗 Add the official Polaris Helm repository and install the chart:"><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css rel=stylesheet integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi [...]
<label for=m-in-devunreleased-check><a href=/in-dev/unreleased/ title="Apache Polaris Documentation (Unreleased)" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleased><span>Unreleased</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-in-devunreleasedgetting-started-li><input type=checkbox id=m-in-devunreleasedgetting-started-check>
<label for=m-in-devunreleasedgetting-started-check><a href=/in-dev/unreleased/getting-started/ title="Getting Started with Apache Polaris" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleasedgetting-started><span>Getting Started</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedquick-start-li><input type=checkbox id=m-in-devunreleasedgetting-star [...]
<label for=m-in-devunreleasedgetting-startedquick-start-check><a href=/in-dev/unreleased/getting-started/quick-start/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-in-devunreleasedgetting-startedquick-start><span>Quickstart</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedsetup-tools-li><input type=checkbox id=m-in-devunreleasedgetting-startedsetup-tools-check>
@@ -74,69 +74,69 @@ Local Development with Minikube🔗 Prerequisites🔗 Minikube installed Helm 3.
<a class=td-toc-title__link title="Top of page" href=#></a></div><nav id=TableOfContents><ul><li><a href=#local-development-with-minikube>Local Development with Minikube</a><ul><li><a href=#prerequisites>Prerequisites</a></li><li><a href=#starting-minikube>Starting Minikube</a></li><li><a href=#installing-from-the-official-repository>Installing from the Official Repository</a></li></ul></li><li><a href=#building-and-installing-from-source>Building and Installing from Source</a><ul><li><a [...]
This content is unreleased and may change before the next Polaris release.
For stable user documentation, see the
-<a href=/releases/latest/>latest release docs</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/docs/>Documentation</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/>Developer Docs</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/helm-chart/>Helm Chart</a></li><li class="breadcrumb-item active" aria-current=page>Development & Testing</li></ol></nav><div class=td-content><h1>Development & Testing</ [...]
-</span></span></code></pre></div><h3 id=installing-from-the-official-repository id=installing-from-the-official-repository>Installing from the Official Repository<a class=heading-anchor href=#installing-from-the-official-repository aria-label=Anchor>🔗</a></h3><p>Add the official Polaris Helm repository and install the chart:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-ba [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span>helm repo update
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span>kubectl create namespace polaris
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span>helm install polaris polaris/polaris --namespace polaris
-</span></span></code></pre></div><p>Verify the installation:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span>helm <span style=color:#204a87>test</span> polaris --namespace polaris
-</span></span></code></pre></div><h2 id=building-and-installing-from-source id=building-and-installing-from-source>Building and Installing from Source<a class=heading-anchor href=#building-and-installing-from-source aria-label=Anchor>🔗</a></h2><p>This section assumes you have cloned the Polaris Git repository and set up prerequisites to build the project. See the <a href=/in-dev/unreleased/getting-started/install-dependencies/>Install Dependencies</a> guide for details.</p><h3 id=buildin [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#204a87>eval</span> <span style=color:#204a87;font-weight:700>$(</span>minikube docker-env<span style=color:#204a87;font-weight:700>)</span>
-</span></span></code></pre></div><p>Build the container images. The Polaris server image is required, the admin tool image is optional (useful for bootstrapping realms if necessary, see below):</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;p [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> :polaris-server:assemble <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> :polaris-server:quarkusAppPartsBuild --rerun <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> :polaris-admin:assemble <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span> :polaris-admin:quarkusAppPartsBuild --rerun <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">6</span><span> -Dquarkus.container-image.build<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#204a87>true</span>
-</span></span></code></pre></div><p>Alternatively, you can use Make to start Minikube and build the images:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span>make minikube-start-cluster
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span>make build
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span>make minikube-load-images
-</span></span></code></pre></div><div class="alert alert-info"><p class=alert-heading>💡 Tip</p>Do not use the <code>minikube-load-images</code> target on a shell session where you have already evaluated <code>$(minikube docker-env)</code>, or the target won’t be able to load the images into Minikube.</div><h3 id=creating-the-namespace-and-fixtures id=creating-the-namespace-and-fixtures>Creating the Namespace and Fixtures<a class=heading-anchor href=#creating-the-namespace-and-fixtu [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span>kubectl apply --namespace polaris -f helm/polaris/ci/fixtures/
-</span></span></code></pre></div><p>The fixtures deploy a PostgreSQL instance and a MongoDB instance that can be used for testing purposes. If you plan to test with persistence backends, wait for the database pods to be ready:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;use [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span>kubectl <span style=color:#204a87>wait</span> --namespace polaris --for<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#000>condition</span><span style=color:#ce5c00;font-weight:700>=</span>ready pod --selector<span style=color:#ce5c00;font-weight:700>=</span>app.kubernetes.io/name<span style=color: [...]
-</span></span></code></pre></div><p>Alternatively, you can use Make to deploy the fixtures:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span>make helm-fixtures
-</span></span></code></pre></div><div class="alert alert-warning"><p class=alert-heading>⚠️ Warning</p>The fixtures in <code>helm/polaris/ci/fixtures/</code> are intended for testing purposes only and are not suitable for production use. Especially, the PostgreSQL and MongoDB instances are configured without encryption or security and should never be deployed as is in production!</div><h3 id=installing-the-chart-manually id=installing-the-chart-manually>Installing the Chart Manually<a cl [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span>helm upgrade --install --namespace polaris polaris helm/polaris
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span><span style=color:#8f5902;font-style:italic># Persistent backend</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span>helm upgrade --install --namespace polaris <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">6</span><span> --values helm/polaris/ci/persistence-values.yaml <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">7</span><span> polaris helm/polaris
-</span></span></code></pre></div><h3 id=bootstrapping-realms-for-development id=bootstrapping-realms-for-development>Bootstrapping Realms for Development<a class=heading-anchor href=#bootstrapping-realms-for-development aria-label=Anchor>🔗</a></h3><p>When doing adhoc testing with a persistent backend, you may want to bootstrap all the realms using the admin tool. For more information, see the <a href=/in-dev/unreleased/admin-tool/#bootstrapping-realms-and-principal-credentials>Admin Tool [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span> -n polaris <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span> --image<span style=color:#ce5c00;font-weight:700>=</span>apache/polaris-admin-tool:latest <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span> --restart<span style=color:#ce5c00;font-weight:700>=</span>Never <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span> --rm -it <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span> --env<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"polaris.persistence.type=relational-jdbc"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span> --env<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"quarkus.datasource.username=</span><span style=color:#204a87;font-weight:700>$(</span>kubectl get secret polaris-persistence -n polaris -o <span style=color:#000>jsonpath</span><span style=color:#ce5c00;font-weight:700>=</sp [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span> --env<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"quarkus.datasource.password=</span><span style=color:#204a87;font-weight:700>$(</span>kubectl get secret polaris-persistence -n polaris -o <span style=color:#000>jsonpath</span><span style=color:#ce5c00;font-weight:700>=</sp [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span> --env<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"quarkus.datasource.jdbc.url=</span><span style=color:#204a87;font-weight:700>$(</span>kubectl get secret polaris-persistence -n polaris -o <span style=color:#000>jsonpath</span><span style=color:#ce5c00;font-weight:700>=</sp [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">10</span><span> -- <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">11</span><span> bootstrap -r POLARIS -c POLARIS,root,s3cr3t
-</span></span></code></pre></div><p>Example for the NoSQL (MongoDB) backend:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 1</span><span>kubectl run polaris-bootstrap <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span> -n polaris <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span> --image<span style=color:#ce5c00;font-weight:700>=</span>apache/polaris-admin-tool:latest <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span> --restart<span style=color:#ce5c00;font-weight:700>=</span>Never <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span> --rm -it <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span> --env<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"polaris.persistence.type=nosql"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span> --env<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"polaris.persistence.nosql.backend=MongoDb"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span> --env<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"quarkus.mongodb.database=polaris"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span> --env<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"quarkus.mongodb.connection-string=</span><span style=color:#204a87;font-weight:700>$(</span>kubectl get secret polaris-nosql-persistence -n polaris -o <span style=color:#000>jsonpath</span><span style=color:#ce5c00;font-weig [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">10</span><span> -- <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">11</span><span> bootstrap -r POLARIS -c POLARIS,root,s3cr3t
-</span></span></code></pre></div><p>Both commands above bootstrap a realm named <code>POLARIS</code> with root password: <code>s3cr3t</code>.</p><div class="alert alert-info"><p class=alert-heading>📝 Note</p>The Helm integration tests (see below) do not require bootstrapping realms, as they do not exercise (yet) Polaris REST APIs.</div><h2 id=running-chart-tests id=running-chart-tests>Running Chart Tests<a class=heading-anchor href=#running-chart-tests aria-label=Anchor>🔗</a></h2><h3 id= [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span>brew install yamllint
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span>make helm-install-plugins
-</span></span></code></pre></div><p>The following tools will be installed:</p><ul><li><a href=https://github.com/helm-unittest/helm-unittest>Helm Unit Test</a></li><li><a href=https://github.com/losisin/helm-values-schema-json>Helm JSON Schema</a></li><li><a href=https://github.com/helm/chart-testing>Chart Testing</a></li><li><a href=https://github.com/adrienverge/yamllint>yamllint</a></li></ul><h3 id=unit-tests id=unit-tests>Unit Tests<a class=heading-anchor href=#unit-tests aria-label= [...]
-</span></span></code></pre></div><h3 id=linting id=linting>Linting<a class=heading-anchor href=#linting aria-label=Anchor>🔗</a></h3><p>Lint the chart using the Chart Testing tool:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em; [...]
-</span></span></code></pre></div><h3 id=making-changes-to-documentation-or-schema id=making-changes-to-documentation-or-schema>Making Changes to Documentation or Schema<a class=heading-anchor href=#making-changes-to-documentation-or-schema aria-label=Anchor>🔗</a></h3><p>If you make changes to the Helm chart’s <code>values.yaml</code> file, you need to regenerate the documentation and schema. Run from the Polaris repo root:</p><div class=highlight><pre tabindex=0 style=background-co [...]
-</span></span></code></pre></div><p>Alternatively, you can run:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span>make helm
-</span></span></code></pre></div><p>This will run all Helm-related targets, including unit tests, linting, schema generation, and documentation generation (it will not run integration tests though).</p><h3 id=integration-tests id=integration-tests>Integration Tests<a class=heading-anchor href=#integration-tests aria-label=Anchor>🔗</a></h3><p>Integration tests are tests executed with the <code>ct install</code> tool. They require a Kubernetes cluster with fixtures deployed, as explained i [...]
-</span></span></code></pre></div><p>The above command will build and load the images into Minikube, deploy the fixtures, and run all <code>ct install</code> tests.</p><h2 id=cleanup id=cleanup>Cleanup<a class=heading-anchor href=#cleanup aria-label=Anchor>🔗</a></h2><p>Uninstall the chart, remove resources and delete the namespace:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=langu [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span>kubectl delete namespace polaris --wait<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#204a87>true</span> --ignore-not-found
-</span></span></code></pre></div><p>The stop Minikube if desired:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span>minikube stop
-</span></span></code></pre></div><p>Alternatively, you can use Make to perform the cleanup:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span>make helm-fixtures-cleanup
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span>make minikube-stop-cluster
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span>make minikube-cleanup <span style=color:#8f5902;font-style:italic># will delete the Minikube cluster</span>
+<a href=/releases/latest/>latest release docs</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/docs/>Documentation</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/>Developer Docs</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/helm-chart/>Helm Chart</a></li><li class="breadcrumb-item active" aria-current=page>Development & Testing</li></ol></nav><div class=td-content><h1>Development & Testing</ [...]
+</span></span></code></pre></div><h3 id=installing-from-the-official-repository id=installing-from-the-official-repository>Installing from the Official Repository<a class=heading-anchor href=#installing-from-the-official-repository aria-label=Anchor>🔗</a></h3><p>Add the official Polaris Helm repository and install the chart:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-ba [...]
+</span></span><span style=display:flex><span>helm repo update
+</span></span><span style=display:flex><span>kubectl create namespace polaris
+</span></span><span style=display:flex><span>helm install polaris polaris/polaris --namespace polaris
+</span></span></code></pre></div><p>Verify the installation:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span>helm <span style=color:#204a87>test</span> polaris --namespace polaris
+</span></span></code></pre></div><h2 id=building-and-installing-from-source id=building-and-installing-from-source>Building and Installing from Source<a class=heading-anchor href=#building-and-installing-from-source aria-label=Anchor>🔗</a></h2><p>This section assumes you have cloned the Polaris Git repository and set up prerequisites to build the project. See the <a href=/in-dev/unreleased/getting-started/install-dependencies/>Install Dependencies</a> guide for details.</p><h3 id=buildin [...]
+</span></span><span style=display:flex><span><span style=color:#204a87>eval</span> <span style=color:#204a87;font-weight:700>$(</span>minikube docker-env<span style=color:#204a87;font-weight:700>)</span>
+</span></span></code></pre></div><p>Build the container images. The Polaris server image is required, the admin tool image is optional (useful for bootstrapping realms if necessary, see below):</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span>./gradlew <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> :polaris-server:assemble <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> :polaris-server:quarkusAppPartsBuild --rerun <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> :polaris-admin:assemble <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> :polaris-admin:quarkusAppPartsBuild --rerun <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -Dquarkus.container-image.build<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#204a87>true</span>
+</span></span></code></pre></div><p>Alternatively, you can use Make to start Minikube and build the images:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span>make minikube-start-cluster
+</span></span><span style=display:flex><span>make build
+</span></span><span style=display:flex><span>make minikube-load-images
+</span></span></code></pre></div><div class="alert alert-info"><p class=alert-heading>💡 Tip</p>Do not use the <code>minikube-load-images</code> target on a shell session where you have already evaluated <code>$(minikube docker-env)</code>, or the target won’t be able to load the images into Minikube.</div><h3 id=creating-the-namespace-and-fixtures id=creating-the-namespace-and-fixtures>Creating the Namespace and Fixtures<a class=heading-anchor href=#creating-the-namespace-and-fixtu [...]
+</span></span><span style=display:flex><span>kubectl apply --namespace polaris -f helm/polaris/ci/fixtures/
+</span></span></code></pre></div><p>The fixtures deploy a PostgreSQL instance and a MongoDB instance that can be used for testing purposes. If you plan to test with persistence backends, wait for the database pods to be ready:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span>kubectl <span style=color:#204a87>wait</span> --nam [...]
+</span></span><span style=display:flex><span>kubectl <span style=color:#204a87>wait</span> --namespace polaris --for<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#000>condition</span><span style=color:#ce5c00;font-weight:700>=</span>ready pod --selector<span style=color:#ce5c00;font-weight:700>=</span>app.kubernetes.io/name<span style=color:#ce5c00;font-weight:700>=</span>mongodb --timeout<span style=color:#ce5c00;font-weight:700>=</span>120s
+</span></span></code></pre></div><p>Alternatively, you can use Make to deploy the fixtures:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span>make helm-fixtures
+</span></span></code></pre></div><div class="alert alert-warning"><p class=alert-heading>⚠️ Warning</p>The fixtures in <code>helm/polaris/ci/fixtures/</code> are intended for testing purposes only and are not suitable for production use. Especially, the PostgreSQL and MongoDB instances are configured without encryption or security and should never be deployed as is in production!</div><h3 id=installing-the-chart-manually id=installing-the-chart-manually>Installing the Chart Manually<a cl [...]
+</span></span><span style=display:flex><span>helm upgrade --install --namespace polaris polaris helm/polaris
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># Persistent backend</span>
+</span></span><span style=display:flex><span>helm upgrade --install --namespace polaris <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --values helm/polaris/ci/persistence-values.yaml <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> polaris helm/polaris
+</span></span></code></pre></div><h3 id=bootstrapping-realms-for-development id=bootstrapping-realms-for-development>Bootstrapping Realms for Development<a class=heading-anchor href=#bootstrapping-realms-for-development aria-label=Anchor>🔗</a></h3><p>When doing adhoc testing with a persistent backend, you may want to bootstrap all the realms using the admin tool. For more information, see the <a href=/in-dev/unreleased/admin-tool/#bootstrapping-realms-and-principal-credentials>Admin Tool [...]
+</span></span></span><span style=display:flex><span> -n polaris <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --image<span style=color:#ce5c00;font-weight:700>=</span>apache/polaris-admin-tool:latest <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --restart<span style=color:#ce5c00;font-weight:700>=</span>Never <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --rm -it <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --env<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"polaris.persistence.type=relational-jdbc"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --env<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"quarkus.datasource.username=</span><span style=color:#204a87;font-weight:700>$(</span>kubectl get secret polaris-persistence -n polaris -o <span style=color:#000>jsonpath</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>'{.data.username}'</span> <span style=color:#000;font-weight:700>|</span> base64 --decode<s [...]
+</span></span></span><span style=display:flex><span> --env<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"quarkus.datasource.password=</span><span style=color:#204a87;font-weight:700>$(</span>kubectl get secret polaris-persistence -n polaris -o <span style=color:#000>jsonpath</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>'{.data.password}'</span> <span style=color:#000;font-weight:700>|</span> base64 --decode<s [...]
+</span></span></span><span style=display:flex><span> --env<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"quarkus.datasource.jdbc.url=</span><span style=color:#204a87;font-weight:700>$(</span>kubectl get secret polaris-persistence -n polaris -o <span style=color:#000>jsonpath</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>'{.data.jdbcUrl}'</span> <span style=color:#000;font-weight:700>|</span> base64 --decode<sp [...]
+</span></span></span><span style=display:flex><span> -- <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> bootstrap -r POLARIS -c POLARIS,root,s3cr3t
+</span></span></code></pre></div><p>Example for the NoSQL (MongoDB) backend:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span>kubectl run polaris-bootstrap <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -n polaris <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --image<span style=color:#ce5c00;font-weight:700>=</span>apache/polaris-admin-tool:latest <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --restart<span style=color:#ce5c00;font-weight:700>=</span>Never <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --rm -it <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --env<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"polaris.persistence.type=nosql"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --env<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"polaris.persistence.nosql.backend=MongoDb"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --env<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"quarkus.mongodb.database=polaris"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --env<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"quarkus.mongodb.connection-string=</span><span style=color:#204a87;font-weight:700>$(</span>kubectl get secret polaris-nosql-persistence -n polaris -o <span style=color:#000>jsonpath</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>'{.data.connectionString}'</span> <span style=color:#000;font-weight:700>|</spa [...]
+</span></span></span><span style=display:flex><span> -- <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> bootstrap -r POLARIS -c POLARIS,root,s3cr3t
+</span></span></code></pre></div><p>Both commands above bootstrap a realm named <code>POLARIS</code> with root password: <code>s3cr3t</code>.</p><div class="alert alert-info"><p class=alert-heading>📝 Note</p>The Helm integration tests (see below) do not require bootstrapping realms, as they do not exercise (yet) Polaris REST APIs.</div><h2 id=running-chart-tests id=running-chart-tests>Running Chart Tests<a class=heading-anchor href=#running-chart-tests aria-label=Anchor>🔗</a></h2><h3 id= [...]
+</span></span><span style=display:flex><span>brew install yamllint
+</span></span><span style=display:flex><span>make helm-install-plugins
+</span></span></code></pre></div><p>The following tools will be installed:</p><ul><li><a href=https://github.com/helm-unittest/helm-unittest>Helm Unit Test</a></li><li><a href=https://github.com/losisin/helm-values-schema-json>Helm JSON Schema</a></li><li><a href=https://github.com/helm/chart-testing>Chart Testing</a></li><li><a href=https://github.com/adrienverge/yamllint>yamllint</a></li></ul><h3 id=unit-tests id=unit-tests>Unit Tests<a class=heading-anchor href=#unit-tests aria-label= [...]
+</span></span></code></pre></div><h3 id=linting id=linting>Linting<a class=heading-anchor href=#linting aria-label=Anchor>🔗</a></h3><p>Lint the chart using the Chart Testing tool:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span>make helm-lint
+</span></span></code></pre></div><h3 id=making-changes-to-documentation-or-schema id=making-changes-to-documentation-or-schema>Making Changes to Documentation or Schema<a class=heading-anchor href=#making-changes-to-documentation-or-schema aria-label=Anchor>🔗</a></h3><p>If you make changes to the Helm chart’s <code>values.yaml</code> file, you need to regenerate the documentation and schema. Run from the Polaris repo root:</p><div class=highlight><pre tabindex=0 style=background-co [...]
+</span></span></code></pre></div><p>Alternatively, you can run:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span>make helm
+</span></span></code></pre></div><p>This will run all Helm-related targets, including unit tests, linting, schema generation, and documentation generation (it will not run integration tests though).</p><h3 id=integration-tests id=integration-tests>Integration Tests<a class=heading-anchor href=#integration-tests aria-label=Anchor>🔗</a></h3><p>Integration tests are tests executed with the <code>ct install</code> tool. They require a Kubernetes cluster with fixtures deployed, as explained i [...]
+</span></span></code></pre></div><p>The above command will build and load the images into Minikube, deploy the fixtures, and run all <code>ct install</code> tests.</p><h2 id=cleanup id=cleanup>Cleanup<a class=heading-anchor href=#cleanup aria-label=Anchor>🔗</a></h2><p>Uninstall the chart, remove resources and delete the namespace:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=langu [...]
+</span></span><span style=display:flex><span>kubectl delete namespace polaris --wait<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#204a87>true</span> --ignore-not-found
+</span></span></code></pre></div><p>The stop Minikube if desired:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span>minikube stop
+</span></span></code></pre></div><p>Alternatively, you can use Make to perform the cleanup:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span>make helm-fixtures-cleanup
+</span></span><span style=display:flex><span>make minikube-stop-cluster
+</span></span><span style=display:flex><span>make minikube-cleanup <span style=color:#8f5902;font-style:italic># will delete the Minikube cluster</span>
</span></span></code></pre></div></div></main></div></div><footer class="td-footer row d-print-none"><div class=container-fluid><div class="row mx-md-2"><div class="td-footer__left col-6 col-sm-4 order-sm-1"><ul class=td-footer__links-list><li class=td-footer__links-item data-bs-toggle=tooltip title=Slack aria-label=Slack><a target=_blank rel=noopener href=https://apache-polaris.slack.com/ aria-label=Slack><i class="fa-regular fa-comment-dots"></i></a></li><li class=td-footer__links-item [...]
\ No newline at end of file
diff --git a/in-dev/unreleased/helm-chart/index.html b/in-dev/unreleased/helm-chart/index.html
index b975af18af..83511c9217 100644
--- a/in-dev/unreleased/helm-chart/index.html
+++ b/in-dev/unreleased/helm-chart/index.html
@@ -10,7 +10,7 @@ Documentation🔗 Production Installation: Instructions for deploying Polaris in
Authentication: Configuration guide for internal authentication (RSA/symmetric keys) and external authentication with OIDC identity providers."><meta itemprop=wordCount content="168"><meta name=twitter:card content="summary"><meta name=twitter:title content="Polaris Helm Chart"><meta name=twitter:description content="The Apache Polaris project provides an official Helm chart for deploying Polaris on Kubernetes. The chart supports a wide range of configuration options, including persisten [...]
The chart is available in the official Apache Polaris Helm repository.
Documentation🔗 Production Installation: Instructions for deploying Polaris in a production environment, including how to add the Helm repository and set up scaling.
-Authentication: Configuration guide for internal authentication (RSA/symmetric keys) and external authentication with OIDC identity providers."><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css rel=stylesheet integrity="sha256-PXPPJ8EAmx3JvxeSwf [...]
+Authentication: Configuration guide for internal authentication (RSA/symmetric keys) and external authentication with OIDC identity providers."><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css rel=stylesheet integrity="sha256-PXPPJ8EAmx3JvxeSwf [...]
<label for=m-in-devunreleased-check><a href=/in-dev/unreleased/ title="Apache Polaris Documentation (Unreleased)" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleased><span>Unreleased</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-in-devunreleasedgetting-started-li><input type=checkbox id=m-in-devunreleasedgetting-started-check>
<label for=m-in-devunreleasedgetting-started-check><a href=/in-dev/unreleased/getting-started/ title="Getting Started with Apache Polaris" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleasedgetting-started><span>Getting Started</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedquick-start-li><input type=checkbox id=m-in-devunreleasedgetting-star [...]
<label for=m-in-devunreleasedgetting-startedquick-start-check><a href=/in-dev/unreleased/getting-started/quick-start/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-in-devunreleasedgetting-startedquick-start><span>Quickstart</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedsetup-tools-li><input type=checkbox id=m-in-devunreleasedgetting-startedsetup-tools-check>
@@ -78,7 +78,7 @@ Authentication: Configuration guide for internal authentication (RSA/symmetric k
<a class=td-toc-title__link title="Top of page" href=#></a></div><nav id=TableOfContents><ul><li><a href=#documentation>Documentation</a></li><li><a href=#quick-start>Quick Start</a></li></ul></nav></div></aside><main class="col-12 col-md-9 col-xl-8 ps-md-5" role=main><div class="pageinfo pageinfo-warning"><p><strong>IMPORTANT:</strong> Developer documentation for the current <code>main</code> branch.
This content is unreleased and may change before the next Polaris release.
For stable user documentation, see the
-<a href=/releases/latest/>latest release docs</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/docs/>Documentation</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/>Developer Docs</a></li><li class="breadcrumb-item active" aria-current=page>Helm Chart</li></ol></nav><div class=td-content><h1>Polaris Helm Chart</h1><header class=article-meta></header><p><a href=https://artifacthub.io/packages/helm/apache-pola [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span>helm repo update
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span>helm upgrade --install polaris polaris/polaris --namespace polaris --create-namespace
+<a href=/releases/latest/>latest release docs</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/docs/>Documentation</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/>Developer Docs</a></li><li class="breadcrumb-item active" aria-current=page>Helm Chart</li></ol></nav><div class=td-content><h1>Polaris Helm Chart</h1><header class=article-meta></header><p><a href=https://artifacthub.io/packages/helm/apache-pola [...]
+</span></span><span style=display:flex><span>helm repo update
+</span></span><span style=display:flex><span>helm upgrade --install polaris polaris/polaris --namespace polaris --create-namespace
</span></span></code></pre></div><p>For production deployments, see the <a href=/in-dev/unreleased/helm-chart/production/>Production Installation</a> guide.</p><div class=section-index></div></div></main></div></div><footer class="td-footer row d-print-none"><div class=container-fluid><div class="row mx-md-2"><div class="td-footer__left col-6 col-sm-4 order-sm-1"><ul class=td-footer__links-list><li class=td-footer__links-item data-bs-toggle=tooltip title=Slack aria-label=Slack><a target= [...]
\ No newline at end of file
diff --git a/in-dev/unreleased/helm-chart/index.xml b/in-dev/unreleased/helm-chart/index.xml
index 2710057f6c..719df65823 100644
--- a/in-dev/unreleased/helm-chart/index.xml
+++ b/in-dev/unreleased/helm-chart/index.xml
@@ -10,8 +10,8 @@
<h2 id="adding-the-helm-repository" id="adding-the-helm-repository">Adding the Helm Repository<a class="heading-anchor" href="#adding-the-helm-repository" aria-label="Anchor">🔗</a>
</h2>
<p>Add the official Apache Polaris Helm repository:</p>
-<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1</span><span>helm repo add polaris https://downloads.apache.org/polaris/helm-chart
-</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">2</span><span>helm repo update
+<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>helm repo add polaris https://downloads.apache.org/polaris/helm-chart
+</span></span><span style="display:flex;"><span>helm repo update
</span></span></code></pre></div><h2 id="installation" id="installation">Installation<a class="heading-anchor" href="#installation" aria-label="Anchor">🔗</a>
</h2>
<p>Create a <code>values.yaml</code> file with your production configuration. See the Chart <a href="https://polaris.apache.org/in-dev/unreleased/helm-chart/reference/">Values Reference</a> for all available configuration options.</p></description></item><item><title>Authentication</title><link>https://polaris.apache.org/in-dev/unreleased/helm-chart/authentication/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://polaris.apache.org [...]
@@ -80,7 +80,7 @@ For general information on persistence in Polaris, see the <a href="https://p
<h3 id="starting-minikube" id="starting-minikube">Starting Minikube<a class="heading-anchor" href="#starting-minikube" aria-label="Anchor">🔗</a>
</h3>
<p>Start a local Minikube cluster:</p>
-<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1</span><span>minikube start
+<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>minikube start
</span></span></code></pre></div><h3 id="installing-from-the-official-repository" id="installing-from-the-official-repository">Installing from the Official Repository<a class="heading-anchor" href="#installing-from-the-official-repository" aria-label="Anchor">🔗</a>
</h3>
<p>Add the official Polaris Helm repository and install the chart:</p></description></item><item><title>Values Reference</title><link>https://polaris.apache.org/in-dev/unreleased/helm-chart/reference/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://polaris.apache.org/in-dev/unreleased/helm-chart/reference/</guid><description><h3 id="deployment" id="deployment">Deployment<a class="heading-anchor" href="#deployment" aria-label="Anchor">🔗</a>
diff --git a/in-dev/unreleased/helm-chart/networking/index.html b/in-dev/unreleased/helm-chart/networking/index.html
index 4725303796..267f45338f 100644
--- a/in-dev/unreleased/helm-chart/networking/index.html
+++ b/in-dev/unreleased/helm-chart/networking/index.html
@@ -4,9 +4,9 @@ The Kubernetes Gateway API is the recommended approach for exposing Polaris exte
💡 Tip
The Kubernetes Gateway API is the recommended approach for exposing Polaris externally. It provides a more expressive, extensible, and role-oriented API compared to Ingress, and is the future direction for Kubernetes traffic management. Services🔗 The Polaris Helm chart creates the following services by default:"><meta property="og:locale" content="en_us"><meta property="og:type" content="article"><meta property="article:section" content="in-dev"><meta itemprop=name content="Services & Ne [...]
💡 Tip
-The Kubernetes Gateway API is the recommended approach for exposing Polaris externally. It provides a more expressive, extensible, and role-oriented API compared to Ingress, and is the future direction for Kubernetes traffic management. Services🔗 The Polaris Helm chart creates the following services by default:"><meta itemprop=wordCount content="988"><meta name=twitter:card content="summary"><meta name=twitter:title content="Services & Networking"><meta name=twitter:description content=" [...]
+The Kubernetes Gateway API is the recommended approach for exposing Polaris externally. It provides a more expressive, extensible, and role-oriented API compared to Ingress, and is the future direction for Kubernetes traffic management. Services🔗 The Polaris Helm chart creates the following services by default:"><meta itemprop=wordCount content="905"><meta name=twitter:card content="summary"><meta name=twitter:title content="Services & Networking"><meta name=twitter:description content=" [...]
💡 Tip
-The Kubernetes Gateway API is the recommended approach for exposing Polaris externally. It provides a more expressive, extensible, and role-oriented API compared to Ingress, and is the future direction for Kubernetes traffic management. Services🔗 The Polaris Helm chart creates the following services by default:"><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q= [...]
+The Kubernetes Gateway API is the recommended approach for exposing Polaris externally. It provides a more expressive, extensible, and role-oriented API compared to Ingress, and is the future direction for Kubernetes traffic management. Services🔗 The Polaris Helm chart creates the following services by default:"><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q= [...]
<label for=m-in-devunreleased-check><a href=/in-dev/unreleased/ title="Apache Polaris Documentation (Unreleased)" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleased><span>Unreleased</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-in-devunreleasedgetting-started-li><input type=checkbox id=m-in-devunreleasedgetting-started-check>
<label for=m-in-devunreleasedgetting-started-check><a href=/in-dev/unreleased/getting-started/ title="Getting Started with Apache Polaris" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleasedgetting-started><span>Getting Started</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedquick-start-li><input type=checkbox id=m-in-devunreleasedgetting-star [...]
<label for=m-in-devunreleasedgetting-startedquick-start-check><a href=/in-dev/unreleased/getting-started/quick-start/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-in-devunreleasedgetting-startedquick-start><span>Quickstart</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedsetup-tools-li><input type=checkbox id=m-in-devunreleasedgetting-startedsetup-tools-check>
@@ -74,103 +74,103 @@ The Kubernetes Gateway API is the recommended approach for exposing Polaris exte
<a class=td-toc-title__link title="Top of page" href=#></a></div><nav id=TableOfContents><ul><li><a href=#services>Services</a><ul><li><a href=#main-service>Main Service</a></li><li><a href=#management-service>Management Service</a></li><li><a href=#extra-services>Extra Services</a></li></ul></li><li><a href=#gateway-api>Gateway API</a><ul><li><a href=#prerequisites>Prerequisites</a></li><li><a href=#gateway-configuration>Gateway Configuration</a></li><li><a href=#gateway-with-static-ip- [...]
This content is unreleased and may change before the next Polaris release.
For stable user documentation, see the
-<a href=/releases/latest/>latest release docs</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/docs/>Documentation</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/>Developer Docs</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/helm-chart/>Helm Chart</a></li><li class="breadcrumb-item active" aria-current=page>Services & Networking</li></ol></nav><div class=td-content><h1>Services & Networking</ [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>type</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>ClusterIP</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>ports</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span><span style=color:#f8f8f8> </span>- <span style=color:#204a87;font-weight:700>name</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>polaris-http</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>port</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#0000cf;font-weight:700>8181</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">6</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>protocol</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>TCP</span><span style=color:#f8f8f8>
-</span></span></span></code></pre></div><h3 id=management-service id=management-service>Management Service<a class=heading-anchor href=#management-service aria-label=Anchor>🔗</a></h3><p>The management service exposes health checks and metrics endpoints. By default, it is a headless service (<code>clusterIP: None</code>) listening on port 8182, which is ideal for Prometheus scraping and service monitoring.</p><table><thead><tr><th>Setting</th><th>Default</th><th>Description</th></tr></the [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>type</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>ClusterIP</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>clusterIP</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>None </span><span style=color:#f8f8f8> </span><span style=color:#8f5902;font-style:italic># Headless service for met [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>ports</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span><span style=color:#f8f8f8> </span>- <span style=color:#204a87;font-weight:700>name</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>polaris-mgmt</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">6</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>port</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#0000cf;font-weight:700>8182</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">7</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>protocol</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>TCP</span><span style=color:#f8f8f8>
-</span></span></span></code></pre></div><h3 id=extra-services id=extra-services>Extra Services<a class=heading-anchor href=#extra-services aria-label=Anchor>🔗</a></h3><p>You can define additional services using <code>extraServices</code>. This is useful when you need to expose the same pods with different service configurations, such as exposing the API via a LoadBalancer in addition to the default ClusterIP service.</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8; [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span><span style=color:#f8f8f8> </span>- <span style=color:#204a87;font-weight:700>nameSuffix</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"lb"</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>type</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>LoadBalancer</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>ports</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span><span style=color:#f8f8f8> </span>- <span style=color:#204a87;font-weight:700>name</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>polaris-http</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>port</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#0000cf;font-weight:700>8181</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>targetPort</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#0000cf;font-weight:700>8181</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>protocol</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>TCP</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>annotations</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">10</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>service.beta.kubernetes.io/aws-load-balancer-type</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"nlb-ip"</span><span style=color:#f8f8f8>
-</span></span></span></code></pre></div><p>This creates an additional service named <code><release-name>-polaris-lb</code> of type <code>LoadBalancer</code>.</p><h2 id=gateway-api id=gateway-api>Gateway API<a class=heading-anchor href=#gateway-api aria-label=Anchor>🔗</a></h2><p>The <a href=https://gateway-api.sigs.k8s.io/>Kubernetes Gateway API</a> is a more expressive and extensible alternative to Ingress. The Polaris Helm chart supports creating Gateway and HTTPRoute resources.</p>< [...]
-</span></span></code></pre></div><p>You also need a Gateway controller (e.g., Envoy Gateway, Istio, Contour) installed and a <code>GatewayClass</code> defined.</p><h3 id=gateway-configuration id=gateway-configuration>Gateway Configuration<a class=heading-anchor href=#gateway-configuration aria-label=Anchor>🔗</a></h3><p>The chart can create a Gateway resource that defines how traffic enters the cluster:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4 [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>enabled</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>true</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>className</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"cluster-gateway"</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>listeners</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span><span style=color:#f8f8f8> </span>- <span style=color:#204a87;font-weight:700>name</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>http</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>protocol</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>HTTP</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>port</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#0000cf;font-weight:700>80</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span><span style=color:#f8f8f8> </span>- <span style=color:#204a87;font-weight:700>name</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>https</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>protocol</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>HTTPS</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">10</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>port</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#0000cf;font-weight:700>443</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">11</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>hostname</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"polaris.example.com"</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">12</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>tls</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">13</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>mode</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>Terminate</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">14</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>certificateRefs</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">15</span><span><span style=color:#f8f8f8> </span>- <span style=color:#204a87;font-weight:700>name</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>polaris-tls</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">16</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>kind</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>Secret</span><span style=color:#f8f8f8>
-</span></span></span></code></pre></div><h3 id=gateway-with-static-ip-address id=gateway-with-static-ip-address>Gateway with Static IP Address<a class=heading-anchor href=#gateway-with-static-ip-address aria-label=Anchor>🔗</a></h3><p>Request a specific IP address for the Gateway:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-yaml data-lang=yaml><span style=display:flex><sp [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>enabled</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>true</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>className</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"eg"</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>listeners</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span><span style=color:#f8f8f8> </span>- <span style=color:#204a87;font-weight:700>name</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>http</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>protocol</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>HTTP</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>port</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#0000cf;font-weight:700>80</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>addresses</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span><span style=color:#f8f8f8> </span>- <span style=color:#204a87;font-weight:700>type</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>IPAddress</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">10</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>value</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#0000cf;font-weight:700>192.168.1.100</span><span style=color:#f8f8f8>
-</span></span></span></code></pre></div><h3 id=httproute-configuration id=httproute-configuration>HTTPRoute Configuration<a class=heading-anchor href=#httproute-configuration aria-label=Anchor>🔗</a></h3><p>HTTPRoute defines how requests are routed from a Gateway to the Polaris service:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-yaml data-lang=yaml><span style=display:fl [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>enabled</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>true</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>gatewayName</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"polaris-gateway"</span><span style=color:#f8f8f8> </span><span style=color:#8f5902;font-style:italic># [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>gatewayNamespace</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"polaris"</span><span style=color:#f8f8f8> </span><span style=color:#8f5902;font-style:italic># [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>hosts</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">6</span><span><span style=color:#f8f8f8> </span>- <span style=color:#000>polaris.example.com</span><span style=color:#f8f8f8>
-</span></span></span></code></pre></div><h3 id=using-an-external-gateway id=using-an-external-gateway>Using an External Gateway<a class=heading-anchor href=#using-an-external-gateway aria-label=Anchor>🔗</a></h3><p>If you have a shared Gateway managed separately (e.g., by cluster administrators), you can create only the HTTPRoute:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=langua [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>enabled</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>false</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span><span style=color:#204a87;font-weight:700>httproute</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>enabled</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>true</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>gatewayName</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"shared-gateway"</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>gatewayNamespace</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"gateway-system"</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>sectionName</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"https"</span><span style=color:#f8f8f8> </span><span style=color:#8f5902;font-style:italic># Optiona [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>hosts</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">10</span><span><span style=color:#f8f8f8> </span>- <span style=color:#000>polaris.example.com</span><span style=color:#f8f8f8>
-</span></span></span></code></pre></div><h2 id=ingress id=ingress>Ingress<a class=heading-anchor href=#ingress aria-label=Anchor>🔗</a></h2><p>Ingress provides HTTP(S) routing from outside the cluster to services within the cluster. Enable Ingress to expose Polaris externally.</p><div class="alert alert-info"><p class=alert-heading>📝 Note</p>Ingress and HTTPRoute are mutually exclusive. Only one can be enabled at a time.</div><div class="alert alert-warning"><p class=alert-heading>⚠️ Warn [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>enabled</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>true</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>className</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"traefik"</span><span style=color:#f8f8f8> </span><span style=color:#8f5902;font-style:italic># Your ing [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>hosts</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span><span style=color:#f8f8f8> </span>- <span style=color:#204a87;font-weight:700>host</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>polaris.example.com</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">6</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>paths</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">7</span><span><span style=color:#f8f8f8> </span>- <span style=color:#204a87;font-weight:700>path</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>/</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">8</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>pathType</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>Prefix</span><span style=color:#f8f8f8>
-</span></span></span></code></pre></div><h3 id=ingress-with-tls id=ingress-with-tls>Ingress with TLS<a class=heading-anchor href=#ingress-with-tls aria-label=Anchor>🔗</a></h3><p>To enable TLS termination, create a Kubernetes secret containing your TLS certificate and reference it in the Ingress configuration:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bas [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> --namespace polaris <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> --cert<span style=color:#ce5c00;font-weight:700>=</span>path/to/tls.crt <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> --key<span style=color:#ce5c00;font-weight:700>=</span>path/to/tls.key
-</span></span></code></pre></div><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-yaml data-lang=yaml><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 1</span><span><span style=color:#204a87;font-weight:700>ingress</span><span style=color:#000;font-weight:700>:</span><span style=color [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>enabled</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>true</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>className</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"traefik"</span><span style=color:#f8f8f8> </span><span style=color:#8f5902;font-style:italic># Your in [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>hosts</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span><span style=color:#f8f8f8> </span>- <span style=color:#204a87;font-weight:700>host</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>polaris.example.com</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>paths</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span><span style=color:#f8f8f8> </span>- <span style=color:#204a87;font-weight:700>path</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>/</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>pathType</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>Prefix</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>tls</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">10</span><span><span style=color:#f8f8f8> </span>- <span style=color:#204a87;font-weight:700>secretName</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>polaris-tls</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">11</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>hosts</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">12</span><span><span style=color:#f8f8f8> </span>- <span style=color:#000>polaris.example.com</span><span style=color:#f8f8f8>
-</span></span></span></code></pre></div><h2 id=traffic-policies id=traffic-policies>Traffic Policies<a class=heading-anchor href=#traffic-policies aria-label=Anchor>🔗</a></h2><p>Both the main service and management service support traffic distribution policies:</p><h3 id=internal-traffic-policy id=internal-traffic-policy>Internal Traffic Policy<a class=heading-anchor href=#internal-traffic-policy aria-label=Anchor>🔗</a></h3><p>Controls how traffic from within the cluster is routed:</p><d [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>internalTrafficPolicy</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>Local </span><span style=color:#f8f8f8> </span><span style=color:#8f5902;font-style:italic># Route only [...]
-</span></span></span></code></pre></div><h3 id=external-traffic-policy id=external-traffic-policy>External Traffic Policy<a class=heading-anchor href=#external-traffic-policy aria-label=Anchor>🔗</a></h3><p>Controls how traffic from outside the cluster is routed (only applicable for <code>NodePort</code> and <code>LoadBalancer</code> services):</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><cod [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>type</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>LoadBalancer</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>externalTrafficPolicy</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>Local </span><span style=color:#f8f8f8> </span><span style=color:#8f5902;font-style:italic># Preserve cl [...]
-</span></span></span></code></pre></div><h3 id=traffic-distribution-kubernetes-131 id=traffic-distribution-kubernetes-131>Traffic Distribution (Kubernetes 1.31+)<a class=heading-anchor href=#traffic-distribution-kubernetes-131 aria-label=Anchor>🔗</a></h3><p>For Kubernetes 1.31 and later, you can use traffic distribution hints:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language- [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>trafficDistribution</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>PreferClose </span><span style=color:#f8f8f8> </span><span style=color:#8f5902;font-style:italic># Prefer [...]
-</span></span></span></code></pre></div><h2 id=session-affinity id=session-affinity>Session Affinity<a class=heading-anchor href=#session-affinity aria-label=Anchor>🔗</a></h2><p>For better performance, consider enabling session affinity to route requests from the same client to the same pod:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-yaml data-lang=yaml><span style=disp [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>sessionAffinity</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>ClientIP</span><span style=color:#f8f8f8>
+<a href=/releases/latest/>latest release docs</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/docs/>Documentation</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/>Developer Docs</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/helm-chart/>Helm Chart</a></li><li class="breadcrumb-item active" aria-current=page>Services & Networking</li></ol></nav><div class=td-content><h1>Services & Networking</ [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>type</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>ClusterIP</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>ports</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span>- <span style=color:#204a87;font-weight:700>name</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>polaris-http</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>port</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#0000cf;font-weight:700>8181</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>protocol</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>TCP</span><span style=color:#f8f8f8>
+</span></span></span></code></pre></div><h3 id=management-service id=management-service>Management Service<a class=heading-anchor href=#management-service aria-label=Anchor>🔗</a></h3><p>The management service exposes health checks and metrics endpoints. By default, it is a headless service (<code>clusterIP: None</code>) listening on port 8182, which is ideal for Prometheus scraping and service monitoring.</p><table><thead><tr><th>Setting</th><th>Default</th><th>Description</th></tr></the [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>type</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>ClusterIP</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>clusterIP</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>None </span><span style=color:#f8f8f8> </span><span style=color:#8f5902;font-style:italic># Headless service for metrics scraping</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>ports</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span>- <span style=color:#204a87;font-weight:700>name</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>polaris-mgmt</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>port</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#0000cf;font-weight:700>8182</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>protocol</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>TCP</span><span style=color:#f8f8f8>
+</span></span></span></code></pre></div><h3 id=extra-services id=extra-services>Extra Services<a class=heading-anchor href=#extra-services aria-label=Anchor>🔗</a></h3><p>You can define additional services using <code>extraServices</code>. This is useful when you need to expose the same pods with different service configurations, such as exposing the API via a LoadBalancer in addition to the default ClusterIP service.</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8; [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span>- <span style=color:#204a87;font-weight:700>nameSuffix</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"lb"</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>type</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>LoadBalancer</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>ports</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span>- <span style=color:#204a87;font-weight:700>name</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>polaris-http</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>port</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#0000cf;font-weight:700>8181</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>targetPort</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#0000cf;font-weight:700>8181</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>protocol</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>TCP</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>annotations</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>service.beta.kubernetes.io/aws-load-balancer-type</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"nlb-ip"</span><span style=color:#f8f8f8>
+</span></span></span></code></pre></div><p>This creates an additional service named <code><release-name>-polaris-lb</code> of type <code>LoadBalancer</code>.</p><h2 id=gateway-api id=gateway-api>Gateway API<a class=heading-anchor href=#gateway-api aria-label=Anchor>🔗</a></h2><p>The <a href=https://gateway-api.sigs.k8s.io/>Kubernetes Gateway API</a> is a more expressive and extensible alternative to Ingress. The Polaris Helm chart supports creating Gateway and HTTPRoute resources.</p>< [...]
+</span></span></code></pre></div><p>You also need a Gateway controller (e.g., Envoy Gateway, Istio, Contour) installed and a <code>GatewayClass</code> defined.</p><h3 id=gateway-configuration id=gateway-configuration>Gateway Configuration<a class=heading-anchor href=#gateway-configuration aria-label=Anchor>🔗</a></h3><p>The chart can create a Gateway resource that defines how traffic enters the cluster:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4 [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>enabled</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>true</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>className</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"cluster-gateway"</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>listeners</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span>- <span style=color:#204a87;font-weight:700>name</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>http</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>protocol</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>HTTP</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>port</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#0000cf;font-weight:700>80</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span>- <span style=color:#204a87;font-weight:700>name</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>https</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>protocol</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>HTTPS</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>port</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#0000cf;font-weight:700>443</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>hostname</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"polaris.example.com"</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>tls</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>mode</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>Terminate</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>certificateRefs</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span>- <span style=color:#204a87;font-weight:700>name</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>polaris-tls</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>kind</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>Secret</span><span style=color:#f8f8f8>
+</span></span></span></code></pre></div><h3 id=gateway-with-static-ip-address id=gateway-with-static-ip-address>Gateway with Static IP Address<a class=heading-anchor href=#gateway-with-static-ip-address aria-label=Anchor>🔗</a></h3><p>Request a specific IP address for the Gateway:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-yaml data-lang=yaml><span style=display:flex><sp [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>enabled</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>true</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>className</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"eg"</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>listeners</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span>- <span style=color:#204a87;font-weight:700>name</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>http</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>protocol</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>HTTP</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>port</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#0000cf;font-weight:700>80</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>addresses</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span>- <span style=color:#204a87;font-weight:700>type</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>IPAddress</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>value</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#0000cf;font-weight:700>192.168.1.100</span><span style=color:#f8f8f8>
+</span></span></span></code></pre></div><h3 id=httproute-configuration id=httproute-configuration>HTTPRoute Configuration<a class=heading-anchor href=#httproute-configuration aria-label=Anchor>🔗</a></h3><p>HTTPRoute defines how requests are routed from a Gateway to the Polaris service:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-yaml data-lang=yaml><span style=display:fl [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>enabled</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>true</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>gatewayName</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"polaris-gateway"</span><span style=color:#f8f8f8> </span><span style=color:#8f5902;font-style:italic># Name of the Gateway to attach to</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>gatewayNamespace</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"polaris"</span><span style=color:#f8f8f8> </span><span style=color:#8f5902;font-style:italic># Namespace where the Gateway is deployed</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>hosts</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span>- <span style=color:#000>polaris.example.com</span><span style=color:#f8f8f8>
+</span></span></span></code></pre></div><h3 id=using-an-external-gateway id=using-an-external-gateway>Using an External Gateway<a class=heading-anchor href=#using-an-external-gateway aria-label=Anchor>🔗</a></h3><p>If you have a shared Gateway managed separately (e.g., by cluster administrators), you can create only the HTTPRoute:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=langua [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>enabled</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>false</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>httproute</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>enabled</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>true</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>gatewayName</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"shared-gateway"</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>gatewayNamespace</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"gateway-system"</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>sectionName</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"https"</span><span style=color:#f8f8f8> </span><span style=color:#8f5902;font-style:italic># Optional: attach to a specific listener</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>hosts</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span>- <span style=color:#000>polaris.example.com</span><span style=color:#f8f8f8>
+</span></span></span></code></pre></div><h2 id=ingress id=ingress>Ingress<a class=heading-anchor href=#ingress aria-label=Anchor>🔗</a></h2><p>Ingress provides HTTP(S) routing from outside the cluster to services within the cluster. Enable Ingress to expose Polaris externally.</p><div class="alert alert-info"><p class=alert-heading>📝 Note</p>Ingress and HTTPRoute are mutually exclusive. Only one can be enabled at a time.</div><div class="alert alert-warning"><p class=alert-heading>⚠️ Warn [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>enabled</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>true</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>className</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"traefik"</span><span style=color:#f8f8f8> </span><span style=color:#8f5902;font-style:italic># Your ingress controller class (e.g., "traefik", "haproxy", "contour")</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>hosts</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span>- <span style=color:#204a87;font-weight:700>host</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>polaris.example.com</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>paths</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span>- <span style=color:#204a87;font-weight:700>path</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>/</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>pathType</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>Prefix</span><span style=color:#f8f8f8>
+</span></span></span></code></pre></div><h3 id=ingress-with-tls id=ingress-with-tls>Ingress with TLS<a class=heading-anchor href=#ingress-with-tls aria-label=Anchor>🔗</a></h3><p>To enable TLS termination, create a Kubernetes secret containing your TLS certificate and reference it in the Ingress configuration:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bas [...]
+</span></span></span><span style=display:flex><span> --namespace polaris <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --cert<span style=color:#ce5c00;font-weight:700>=</span>path/to/tls.crt <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --key<span style=color:#ce5c00;font-weight:700>=</span>path/to/tls.key
+</span></span></code></pre></div><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-yaml data-lang=yaml><span style=display:flex><span><span style=color:#204a87;font-weight:700>ingress</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>enabled</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>true</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>className</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"traefik"</span><span style=color:#f8f8f8> </span><span style=color:#8f5902;font-style:italic># Your ingress controller class</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>hosts</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span>- <span style=color:#204a87;font-weight:700>host</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>polaris.example.com</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>paths</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span>- <span style=color:#204a87;font-weight:700>path</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>/</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>pathType</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>Prefix</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>tls</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span>- <span style=color:#204a87;font-weight:700>secretName</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>polaris-tls</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>hosts</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span>- <span style=color:#000>polaris.example.com</span><span style=color:#f8f8f8>
+</span></span></span></code></pre></div><h2 id=traffic-policies id=traffic-policies>Traffic Policies<a class=heading-anchor href=#traffic-policies aria-label=Anchor>🔗</a></h2><p>Both the main service and management service support traffic distribution policies:</p><h3 id=internal-traffic-policy id=internal-traffic-policy>Internal Traffic Policy<a class=heading-anchor href=#internal-traffic-policy aria-label=Anchor>🔗</a></h3><p>Controls how traffic from within the cluster is routed:</p><d [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>internalTrafficPolicy</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>Local </span><span style=color:#f8f8f8> </span><span style=color:#8f5902;font-style:italic># Route only to node-local endpoints</span><span style=color:#f8f8f8>
+</span></span></span></code></pre></div><h3 id=external-traffic-policy id=external-traffic-policy>External Traffic Policy<a class=heading-anchor href=#external-traffic-policy aria-label=Anchor>🔗</a></h3><p>Controls how traffic from outside the cluster is routed (only applicable for <code>NodePort</code> and <code>LoadBalancer</code> services):</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><cod [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>type</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>LoadBalancer</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>externalTrafficPolicy</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>Local </span><span style=color:#f8f8f8> </span><span style=color:#8f5902;font-style:italic># Preserve client source IP</span><span style=color:#f8f8f8>
+</span></span></span></code></pre></div><h3 id=traffic-distribution-kubernetes-131 id=traffic-distribution-kubernetes-131>Traffic Distribution (Kubernetes 1.31+)<a class=heading-anchor href=#traffic-distribution-kubernetes-131 aria-label=Anchor>🔗</a></h3><p>For Kubernetes 1.31 and later, you can use traffic distribution hints:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language- [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>trafficDistribution</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>PreferClose </span><span style=color:#f8f8f8> </span><span style=color:#8f5902;font-style:italic># Prefer topologically closer endpoints</span><span style=color:#f8f8f8>
+</span></span></span></code></pre></div><h2 id=session-affinity id=session-affinity>Session Affinity<a class=heading-anchor href=#session-affinity aria-label=Anchor>🔗</a></h2><p>For better performance, consider enabling session affinity to route requests from the same client to the same pod:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-yaml data-lang=yaml><span style=disp [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>sessionAffinity</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>ClientIP</span><span style=color:#f8f8f8>
</span></span></span></code></pre></div><div class="alert alert-info"><p class=alert-heading>📝 Note</p>Session affinity affects only internal clients. For external traffic through Ingress, configure sticky sessions in your ingress controller.</div></div></main></div></div><footer class="td-footer row d-print-none"><div class=container-fluid><div class="row mx-md-2"><div class="td-footer__left col-6 col-sm-4 order-sm-1"><ul class=td-footer__links-list><li class=td-footer__links-item data- [...]
\ No newline at end of file
diff --git a/in-dev/unreleased/helm-chart/persistence/index.html b/in-dev/unreleased/helm-chart/persistence/index.html
index ffb97fcda1..4f94acbc6b 100644
--- a/in-dev/unreleased/helm-chart/persistence/index.html
+++ b/in-dev/unreleased/helm-chart/persistence/index.html
@@ -7,10 +7,10 @@ In-Memory - for testing only PostgreSQL (JDBC) - recommended for production Mong
The default in-memory metastore is not suitable for production. Data will be lost when pods restart, and you cannot run multiple replicas. In-Memory Metastore🔗 The in-memory metastore is the default and requires no configuration. It is useful for quick testing and development:"><meta property="og:locale" content="en_us"><meta property="og:type" content="article"><meta property="article:section" content="in-dev"><meta itemprop=name content="Persistence"><meta itemprop=description content= [...]
Polaris supports three metastore implementations:
In-Memory - for testing only PostgreSQL (JDBC) - recommended for production MongoDB (NoSQL) - experimental (beta) ⚠️ Warning
-The default in-memory metastore is not suitable for production. Data will be lost when pods restart, and you cannot run multiple replicas. In-Memory Metastore🔗 The in-memory metastore is the default and requires no configuration. It is useful for quick testing and development:"><meta itemprop=wordCount content="659"><meta name=twitter:card content="summary"><meta name=twitter:title content="Persistence"><meta name=twitter:description content="This page describes how to configure persiste [...]
+The default in-memory metastore is not suitable for production. Data will be lost when pods restart, and you cannot run multiple replicas. In-Memory Metastore🔗 The in-memory metastore is the default and requires no configuration. It is useful for quick testing and development:"><meta itemprop=wordCount content="624"><meta name=twitter:card content="summary"><meta name=twitter:title content="Persistence"><meta name=twitter:description content="This page describes how to configure persiste [...]
Polaris supports three metastore implementations:
In-Memory - for testing only PostgreSQL (JDBC) - recommended for production MongoDB (NoSQL) - experimental (beta) ⚠️ Warning
-The default in-memory metastore is not suitable for production. Data will be lost when pods restart, and you cannot run multiple replicas. In-Memory Metastore🔗 The in-memory metastore is the default and requires no configuration. It is useful for quick testing and development:"><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href= [...]
+The default in-memory metastore is not suitable for production. Data will be lost when pods restart, and you cannot run multiple replicas. In-Memory Metastore🔗 The in-memory metastore is the default and requires no configuration. It is useful for quick testing and development:"><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href= [...]
<label for=m-in-devunreleased-check><a href=/in-dev/unreleased/ title="Apache Polaris Documentation (Unreleased)" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleased><span>Unreleased</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-in-devunreleasedgetting-started-li><input type=checkbox id=m-in-devunreleasedgetting-started-check>
<label for=m-in-devunreleasedgetting-started-check><a href=/in-dev/unreleased/getting-started/ title="Getting Started with Apache Polaris" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleasedgetting-started><span>Getting Started</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedquick-start-li><input type=checkbox id=m-in-devunreleasedgetting-star [...]
<label for=m-in-devunreleasedgetting-startedquick-start-check><a href=/in-dev/unreleased/getting-started/quick-start/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-in-devunreleasedgetting-startedquick-start><span>Quickstart</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedsetup-tools-li><input type=checkbox id=m-in-devunreleasedgetting-startedsetup-tools-check>
@@ -79,50 +79,50 @@ The default in-memory metastore is not suitable for production. Data will be los
This content is unreleased and may change before the next Polaris release.
For stable user documentation, see the
<a href=/releases/latest/>latest release docs</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/docs/>Documentation</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/>Developer Docs</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/helm-chart/>Helm Chart</a></li><li class="breadcrumb-item active" aria-current=page>Persistence</li></ol></nav><div class=td-content><h1>Persistence</h1><header class=art [...]
-For general information on persistence in Polaris, see the <a href=https://polaris.apache.org/in-dev/unreleased/metastores/>Metastores</a> page.</p><p>Polaris supports three metastore implementations:</p><ul><li><a href=#in-memory-metastore>In-Memory</a> - for testing only</li><li><a href=#postgresql-jdbc-metastore>PostgreSQL (JDBC)</a> - recommended for production</li><li><a href=#mongodb-nosql-metastore>MongoDB (NoSQL)</a> - experimental (beta)</li></ul><div class="alert alert-warning" [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>type</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>in-memory</span><span style=color:#f8f8f8>
-</span></span></span></code></pre></div><div class="alert alert-info"><p class=alert-heading>📝 Note</p>When using the in-memory metastore, you must set <code>replicaCount: 1</code> as data is not shared between pods. Also, you cannot enable horizontal autoscaling.</div><h2 id=postgresql-jdbc-metastore id=postgresql-jdbc-metastore>PostgreSQL (JDBC) Metastore<a class=heading-anchor href=#postgresql-jdbc-metastore aria-label=Anchor>🔗</a></h2><p>The PostgreSQL metastore stores all Polaris me [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> --namespace polaris <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> --from-literal<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#000>username</span><span style=color:#ce5c00;font-weight:700>=</span><db-username> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> --from-literal<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#000>password</span><span style=color:#ce5c00;font-weight:700>=</span><db-password> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span> --from-literal<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#000>jdbcUrl</span><span style=color:#ce5c00;font-weight:700>=</span>jdbc:postgresql://<db-host>:5432/<db-name>
-</span></span></code></pre></div><p>The secret must contain three keys:</p><ul><li><code>username</code>: The database username</li><li><code>password</code>: The database password</li><li><code>jdbcUrl</code>: The JDBC connection URL</li></ul><h3 id=configuring-the-chart id=configuring-the-chart>Configuring the Chart<a class=heading-anchor href=#configuring-the-chart aria-label=Anchor>🔗</a></h3><p>Configure the chart to use the PostgreSQL metastore:</p><div class=highlight><pre tabindex [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>type</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>relational-jdbc</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>relationalJdbc</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>secret</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>name</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"polaris-persistence"</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">6</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>username</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"username"</span><span style=color:#f8f8f8> </span><span style=color:#8f5902;font-style:italic># [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">7</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>password</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"password"</span><span style=color:#f8f8f8> </span><span style=color:#8f5902;font-style:italic># [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">8</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>jdbcUrl</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"jdbcUrl"</span><span style=color:#f8f8f8> </span><span style=color:#8f5902;font-style:italic># [...]
-</span></span></span></code></pre></div><h3 id=connection-pool-settings id=connection-pool-settings>Connection Pool Settings<a class=heading-anchor href=#connection-pool-settings aria-label=Anchor>🔗</a></h3><p>For production deployments, you may want to tune the connection pool settings using the <code>advancedConfig</code> section:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=lan [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>quarkus.datasource.jdbc.min-size</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"5"</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>quarkus.datasource.jdbc.max-size</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"20"</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>quarkus.datasource.jdbc.acquisition-timeout</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"30S"</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>quarkus.datasource.jdbc.idle-removal-interval</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"5M"</span><span style=color:#f8f8f8>
-</span></span></span></code></pre></div><p>See the <a href=https://quarkus.io/guides/datasource#configuration-reference>Quarkus Datasource configuration reference</a> for all available options.</p><h2 id=mongodb-nosql-metastore id=mongodb-nosql-metastore>MongoDB (NoSQL) Metastore<a class=heading-anchor href=#mongodb-nosql-metastore aria-label=Anchor>🔗</a></h2><div class="alert alert-info"><p class=alert-heading>📝 Note</p>The MongoDB NoSQL metastore is currently in <strong>beta</strong>.< [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> --namespace polaris <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> --from-literal<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#000>connectionString</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>'mongodb://<username>:<password>@<host>:<port>'</span>
-</span></span></code></pre></div><p>For MongoDB Atlas or replica sets, use the appropriate connection string format:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span><span style=color:#8f5902;font-sty [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span>kubectl create secret generic polaris-mongodb <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> --namespace polaris <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> --from-literal<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#000>connectionString</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>'mongodb+srv://<username>:<password>@<cluster>.mongodb.net/?retryWrites=true&w=majority'</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">6</span><span><span style=color:#8f5902;font-style:italic># Replica Set</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">7</span><span>kubectl create secret generic polaris-mongodb <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">8</span><span> --namespace polaris <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">9</span><span> --from-literal<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#000>connectionString</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>'mongodb://<username>:<password>@<host1>:<port1>,<host2>:<port2>,<host3>:<po [...]
-</span></span></code></pre></div><h3 id=configuring-the-chart-1 id=configuring-the-chart-1>Configuring the Chart<a class=heading-anchor href=#configuring-the-chart-1 aria-label=Anchor>🔗</a></h3><p>Configure the chart to use the NoSQL metastore with <code>MongoDb</code> backend:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-yaml data-lang=yaml><span style=display:flex><span [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>type</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>nosql</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>nosql</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>backend</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>MongoDb</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>database</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>polaris</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">6</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>secret</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">7</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>name</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"polaris-mongodb"</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">8</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>connectionString</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"connectionString"</span><span style=color:#f8f8f8> </span><span style=color:#8f5902;font-sty [...]
-</span></span></span></code></pre></div><h3 id=configuration-options id=configuration-options>Configuration Options<a class=heading-anchor href=#configuration-options aria-label=Anchor>🔗</a></h3><table><thead><tr><th>Setting</th><th>Default</th><th>Description</th></tr></thead><tbody><tr><td><code>persistence.nosql.backend</code></td><td><code>MongoDb</code></td><td>The NoSQL backend type. Use <code>MongoDb</code> for production or <code>InMemory</code> for testing.</td></tr><tr><td><cod [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>quarkus.mongodb.connect-timeout</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"10S"</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>quarkus.mongodb.read-timeout</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"30S"</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>quarkus.mongodb.server-selection-timeout</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"30S"</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>quarkus.mongodb.write-concern.safe</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"true"</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">6</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>quarkus.mongodb.read-preference</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"primaryPreferred"</span><span style=color:#f8f8f8>
+For general information on persistence in Polaris, see the <a href=https://polaris.apache.org/in-dev/unreleased/metastores/>Metastores</a> page.</p><p>Polaris supports three metastore implementations:</p><ul><li><a href=#in-memory-metastore>In-Memory</a> - for testing only</li><li><a href=#postgresql-jdbc-metastore>PostgreSQL (JDBC)</a> - recommended for production</li><li><a href=#mongodb-nosql-metastore>MongoDB (NoSQL)</a> - experimental (beta)</li></ul><div class="alert alert-warning" [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>type</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>in-memory</span><span style=color:#f8f8f8>
+</span></span></span></code></pre></div><div class="alert alert-info"><p class=alert-heading>📝 Note</p>When using the in-memory metastore, you must set <code>replicaCount: 1</code> as data is not shared between pods. Also, you cannot enable horizontal autoscaling.</div><h2 id=postgresql-jdbc-metastore id=postgresql-jdbc-metastore>PostgreSQL (JDBC) Metastore<a class=heading-anchor href=#postgresql-jdbc-metastore aria-label=Anchor>🔗</a></h2><p>The PostgreSQL metastore stores all Polaris me [...]
+</span></span></span><span style=display:flex><span> --namespace polaris <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --from-literal<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#000>username</span><span style=color:#ce5c00;font-weight:700>=</span><db-username> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --from-literal<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#000>password</span><span style=color:#ce5c00;font-weight:700>=</span><db-password> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --from-literal<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#000>jdbcUrl</span><span style=color:#ce5c00;font-weight:700>=</span>jdbc:postgresql://<db-host>:5432/<db-name>
+</span></span></code></pre></div><p>The secret must contain three keys:</p><ul><li><code>username</code>: The database username</li><li><code>password</code>: The database password</li><li><code>jdbcUrl</code>: The JDBC connection URL</li></ul><h3 id=configuring-the-chart id=configuring-the-chart>Configuring the Chart<a class=heading-anchor href=#configuring-the-chart aria-label=Anchor>🔗</a></h3><p>Configure the chart to use the PostgreSQL metastore:</p><div class=highlight><pre tabindex [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>type</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>relational-jdbc</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>relationalJdbc</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>secret</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>name</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"polaris-persistence"</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>username</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"username"</span><span style=color:#f8f8f8> </span><span style=color:#8f5902;font-style:italic># Key in secret containing the username</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>password</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"password"</span><span style=color:#f8f8f8> </span><span style=color:#8f5902;font-style:italic># Key in secret containing the password</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>jdbcUrl</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"jdbcUrl"</span><span style=color:#f8f8f8> </span><span style=color:#8f5902;font-style:italic># Key in secret containing the JDBC URL</span><span style=color:#f8f8f8>
+</span></span></span></code></pre></div><h3 id=connection-pool-settings id=connection-pool-settings>Connection Pool Settings<a class=heading-anchor href=#connection-pool-settings aria-label=Anchor>🔗</a></h3><p>For production deployments, you may want to tune the connection pool settings using the <code>advancedConfig</code> section:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=lan [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>quarkus.datasource.jdbc.min-size</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"5"</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>quarkus.datasource.jdbc.max-size</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"20"</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>quarkus.datasource.jdbc.acquisition-timeout</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"30S"</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>quarkus.datasource.jdbc.idle-removal-interval</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"5M"</span><span style=color:#f8f8f8>
+</span></span></span></code></pre></div><p>See the <a href=https://quarkus.io/guides/datasource#configuration-reference>Quarkus Datasource configuration reference</a> for all available options.</p><h2 id=mongodb-nosql-metastore id=mongodb-nosql-metastore>MongoDB (NoSQL) Metastore<a class=heading-anchor href=#mongodb-nosql-metastore aria-label=Anchor>🔗</a></h2><div class="alert alert-info"><p class=alert-heading>📝 Note</p>The MongoDB NoSQL metastore is currently in <strong>beta</strong>.< [...]
+</span></span></span><span style=display:flex><span> --namespace polaris <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --from-literal<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#000>connectionString</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>'mongodb://<username>:<password>@<host>:<port>'</span>
+</span></span></code></pre></div><p>For MongoDB Atlas or replica sets, use the appropriate connection string format:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span><span style=color:#8f5902;font-style:italic># MongoDB Atlas</span>
+</span></span><span style=display:flex><span>kubectl create secret generic polaris-mongodb <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --namespace polaris <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --from-literal<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#000>connectionString</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>'mongodb+srv://<username>:<password>@<cluster>.mongodb.net/?retryWrites=true&w=majority'</span>
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># Replica Set</span>
+</span></span><span style=display:flex><span>kubectl create secret generic polaris-mongodb <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --namespace polaris <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --from-literal<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#000>connectionString</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>'mongodb://<username>:<password>@<host1>:<port1>,<host2>:<port2>,<host3>:<port3>/?replicaSet=<rs-name>&authSource=admin'</span>
+</span></span></code></pre></div><h3 id=configuring-the-chart-1 id=configuring-the-chart-1>Configuring the Chart<a class=heading-anchor href=#configuring-the-chart-1 aria-label=Anchor>🔗</a></h3><p>Configure the chart to use the NoSQL metastore with <code>MongoDb</code> backend:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-yaml data-lang=yaml><span style=display:flex><span [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>type</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>nosql</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>nosql</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>backend</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>MongoDb</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>database</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>polaris</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>secret</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>name</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"polaris-mongodb"</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>connectionString</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"connectionString"</span><span style=color:#f8f8f8> </span><span style=color:#8f5902;font-style:italic># Key in secret containing the connection string</span><span style=color:#f8f8f8>
+</span></span></span></code></pre></div><h3 id=configuration-options id=configuration-options>Configuration Options<a class=heading-anchor href=#configuration-options aria-label=Anchor>🔗</a></h3><table><thead><tr><th>Setting</th><th>Default</th><th>Description</th></tr></thead><tbody><tr><td><code>persistence.nosql.backend</code></td><td><code>MongoDb</code></td><td>The NoSQL backend type. Use <code>MongoDb</code> for production or <code>InMemory</code> for testing.</td></tr><tr><td><cod [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>quarkus.mongodb.connect-timeout</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"10S"</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>quarkus.mongodb.read-timeout</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"30S"</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>quarkus.mongodb.server-selection-timeout</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"30S"</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>quarkus.mongodb.write-concern.safe</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"true"</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>quarkus.mongodb.read-preference</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"primaryPreferred"</span><span style=color:#f8f8f8>
</span></span></span></code></pre></div><p>See the <a href=https://quarkus.io/guides/mongodb#configuration-reference>Quarkus MongoDB configuration reference</a> for all available options.</p><h2 id=production-recommendations id=production-recommendations>Production Recommendations<a class=heading-anchor href=#production-recommendations aria-label=Anchor>🔗</a></h2><p>When deploying Polaris in production, consider the following recommendations:</p><ol><li><p><strong>Enable TLS/SSL</strong> [...]
\ No newline at end of file
diff --git a/in-dev/unreleased/helm-chart/production/index.html b/in-dev/unreleased/helm-chart/production/index.html
index 29bec6b6e1..65d1b0a7ab 100644
--- a/in-dev/unreleased/helm-chart/production/index.html
+++ b/in-dev/unreleased/helm-chart/production/index.html
@@ -1,12 +1,12 @@
<!doctype html><html itemscope itemtype=http://schema.org/WebPage lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon.png sizes=100x100><link rel=icon type=image/png href=/favicons/android-ch [...]
Prerequisites🔗 A Kubernetes cluster (1.33+ recommended) Helm 3.x or 4.x installed kubectl configured to access your cluster A PostgreSQL or MongoDB database Adding the Helm Repository🔗 Add the official Apache Polaris Helm repository:
-1helm repo add polaris https://downloads.apache.org/polaris/helm-chart 2helm repo update Installation🔗 Create a values.yaml file with your production configuration. See the Chart Values Reference for all available configuration options."><meta property="og:url" content="https://polaris.apache.org/in-dev/unreleased/helm-chart/production/"><meta property="og:site_name" content="Apache Polaris"><meta property="og:title" content="Production Configuration"><meta property="og:description" cont [...]
+helm repo add polaris https://downloads.apache.org/polaris/helm-chart helm repo update Installation🔗 Create a values.yaml file with your production configuration. See the Chart Values Reference for all available configuration options."><meta property="og:url" content="https://polaris.apache.org/in-dev/unreleased/helm-chart/production/"><meta property="og:site_name" content="Apache Polaris"><meta property="og:title" content="Production Configuration"><meta property="og:description" conten [...]
Prerequisites🔗 A Kubernetes cluster (1.33+ recommended) Helm 3.x or 4.x installed kubectl configured to access your cluster A PostgreSQL or MongoDB database Adding the Helm Repository🔗 Add the official Apache Polaris Helm repository:
-1helm repo add polaris https://downloads.apache.org/polaris/helm-chart 2helm repo update Installation🔗 Create a values.yaml file with your production configuration. See the Chart Values Reference for all available configuration options."><meta property="og:locale" content="en_us"><meta property="og:type" content="article"><meta property="article:section" content="in-dev"><meta itemprop=name content="Production Configuration"><meta itemprop=description content="This guide provides instruc [...]
+helm repo add polaris https://downloads.apache.org/polaris/helm-chart helm repo update Installation🔗 Create a values.yaml file with your production configuration. See the Chart Values Reference for all available configuration options."><meta property="og:locale" content="en_us"><meta property="og:type" content="article"><meta property="article:section" content="in-dev"><meta itemprop=name content="Production Configuration"><meta itemprop=description content="This guide provides instructi [...]
Prerequisites🔗 A Kubernetes cluster (1.33+ recommended) Helm 3.x or 4.x installed kubectl configured to access your cluster A PostgreSQL or MongoDB database Adding the Helm Repository🔗 Add the official Apache Polaris Helm repository:
-1helm repo add polaris https://downloads.apache.org/polaris/helm-chart 2helm repo update Installation🔗 Create a values.yaml file with your production configuration. See the Chart Values Reference for all available configuration options."><meta itemprop=wordCount content="800"><meta name=twitter:card content="summary"><meta name=twitter:title content="Production Configuration"><meta name=twitter:description content="This guide provides instructions for configuring the Apache Polaris Helm [...]
+helm repo add polaris https://downloads.apache.org/polaris/helm-chart helm repo update Installation🔗 Create a values.yaml file with your production configuration. See the Chart Values Reference for all available configuration options."><meta itemprop=wordCount content="765"><meta name=twitter:card content="summary"><meta name=twitter:title content="Production Configuration"><meta name=twitter:description content="This guide provides instructions for configuring the Apache Polaris Helm ch [...]
Prerequisites🔗 A Kubernetes cluster (1.33+ recommended) Helm 3.x or 4.x installed kubectl configured to access your cluster A PostgreSQL or MongoDB database Adding the Helm Repository🔗 Add the official Apache Polaris Helm repository:
-1helm repo add polaris https://downloads.apache.org/polaris/helm-chart 2helm repo update Installation🔗 Create a values.yaml file with your production configuration. See the Chart Values Reference for all available configuration options."><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1 [...]
+helm repo add polaris https://downloads.apache.org/polaris/helm-chart helm repo update Installation🔗 Create a values.yaml file with your production configuration. See the Chart Values Reference for all available configuration options."><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7 [...]
<label for=m-in-devunreleased-check><a href=/in-dev/unreleased/ title="Apache Polaris Documentation (Unreleased)" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleased><span>Unreleased</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-in-devunreleasedgetting-started-li><input type=checkbox id=m-in-devunreleasedgetting-started-check>
<label for=m-in-devunreleasedgetting-started-check><a href=/in-dev/unreleased/getting-started/ title="Getting Started with Apache Polaris" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleasedgetting-started><span>Getting Started</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedquick-start-li><input type=checkbox id=m-in-devunreleasedgetting-star [...]
<label for=m-in-devunreleasedgetting-startedquick-start-check><a href=/in-dev/unreleased/getting-started/quick-start/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-in-devunreleasedgetting-startedquick-start><span>Quickstart</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedsetup-tools-li><input type=checkbox id=m-in-devunreleasedgetting-startedsetup-tools-check>
@@ -74,59 +74,59 @@ Prerequisites🔗 A Kubernetes cluster (1.33+ recommended) Helm 3.x or 4.x insta
<a class=td-toc-title__link title="Top of page" href=#></a></div><nav id=TableOfContents><ul><li><a href=#prerequisites>Prerequisites</a></li><li><a href=#adding-the-helm-repository>Adding the Helm Repository</a></li><li><a href=#installation>Installation</a></li><li><a href=#production-configuration>Production Configuration</a><ul><li><a href=#authentication>Authentication</a></li><li><a href=#persistence>Persistence</a></li><li><a href=#networking>Networking</a></li><li><a href=#resour [...]
This content is unreleased and may change before the next Polaris release.
For stable user documentation, see the
-<a href=/releases/latest/>latest release docs</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/docs/>Documentation</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/>Developer Docs</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/helm-chart/>Helm Chart</a></li><li class="breadcrumb-item active" aria-current=page>Production Configuration</li></ol></nav><div class=td-content><h1>Production Configura [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span>helm repo update
-</span></span></code></pre></div><h2 id=installation id=installation>Installation<a class=heading-anchor href=#installation aria-label=Anchor>🔗</a></h2><p>Create a <code>values.yaml</code> file with your production configuration. See the Chart <a href=/in-dev/unreleased/helm-chart/reference/>Values Reference</a> for all available configuration options.</p><p>Create the target namespace and install the chart:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab- [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span>helm install polaris polaris/polaris --namespace polaris --values your-production-values.yaml
-</span></span></code></pre></div><p>Verify the installation:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span>helm <span style=color:#204a87>test</span> polaris --namespace polaris
-</span></span></code></pre></div><h2 id=production-configuration id=production-configuration>Production Configuration<a class=heading-anchor href=#production-configuration aria-label=Anchor>🔗</a></h2><p>The default Helm chart values are suitable for development and testing, but they are not recommended for production. The following sections describe the key areas to configure for a production deployment.</p><h3 id=authentication id=authentication>Authentication<a class=heading-anchor hre [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>requests</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>memory</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"8Gi"</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>cpu</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"4"</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>limits</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">6</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>memory</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"8Gi"</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">7</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>cpu</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"4"</span><span style=color:#f8f8f8>
-</span></span></span></code></pre></div><p>Adjust these values based on expected workload and available cluster resources.</p><h3 id=scaling id=scaling>Scaling<a class=heading-anchor href=#scaling aria-label=Anchor>🔗</a></h3><p>For high availability, multiple replicas of the Polaris server can be run. This requires a persistent metastore to be configured as described above.</p><h4 id=static-replicas id=static-replicas>Static Replicas<a class=heading-anchor href=#static-replicas aria-labe [...]
-</span></span></span></code></pre></div><h4 id=autoscaling id=autoscaling>Autoscaling<a class=heading-anchor href=#autoscaling aria-label=Anchor>🔗</a></h4><p>Horizontal autoscaling can be enabled to define the minimum and maximum number of replicas, and CPU or memory utilization targets:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-yaml data-lang=yaml><span style=display: [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>enabled</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>true</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>minReplicas</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#0000cf;font-weight:700>2</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>maxReplicas</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#0000cf;font-weight:700>5</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>targetCPUUtilizationPercentage</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#0000cf;font-weight:700>80</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">6</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>targetMemoryUtilizationPercentage</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#0000cf;font-weight:700>80</span><span style=color:#f8f8f8>
-</span></span></span></code></pre></div><h4 id=pod-topology-spreading id=pod-topology-spreading>Pod Topology Spreading<a class=heading-anchor href=#pod-topology-spreading aria-label=Anchor>🔗</a></h4><p>For better fault tolerance, <code>topologySpreadConstraints</code> can be used to distribute pods across different nodes, racks, or availability zones. This helps prevent a single infrastructure failure from taking down all Polaris replicas.</p><p>Here is an example that spreads pods acros [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#f8f8f8> </span>- <span style=color:#204a87;font-weight:700>maxSkew</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#0000cf;font-weight:700>1</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>topologyKey</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"topology.kubernetes.io/zone"</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>whenUnsatisfiable</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"DoNotSchedule"</span><span style=color:#f8f8f8>
-</span></span></span></code></pre></div><h3 id=pod-priority id=pod-priority>Pod Priority<a class=heading-anchor href=#pod-priority aria-label=Anchor>🔗</a></h3><p>In a production environment, it is advisable to set a <code>priorityClassName</code> for the Polaris pods. This ensures that the Kubernetes scheduler gives them higher priority over less critical workloads, and helps prevent them from being evicted from a node that is running out of resources.</p><p>First, a <code>PriorityClass< [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#204a87;font-weight:700>kind</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>PriorityClass</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span><span style=color:#204a87;font-weight:700>metadata</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>name</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>polaris-high-priority</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span><span style=color:#204a87;font-weight:700>value</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#0000cf;font-weight:700>1000000</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">6</span><span><span style=color:#204a87;font-weight:700>globalDefault</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>false</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">7</span><span><span style=color:#204a87;font-weight:700>description</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"This priority class should be used for Polaris service pods only."</span><span style=color:#f8f8f8>
-</span></span></span></code></pre></div><p>Then, the <code>priorityClassName</code> can be set in the <code>values.yaml</code> file:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-yaml data-lang=yaml><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span><span style=color: [...]
-</span></span></span></code></pre></div><h2 id=bootstrapping-realms id=bootstrapping-realms>Bootstrapping Realms<a class=heading-anchor href=#bootstrapping-realms aria-label=Anchor>🔗</a></h2><p>When installing Polaris for the first time, it is necessary to bootstrap each realm using the Polaris admin tool.</p><p>For more information on bootstrapping realms, see the <a href=/in-dev/unreleased/admin-tool/#bootstrapping-realms-and-principal-credentials>Admin Tool</a> guide.</p><p>Example fo [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span> -n polaris <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span> --image<span style=color:#ce5c00;font-weight:700>=</span>apache/polaris-admin-tool:latest <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span> --restart<span style=color:#ce5c00;font-weight:700>=</span>Never <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span> --rm -it <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span> --env<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"polaris.persistence.type=relational-jdbc"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span> --env<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"quarkus.datasource.username=</span><span style=color:#204a87;font-weight:700>$(</span>kubectl get secret polaris-persistence -n polaris -o <span style=color:#000>jsonpath</span><span style=color:#ce5c00;font-weight:700>=</sp [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span> --env<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"quarkus.datasource.password=</span><span style=color:#204a87;font-weight:700>$(</span>kubectl get secret polaris-persistence -n polaris -o <span style=color:#000>jsonpath</span><span style=color:#ce5c00;font-weight:700>=</sp [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span> --env<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"quarkus.datasource.jdbc.url=</span><span style=color:#204a87;font-weight:700>$(</span>kubectl get secret polaris-persistence -n polaris -o <span style=color:#000>jsonpath</span><span style=color:#ce5c00;font-weight:700>=</sp [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">10</span><span> -- <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">11</span><span> bootstrap -r polaris-realm1 -c polaris-realm1,root,<span style=color:#000>$ROOT_PASSWORD</span>
-</span></span></code></pre></div><p>Example for the NoSQL (MongoDB) metastore:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 1</span><span>kubectl run polaris-bootstrap <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span> -n polaris <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span> --image<span style=color:#ce5c00;font-weight:700>=</span>apache/polaris-admin-tool:latest <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span> --restart<span style=color:#ce5c00;font-weight:700>=</span>Never <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span> --rm -it <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span> --env<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"polaris.persistence.type=nosql"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span> --env<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"polaris.persistence.nosql.backend=MongoDb"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span> --env<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"quarkus.mongodb.database=polaris"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span> --env<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"quarkus.mongodb.connection-string=</span><span style=color:#204a87;font-weight:700>$(</span>kubectl get secret polaris-nosql-persistence -n polaris -o <span style=color:#000>jsonpath</span><span style=color:#ce5c00;font-weig [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">10</span><span> -- <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">11</span><span> bootstrap -r polaris-realm1 -c polaris-realm1,root,<span style=color:#000>$ROOT_PASSWORD</span>
-</span></span></code></pre></div><p>Both commands above bootstrap a realm named <code>polaris-realm1</code> with root password: <code>$ROOT_PASSWORD</code>.</p><div class="alert alert-warning"><p class=alert-heading>⚠️ Warning</p>Replace <code>$ROOT_PASSWORD</code> with a strong, unique password for the root credentials.</div><h2 id=uninstalling id=uninstalling>Uninstalling<a class=heading-anchor href=#uninstalling aria-label=Anchor>🔗</a></h2><div class=highlight><pre tabindex=0 style=ba [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span>kubectl delete namespace polaris --wait<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#204a87>true</span> --ignore-not-found
+<a href=/releases/latest/>latest release docs</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/docs/>Documentation</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/>Developer Docs</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/helm-chart/>Helm Chart</a></li><li class="breadcrumb-item active" aria-current=page>Production Configuration</li></ol></nav><div class=td-content><h1>Production Configura [...]
+</span></span><span style=display:flex><span>helm repo update
+</span></span></code></pre></div><h2 id=installation id=installation>Installation<a class=heading-anchor href=#installation aria-label=Anchor>🔗</a></h2><p>Create a <code>values.yaml</code> file with your production configuration. See the Chart <a href=/in-dev/unreleased/helm-chart/reference/>Values Reference</a> for all available configuration options.</p><p>Create the target namespace and install the chart:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab- [...]
+</span></span><span style=display:flex><span>helm install polaris polaris/polaris --namespace polaris --values your-production-values.yaml
+</span></span></code></pre></div><p>Verify the installation:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span>helm <span style=color:#204a87>test</span> polaris --namespace polaris
+</span></span></code></pre></div><h2 id=production-configuration id=production-configuration>Production Configuration<a class=heading-anchor href=#production-configuration aria-label=Anchor>🔗</a></h2><p>The default Helm chart values are suitable for development and testing, but they are not recommended for production. The following sections describe the key areas to configure for a production deployment.</p><h3 id=authentication id=authentication>Authentication<a class=heading-anchor hre [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>requests</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>memory</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"8Gi"</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>cpu</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"4"</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>limits</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>memory</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"8Gi"</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>cpu</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"4"</span><span style=color:#f8f8f8>
+</span></span></span></code></pre></div><p>Adjust these values based on expected workload and available cluster resources.</p><h3 id=scaling id=scaling>Scaling<a class=heading-anchor href=#scaling aria-label=Anchor>🔗</a></h3><p>For high availability, multiple replicas of the Polaris server can be run. This requires a persistent metastore to be configured as described above.</p><h4 id=static-replicas id=static-replicas>Static Replicas<a class=heading-anchor href=#static-replicas aria-labe [...]
+</span></span></span></code></pre></div><h4 id=autoscaling id=autoscaling>Autoscaling<a class=heading-anchor href=#autoscaling aria-label=Anchor>🔗</a></h4><p>Horizontal autoscaling can be enabled to define the minimum and maximum number of replicas, and CPU or memory utilization targets:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-yaml data-lang=yaml><span style=display: [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>enabled</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>true</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>minReplicas</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#0000cf;font-weight:700>2</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>maxReplicas</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#0000cf;font-weight:700>5</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>targetCPUUtilizationPercentage</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#0000cf;font-weight:700>80</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>targetMemoryUtilizationPercentage</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#0000cf;font-weight:700>80</span><span style=color:#f8f8f8>
+</span></span></span></code></pre></div><h4 id=pod-topology-spreading id=pod-topology-spreading>Pod Topology Spreading<a class=heading-anchor href=#pod-topology-spreading aria-label=Anchor>🔗</a></h4><p>For better fault tolerance, <code>topologySpreadConstraints</code> can be used to distribute pods across different nodes, racks, or availability zones. This helps prevent a single infrastructure failure from taking down all Polaris replicas.</p><p>Here is an example that spreads pods acros [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span>- <span style=color:#204a87;font-weight:700>maxSkew</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#0000cf;font-weight:700>1</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>topologyKey</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"topology.kubernetes.io/zone"</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>whenUnsatisfiable</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"DoNotSchedule"</span><span style=color:#f8f8f8>
+</span></span></span></code></pre></div><h3 id=pod-priority id=pod-priority>Pod Priority<a class=heading-anchor href=#pod-priority aria-label=Anchor>🔗</a></h3><p>In a production environment, it is advisable to set a <code>priorityClassName</code> for the Polaris pods. This ensures that the Kubernetes scheduler gives them higher priority over less critical workloads, and helps prevent them from being evicted from a node that is running out of resources.</p><p>First, a <code>PriorityClass< [...]
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>kind</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>PriorityClass</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>metadata</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>name</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000>polaris-high-priority</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>value</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#0000cf;font-weight:700>1000000</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>globalDefault</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>false</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>description</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"This priority class should be used for Polaris service pods only."</span><span style=color:#f8f8f8>
+</span></span></span></code></pre></div><p>Then, the <code>priorityClassName</code> can be set in the <code>values.yaml</code> file:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-yaml data-lang=yaml><span style=display:flex><span><span style=color:#204a87;font-weight:700>priorityClassName</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </spa [...]
+</span></span></span></code></pre></div><h2 id=bootstrapping-realms id=bootstrapping-realms>Bootstrapping Realms<a class=heading-anchor href=#bootstrapping-realms aria-label=Anchor>🔗</a></h2><p>When installing Polaris for the first time, it is necessary to bootstrap each realm using the Polaris admin tool.</p><p>For more information on bootstrapping realms, see the <a href=/in-dev/unreleased/admin-tool/#bootstrapping-realms-and-principal-credentials>Admin Tool</a> guide.</p><p>Example fo [...]
+</span></span></span><span style=display:flex><span> -n polaris <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --image<span style=color:#ce5c00;font-weight:700>=</span>apache/polaris-admin-tool:latest <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --restart<span style=color:#ce5c00;font-weight:700>=</span>Never <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --rm -it <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --env<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"polaris.persistence.type=relational-jdbc"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --env<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"quarkus.datasource.username=</span><span style=color:#204a87;font-weight:700>$(</span>kubectl get secret polaris-persistence -n polaris -o <span style=color:#000>jsonpath</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>'{.data.username}'</span> <span style=color:#000;font-weight:700>|</span> base64 --decode<s [...]
+</span></span></span><span style=display:flex><span> --env<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"quarkus.datasource.password=</span><span style=color:#204a87;font-weight:700>$(</span>kubectl get secret polaris-persistence -n polaris -o <span style=color:#000>jsonpath</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>'{.data.password}'</span> <span style=color:#000;font-weight:700>|</span> base64 --decode<s [...]
+</span></span></span><span style=display:flex><span> --env<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"quarkus.datasource.jdbc.url=</span><span style=color:#204a87;font-weight:700>$(</span>kubectl get secret polaris-persistence -n polaris -o <span style=color:#000>jsonpath</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>'{.data.jdbcUrl}'</span> <span style=color:#000;font-weight:700>|</span> base64 --decode<sp [...]
+</span></span></span><span style=display:flex><span> -- <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> bootstrap -r polaris-realm1 -c polaris-realm1,root,<span style=color:#000>$ROOT_PASSWORD</span>
+</span></span></code></pre></div><p>Example for the NoSQL (MongoDB) metastore:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span>kubectl run polaris-bootstrap <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -n polaris <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --image<span style=color:#ce5c00;font-weight:700>=</span>apache/polaris-admin-tool:latest <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --restart<span style=color:#ce5c00;font-weight:700>=</span>Never <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --rm -it <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --env<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"polaris.persistence.type=nosql"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --env<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"polaris.persistence.nosql.backend=MongoDb"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --env<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"quarkus.mongodb.database=polaris"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --env<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"quarkus.mongodb.connection-string=</span><span style=color:#204a87;font-weight:700>$(</span>kubectl get secret polaris-nosql-persistence -n polaris -o <span style=color:#000>jsonpath</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>'{.data.connectionString}'</span> <span style=color:#000;font-weight:700>|</spa [...]
+</span></span></span><span style=display:flex><span> -- <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> bootstrap -r polaris-realm1 -c polaris-realm1,root,<span style=color:#000>$ROOT_PASSWORD</span>
+</span></span></code></pre></div><p>Both commands above bootstrap a realm named <code>polaris-realm1</code> with root password: <code>$ROOT_PASSWORD</code>.</p><div class="alert alert-warning"><p class=alert-heading>⚠️ Warning</p>Replace <code>$ROOT_PASSWORD</code> with a strong, unique password for the root credentials.</div><h2 id=uninstalling id=uninstalling>Uninstalling<a class=heading-anchor href=#uninstalling aria-label=Anchor>🔗</a></h2><div class=highlight><pre tabindex=0 style=ba [...]
+</span></span><span style=display:flex><span>kubectl delete namespace polaris --wait<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#204a87>true</span> --ignore-not-found
</span></span></code></pre></div></div></main></div></div><footer class="td-footer row d-print-none"><div class=container-fluid><div class="row mx-md-2"><div class="td-footer__left col-6 col-sm-4 order-sm-1"><ul class=td-footer__links-list><li class=td-footer__links-item data-bs-toggle=tooltip title=Slack aria-label=Slack><a target=_blank rel=noopener href=https://apache-polaris.slack.com/ aria-label=Slack><i class="fa-regular fa-comment-dots"></i></a></li><li class=td-footer__links-item [...]
\ No newline at end of file
diff --git a/in-dev/unreleased/helm-chart/reference/index.html b/in-dev/unreleased/helm-chart/reference/index.html
index 3542d4e11b..863a0e5c22 100644
--- a/in-dev/unreleased/helm-chart/reference/index.html
+++ b/in-dev/unreleased/helm-chart/reference/index.html
@@ -1,4 +1,4 @@
-<!doctype html><html itemscope itemtype=http://schema.org/WebPage lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon.png sizes=100x100><link rel=icon type=image/png href=/favicons/android-ch [...]
+<!doctype html><html itemscope itemtype=http://schema.org/WebPage lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon.png sizes=100x100><link rel=icon type=image/png href=/favicons/android-ch [...]
<label for=m-in-devunreleased-check><a href=/in-dev/unreleased/ title="Apache Polaris Documentation (Unreleased)" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleased><span>Unreleased</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-in-devunreleasedgetting-started-li><input type=checkbox id=m-in-devunreleasedgetting-started-check>
<label for=m-in-devunreleasedgetting-started-check><a href=/in-dev/unreleased/getting-started/ title="Getting Started with Apache Polaris" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleasedgetting-started><span>Getting Started</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedquick-start-li><input type=checkbox id=m-in-devunreleasedgetting-star [...]
<label for=m-in-devunreleasedgetting-startedquick-start-check><a href=/in-dev/unreleased/getting-started/quick-start/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-in-devunreleasedgetting-startedquick-start><span>Quickstart</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedsetup-tools-li><input type=checkbox id=m-in-devunreleasedgetting-startedsetup-tools-check>
diff --git a/in-dev/unreleased/index.html b/in-dev/unreleased/index.html
index ebfe1bed33..ef6e33b8c4 100644
--- a/in-dev/unreleased/index.html
+++ b/in-dev/unreleased/index.html
@@ -10,7 +10,7 @@ Key concepts🔗 This section introduces key concepts associated with using Apac
In the following diagram, a sample Apache Polaris structure with nested namespaces is shown for Catalog1. No tables or namespaces have been created yet for Catalog2 or Catalog3."><meta itemprop=wordCount content="981"><meta name=twitter:card content="summary"><meta name=twitter:title content="Apache Polaris Documentation (Unreleased)"><meta name=twitter:description content="Apache Polaris is a catalog implementation for Apache Iceberg™ tables and is built on the open source Apache Iceber [...]
With Polaris, you can provide centralized, secure read and write access to your Iceberg tables across different REST-compatible query engines.
Key concepts🔗 This section introduces key concepts associated with using Apache Polaris.
-In the following diagram, a sample Apache Polaris structure with nested namespaces is shown for Catalog1. No tables or namespaces have been created yet for Catalog2 or Catalog3."><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css rel=stylesheet i [...]
+In the following diagram, a sample Apache Polaris structure with nested namespaces is shown for Catalog1. No tables or namespaces have been created yet for Catalog2 or Catalog3."><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css rel=stylesheet i [...]
<label for=m-in-devunreleased-check><a href=/in-dev/unreleased/ title="Apache Polaris Documentation (Unreleased)" class="align-left ps-0 active td-sidebar-link td-sidebar-link__section" id=m-in-devunreleased><span class=td-sidebar-nav-active-item>Unreleased</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-in-devunreleasedgetting-started-li><input type=checkbox id=m-in-devunreleasedgetting-started-check>
<label for=m-in-devunreleasedgetting-started-check><a href=/in-dev/unreleased/getting-started/ title="Getting Started with Apache Polaris" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleasedgetting-started><span>Getting Started</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedquick-start-li><input type=checkbox id=m-in-devunreleasedgetting-star [...]
<label for=m-in-devunreleasedgetting-startedquick-start-check><a href=/in-dev/unreleased/getting-started/quick-start/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-in-devunreleasedgetting-startedquick-start><span>Quickstart</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedsetup-tools-li><input type=checkbox id=m-in-devunreleasedgetting-startedsetup-tools-check>
diff --git a/in-dev/unreleased/managing-security/access-control/index.html b/in-dev/unreleased/managing-security/access-control/index.html
index 074a71cb24..e9be9e9d87 100644
--- a/in-dev/unreleased/managing-security/access-control/index.html
+++ b/in-dev/unreleased/managing-security/access-control/index.html
@@ -10,7 +10,7 @@ Polaris uses a role-based access control (RBAC) model in which the Polaris admin
For advanced authorization scenarios requiring external policy management or integration with existing policy infrastructure, Polaris supports integration with external Policy Decision Points (PDPs) such as Open Policy Agent (OPA). See External Policy Decision Point for more information. These are the key concepts to understanding access control in Polaris:"><meta itemprop=wordCount content="1226"><meta name=twitter:card content="summary"><meta name=twitter:title content="Role-Based Acce [...]
Polaris uses a role-based access control (RBAC) model in which the Polaris administrator assigns access privileges to catalog roles and then grants access to resources to principals by assigning catalog roles to principal roles.
ℹ️ Info
-For advanced authorization scenarios requiring external policy management or integration with existing policy infrastructure, Polaris supports integration with external Policy Decision Points (PDPs) such as Open Policy Agent (OPA). See External Policy Decision Point for more information. These are the key concepts to understanding access control in Polaris:"><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha2 [...]
+For advanced authorization scenarios requiring external policy management or integration with existing policy infrastructure, Polaris supports integration with external Policy Decision Points (PDPs) such as Open Policy Agent (OPA). See External Policy Decision Point for more information. These are the key concepts to understanding access control in Polaris:"><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha2 [...]
<label for=m-in-devunreleased-check><a href=/in-dev/unreleased/ title="Apache Polaris Documentation (Unreleased)" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleased><span>Unreleased</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-in-devunreleasedgetting-started-li><input type=checkbox id=m-in-devunreleasedgetting-started-check>
<label for=m-in-devunreleasedgetting-started-check><a href=/in-dev/unreleased/getting-started/ title="Getting Started with Apache Polaris" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleasedgetting-started><span>Getting Started</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedquick-start-li><input type=checkbox id=m-in-devunreleasedgetting-star [...]
<label for=m-in-devunreleasedgetting-startedquick-start-check><a href=/in-dev/unreleased/getting-started/quick-start/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-in-devunreleasedgetting-startedquick-start><span>Quickstart</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedsetup-tools-li><input type=checkbox id=m-in-devunreleasedgetting-startedsetup-tools-check>
diff --git a/in-dev/unreleased/managing-security/external-idp/idp-dev-notes/index.html b/in-dev/unreleased/managing-security/external-idp/idp-dev-notes/index.html
index eb5e3dc4ec..2f88baf9fe 100644
--- a/in-dev/unreleased/managing-security/external-idp/idp-dev-notes/index.html
+++ b/in-dev/unreleased/managing-security/external-idp/idp-dev-notes/index.html
@@ -6,7 +6,7 @@ InternalPolarisToken: Used in internal auth and inherits from PrincipalCredentia
Credential extraction – parsing headers and tokens Credential authentication – validating identity and assigning roles Key Interfaces🔗 Authenticator: A core interface used to authenticate credentials and resolve principal and principal roles. Roles may be derived from OIDC claims or internal mappings.
InternalPolarisToken: Used in internal auth and inherits from PrincipalCredential."><meta itemprop=wordCount content="342"><meta name=twitter:card content="summary"><meta name=twitter:title content="Authentication Development Details"><meta name=twitter:description content="Developer Architecture Notes🔗 Authentication Architecture🔗 Polaris separates authentication into two logical phases using Quarkus Security:
Credential extraction – parsing headers and tokens Credential authentication – validating identity and assigning roles Key Interfaces🔗 Authenticator: A core interface used to authenticate credentials and resolve principal and principal roles. Roles may be derived from OIDC claims or internal mappings.
-InternalPolarisToken: Used in internal auth and inherits from PrincipalCredential."><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css rel=stylesheet integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><script sr [...]
+InternalPolarisToken: Used in internal auth and inherits from PrincipalCredential."><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css rel=stylesheet integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><script sr [...]
<label for=m-in-devunreleased-check><a href=/in-dev/unreleased/ title="Apache Polaris Documentation (Unreleased)" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleased><span>Unreleased</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-in-devunreleasedgetting-started-li><input type=checkbox id=m-in-devunreleasedgetting-started-check>
<label for=m-in-devunreleasedgetting-started-check><a href=/in-dev/unreleased/getting-started/ title="Getting Started with Apache Polaris" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleasedgetting-started><span>Getting Started</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedquick-start-li><input type=checkbox id=m-in-devunreleasedgetting-star [...]
<label for=m-in-devunreleasedgetting-startedquick-start-check><a href=/in-dev/unreleased/getting-started/quick-start/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-in-devunreleasedgetting-startedquick-start><span>Quickstart</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedsetup-tools-li><input type=checkbox id=m-in-devunreleasedgetting-startedsetup-tools-check>
@@ -75,12 +75,12 @@ InternalPolarisToken: Used in internal auth and inherits from PrincipalCredentia
This content is unreleased and may change before the next Polaris release.
For stable user documentation, see the
<a href=/releases/latest/>latest release docs</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/docs/>Documentation</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/>Developer Docs</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/managing-security/>Managing Security</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/managing-security/external-idp/>Identity Providers</a></li><li class="br [...]
-See <a href=/in-dev/unreleased/managing-security/external-idp/#token-broker>Token Broker description</a> for configuration details.</p><h2 id=developer-authentication-workflows id=developer-authentication-workflows>Developer Authentication Workflows<a class=heading-anchor href=#developer-authentication-workflows aria-label=Anchor>🔗</a></h2><h3 id=internal-authentication id=internal-authentication>Internal Authentication<a class=heading-anchor href=#internal-authentication aria-label=Anch [...]
-</span></span></code></pre></div></li><li><p>Configuration properties for the default implementation:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-properties data-lang=properties><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span><span style=color:#c4a000>polaris.oid [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#c4a000>polaris.oidc.principal-mapper.name-claim-path</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>polaris/principal_name</span>
-</span></span></code></pre></div></li><li><p>It can be overridden per OIDC tenant.</p></li></ul><h3 id=roles-mapping id=roles-mapping>Roles Mapping<a class=heading-anchor href=#roles-mapping aria-label=Anchor>🔗</a></h3><ul><li><p>Interface: <a href=https://github.com/apache/polaris/blob/main/runtime/service/src/main/java/org/apache/polaris/service/auth/external/mapping/PrincipalRolesMapper.java><code>PrincipalRolesMapper</code></a></p><p>Polaris uses this component to transform role clai [...]
-</span></span></code></pre></div></li><li><p>Implementation selector:</p><p>This property selects the implementation of <code>PrincipalRolesMapper</code>. The <code>default</code> implementation applies regular expression (regex) transformations to OIDC roles.</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-properties data-lang=properties><span style=display:flex><span style [...]
-</span></span></code></pre></div></li><li><p>Configuration properties for the default implementation:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-properties data-lang=properties><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span><span style=color:#c4a000>polaris.oid [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#c4a000>polaris.oidc.principal-roles-mapper.mappings[0].regex</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>^.*$ </span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span><span style=color:#c4a000>polaris.oidc.principal-roles-mapper.mappings[0].replacement</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>PRINCIPAL_ROLE:$0</span>
+See <a href=/in-dev/unreleased/managing-security/external-idp/#token-broker>Token Broker description</a> for configuration details.</p><h2 id=developer-authentication-workflows id=developer-authentication-workflows>Developer Authentication Workflows<a class=heading-anchor href=#developer-authentication-workflows aria-label=Anchor>🔗</a></h2><h3 id=internal-authentication id=internal-authentication>Internal Authentication<a class=heading-anchor href=#internal-authentication aria-label=Anch [...]
+</span></span></code></pre></div></li><li><p>Configuration properties for the default implementation:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-properties data-lang=properties><span style=display:flex><span><span style=color:#c4a000>polaris.oidc.principal-mapper.id-claim-path</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>polaris/prin [...]
+</span></span><span style=display:flex><span><span style=color:#c4a000>polaris.oidc.principal-mapper.name-claim-path</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>polaris/principal_name</span>
+</span></span></code></pre></div></li><li><p>It can be overridden per OIDC tenant.</p></li></ul><h3 id=roles-mapping id=roles-mapping>Roles Mapping<a class=heading-anchor href=#roles-mapping aria-label=Anchor>🔗</a></h3><ul><li><p>Interface: <a href=https://github.com/apache/polaris/blob/main/runtime/service/src/main/java/org/apache/polaris/service/auth/external/mapping/PrincipalRolesMapper.java><code>PrincipalRolesMapper</code></a></p><p>Polaris uses this component to transform role clai [...]
+</span></span></code></pre></div></li><li><p>Implementation selector:</p><p>This property selects the implementation of <code>PrincipalRolesMapper</code>. The <code>default</code> implementation applies regular expression (regex) transformations to OIDC roles.</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-properties data-lang=properties><span style=display:flex><span><span [...]
+</span></span></code></pre></div></li><li><p>Configuration properties for the default implementation:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-properties data-lang=properties><span style=display:flex><span><span style=color:#c4a000>polaris.oidc.principal-roles-mapper.filter</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>^(?!profile$| [...]
+</span></span><span style=display:flex><span><span style=color:#c4a000>polaris.oidc.principal-roles-mapper.mappings[0].regex</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>^.*$ </span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>polaris.oidc.principal-roles-mapper.mappings[0].replacement</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>PRINCIPAL_ROLE:$0</span>
</span></span></code></pre></div></li></ul></div></main></div></div><footer class="td-footer row d-print-none"><div class=container-fluid><div class="row mx-md-2"><div class="td-footer__left col-6 col-sm-4 order-sm-1"><ul class=td-footer__links-list><li class=td-footer__links-item data-bs-toggle=tooltip title=Slack aria-label=Slack><a target=_blank rel=noopener href=https://apache-polaris.slack.com/ aria-label=Slack><i class="fa-regular fa-comment-dots"></i></a></li><li class=td-footer__ [...]
\ No newline at end of file
diff --git a/in-dev/unreleased/managing-security/external-idp/index.html b/in-dev/unreleased/managing-security/external-idp/index.html
index f5bb0ec8ae..59cc433c57 100644
--- a/in-dev/unreleased/managing-security/external-idp/index.html
+++ b/in-dev/unreleased/managing-security/external-idp/index.html
@@ -4,9 +4,9 @@ internal (Default) Only Polaris internal authentication is used. external Authen
Authentication Types🔗 Polaris supports three authentication modes:
internal (Default) Only Polaris internal authentication is used. external Authenticates using external OIDC providers (via Quarkus OIDC). Disables the internal token endpoint (returns HTTP 501). mixed Tries internal authentication first; if this fails, it falls back to OIDC. Authentication can be configured globally or per realm by setting the following properties:"><meta property="og:locale" content="en_us"><meta property="og:type" content="website"><meta itemprop=name content="Identity [...]
Authentication Types🔗 Polaris supports three authentication modes:
-internal (Default) Only Polaris internal authentication is used. external Authenticates using external OIDC providers (via Quarkus OIDC). Disables the internal token endpoint (returns HTTP 501). mixed Tries internal authentication first; if this fails, it falls back to OIDC. Authentication can be configured globally or per realm by setting the following properties:"><meta itemprop=wordCount content="916"><meta name=twitter:card content="summary"><meta name=twitter:title content="Identity [...]
+internal (Default) Only Polaris internal authentication is used. external Authenticates using external OIDC providers (via Quarkus OIDC). Disables the internal token endpoint (returns HTTP 501). mixed Tries internal authentication first; if this fails, it falls back to OIDC. Authentication can be configured globally or per realm by setting the following properties:"><meta itemprop=wordCount content="906"><meta name=twitter:card content="summary"><meta name=twitter:title content="Identity [...]
Authentication Types🔗 Polaris supports three authentication modes:
-internal (Default) Only Polaris internal authentication is used. external Authenticates using external OIDC providers (via Quarkus OIDC). Disables the internal token endpoint (returns HTTP 501). mixed Tries internal authentication first; if this fails, it falls back to OIDC. Authentication can be configured globally or per realm by setting the following properties:"><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integri [...]
+internal (Default) Only Polaris internal authentication is used. external Authenticates using external OIDC providers (via Quarkus OIDC). Disables the internal token endpoint (returns HTTP 501). mixed Tries internal authentication first; if this fails, it falls back to OIDC. Authentication can be configured globally or per realm by setting the following properties:"><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integri [...]
<label for=m-in-devunreleased-check><a href=/in-dev/unreleased/ title="Apache Polaris Documentation (Unreleased)" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleased><span>Unreleased</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-in-devunreleasedgetting-started-li><input type=checkbox id=m-in-devunreleasedgetting-started-check>
<label for=m-in-devunreleasedgetting-started-check><a href=/in-dev/unreleased/getting-started/ title="Getting Started with Apache Polaris" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleasedgetting-started><span>Getting Started</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedquick-start-li><input type=checkbox id=m-in-devunreleasedgetting-star [...]
<label for=m-in-devunreleasedgetting-startedquick-start-check><a href=/in-dev/unreleased/getting-started/quick-start/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-in-devunreleasedgetting-startedquick-start><span>Quickstart</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedsetup-tools-li><input type=checkbox id=m-in-devunreleasedgetting-startedsetup-tools-check>
@@ -74,68 +74,68 @@ internal (Default) Only Polaris internal authentication is used. external Authen
<a class=td-toc-title__link title="Top of page" href=#></a></div><nav id=TableOfContents><ul><li><a href=#authentication-types>Authentication Types</a></li><li><a href=#key-components>Key Components</a><ul><li><a href=#authenticator>Authenticator</a></li></ul></li><li><a href=#internal-authentication-configuration>Internal Authentication Configuration</a><ul><li><a href=#token-broker>Token Broker</a></li><li><a href=#token-service>Token Service</a></li><li><a href=#role-mapping>Role Mapp [...]
This content is unreleased and may change before the next Polaris release.
For stable user documentation, see the
-<a href=/releases/latest/>latest release docs</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/docs/>Documentation</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/>Developer Docs</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/managing-security/>Managing Security</a></li><li class="breadcrumb-item active" aria-current=page>Identity Providers</li></ol></nav><div class=td-content><h1>Identity Pro [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#c4a000>polaris.authentication.type</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>internal</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span><span style=color:#8f5902;font-style:italic># Per-realm override </span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span><span style=color:#c4a000>polaris.authentication.realm1.type</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>external</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span><span style=color:#c4a000>polaris.authentication.realm2.type</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>mixed</span>
-</span></span></code></pre></div><h2 id=key-components id=key-components>Key Components<a class=heading-anchor href=#key-components aria-label=Anchor>🔗</a></h2><h3 id=authenticator id=authenticator>Authenticator<a class=heading-anchor href=#authenticator aria-label=Anchor>🔗</a></h3><p>The <code>Authenticator</code> is a component responsible for resolving the principal and the principal roles, and for creating a <code>PolarisPrincipal</code> from the credentials provided by the authentic [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#c4a000>polaris.authentication.realm1.authenticator.type</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>custom</span>
-</span></span></code></pre></div><h2 id=internal-authentication-configuration id=internal-authentication-configuration>Internal Authentication Configuration<a class=heading-anchor href=#internal-authentication-configuration aria-label=Anchor>🔗</a></h2><h3 id=token-broker id=token-broker>Token Broker<a class=heading-anchor href=#token-broker aria-label=Anchor>🔗</a></h3><p>The <code>TokenBroker</code> signs and verifies tokens to ensure that they can be validated and remain unaltered.</p>< [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#c4a000>polaris.authentication.token-broker.max-token-generation</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>PT1H</span>
-</span></span></code></pre></div><p>Two types are available:</p><ul><li><code>rsa-key-pair</code> (recommended for production): Uses an RSA key pair for token signing and validation.</li><li><code>symmetric-key</code>: Uses a shared secret for both operations; suitable for single-node deployments or testing.</li></ul><p>The property <code>polaris.authentication.token-broker.max-token-generation</code> specifies the maximum validity duration of tokens issued by the internal <code>TokenBro [...]
-</span></span></code></pre></div><h3 id=role-mapping id=role-mapping>Role Mapping<a class=heading-anchor href=#role-mapping aria-label=Anchor>🔗</a></h3><p>When using internal authentication, token requests should include a <code>scope</code> parameter that specifies the roles to be activated for the principal. The <code>scope</code> parameter is a space-separated list of role names.</p><p>The default <code>ActiveRolesProvider</code> expects role names to be in the following format: <code [...]
-</span></span></code></pre></div><p>Here is an example of a full request to the Polaris token endpoint using internal authentication:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-http data-lang=http><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span><span style=color [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#000>Host</span><span style=color:#ce5c00;font-weight:700>:</span> <span style=color:#000>polaris.example.com:8181</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span><span style=color:#000>Content-Type</span><span style=color:#ce5c00;font-weight:700>:</span> <span style=color:#000>application/x-www-form-urlencoded</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span>grant_type=client_credentials&client_id=root&client_secret=s3cr3t&scope=PRINCIPAL_ROLE%3Aservice_admin%20PRINCIPAL_ROLE%3Acatalog_admin
-</span></span></code></pre></div><h2 id=external-authentication-configuration id=external-authentication-configuration>External Authentication Configuration<a class=heading-anchor href=#external-authentication-configuration aria-label=Anchor>🔗</a></h2><p>External authentication is configured via Quarkus OIDC and Polaris-specific OIDC extensions. The following settings are used to integrate with an identity provider and extract identity and role information from tokens.</p><h3 id=oidc-ten [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#c4a000>quarkus.oidc.auth-server-url</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>https://auth.example.com/realms/polaris</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span><span style=color:#c4a000>quarkus.oidc.client-id</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>polaris</span>
-</span></span></code></pre></div><p>Alternatively, it is possible to use multiple named tenants. Each OIDC-named tenant is then configured with standard Quarkus settings:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-properties data-lang=properties><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4 [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#c4a000>quarkus.oidc.oidc-tenant1.client-id</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>client1</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span><span style=color:#c4a000>quarkus.oidc.oidc-tenant1.application-type</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>service</span>
-</span></span></code></pre></div><p>When using multiple OIDC tenants, it’s your responsibility to configure tenant resolution appropriately. See the <a href=https://quarkus.io/guides/security-openid-connect-multitenancy#tenant-resolution>Quarkus OpenID Connect Multitenancy Guide</a>.</p><h3 id=principal-mapping id=principal-mapping>Principal Mapping<a class=heading-anchor href=#principal-mapping aria-label=Anchor>🔗</a></h3><p>While OIDC tenant resolution is entirely delegated to Qu [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#c4a000>polaris.oidc.principal-mapper.id-claim-path</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>polaris/principal_id</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span><span style=color:#c4a000>polaris.oidc.principal-mapper.name-claim-path</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>polaris/principal_name</span>
-</span></span></code></pre></div><p>These properties are overridable per OIDC tenant:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-properties data-lang=properties><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span><span style=color:#c4a000>polaris.oidc.oidc-tenant1.p [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#c4a000>polaris.oidc.oidc-tenant1.principal-mapper.name-claim-path</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>polaris/principal_name</span>
-</span></span></code></pre></div><div class="alert alert-primary"><p class=alert-heading>❗Important</p>The default implementation of PrincipalMapper can only work with JWT tokens. If your IDP issues opaque tokens instead, you will need to provide a custom implementation.</div><h3 id=role-mapping-1 id=role-mapping-1>Role Mapping<a class=heading-anchor href=#role-mapping-1 aria-label=Anchor>🔗</a></h3><p>Similarly, Polaris requires additional configuration to map roles provided by Quarkus t [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#c4a000>polaris.oidc.principal-roles-mapper.type</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>default</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span><span style=color:#c4a000>polaris.oidc.principal-roles-mapper.filter</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>^(?!profile$|email$).*</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span><span style=color:#c4a000>polaris.oidc.principal-roles-mapper.mappings[0].regex</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>^.*$</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span><span style=color:#c4a000>polaris.oidc.principal-roles-mapper.mappings[0].replacement</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>PRINCIPAL_ROLE:$0</span>
-</span></span></code></pre></div><p>These mappings can be overridden per OIDC tenant and used across different realms that rely on external identity providers. For example:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-properties data-lang=properties><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#c4a000>polaris.oidc.oidc-tenant1.principal-roles-mapper.filter</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>PRINCIPAL_ROLE:.*</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span><span style=color:#c4a000>polaris.oidc.oidc-tenant1.principal-roles-mapper.mappings[0].regex</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>PRINCIPAL_ROLE:(.*)</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span><span style=color:#c4a000>polaris.oidc.oidc-tenant1.principal-roles-mapper.mappings[0].replacement</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>PRINCIPAL_ROLE:$1</span>
-</span></span></code></pre></div><p>The default <code>Authenticator</code> expects the security identity to expose role names in the following format: <code>PRINCIPAL_ROLE:<role name></code>. You can use the <code>filter</code> and <code>mappings</code> properties to adjust the role names as they appear in the JWT claims.</p><p>For example, assume that the security identity produced by Quarkus exposes the following roles: <code>role_service_admin</code> and <code>role_catalog_admin</c [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#c4a000>polaris.oidc.principal-roles-mapper.filter</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>role_.*</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span><span style=color:#8f5902;font-style:italic># Extract the text after "role_" </span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span><span style=color:#c4a000>polaris.oidc.principal-roles-mapper.mappings[0].regex</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>role_(.*)</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span><span style=color:#8f5902;font-style:italic># Replace the extracted text with "PRINCIPAL_ROLE:" </span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">6</span><span><span style=color:#c4a000>polaris.oidc.principal-roles-mapper.mappings[0].replacement</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>PRINCIPAL_ROLE:$1</span>
-</span></span></code></pre></div><p>See more examples below.</p><h3 id=example-jwt-mappings id=example-jwt-mappings>Example JWT Mappings<a class=heading-anchor href=#example-jwt-mappings aria-label=Anchor>🔗</a></h3><h4 id=example-1-custom-claim-paths id=example-1-custom-claim-paths>Example 1: Custom Claim Paths<a class=heading-anchor href=#example-1-custom-claim-paths aria-label=Anchor>🔗</a></h4><ul><li><p>JWT</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-ta [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> <span style=color:#204a87;font-weight:700>"polaris"</span><span style=color:#000;font-weight:700>:</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> <span style=color:#000;font-weight:700>{</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> <span style=color:#204a87;font-weight:700>"roles"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span><span style=color:#4e9a06>"PRINCIPAL_ROLE:ALL"</span><span style=color:#000;font-weight:700>],</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span> <span style=color:#204a87;font-weight:700>"principal_name"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"root"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">6</span><span> <span style=color:#204a87;font-weight:700>"principal_id"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#0000cf;font-weight:700>1</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">7</span><span> <span style=color:#000;font-weight:700>}</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">8</span><span><span style=color:#000;font-weight:700>}</span>
-</span></span></code></pre></div></li><li><p>Configuration</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-properties data-lang=properties><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span><span style=color:#c4a000>quarkus.oidc.roles.role-claim-path</span><span style=c [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#c4a000>polaris.oidc.principal-mapper.id-claim-path</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>polaris/principal_id </span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span><span style=color:#c4a000>polaris.oidc.principal-mapper.name-claim-path</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>polaris/principal_name</span>
-</span></span></code></pre></div></li></ul><h4 id=example-2-generic-oidc-claims id=example-2-generic-oidc-claims>Example 2: Generic OIDC Claims<a class=heading-anchor href=#example-2-generic-oidc-claims aria-label=Anchor>🔗</a></h4><ul><li><p>JWT</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-json data-lang=json><span style=display:flex><span style="white-space:pre;-webkit-u [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> <span style=color:#204a87;font-weight:700>"sub"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"1"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> <span style=color:#204a87;font-weight:700>"scope"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"service_admin catalog_admin profile email"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> <span style=color:#204a87;font-weight:700>"preferred_username"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"root"</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span><span style=color:#000;font-weight:700>}</span>
-</span></span></code></pre></div></li><li><p>Configuration</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-properties data-lang=properties><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span><span style=color:#c4a000>quarkus.oidc.roles.role-claim-path</span><span style=c [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#c4a000>polaris.oidc.principal-mapper.id-claim-path</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>sub </span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span><span style=color:#c4a000>polaris.oidc.principal-mapper.name-claim-path</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>preferred_username </span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span><span style=color:#c4a000>polaris.oidc.principal-roles-mapper.filter</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>^(?!profile$|email$).* </span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span><span style=color:#c4a000>polaris.oidc.principal-roles-mapper.mappings[0].regex</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>^.*$ </span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">6</span><span><span style=color:#c4a000>polaris.oidc.principal-roles-mapper.mappings[0].replacement</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>PRINCIPAL_ROLE:$0</span>
+<a href=/releases/latest/>latest release docs</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/docs/>Documentation</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/>Developer Docs</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/managing-security/>Managing Security</a></li><li class="breadcrumb-item active" aria-current=page>Identity Providers</li></ol></nav><div class=td-content><h1>Identity Pro [...]
+</span></span><span style=display:flex><span><span style=color:#c4a000>polaris.authentication.type</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>internal</span>
+</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># Per-realm override </span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>polaris.authentication.realm1.type</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>external</span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>polaris.authentication.realm2.type</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>mixed</span>
+</span></span></code></pre></div><h2 id=key-components id=key-components>Key Components<a class=heading-anchor href=#key-components aria-label=Anchor>🔗</a></h2><h3 id=authenticator id=authenticator>Authenticator<a class=heading-anchor href=#authenticator aria-label=Anchor>🔗</a></h3><p>The <code>Authenticator</code> is a component responsible for resolving the principal and the principal roles, and for creating a <code>PolarisPrincipal</code> from the credentials provided by the authentic [...]
+</span></span><span style=display:flex><span><span style=color:#c4a000>polaris.authentication.realm1.authenticator.type</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>custom</span>
+</span></span></code></pre></div><h2 id=internal-authentication-configuration id=internal-authentication-configuration>Internal Authentication Configuration<a class=heading-anchor href=#internal-authentication-configuration aria-label=Anchor>🔗</a></h2><h3 id=token-broker id=token-broker>Token Broker<a class=heading-anchor href=#token-broker aria-label=Anchor>🔗</a></h3><p>The <code>TokenBroker</code> signs and verifies tokens to ensure that they can be validated and remain unaltered.</p>< [...]
+</span></span><span style=display:flex><span><span style=color:#c4a000>polaris.authentication.token-broker.max-token-generation</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>PT1H</span>
+</span></span></code></pre></div><p>Two types are available:</p><ul><li><code>rsa-key-pair</code> (recommended for production): Uses an RSA key pair for token signing and validation.</li><li><code>symmetric-key</code>: Uses a shared secret for both operations; suitable for single-node deployments or testing.</li></ul><p>The property <code>polaris.authentication.token-broker.max-token-generation</code> specifies the maximum validity duration of tokens issued by the internal <code>TokenBro [...]
+</span></span></code></pre></div><h3 id=role-mapping id=role-mapping>Role Mapping<a class=heading-anchor href=#role-mapping aria-label=Anchor>🔗</a></h3><p>When using internal authentication, token requests should include a <code>scope</code> parameter that specifies the roles to be activated for the principal. The <code>scope</code> parameter is a space-separated list of role names.</p><p>The default <code>ActiveRolesProvider</code> expects role names to be in the following format: <code [...]
+</span></span></code></pre></div><p>Here is an example of a full request to the Polaris token endpoint using internal authentication:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-http data-lang=http><span style=display:flex><span><span style=color:#000>POST</span> <span style=color:#000>/api/catalog/v1/oauth/tokens</span> <span style=color:#204a87;font-weight:700>HTTP</sp [...]
+</span></span><span style=display:flex><span><span style=color:#000>Host</span><span style=color:#ce5c00;font-weight:700>:</span> <span style=color:#000>polaris.example.com:8181</span>
+</span></span><span style=display:flex><span><span style=color:#000>Content-Type</span><span style=color:#ce5c00;font-weight:700>:</span> <span style=color:#000>application/x-www-form-urlencoded</span>
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span>grant_type=client_credentials&client_id=root&client_secret=s3cr3t&scope=PRINCIPAL_ROLE%3Aservice_admin%20PRINCIPAL_ROLE%3Acatalog_admin
+</span></span></code></pre></div><h2 id=external-authentication-configuration id=external-authentication-configuration>External Authentication Configuration<a class=heading-anchor href=#external-authentication-configuration aria-label=Anchor>🔗</a></h2><p>External authentication is configured via Quarkus OIDC and Polaris-specific OIDC extensions. The following settings are used to integrate with an identity provider and extract identity and role information from tokens.</p><h3 id=oidc-ten [...]
+</span></span><span style=display:flex><span><span style=color:#c4a000>quarkus.oidc.auth-server-url</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>https://auth.example.com/realms/polaris</span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>quarkus.oidc.client-id</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>polaris</span>
+</span></span></code></pre></div><p>Alternatively, it is possible to use multiple named tenants. Each OIDC-named tenant is then configured with standard Quarkus settings:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-properties data-lang=properties><span style=display:flex><span><span style=color:#c4a000>quarkus.oidc.oidc-tenant1.auth-server-url</span><span style=color:#ce [...]
+</span></span><span style=display:flex><span><span style=color:#c4a000>quarkus.oidc.oidc-tenant1.client-id</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>client1</span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>quarkus.oidc.oidc-tenant1.application-type</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>service</span>
+</span></span></code></pre></div><p>When using multiple OIDC tenants, it’s your responsibility to configure tenant resolution appropriately. See the <a href=https://quarkus.io/guides/security-openid-connect-multitenancy#tenant-resolution>Quarkus OpenID Connect Multitenancy Guide</a>.</p><h3 id=principal-mapping id=principal-mapping>Principal Mapping<a class=heading-anchor href=#principal-mapping aria-label=Anchor>🔗</a></h3><p>While OIDC tenant resolution is entirely delegated to Qu [...]
+</span></span><span style=display:flex><span><span style=color:#c4a000>polaris.oidc.principal-mapper.id-claim-path</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>polaris/principal_id</span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>polaris.oidc.principal-mapper.name-claim-path</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>polaris/principal_name</span>
+</span></span></code></pre></div><p>These properties are overridable per OIDC tenant:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-properties data-lang=properties><span style=display:flex><span><span style=color:#c4a000>polaris.oidc.oidc-tenant1.principal-mapper.id-claim-path</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>polaris/princip [...]
+</span></span><span style=display:flex><span><span style=color:#c4a000>polaris.oidc.oidc-tenant1.principal-mapper.name-claim-path</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>polaris/principal_name</span>
+</span></span></code></pre></div><div class="alert alert-primary"><p class=alert-heading>❗Important</p>The default implementation of PrincipalMapper can only work with JWT tokens. If your IDP issues opaque tokens instead, you will need to provide a custom implementation.</div><h3 id=role-mapping-1 id=role-mapping-1>Role Mapping<a class=heading-anchor href=#role-mapping-1 aria-label=Anchor>🔗</a></h3><p>Similarly, Polaris requires additional configuration to map roles provided by Quarkus t [...]
+</span></span><span style=display:flex><span><span style=color:#c4a000>polaris.oidc.principal-roles-mapper.type</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>default</span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>polaris.oidc.principal-roles-mapper.filter</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>^(?!profile$|email$).*</span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>polaris.oidc.principal-roles-mapper.mappings[0].regex</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>^.*$</span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>polaris.oidc.principal-roles-mapper.mappings[0].replacement</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>PRINCIPAL_ROLE:$0</span>
+</span></span></code></pre></div><p>These mappings can be overridden per OIDC tenant and used across different realms that rely on external identity providers. For example:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-properties data-lang=properties><span style=display:flex><span><span style=color:#c4a000>polaris.oidc.oidc-tenant1.principal-roles-mapper.type</span><span s [...]
+</span></span><span style=display:flex><span><span style=color:#c4a000>polaris.oidc.oidc-tenant1.principal-roles-mapper.filter</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>PRINCIPAL_ROLE:.*</span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>polaris.oidc.oidc-tenant1.principal-roles-mapper.mappings[0].regex</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>PRINCIPAL_ROLE:(.*)</span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>polaris.oidc.oidc-tenant1.principal-roles-mapper.mappings[0].replacement</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>PRINCIPAL_ROLE:$1</span>
+</span></span></code></pre></div><p>The default <code>Authenticator</code> expects the security identity to expose role names in the following format: <code>PRINCIPAL_ROLE:<role name></code>. You can use the <code>filter</code> and <code>mappings</code> properties to adjust the role names as they appear in the JWT claims.</p><p>For example, assume that the security identity produced by Quarkus exposes the following roles: <code>role_service_admin</code> and <code>role_catalog_admin</c [...]
+</span></span><span style=display:flex><span><span style=color:#c4a000>polaris.oidc.principal-roles-mapper.filter</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>role_.*</span>
+</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># Extract the text after "role_" </span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>polaris.oidc.principal-roles-mapper.mappings[0].regex</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>role_(.*)</span>
+</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># Replace the extracted text with "PRINCIPAL_ROLE:" </span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>polaris.oidc.principal-roles-mapper.mappings[0].replacement</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>PRINCIPAL_ROLE:$1</span>
+</span></span></code></pre></div><p>See more examples below.</p><h3 id=example-jwt-mappings id=example-jwt-mappings>Example JWT Mappings<a class=heading-anchor href=#example-jwt-mappings aria-label=Anchor>🔗</a></h3><h4 id=example-1-custom-claim-paths id=example-1-custom-claim-paths>Example 1: Custom Claim Paths<a class=heading-anchor href=#example-1-custom-claim-paths aria-label=Anchor>🔗</a></h4><ul><li><p>JWT</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-ta [...]
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"polaris"</span><span style=color:#000;font-weight:700>:</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>{</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"roles"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span><span style=color:#4e9a06>"PRINCIPAL_ROLE:ALL"</span><span style=color:#000;font-weight:700>],</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"principal_name"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"root"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"principal_id"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#0000cf;font-weight:700>1</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>}</span>
+</span></span><span style=display:flex><span><span style=color:#000;font-weight:700>}</span>
+</span></span></code></pre></div></li><li><p>Configuration</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-properties data-lang=properties><span style=display:flex><span><span style=color:#c4a000>quarkus.oidc.roles.role-claim-path</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>polaris/roles </span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>polaris.oidc.principal-mapper.id-claim-path</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>polaris/principal_id </span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>polaris.oidc.principal-mapper.name-claim-path</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>polaris/principal_name</span>
+</span></span></code></pre></div></li></ul><h4 id=example-2-generic-oidc-claims id=example-2-generic-oidc-claims>Example 2: Generic OIDC Claims<a class=heading-anchor href=#example-2-generic-oidc-claims aria-label=Anchor>🔗</a></h4><ul><li><p>JWT</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-json data-lang=json><span style=display:flex><span><span style=color:#000;font-weig [...]
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"sub"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"1"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"scope"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"service_admin catalog_admin profile email"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"preferred_username"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"root"</span>
+</span></span><span style=display:flex><span><span style=color:#000;font-weight:700>}</span>
+</span></span></code></pre></div></li><li><p>Configuration</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-properties data-lang=properties><span style=display:flex><span><span style=color:#c4a000>quarkus.oidc.roles.role-claim-path</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>scope </span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>polaris.oidc.principal-mapper.id-claim-path</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>sub </span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>polaris.oidc.principal-mapper.name-claim-path</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>preferred_username </span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>polaris.oidc.principal-roles-mapper.filter</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>^(?!profile$|email$).* </span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>polaris.oidc.principal-roles-mapper.mappings[0].regex</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>^.*$ </span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>polaris.oidc.principal-roles-mapper.mappings[0].replacement</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>PRINCIPAL_ROLE:$0</span>
</span></span></code></pre></div></li><li><p>Result</p><p>Polaris roles: <code>PRINCIPAL_ROLE:service_admin</code> and <code>PRINCIPAL_ROLE:catalog_admin</code></p></li></ul><h3 id=additional-links id=additional-links>Additional Links<a class=heading-anchor href=#additional-links aria-label=Anchor>🔗</a></h3><ul><li>For complete Keycloak integration example, see: <a href=/in-dev/unreleased/getting-started/using-polaris/keycloak-idp/>Keycloak External IDP Configuration Guide</a></li><li>Se [...]
\ No newline at end of file
diff --git a/in-dev/unreleased/managing-security/external-pdp/index.html b/in-dev/unreleased/managing-security/external-pdp/index.html
index b38065da6d..01e6bfb424 100644
--- a/in-dev/unreleased/managing-security/external-pdp/index.html
+++ b/in-dev/unreleased/managing-security/external-pdp/index.html
@@ -6,7 +6,7 @@ What is a Policy Decision Point?🔗 A Policy Decision Point (PDP) is a componen
Overview🔗 By default, Apache Polaris uses an internal authorization system based on role-based access control (RBAC). For advanced use cases requiring external policy management, centralized authorization, or integration with existing policy infrastructure, Polaris supports integration with external Policy Decision Points (PDPs).
What is a Policy Decision Point?🔗 A Policy Decision Point (PDP) is a component that evaluates authorization requests against defined policies and returns authorization decisions (allow/deny)."><meta itemprop=wordCount content="284"><meta name=twitter:card content="summary"><meta name=twitter:title content="External Policy Decision Point"><meta name=twitter:description content="This section provides information about integrating Apache Polaris with external Policy Decision Points (PDPs) f [...]
Overview🔗 By default, Apache Polaris uses an internal authorization system based on role-based access control (RBAC). For advanced use cases requiring external policy management, centralized authorization, or integration with existing policy infrastructure, Polaris supports integration with external Policy Decision Points (PDPs).
-What is a Policy Decision Point?🔗 A Policy Decision Point (PDP) is a component that evaluates authorization requests against defined policies and returns authorization decisions (allow/deny)."><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css re [...]
+What is a Policy Decision Point?🔗 A Policy Decision Point (PDP) is a component that evaluates authorization requests against defined policies and returns authorization decisions (allow/deny)."><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css re [...]
<label for=m-in-devunreleased-check><a href=/in-dev/unreleased/ title="Apache Polaris Documentation (Unreleased)" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleased><span>Unreleased</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-in-devunreleasedgetting-started-li><input type=checkbox id=m-in-devunreleasedgetting-started-check>
<label for=m-in-devunreleasedgetting-started-check><a href=/in-dev/unreleased/getting-started/ title="Getting Started with Apache Polaris" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleasedgetting-started><span>Getting Started</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedquick-start-li><input type=checkbox id=m-in-devunreleasedgetting-star [...]
<label for=m-in-devunreleasedgetting-startedquick-start-check><a href=/in-dev/unreleased/getting-started/quick-start/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-in-devunreleasedgetting-startedquick-start><span>Quickstart</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedsetup-tools-li><input type=checkbox id=m-in-devunreleasedgetting-startedsetup-tools-check>
@@ -81,5 +81,5 @@ For stable user documentation, see the
│ │<─────────│ │<────────│ │
│ │ Response │ │ Decision│ │
└─────────┘ └─────────────┘ └──────────────┘
-</code></pre><h2 id=available-implementations id=available-implementations>Available Implementations<a class=heading-anchor href=#available-implementations aria-label=Anchor>🔗</a></h2><p>Apache Polaris currently supports the following external PDP integrations:</p><ul><li><strong><a href=/in-dev/unreleased/managing-security/external-pdp/opa/>Open Policy Agent (OPA)</a></strong>: A general-purpose policy engine with a rich ecosystem and flexible policy language (Rego)</li></ul><h2 id=conf [...]
+</code></pre><h2 id=available-implementations id=available-implementations>Available Implementations<a class=heading-anchor href=#available-implementations aria-label=Anchor>🔗</a></h2><p>Apache Polaris currently supports the following external PDP integrations:</p><ul><li><strong><a href=/in-dev/unreleased/managing-security/external-pdp/opa/>Open Policy Agent (OPA)</a></strong>: A general-purpose policy engine with a rich ecosystem and flexible policy language (Rego)</li></ul><h2 id=conf [...]
</span></span></code></pre></div><p>Where <code><pdp-type></code> is the identifier for the PDP implementation (e.g., <code>opa</code>). The default value is <code>internal</code>.</p><p>See the specific PDP documentation for detailed configuration options:</p><ul><li><a href=/in-dev/unreleased/managing-security/external-pdp/opa/#configuration-reference>OPA Configuration</a></li></ul><div class=section-index></div></div></main></div></div><footer class="td-footer row d-print-none"><di [...]
\ No newline at end of file
diff --git a/in-dev/unreleased/managing-security/external-pdp/opa/index.html b/in-dev/unreleased/managing-security/external-pdp/opa/index.html
index aae82e87d7..9711e6f36c 100644
--- a/in-dev/unreleased/managing-security/external-pdp/opa/index.html
+++ b/in-dev/unreleased/managing-security/external-pdp/opa/index.html
@@ -4,9 +4,9 @@ Overview🔗 Open Policy Agent (OPA) is a general-purpose policy engine that ena
OPA integration is currently a preview feature and may undergo breaking changes in future versions. Use with caution in production environments. This page describes how to integrate Apache Polaris with Open Policy Agent (OPA) for external authorization.
Overview🔗 Open Policy Agent (OPA) is a general-purpose policy engine that enables unified, context-aware policy enforcement across your stack. OPA provides a high-level declarative language (Rego) for authoring policies and APIs to offload policy decision-making from your software."><meta property="og:locale" content="en_us"><meta property="og:type" content="article"><meta property="article:section" content="in-dev"><meta itemprop=name content="Open Policy Agent (OPA) Integration"><meta [...]
OPA integration is currently a preview feature and may undergo breaking changes in future versions. Use with caution in production environments. This page describes how to integrate Apache Polaris with Open Policy Agent (OPA) for external authorization.
-Overview🔗 Open Policy Agent (OPA) is a general-purpose policy engine that enables unified, context-aware policy enforcement across your stack. OPA provides a high-level declarative language (Rego) for authoring policies and APIs to offload policy decision-making from your software."><meta itemprop=wordCount content="1508"><meta name=twitter:card content="summary"><meta name=twitter:title content="Open Policy Agent (OPA) Integration"><meta name=twitter:description content="⚠️ Preview Feature
+Overview🔗 Open Policy Agent (OPA) is a general-purpose policy engine that enables unified, context-aware policy enforcement across your stack. OPA provides a high-level declarative language (Rego) for authoring policies and APIs to offload policy decision-making from your software."><meta itemprop=wordCount content="1341"><meta name=twitter:card content="summary"><meta name=twitter:title content="Open Policy Agent (OPA) Integration"><meta name=twitter:description content="⚠️ Preview Feature
OPA integration is currently a preview feature and may undergo breaking changes in future versions. Use with caution in production environments. This page describes how to integrate Apache Polaris with Open Policy Agent (OPA) for external authorization.
-Overview🔗 Open Policy Agent (OPA) is a general-purpose policy engine that enables unified, context-aware policy enforcement across your stack. OPA provides a high-level declarative language (Rego) for authoring policies and APIs to offload policy decision-making from your software."><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link [...]
+Overview🔗 Open Policy Agent (OPA) is a general-purpose policy engine that enables unified, context-aware policy enforcement across your stack. OPA provides a high-level declarative language (Rego) for authoring policies and APIs to offload policy decision-making from your software."><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link [...]
<label for=m-in-devunreleased-check><a href=/in-dev/unreleased/ title="Apache Polaris Documentation (Unreleased)" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleased><span>Unreleased</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-in-devunreleasedgetting-started-li><input type=checkbox id=m-in-devunreleasedgetting-started-check>
<label for=m-in-devunreleasedgetting-started-check><a href=/in-dev/unreleased/getting-started/ title="Getting Started with Apache Polaris" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleasedgetting-started><span>Getting Started</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedquick-start-li><input type=checkbox id=m-in-devunreleasedgetting-star [...]
<label for=m-in-devunreleasedgetting-startedquick-start-check><a href=/in-dev/unreleased/getting-started/quick-start/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-in-devunreleasedgetting-startedquick-start><span>Quickstart</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedsetup-tools-li><input type=checkbox id=m-in-devunreleasedgetting-startedsetup-tools-check>
@@ -74,222 +74,222 @@ Overview🔗 Open Policy Agent (OPA) is a general-purpose policy engine that ena
<a class=td-toc-title__link title="Top of page" href=#></a></div><nav id=TableOfContents><ul><li><a href=#overview>Overview</a></li><li><a href=#prerequisites>Prerequisites</a></li><li><a href=#quick-start>Quick Start</a><ul><li><a href=#1-deploy-opa>1. Deploy OPA</a></li><li><a href=#2-create-a-policy>2. Create a Policy</a></li><li><a href=#3-configure-polaris>3. Configure Polaris</a></li><li><a href=#4-restart-polaris>4. Restart Polaris</a></li></ul></li><li><a href=#configuration-refe [...]
This content is unreleased and may change before the next Polaris release.
For stable user documentation, see the
-<a href=/releases/latest/>latest release docs</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/docs/>Documentation</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/>Developer Docs</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/managing-security/>Managing Security</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/managing-security/external-pdp/>External PDP</a></li><li class="breadcru [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> --name opa <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> -p 8181:8181 <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> -v <span style=color:#204a87;font-weight:700>$(</span><span style=color:#204a87>pwd</span><span style=color:#204a87;font-weight:700>)</span>/policies:/policies <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span> openpolicyagent/opa:latest <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">6</span><span> run --server --addr :8181 /policies
-</span></span></code></pre></div><h3 id=2-create-a-policy id=2-create-a-policy>2. Create a Policy<a class=heading-anchor href=#2-create-a-policy aria-label=Anchor>🔗</a></h3><p>Create a policy file (e.g., <code>policies/polaris.rego</code>):</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-rego data-lang=rego><span style=display:flex><span style="white-space:pre;-webkit-user-s [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span><span style=color:#204a87;font-weight:700>import</span><span style=color:#f8f8f8> </span><span style=color:#000>future</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>keywords</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#204a87;font-weight:700>if</spa [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span><span style=color:#8f5902;font-style:italic># Default deny</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span><span style=color:#204a87;font-weight:700>default</span><span style=color:#f8f8f8> </span><span style=color:#000>allow</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>:=</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>false</span><span style=co [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span><span style=color:#8f5902;font-style:italic># Allow admins to do everything</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span><span style=color:#000>allow</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>if</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>{</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">10</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"ADMIN"</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>in</span><span style=color:#f8f8f8> </span><span style=color:#000>input</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000> [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">11</span><span><span style=color:#000;font-weight:700>}</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">12</span><span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">13</span><span><span style=color:#8f5902;font-style:italic># Allow read operations on tables in analytics catalogs</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">14</span><span><span style=color:#000>allow</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>if</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>{</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">15</span><span><span style=color:#f8f8f8> </span><span style=color:#000>input</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>action</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>==</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"LOAD [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">16</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>some</span><span style=color:#f8f8f8> </span><span style=color:#000>target</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>in</span><span style=color:#f8f8f8> </span><span style=color:#000>input</spa [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">17</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>some</span><span style=color:#f8f8f8> </span><span style=color:#000>parent</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>in</span><span style=color:#f8f8f8> </span><span style=color:#000>target</sp [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">18</span><span><span style=color:#f8f8f8> </span><span style=color:#000>parent</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>type</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>==</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"CATAL [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">19</span><span><span style=color:#f8f8f8> </span><span style=color:#000>startswith</span><span style=color:#000;font-weight:700>(</span><span style=color:#000>parent</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>name</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color: [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">20</span><span><span style=color:#000;font-weight:700>}</span><span style=color:#f8f8f8>
-</span></span></span></code></pre></div><h3 id=3-configure-polaris id=3-configure-polaris>3. Configure Polaris<a class=heading-anchor href=#3-configure-polaris aria-label=Anchor>🔗</a></h3><p>Add the following to your Polaris configuration:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-properties data-lang=properties><span style=display:flex><span style="white-space:pre;-we [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#c4a000>polaris.authorization.type</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>opa</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span><span style=color:#8f5902;font-style:italic># OPA server endpoint</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span><span style=color:#c4a000>polaris.authorization.opa.policy-uri</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>http://<opa-host>:8181/v1/data/polaris/authz</span>
-</span></span></code></pre></div><h3 id=4-restart-polaris id=4-restart-polaris>4. Restart Polaris<a class=heading-anchor href=#4-restart-polaris aria-label=Anchor>🔗</a></h3><p>Restart the Polaris service to apply the configuration.</p><h2 id=configuration-reference id=configuration-reference>Configuration Reference<a class=heading-anchor href=#configuration-reference aria-label=Anchor>🔗</a></h2><h3 id=basic-configuration id=basic-configuration>Basic Configuration<a class=heading-anchor h [...]
-</span></span></code></pre></div><h4 id=bearer-token-authentication id=bearer-token-authentication>Bearer Token Authentication<a class=heading-anchor href=#bearer-token-authentication aria-label=Anchor>🔗</a></h4><p><strong>Static Bearer Token:</strong></p><p>Use a static bearer token:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-properties data-lang=properties><span style [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#c4a000>polaris.authorization.opa.auth.bearer.static-token.value</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>your-secret-token</span>
-</span></span></code></pre></div><table><thead><tr><th>Property</th><th>Required</th><th>Default</th><th>Description</th></tr></thead><tbody><tr><td><code>polaris.authorization.opa.auth.type</code></td><td>No</td><td><code>none</code></td><td>Set to <code>bearer</code> to enable bearer token authentication</td></tr><tr><td><code>polaris.authorization.opa.auth.bearer.static-token.value</code></td><td>Yes*</td><td>-</td><td>The bearer token value (*when using static token)</td></tr></tbody [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#c4a000>polaris.authorization.opa.auth.bearer.file-based.path</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>/var/secrets/token.txt</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span><span style=color:#c4a000>polaris.authorization.opa.auth.bearer.file-based.refresh-interval</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>PT5M</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span><span style=color:#c4a000>polaris.authorization.opa.auth.bearer.file-based.jwt-expiration-refresh</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>true</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span><span style=color:#c4a000>polaris.authorization.opa.auth.bearer.file-based.jwt-expiration-buffer</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>PT1M</span>
-</span></span></code></pre></div><table><thead><tr><th>Property</th><th>Required</th><th>Default</th><th>Description</th></tr></thead><tbody><tr><td><code>polaris.authorization.opa.auth.type</code></td><td>No</td><td><code>none</code></td><td>Set to <code>bearer</code> to enable bearer token authentication</td></tr><tr><td><code>polaris.authorization.opa.auth.bearer.file-based.path</code></td><td>Yes*</td><td>-</td><td>Path to file containing the bearer token (*when using file-based toke [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span> <span style=color:#204a87;font-weight:700>"actor"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span> <span style=color:#204a87;font-weight:700>"principal"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"user@example.com"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span> <span style=color:#204a87;font-weight:700>"roles"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span><span style=color:#4e9a06>"role1"</span><span style=color:#000;font-weight:700>,</span> <span style=color:#4e9a06>"role2"</span><span style= [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span> <span style=color:#000;font-weight:700>},</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span> <span style=color:#204a87;font-weight:700>"action"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"LOAD_TABLE_WITH_READ_DELEGATION"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span> <span style=color:#204a87;font-weight:700>"resource"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span> <span style=color:#204a87;font-weight:700>"targets"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span> <span style=color:#000;font-weight:700>{</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">10</span><span> <span style=color:#204a87;font-weight:700>"type"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"TABLE"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">11</span><span> <span style=color:#204a87;font-weight:700>"name"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"my_table"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">12</span><span> <span style=color:#204a87;font-weight:700>"parents"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">13</span><span> <span style=color:#000;font-weight:700>{</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">14</span><span> <span style=color:#204a87;font-weight:700>"type"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"CATALOG"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">15</span><span> <span style=color:#204a87;font-weight:700>"name"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"my_catalog"</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">16</span><span> <span style=color:#000;font-weight:700>},</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">17</span><span> <span style=color:#000;font-weight:700>{</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">18</span><span> <span style=color:#204a87;font-weight:700>"type"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"NAMESPACE"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">19</span><span> <span style=color:#204a87;font-weight:700>"name"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"schema1"</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">20</span><span> <span style=color:#000;font-weight:700>}</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">21</span><span> <span style=color:#000;font-weight:700>]</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">22</span><span> <span style=color:#000;font-weight:700>}</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">23</span><span> <span style=color:#000;font-weight:700>],</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">24</span><span> <span style=color:#204a87;font-weight:700>"secondaries"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[]</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">25</span><span> <span style=color:#000;font-weight:700>},</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">26</span><span> <span style=color:#204a87;font-weight:700>"context"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">27</span><span> <span style=color:#204a87;font-weight:700>"request_id"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"uuid"</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">28</span><span> <span style=color:#000;font-weight:700>}</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">29</span><span><span style=color:#000;font-weight:700>}</span>
-</span></span></code></pre></div><h4 id=actor-object id=actor-object>Actor Object<a class=heading-anchor href=#actor-object aria-label=Anchor>🔗</a></h4><table><thead><tr><th>Field</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td><code>principal</code></td><td>string</td><td>The principal identifier (e.g., username, service account)</td></tr><tr><td><code>roles</code></td><td>array</td><td>Array of role names assigned to the principal</td></tr></tbody></table><h4 id=action [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span><span style=color:#204a87;font-weight:700>import</span><span style=color:#f8f8f8> </span><span style=color:#000>future</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>keywords</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#204a87;font-weight:700>if</spa [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span><span style=color:#204a87;font-weight:700>import</span><span style=color:#f8f8f8> </span><span style=color:#000>future</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>keywords</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#204a87;font-weight:700>in</spa [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span><span style=color:#204a87;font-weight:700>default</span><span style=color:#f8f8f8> </span><span style=color:#000>allow</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>:=</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>false</span><span style=co [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span><span style=color:#8f5902;font-style:italic># Admin role can perform all catalog, namespace, and table operations</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span><span style=color:#000>allow</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>if</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>{</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">10</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"ADMIN"</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>in</span><span style=color:#f8f8f8> </span><span style=color:#000>input</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000> [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">11</span><span><span style=color:#f8f8f8> </span><span style=color:#000>input</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>action</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>in</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight: [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">12</span><span><span style=color:#f8f8f8> </span><span style=color:#8f5902;font-style:italic># Catalog operations</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">13</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"CREATE_CATALOG"</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">14</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"UPDATE_CATALOG"</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">15</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"DELETE_CATALOG"</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">16</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"LIST_CATALOGS"</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">17</span><span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">18</span><span><span style=color:#f8f8f8> </span><span style=color:#8f5902;font-style:italic># Namespace operations</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">19</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"CREATE_NAMESPACE"</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">20</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"UPDATE_NAMESPACE_PROPERTIES"</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">21</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"DROP_NAMESPACE"</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">22</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"LIST_NAMESPACES"</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">23</span><span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">24</span><span><span style=color:#f8f8f8> </span><span style=color:#8f5902;font-style:italic># Table operations</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">25</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"CREATE_TABLE_DIRECT"</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">26</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"LOAD_TABLE_WITH_READ_DELEGATION"</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">27</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"LOAD_TABLE_WITH_WRITE_DELEGATION"</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">28</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"UPDATE_TABLE"</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">29</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"DROP_TABLE_WITHOUT_PURGE"</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">30</span><span><span style=color:#f8f8f8> </span><span style=color:#8f5902;font-style:italic># Add other data operations as needed</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">31</span><span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>]</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">32</span><span><span style=color:#000;font-weight:700>}</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">33</span><span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">34</span><span><span style=color:#8f5902;font-style:italic># Data engineers can create/read/update tables and namespaces</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">35</span><span><span style=color:#000>allow</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>if</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>{</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">36</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"DATA_ENGINEER"</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>in</span><span style=color:#f8f8f8> </span><span style=color:#000>input</span><span style=color:#ce5c00;font-weight:700>.</span><span style=col [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">37</span><span><span style=color:#f8f8f8> </span><span style=color:#000>input</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>action</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>in</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight: [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">38</span><span><span style=color:#f8f8f8> </span><span style=color:#8f5902;font-style:italic># Table operations</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">39</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"CREATE_TABLE_DIRECT"</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">40</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"LOAD_TABLE_WITH_READ_DELEGATION"</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">41</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"LOAD_TABLE_WITH_WRITE_DELEGATION"</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">42</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"UPDATE_TABLE"</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">43</span><span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">44</span><span><span style=color:#f8f8f8> </span><span style=color:#8f5902;font-style:italic># Namespace operations</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">45</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"CREATE_NAMESPACE"</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">46</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"UPDATE_NAMESPACE_PROPERTIES"</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">47</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"LIST_NAMESPACES"</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">48</span><span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>]</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">49</span><span><span style=color:#000;font-weight:700>}</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">50</span><span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">51</span><span><span style=color:#8f5902;font-style:italic># Analysts can only read tables</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">52</span><span><span style=color:#000>allow</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>if</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>{</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">53</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"ANALYST"</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>in</span><span style=color:#f8f8f8> </span><span style=color:#000>input</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#00 [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">54</span><span><span style=color:#f8f8f8> </span><span style=color:#000>input</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>action</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>==</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"LOAD [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">55</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>some</span><span style=color:#f8f8f8> </span><span style=color:#000>target</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>in</span><span style=color:#f8f8f8> </span><span style=color:#000>input</spa [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">56</span><span><span style=color:#f8f8f8> </span><span style=color:#000>target</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>type</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>==</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"TABLE [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">57</span><span><span style=color:#000;font-weight:700>}</span><span style=color:#f8f8f8>
-</span></span></span></code></pre></div><div class="alert alert-info"><p class=alert-heading>ℹ️ Best Practice</p><strong>Explicit Allow Lists for Data Operations Only</strong>: The example above uses an explicit allow-list approach where only catalog, namespace, and table operations are permitted. Policy and grant operations (like <code>CREATE_POLICY</code>) are automatically denied by the <code>default allow := false</code> since they’re not in any allow rule. This ensures privile [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span><span style=color:#204a87;font-weight:700>import</span><span style=color:#f8f8f8> </span><span style=color:#000>future</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>keywords</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#204a87;font-weight:700>if</spa [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span><span style=color:#000>test_admin_can_create_catalog</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>if</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>{</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span><span style=color:#f8f8f8> </span><span style=color:#000>allow</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>with</span><span style=color:#f8f8f8> </span><span style=color:#000>input</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>as</span [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"actor"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>{</span><span style=color:#4e9a06>"principal"</span><span style=color:#000;font-weight:700>:</s [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"action"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"CREATE_CATALOG"</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"resource"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>{</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">10</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"targets"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>[{</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">11</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"type"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"CATALOG"</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">12</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"name"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"new_catalog"</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">13</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"parents"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>[]</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">14</span><span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>}]</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">15</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"secondaries"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>[]</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">16</span><span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>}</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">17</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"context"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>{</span><span style=color:#4e9a06>"request_id"</span><span style=color:#000;font-weight:700>: [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">18</span><span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>}</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">19</span><span><span style=color:#000;font-weight:700>}</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">20</span><span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">21</span><span><span style=color:#000>test_data_engineer_can_create_table</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>if</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>{</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">22</span><span><span style=color:#f8f8f8> </span><span style=color:#000>allow</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>with</span><span style=color:#f8f8f8> </span><span style=color:#000>input</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>as</span [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">23</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"actor"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>{</span><span style=color:#4e9a06>"principal"</span><span style=color:#000;font-weight:700>:</s [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">24</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"action"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"CREATE_TABLE_DIRECT"</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">25</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"resource"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>{</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">26</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"targets"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>[{</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">27</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"type"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"TABLE"</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">28</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"name"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"new_table"</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">29</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"parents"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>[</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">30</span><span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>{</span><span style=color:#4e9a06>"type"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"CATALOG"</span><span style=color:#ce5c00;font-wei [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">31</span><span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>{</span><span style=color:#4e9a06>"type"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"NAMESPACE"</span><span style=color:#ce5c00;font-w [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">32</span><span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>]</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">33</span><span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>}]</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">34</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"secondaries"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>[]</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">35</span><span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>}</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">36</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"context"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>{</span><span style=color:#4e9a06>"request_id"</span><span style=color:#000;font-weight:700>: [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">37</span><span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>}</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">38</span><span><span style=color:#000;font-weight:700>}</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">39</span><span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">40</span><span><span style=color:#000>test_data_engineer_cannot_delete_catalog</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>if</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>{</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">41</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>not</span><span style=color:#f8f8f8> </span><span style=color:#000>allow</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>with</span><span style=color:#f8f8f8> </span><span style=color:#000>input</spa [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">42</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"actor"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>{</span><span style=color:#4e9a06>"principal"</span><span style=color:#000;font-weight:700>:</s [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">43</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"action"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"DELETE_CATALOG"</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">44</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"resource"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>{</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">45</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"targets"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>[{</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">46</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"type"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"CATALOG"</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">47</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"name"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"prod"</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">48</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"parents"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>[]</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">49</span><span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>}]</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">50</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"secondaries"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>[]</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">51</span><span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>}</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">52</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"context"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>{</span><span style=color:#4e9a06>"request_id"</span><span style=color:#000;font-weight:700>: [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">53</span><span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>}</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">54</span><span><span style=color:#000;font-weight:700>}</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">55</span><span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">56</span><span><span style=color:#000>test_analyst_can_read_table</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>if</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>{</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">57</span><span><span style=color:#f8f8f8> </span><span style=color:#000>allow</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>with</span><span style=color:#f8f8f8> </span><span style=color:#000>input</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>as</span [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">58</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"actor"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>{</span><span style=color:#4e9a06>"principal"</span><span style=color:#000;font-weight:700>:</s [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">59</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"action"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"LOAD_TABLE_WITH_READ_DELEGATION"</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">60</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"resource"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>{</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">61</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"targets"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>[{</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">62</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"type"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"TABLE"</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">63</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"name"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"data_table"</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">64</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"parents"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>[</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">65</span><span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>{</span><span style=color:#4e9a06>"type"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"CATALOG"</span><span style=color:#ce5c00;font-wei [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">66</span><span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>{</span><span style=color:#4e9a06>"type"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"NAMESPACE"</span><span style=color:#ce5c00;font-w [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">67</span><span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>]</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">68</span><span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>}]</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">69</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"secondaries"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>[]</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">70</span><span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>}</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">71</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"context"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>{</span><span style=color:#4e9a06>"request_id"</span><span style=color:#000;font-weight:700>: [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">72</span><span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>}</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">73</span><span><span style=color:#000;font-weight:700>}</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">74</span><span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">75</span><span><span style=color:#000>test_analyst_cannot_update_table</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>if</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>{</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">76</span><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>not</span><span style=color:#f8f8f8> </span><span style=color:#000>allow</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>with</span><span style=color:#f8f8f8> </span><span style=color:#000>input</spa [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">77</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"actor"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>{</span><span style=color:#4e9a06>"principal"</span><span style=color:#000;font-weight:700>:</s [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">78</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"action"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"UPDATE_TABLE"</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">79</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"resource"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>{</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">80</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"targets"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>[{</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">81</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"type"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"TABLE"</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">82</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"name"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"data_table"</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">83</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"parents"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>[</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">84</span><span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>{</span><span style=color:#4e9a06>"type"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"CATALOG"</span><span style=color:#ce5c00;font-wei [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">85</span><span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>{</span><span style=color:#4e9a06>"type"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"NAMESPACE"</span><span style=color:#ce5c00;font-w [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">86</span><span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>]</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">87</span><span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>}]</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">88</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"secondaries"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>[]</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">89</span><span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>}</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">90</span><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"context"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>{</span><span style=color:#4e9a06>"request_id"</span><span style=color:#000;font-weight:700>: [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">91</span><span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>}</span><span style=color:#f8f8f8>
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">92</span><span><span style=color:#000;font-weight:700>}</span><span style=color:#f8f8f8>
-</span></span></span></code></pre></div><p>Run tests:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span>opa <span style=color:#204a87>test</span> policies/
+<a href=/releases/latest/>latest release docs</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/docs/>Documentation</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/>Developer Docs</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/managing-security/>Managing Security</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/managing-security/external-pdp/>External PDP</a></li><li class="breadcru [...]
+</span></span></span><span style=display:flex><span> --name opa <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -p 8181:8181 <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -v <span style=color:#204a87;font-weight:700>$(</span><span style=color:#204a87>pwd</span><span style=color:#204a87;font-weight:700>)</span>/policies:/policies <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> openpolicyagent/opa:latest <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> run --server --addr :8181 /policies
+</span></span></code></pre></div><h3 id=2-create-a-policy id=2-create-a-policy>2. Create a Policy<a class=heading-anchor href=#2-create-a-policy aria-label=Anchor>🔗</a></h3><p>Create a policy file (e.g., <code>policies/polaris.rego</code>):</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-rego data-lang=rego><span style=display:flex><span><span style=color:#204a87;font-weight [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>import</span><span style=color:#f8f8f8> </span><span style=color:#000>future</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>keywords</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#204a87;font-weight:700>if</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># Default deny</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>default</span><span style=color:#f8f8f8> </span><span style=color:#000>allow</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>:=</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>false</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># Allow admins to do everything</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#000>allow</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>if</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>{</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"ADMIN"</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>in</span><span style=color:#f8f8f8> </span><span style=color:#000>input</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>actor</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>roles</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#000;font-weight:700>}</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># Allow read operations on tables in analytics catalogs</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#000>allow</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>if</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>{</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#000>input</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>action</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>==</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"LOAD_TABLE_WITH_READ_DELEGATION"</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>some</span><span style=color:#f8f8f8> </span><span style=color:#000>target</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>in</span><span style=color:#f8f8f8> </span><span style=color:#000>input</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>resource</span><span style=color:#ce5c00;font-weight: [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>some</span><span style=color:#f8f8f8> </span><span style=color:#000>parent</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>in</span><span style=color:#f8f8f8> </span><span style=color:#000>target</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>parents</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#000>parent</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>type</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>==</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"CATALOG"</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#000>startswith</span><span style=color:#000;font-weight:700>(</span><span style=color:#000>parent</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>name</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"analytics_"</span><span style=color:#000;font-weight:700>)</span><span style= [...]
+</span></span></span><span style=display:flex><span><span style=color:#000;font-weight:700>}</span><span style=color:#f8f8f8>
+</span></span></span></code></pre></div><h3 id=3-configure-polaris id=3-configure-polaris>3. Configure Polaris<a class=heading-anchor href=#3-configure-polaris aria-label=Anchor>🔗</a></h3><p>Add the following to your Polaris configuration:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-properties data-lang=properties><span style=display:flex><span><span style=color:#8f5902; [...]
+</span></span><span style=display:flex><span><span style=color:#c4a000>polaris.authorization.type</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>opa</span>
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># OPA server endpoint</span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>polaris.authorization.opa.policy-uri</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>http://<opa-host>:8181/v1/data/polaris/authz</span>
+</span></span></code></pre></div><h3 id=4-restart-polaris id=4-restart-polaris>4. Restart Polaris<a class=heading-anchor href=#4-restart-polaris aria-label=Anchor>🔗</a></h3><p>Restart the Polaris service to apply the configuration.</p><h2 id=configuration-reference id=configuration-reference>Configuration Reference<a class=heading-anchor href=#configuration-reference aria-label=Anchor>🔗</a></h2><h3 id=basic-configuration id=basic-configuration>Basic Configuration<a class=heading-anchor h [...]
+</span></span></code></pre></div><h4 id=bearer-token-authentication id=bearer-token-authentication>Bearer Token Authentication<a class=heading-anchor href=#bearer-token-authentication aria-label=Anchor>🔗</a></h4><p><strong>Static Bearer Token:</strong></p><p>Use a static bearer token:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-properties data-lang=properties><span style [...]
+</span></span><span style=display:flex><span><span style=color:#c4a000>polaris.authorization.opa.auth.bearer.static-token.value</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>your-secret-token</span>
+</span></span></code></pre></div><table><thead><tr><th>Property</th><th>Required</th><th>Default</th><th>Description</th></tr></thead><tbody><tr><td><code>polaris.authorization.opa.auth.type</code></td><td>No</td><td><code>none</code></td><td>Set to <code>bearer</code> to enable bearer token authentication</td></tr><tr><td><code>polaris.authorization.opa.auth.bearer.static-token.value</code></td><td>Yes*</td><td>-</td><td>The bearer token value (*when using static token)</td></tr></tbody [...]
+</span></span><span style=display:flex><span><span style=color:#c4a000>polaris.authorization.opa.auth.bearer.file-based.path</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>/var/secrets/token.txt</span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>polaris.authorization.opa.auth.bearer.file-based.refresh-interval</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>PT5M</span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>polaris.authorization.opa.auth.bearer.file-based.jwt-expiration-refresh</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>true</span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>polaris.authorization.opa.auth.bearer.file-based.jwt-expiration-buffer</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>PT1M</span>
+</span></span></code></pre></div><table><thead><tr><th>Property</th><th>Required</th><th>Default</th><th>Description</th></tr></thead><tbody><tr><td><code>polaris.authorization.opa.auth.type</code></td><td>No</td><td><code>none</code></td><td>Set to <code>bearer</code> to enable bearer token authentication</td></tr><tr><td><code>polaris.authorization.opa.auth.bearer.file-based.path</code></td><td>Yes*</td><td>-</td><td>Path to file containing the bearer token (*when using file-based toke [...]
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"actor"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"principal"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"user@example.com"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"roles"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span><span style=color:#4e9a06>"role1"</span><span style=color:#000;font-weight:700>,</span> <span style=color:#4e9a06>"role2"</span><span style=color:#000;font-weight:700>]</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>},</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"action"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"LOAD_TABLE_WITH_READ_DELEGATION"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"resource"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"targets"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>{</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"type"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"TABLE"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"name"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"my_table"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"parents"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>{</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"type"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"CATALOG"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"name"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"my_catalog"</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>},</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>{</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"type"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"NAMESPACE"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"name"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"schema1"</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>}</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>]</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>}</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>],</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"secondaries"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[]</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>},</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"context"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"request_id"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"uuid"</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>}</span>
+</span></span><span style=display:flex><span><span style=color:#000;font-weight:700>}</span>
+</span></span></code></pre></div><h4 id=actor-object id=actor-object>Actor Object<a class=heading-anchor href=#actor-object aria-label=Anchor>🔗</a></h4><table><thead><tr><th>Field</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td><code>principal</code></td><td>string</td><td>The principal identifier (e.g., username, service account)</td></tr><tr><td><code>roles</code></td><td>array</td><td>Array of role names assigned to the principal</td></tr></tbody></table><h4 id=action [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>import</span><span style=color:#f8f8f8> </span><span style=color:#000>future</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>keywords</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#204a87;font-weight:700>if</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>import</span><span style=color:#f8f8f8> </span><span style=color:#000>future</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>keywords</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#204a87;font-weight:700>in</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>default</span><span style=color:#f8f8f8> </span><span style=color:#000>allow</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>:=</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>false</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># Admin role can perform all catalog, namespace, and table operations</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#000>allow</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>if</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>{</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"ADMIN"</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>in</span><span style=color:#f8f8f8> </span><span style=color:#000>input</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>actor</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>roles</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#000>input</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>action</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>in</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>[</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#8f5902;font-style:italic># Catalog operations</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"CREATE_CATALOG"</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"UPDATE_CATALOG"</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"DELETE_CATALOG"</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"LIST_CATALOGS"</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#8f5902;font-style:italic># Namespace operations</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"CREATE_NAMESPACE"</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"UPDATE_NAMESPACE_PROPERTIES"</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"DROP_NAMESPACE"</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"LIST_NAMESPACES"</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#8f5902;font-style:italic># Table operations</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"CREATE_TABLE_DIRECT"</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"LOAD_TABLE_WITH_READ_DELEGATION"</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"LOAD_TABLE_WITH_WRITE_DELEGATION"</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"UPDATE_TABLE"</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"DROP_TABLE_WITHOUT_PURGE"</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#8f5902;font-style:italic># Add other data operations as needed</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>]</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#000;font-weight:700>}</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># Data engineers can create/read/update tables and namespaces</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#000>allow</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>if</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>{</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"DATA_ENGINEER"</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>in</span><span style=color:#f8f8f8> </span><span style=color:#000>input</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>actor</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>roles</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#000>input</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>action</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>in</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>[</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#8f5902;font-style:italic># Table operations</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"CREATE_TABLE_DIRECT"</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"LOAD_TABLE_WITH_READ_DELEGATION"</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"LOAD_TABLE_WITH_WRITE_DELEGATION"</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"UPDATE_TABLE"</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#8f5902;font-style:italic># Namespace operations</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"CREATE_NAMESPACE"</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"UPDATE_NAMESPACE_PROPERTIES"</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"LIST_NAMESPACES"</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>]</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#000;font-weight:700>}</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># Analysts can only read tables</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#000>allow</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>if</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>{</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"ANALYST"</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>in</span><span style=color:#f8f8f8> </span><span style=color:#000>input</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>actor</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>roles</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#000>input</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>action</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>==</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"LOAD_TABLE_WITH_READ_DELEGATION"</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>some</span><span style=color:#f8f8f8> </span><span style=color:#000>target</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>in</span><span style=color:#f8f8f8> </span><span style=color:#000>input</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>resource</span><span style=color:#ce5c00;font-weight: [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#000>target</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>type</span><span style=color:#f8f8f8> </span><span style=color:#ce5c00;font-weight:700>==</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"TABLE"</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#000;font-weight:700>}</span><span style=color:#f8f8f8>
+</span></span></span></code></pre></div><div class="alert alert-info"><p class=alert-heading>ℹ️ Best Practice</p><strong>Explicit Allow Lists for Data Operations Only</strong>: The example above uses an explicit allow-list approach where only catalog, namespace, and table operations are permitted. Policy and grant operations (like <code>CREATE_POLICY</code>) are automatically denied by the <code>default allow := false</code> since they’re not in any allow rule. This ensures privile [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>import</span><span style=color:#f8f8f8> </span><span style=color:#000>future</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>keywords</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#204a87;font-weight:700>if</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#000>test_admin_can_create_catalog</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>if</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>{</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#000>allow</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>with</span><span style=color:#f8f8f8> </span><span style=color:#000>input</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>as</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>{</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"actor"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>{</span><span style=color:#4e9a06>"principal"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"admin"</span><span style=color:#ce5c00;font-weight:700> [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"action"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"CREATE_CATALOG"</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"resource"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>{</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"targets"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>[{</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"type"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"CATALOG"</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"name"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"new_catalog"</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"parents"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>[]</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>}]</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"secondaries"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>[]</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>}</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"context"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>{</span><span style=color:#4e9a06>"request_id"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"test"</span><span style=color:#000;font-weight:700>} [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>}</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#000;font-weight:700>}</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#000>test_data_engineer_can_create_table</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>if</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>{</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#000>allow</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>with</span><span style=color:#f8f8f8> </span><span style=color:#000>input</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>as</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>{</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"actor"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>{</span><span style=color:#4e9a06>"principal"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"engineer"</span><span style=color:#ce5c00;font-weight:7 [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"action"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"CREATE_TABLE_DIRECT"</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"resource"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>{</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"targets"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>[{</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"type"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"TABLE"</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"name"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"new_table"</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"parents"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>[</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>{</span><span style=color:#4e9a06>"type"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"CATALOG"</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"name"</span><span style=color:#000;font-wei [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>{</span><span style=color:#4e9a06>"type"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"NAMESPACE"</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"name"</span><span style=color:#000;font-w [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>]</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>}]</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"secondaries"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>[]</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>}</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"context"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>{</span><span style=color:#4e9a06>"request_id"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"test"</span><span style=color:#000;font-weight:700>} [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>}</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#000;font-weight:700>}</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#000>test_data_engineer_cannot_delete_catalog</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>if</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>{</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>not</span><span style=color:#f8f8f8> </span><span style=color:#000>allow</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>with</span><span style=color:#f8f8f8> </span><span style=color:#000>input</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>as</span><span style=color:#f8f8f8> </span><span s [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"actor"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>{</span><span style=color:#4e9a06>"principal"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"engineer"</span><span style=color:#ce5c00;font-weight:7 [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"action"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"DELETE_CATALOG"</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"resource"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>{</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"targets"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>[{</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"type"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"CATALOG"</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"name"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"prod"</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"parents"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>[]</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>}]</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"secondaries"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>[]</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>}</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"context"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>{</span><span style=color:#4e9a06>"request_id"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"test"</span><span style=color:#000;font-weight:700>} [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>}</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#000;font-weight:700>}</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#000>test_analyst_can_read_table</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>if</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>{</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#000>allow</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>with</span><span style=color:#f8f8f8> </span><span style=color:#000>input</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>as</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>{</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"actor"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>{</span><span style=color:#4e9a06>"principal"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"analyst"</span><span style=color:#ce5c00;font-weight:70 [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"action"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"LOAD_TABLE_WITH_READ_DELEGATION"</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"resource"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>{</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"targets"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>[{</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"type"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"TABLE"</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"name"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"data_table"</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"parents"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>[</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>{</span><span style=color:#4e9a06>"type"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"CATALOG"</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"name"</span><span style=color:#000;font-wei [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>{</span><span style=color:#4e9a06>"type"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"NAMESPACE"</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"name"</span><span style=color:#000;font-w [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>]</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>}]</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"secondaries"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>[]</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>}</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"context"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>{</span><span style=color:#4e9a06>"request_id"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"test"</span><span style=color:#000;font-weight:700>} [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>}</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#000;font-weight:700>}</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#000>test_analyst_cannot_update_table</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>if</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>{</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>not</span><span style=color:#f8f8f8> </span><span style=color:#000>allow</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>with</span><span style=color:#f8f8f8> </span><span style=color:#000>input</span><span style=color:#f8f8f8> </span><span style=color:#204a87;font-weight:700>as</span><span style=color:#f8f8f8> </span><span s [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"actor"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>{</span><span style=color:#4e9a06>"principal"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"analyst"</span><span style=color:#ce5c00;font-weight:70 [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"action"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"UPDATE_TABLE"</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"resource"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>{</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"targets"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>[{</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"type"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"TABLE"</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"name"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"data_table"</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"parents"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>[</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>{</span><span style=color:#4e9a06>"type"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"CATALOG"</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"name"</span><span style=color:#000;font-wei [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>{</span><span style=color:#4e9a06>"type"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"NAMESPACE"</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"name"</span><span style=color:#000;font-w [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>]</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>}]</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"secondaries"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>[]</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>}</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"context"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>{</span><span style=color:#4e9a06>"request_id"</span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8> </span><span style=color:#4e9a06>"test"</span><span style=color:#000;font-weight:700>} [...]
+</span></span></span><span style=display:flex><span><span style=color:#f8f8f8> </span><span style=color:#000;font-weight:700>}</span><span style=color:#f8f8f8>
+</span></span></span><span style=display:flex><span><span style=color:#000;font-weight:700>}</span><span style=color:#f8f8f8>
+</span></span></span></code></pre></div><p>Run tests:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span>opa <span style=color:#204a87>test</span> policies/
</span></span></code></pre></div><h2 id=additional-resources id=additional-resources>Additional Resources<a class=heading-anchor href=#additional-resources aria-label=Anchor>🔗</a></h2><ul><li><a href=https://www.openpolicyagent.org/docs/latest/>OPA Documentation</a></li><li><a href=https://www.openpolicyagent.org/docs/latest/policy-language/>Rego Language Guide</a></li><li><a href=https://www.openpolicyagent.org/docs/latest/policy-testing/>OPA Policy Testing</a></li><li><a href=https://w [...]
\ No newline at end of file
diff --git a/in-dev/unreleased/managing-security/index.html b/in-dev/unreleased/managing-security/index.html
index 24070ca577..259f30993b 100644
--- a/in-dev/unreleased/managing-security/index.html
+++ b/in-dev/unreleased/managing-security/index.html
@@ -1,4 +1,4 @@
-<!doctype html><html itemscope itemtype=http://schema.org/WebPage lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><link rel=alternate type=application/rss+xml href=https://polaris.apache.org/in-dev/unreleased/managing-security/index.xml><meta name=robots content="index, follow"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon.png sizes=180x180><li [...]
+<!doctype html><html itemscope itemtype=http://schema.org/WebPage lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><link rel=alternate type=application/rss+xml href=https://polaris.apache.org/in-dev/unreleased/managing-security/index.xml><meta name=robots content="index, follow"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon.png sizes=180x180><li [...]
<label for=m-in-devunreleased-check><a href=/in-dev/unreleased/ title="Apache Polaris Documentation (Unreleased)" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleased><span>Unreleased</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-in-devunreleasedgetting-started-li><input type=checkbox id=m-in-devunreleasedgetting-started-check>
<label for=m-in-devunreleasedgetting-started-check><a href=/in-dev/unreleased/getting-started/ title="Getting Started with Apache Polaris" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleasedgetting-started><span>Getting Started</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedquick-start-li><input type=checkbox id=m-in-devunreleasedgetting-star [...]
<label for=m-in-devunreleasedgetting-startedquick-start-check><a href=/in-dev/unreleased/getting-started/quick-start/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-in-devunreleasedgetting-startedquick-start><span>Quickstart</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedsetup-tools-li><input type=checkbox id=m-in-devunreleasedgetting-startedsetup-tools-check>
diff --git a/in-dev/unreleased/metastores/index.html b/in-dev/unreleased/metastores/index.html
index a6217d94f4..fce6e60e5a 100644
--- a/in-dev/unreleased/metastores/index.html
+++ b/in-dev/unreleased/metastores/index.html
@@ -6,7 +6,7 @@ Backend Type Support Level Description In-Memory in-memory Test only Data is sto
Polaris entities: catalogs, namespaces, tables, views, principals, roles, etc. Polaris RBAC data: authorization and access control information (when using the built-in authorizer). Polaris policies: policy configurations for data governance and security. Polaris supports three metastore implementations and persistence backends:
Backend Type Support Level Description In-Memory in-memory Test only Data is stored in memory and lost when pods restart. Suitable for development and testing only. PostgreSQL (JDBC) relational-jdbc Ready to use Data is stored in a PostgreSQL database using JDBC. Recommended for production. MongoDB (NoSQL) nosql Experimental Data is stored in a MongoDB database. Currently in beta. ⚠️ Warning"><meta itemprop=wordCount content="146"><meta name=twitter:card content="summary"><meta name=twit [...]
Polaris entities: catalogs, namespaces, tables, views, principals, roles, etc. Polaris RBAC data: authorization and access control information (when using the built-in authorizer). Polaris policies: policy configurations for data governance and security. Polaris supports three metastore implementations and persistence backends:
-Backend Type Support Level Description In-Memory in-memory Test only Data is stored in memory and lost when pods restart. Suitable for development and testing only. PostgreSQL (JDBC) relational-jdbc Ready to use Data is stored in a PostgreSQL database using JDBC. Recommended for production. MongoDB (NoSQL) nosql Experimental Data is stored in a MongoDB database. Currently in beta. ⚠️ Warning"><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c2 [...]
+Backend Type Support Level Description In-Memory in-memory Test only Data is stored in memory and lost when pods restart. Suitable for development and testing only. PostgreSQL (JDBC) relational-jdbc Ready to use Data is stored in a PostgreSQL database using JDBC. Recommended for production. MongoDB (NoSQL) nosql Experimental Data is stored in a MongoDB database. Currently in beta. ⚠️ Warning"><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c2 [...]
<label for=m-in-devunreleased-check><a href=/in-dev/unreleased/ title="Apache Polaris Documentation (Unreleased)" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleased><span>Unreleased</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-in-devunreleasedgetting-started-li><input type=checkbox id=m-in-devunreleasedgetting-started-check>
<label for=m-in-devunreleasedgetting-started-check><a href=/in-dev/unreleased/getting-started/ title="Getting Started with Apache Polaris" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleasedgetting-started><span>Getting Started</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedquick-start-li><input type=checkbox id=m-in-devunreleasedgetting-star [...]
<label for=m-in-devunreleasedgetting-startedquick-start-check><a href=/in-dev/unreleased/getting-started/quick-start/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-in-devunreleasedgetting-startedquick-start><span>Quickstart</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedsetup-tools-li><input type=checkbox id=m-in-devunreleasedgetting-startedsetup-tools-check>
diff --git a/in-dev/unreleased/metastores/index.xml b/in-dev/unreleased/metastores/index.xml
index fcac6f000b..1d1becf8db 100644
--- a/in-dev/unreleased/metastores/index.xml
+++ b/in-dev/unreleased/metastores/index.xml
@@ -4,12 +4,32 @@ environment variables or JVM -D flags at startup. For more information, refer to
<h2 id="1-relational-jdbc-metastore-with-username-and-password" id="1-relational-jdbc-metastore-with-username-and-password">1. Relational JDBC metastore with username and password<a class="heading-anchor" href="#1-relational-jdbc-metastore-with-username-and-password" aria-label="Anchor">🔗</a>
</h2>
<p>Using environment variables:</p>
-<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-properties" data-lang="properties"><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1</span><span><span style="color:#c4a000">POLARIS_PERSISTENCE_TYPE</span><s [...]
-</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">2</span><span>
-</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">3</span><span><span style="color:#c4a000">QUARKUS_DATASOURCE_USERNAME</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#4e9a06">&lt;your-username&gt;</span>
-</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">4</span><span><span style="color:#c4a000">QUARKUS_DATASOURCE_PASSWORD</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#4e9a06">&lt;your-password&gt;</span>
-</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">5</span><span><span style="color:#c4a000">QUARKUS_DATASOURCE_JDBC_URL</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#4e9a06">&lt;jdbc-url-of-postgres&gt;</span>
-</span></span></code></pre></div><p>Using properties file:</p></description></item><item><title>NoSQL MongoDB</title><link>https://polaris.apache.org/in-dev/unreleased/metastores/nosql-mongodb/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://polaris.apache.org/in-dev/unreleased/metastores/nosql-mongodb/</guid><description><div class="alert alert-info"><p class="alert-heading">
+<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-properties" data-lang="properties"><span style="display:flex;"><span><span style="color:#c4a000">POLARIS_PERSISTENCE_TYPE</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#4e9a06">relational-jdbc</span>
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span><span style="color:#c4a000">QUARKUS_DATASOURCE_USERNAME</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#4e9a06">&lt;your-username&gt;</span>
+</span></span><span style="display:flex;"><span><span style="color:#c4a000">QUARKUS_DATASOURCE_PASSWORD</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#4e9a06">&lt;your-password&gt;</span>
+</span></span><span style="display:flex;"><span><span style="color:#c4a000">QUARKUS_DATASOURCE_JDBC_URL</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#4e9a06">&lt;jdbc-url-of-postgres&gt;</span>
+</span></span></code></pre></div><p>Using properties file:</p>
+<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-properties" data-lang="properties"><span style="display:flex;"><span><span style="color:#c4a000">polaris.persistence.type</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#4e9a06">relational-jdbc</span>
+</span></span><span style="display:flex;"><span><span style="color:#c4a000">quarkus.datasource.jdbc.username</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#4e9a06">&lt;your-username&gt;</span>
+</span></span><span style="display:flex;"><span><span style="color:#c4a000">quarkus.datasource.jdbc.password</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#4e9a06">&lt;your-password&gt;</span>
+</span></span><span style="display:flex;"><span><span style="color:#c4a000">quarkus.datasource.jdbc.jdbc-url</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#4e9a06">&lt;jdbc-url-of-postgres&gt;</span>
+</span></span></code></pre></div><h2 id="2-aws-aurora-postgresql-metastore-using-iam-aws-authentication" id="2-aws-aurora-postgresql-metastore-using-iam-aws-authentication">2. AWS Aurora PostgreSQL metastore using IAM AWS authentication<a class="heading-anchor" href="#2-aws-aurora-postgresql-metastore-using-iam-aws-authentication" aria-label="Anchor">🔗</a>
+</h2>
+<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-properties" data-lang="properties"><span style="display:flex;"><span><span style="color:#c4a000">polaris.persistence.type</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#4e9a06">relational-jdbc</span>
+</span></span><span style="display:flex;"><span><span style="color:#c4a000">quarkus.datasource.jdbc.url</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#4e9a06">jdbc:postgresql://polaris-cluster.cluster-xyz.us-east-1.rds.amazonaws.com:6160/polaris</span>
+</span></span><span style="display:flex;"><span><span style="color:#c4a000">quarkus.datasource.jdbc.additional-jdbc-properties.wrapperPlugins</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#4e9a06">iam</span>
+</span></span><span style="display:flex;"><span><span style="color:#c4a000">quarkus.datasource.username</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#4e9a06">dbusername</span>
+</span></span><span style="display:flex;"><span><span style="color:#c4a000">quarkus.datasource.db-kind</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#4e9a06">postgresql</span>
+</span></span><span style="display:flex;"><span><span style="color:#c4a000">quarkus.datasource.jdbc.additional-jdbc-properties.ssl</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#4e9a06">true</span>
+</span></span><span style="display:flex;"><span><span style="color:#c4a000">quarkus.datasource.jdbc.additional-jdbc-properties.sslmode</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#4e9a06">require</span>
+</span></span><span style="display:flex;"><span><span style="color:#c4a000">quarkus.datasource.credentials-provider</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#4e9a06">aws</span>
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span><span style="color:#c4a000">quarkus.rds.credentials-provider.aws.use-quarkus-client</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#4e9a06">true</span>
+</span></span><span style="display:flex;"><span><span style="color:#c4a000">quarkus.rds.credentials-provider.aws.username</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#4e9a06">dbusername</span>
+</span></span><span style="display:flex;"><span><span style="color:#c4a000">quarkus.rds.credentials-provider.aws.hostname</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#4e9a06">polaris-cluster.cluster-xyz.us-east-1.rds.amazonaws.com</span>
+</span></span><span style="display:flex;"><span><span style="color:#c4a000">quarkus.rds.credentials-provider.aws.port</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#4e9a06">6160</span>
+</span></span></code></pre></div><p>This is the basic configuration. For more details, please refer to the <a href="https://docs.quarkiverse.io/quarkus-amazon-services/dev/amazon-rds.html#_configuration_reference">Quarkus plugin documentation</a>.</p></description></item><item><title>NoSQL MongoDB</title><link>https://polaris.apache.org/in-dev/unreleased/metastores/nosql-mongodb/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate [...]
📝 Note</p>
The MongoDB backend is currently in <strong>beta</strong>.
</div>
@@ -18,15 +38,15 @@ environment variables or JVM -D flags at startup. For more information, refer to
<h2 id="basic-configuration" id="basic-configuration">Basic Configuration<a class="heading-anchor" href="#basic-configuration" aria-label="Anchor">🔗</a>
</h2>
<p>Using environment variables:</p>
-<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-properties" data-lang="properties"><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1</span><span><span style="color:#c4a000">POLARIS_PERSISTENCE_TYPE</span><s [...]
-</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">2</span><span><span style="color:#c4a000">POLARIS_PERSISTENCE_NOSQL_BACKEND</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#4e9a06">MongoDb</span>
-</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">3</span><span><span style="color:#c4a000">QUARKUS_MONGODB_DATABASE</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#4e9a06">polaris</span>
-</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">4</span><span><span style="color:#c4a000">QUARKUS_MONGODB_CONNECTION_STRING</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#4e9a06">mongodb://&lt;username&gt;:&lt;password&gt;@&lt;host&gt;:&lt;por [...]
+<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-properties" data-lang="properties"><span style="display:flex;"><span><span style="color:#c4a000">POLARIS_PERSISTENCE_TYPE</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#4e9a06">nosql</span>
+</span></span><span style="display:flex;"><span><span style="color:#c4a000">POLARIS_PERSISTENCE_NOSQL_BACKEND</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#4e9a06">MongoDb</span>
+</span></span><span style="display:flex;"><span><span style="color:#c4a000">QUARKUS_MONGODB_DATABASE</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#4e9a06">polaris</span>
+</span></span><span style="display:flex;"><span><span style="color:#c4a000">QUARKUS_MONGODB_CONNECTION_STRING</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#4e9a06">mongodb://&lt;username&gt;:&lt;password&gt;@&lt;host&gt;:&lt;port&gt;</span>
</span></span></code></pre></div><p>Using properties file:</p>
-<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-properties" data-lang="properties"><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1</span><span><span style="color:#c4a000">polaris.persistence.type</span><s [...]
-</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">2</span><span><span style="color:#c4a000">polaris.persistence.nosql.backend</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#4e9a06">MongoDb</span>
-</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">3</span><span><span style="color:#c4a000">quarkus.mongodb.database</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#4e9a06">polaris</span>
-</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">4</span><span><span style="color:#c4a000">quarkus.mongodb.connection-string</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#4e9a06">mongodb://&lt;username&gt;:&lt;password&gt;@&lt;host&gt;:&lt;por [...]
+<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-properties" data-lang="properties"><span style="display:flex;"><span><span style="color:#c4a000">polaris.persistence.type</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#4e9a06">nosql</span>
+</span></span><span style="display:flex;"><span><span style="color:#c4a000">polaris.persistence.nosql.backend</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#4e9a06">MongoDb</span>
+</span></span><span style="display:flex;"><span><span style="color:#c4a000">quarkus.mongodb.database</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#4e9a06">polaris</span>
+</span></span><span style="display:flex;"><span><span style="color:#c4a000">quarkus.mongodb.connection-string</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#4e9a06">mongodb://&lt;username&gt;:&lt;password&gt;@&lt;host&gt;:&lt;port&gt;</span>
</span></span></code></pre></div><h2 id="mongodb-atlas-configuration" id="mongodb-atlas-configuration">MongoDB Atlas Configuration<a class="heading-anchor" href="#mongodb-atlas-configuration" aria-label="Anchor">🔗</a>
</h2>
<p>For MongoDB Atlas deployments, use the <code>mongodb+srv://</code> connection string format:</p></description></item></channel></rss>
\ No newline at end of file
diff --git a/in-dev/unreleased/metastores/nosql-mongodb/index.html b/in-dev/unreleased/metastores/nosql-mongodb/index.html
index 70323d52f6..b8cd3c0d7e 100644
--- a/in-dev/unreleased/metastores/nosql-mongodb/index.html
+++ b/in-dev/unreleased/metastores/nosql-mongodb/index.html
@@ -1,20 +1,20 @@
<!doctype html><html itemscope itemtype=http://schema.org/WebPage lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon.png sizes=100x100><link rel=icon type=image/png href=/favicons/android-ch [...]
The MongoDB backend is currently in beta. This implementation uses MongoDB as the persistence backend and leverages the Quarkus MongoDB extension for connection management. Configuration can be done through environment variables or JVM -D flags at startup.
Basic Configuration🔗 Using environment variables:
-1POLARIS_PERSISTENCE_TYPE=nosql 2POLARIS_PERSISTENCE_NOSQL_BACKEND=MongoDb 3QUARKUS_MONGODB_DATABASE=polaris 4QUARKUS_MONGODB_CONNECTION_STRING=mongodb://<username>:<password>@<host>:<port> Using properties file:
-1polaris.persistence.type=nosql 2polaris.persistence.nosql.backend=MongoDb 3quarkus.mongodb.database=polaris 4quarkus.mongodb.connection-string=mongodb://<username>:<password>@<host>:<port> MongoDB Atlas Configuration🔗 For MongoDB Atlas deployments, use the mongodb+srv:// connection string format:"><meta property="og:url" content="https://polaris.apache.org/in-dev/unreleased/metastores/nosql-mongodb/"><meta property="og:site_name" content="Apache Polaris"><meta property="og:title" conten [...]
+POLARIS_PERSISTENCE_TYPE=nosql POLARIS_PERSISTENCE_NOSQL_BACKEND=MongoDb QUARKUS_MONGODB_DATABASE=polaris QUARKUS_MONGODB_CONNECTION_STRING=mongodb://<username>:<password>@<host>:<port> Using properties file:
+polaris.persistence.type=nosql polaris.persistence.nosql.backend=MongoDb quarkus.mongodb.database=polaris quarkus.mongodb.connection-string=mongodb://<username>:<password>@<host>:<port> MongoDB Atlas Configuration🔗 For MongoDB Atlas deployments, use the mongodb+srv:// connection string format:"><meta property="og:url" content="https://polaris.apache.org/in-dev/unreleased/metastores/nosql-mongodb/"><meta property="og:site_name" content="Apache Polaris"><meta property="og:title" content="N [...]
The MongoDB backend is currently in beta. This implementation uses MongoDB as the persistence backend and leverages the Quarkus MongoDB extension for connection management. Configuration can be done through environment variables or JVM -D flags at startup.
Basic Configuration🔗 Using environment variables:
-1POLARIS_PERSISTENCE_TYPE=nosql 2POLARIS_PERSISTENCE_NOSQL_BACKEND=MongoDb 3QUARKUS_MONGODB_DATABASE=polaris 4QUARKUS_MONGODB_CONNECTION_STRING=mongodb://<username>:<password>@<host>:<port> Using properties file:
-1polaris.persistence.type=nosql 2polaris.persistence.nosql.backend=MongoDb 3quarkus.mongodb.database=polaris 4quarkus.mongodb.connection-string=mongodb://<username>:<password>@<host>:<port> MongoDB Atlas Configuration🔗 For MongoDB Atlas deployments, use the mongodb+srv:// connection string format:"><meta property="og:locale" content="en_us"><meta property="og:type" content="article"><meta property="article:section" content="in-dev"><meta itemprop=name content="NoSQL MongoDB"><meta itempr [...]
+POLARIS_PERSISTENCE_TYPE=nosql POLARIS_PERSISTENCE_NOSQL_BACKEND=MongoDb QUARKUS_MONGODB_DATABASE=polaris QUARKUS_MONGODB_CONNECTION_STRING=mongodb://<username>:<password>@<host>:<port> Using properties file:
+polaris.persistence.type=nosql polaris.persistence.nosql.backend=MongoDb quarkus.mongodb.database=polaris quarkus.mongodb.connection-string=mongodb://<username>:<password>@<host>:<port> MongoDB Atlas Configuration🔗 For MongoDB Atlas deployments, use the mongodb+srv:// connection string format:"><meta property="og:locale" content="en_us"><meta property="og:type" content="article"><meta property="article:section" content="in-dev"><meta itemprop=name content="NoSQL MongoDB"><meta itemprop=d [...]
The MongoDB backend is currently in beta. This implementation uses MongoDB as the persistence backend and leverages the Quarkus MongoDB extension for connection management. Configuration can be done through environment variables or JVM -D flags at startup.
Basic Configuration🔗 Using environment variables:
-1POLARIS_PERSISTENCE_TYPE=nosql 2POLARIS_PERSISTENCE_NOSQL_BACKEND=MongoDb 3QUARKUS_MONGODB_DATABASE=polaris 4QUARKUS_MONGODB_CONNECTION_STRING=mongodb://<username>:<password>@<host>:<port> Using properties file:
-1polaris.persistence.type=nosql 2polaris.persistence.nosql.backend=MongoDb 3quarkus.mongodb.database=polaris 4quarkus.mongodb.connection-string=mongodb://<username>:<password>@<host>:<port> MongoDB Atlas Configuration🔗 For MongoDB Atlas deployments, use the mongodb+srv:// connection string format:"><meta itemprop=wordCount content="298"><meta name=twitter:card content="summary"><meta name=twitter:title content="NoSQL MongoDB"><meta name=twitter:description content="📝 Note
+POLARIS_PERSISTENCE_TYPE=nosql POLARIS_PERSISTENCE_NOSQL_BACKEND=MongoDb QUARKUS_MONGODB_DATABASE=polaris QUARKUS_MONGODB_CONNECTION_STRING=mongodb://<username>:<password>@<host>:<port> Using properties file:
+polaris.persistence.type=nosql polaris.persistence.nosql.backend=MongoDb quarkus.mongodb.database=polaris quarkus.mongodb.connection-string=mongodb://<username>:<password>@<host>:<port> MongoDB Atlas Configuration🔗 For MongoDB Atlas deployments, use the mongodb+srv:// connection string format:"><meta itemprop=wordCount content="288"><meta name=twitter:card content="summary"><meta name=twitter:title content="NoSQL MongoDB"><meta name=twitter:description content="📝 Note
The MongoDB backend is currently in beta. This implementation uses MongoDB as the persistence backend and leverages the Quarkus MongoDB extension for connection management. Configuration can be done through environment variables or JVM -D flags at startup.
Basic Configuration🔗 Using environment variables:
-1POLARIS_PERSISTENCE_TYPE=nosql 2POLARIS_PERSISTENCE_NOSQL_BACKEND=MongoDb 3QUARKUS_MONGODB_DATABASE=polaris 4QUARKUS_MONGODB_CONNECTION_STRING=mongodb://<username>:<password>@<host>:<port> Using properties file:
-1polaris.persistence.type=nosql 2polaris.persistence.nosql.backend=MongoDb 3quarkus.mongodb.database=polaris 4quarkus.mongodb.connection-string=mongodb://<username>:<password>@<host>:<port> MongoDB Atlas Configuration🔗 For MongoDB Atlas deployments, use the mongodb+srv:// connection string format:"><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin= [...]
+POLARIS_PERSISTENCE_TYPE=nosql POLARIS_PERSISTENCE_NOSQL_BACKEND=MongoDb QUARKUS_MONGODB_DATABASE=polaris QUARKUS_MONGODB_CONNECTION_STRING=mongodb://<username>:<password>@<host>:<port> Using properties file:
+polaris.persistence.type=nosql polaris.persistence.nosql.backend=MongoDb quarkus.mongodb.database=polaris quarkus.mongodb.connection-string=mongodb://<username>:<password>@<host>:<port> MongoDB Atlas Configuration🔗 For MongoDB Atlas deployments, use the mongodb+srv:// connection string format:"><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anon [...]
<label for=m-in-devunreleased-check><a href=/in-dev/unreleased/ title="Apache Polaris Documentation (Unreleased)" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleased><span>Unreleased</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-in-devunreleasedgetting-started-li><input type=checkbox id=m-in-devunreleasedgetting-started-check>
<label for=m-in-devunreleasedgetting-started-check><a href=/in-dev/unreleased/getting-started/ title="Getting Started with Apache Polaris" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleasedgetting-started><span>Getting Started</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedquick-start-li><input type=checkbox id=m-in-devunreleasedgetting-star [...]
<label for=m-in-devunreleasedgetting-startedquick-start-check><a href=/in-dev/unreleased/getting-started/quick-start/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-in-devunreleasedgetting-startedquick-start><span>Quickstart</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedsetup-tools-li><input type=checkbox id=m-in-devunreleasedgetting-startedsetup-tools-check>
@@ -82,40 +82,40 @@ Basic Configuration🔗 Using environment variables:
<a class=td-toc-title__link title="Top of page" href=#></a></div><nav id=TableOfContents><ul><li><a href=#basic-configuration>Basic Configuration</a></li><li><a href=#mongodb-atlas-configuration>MongoDB Atlas Configuration</a></li><li><a href=#mongodb-replica-set-configuration>MongoDB Replica Set Configuration</a></li><li><a href=#advanced-mongodb-configuration>Advanced MongoDB Configuration</a></li><li><a href=#bootstrapping-polaris>Bootstrapping Polaris</a></li><li><a href=#regular-mai [...]
This content is unreleased and may change before the next Polaris release.
For stable user documentation, see the
-<a href=/releases/latest/>latest release docs</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/docs/>Documentation</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/>Developer Docs</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/metastores/>Metastores</a></li><li class="breadcrumb-item active" aria-current=page>NoSQL MongoDB</li></ol></nav><div class=td-content><h1>NoSQL MongoDB</h1><header class [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#c4a000>POLARIS_PERSISTENCE_NOSQL_BACKEND</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>MongoDb</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span><span style=color:#c4a000>QUARKUS_MONGODB_DATABASE</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>polaris</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span><span style=color:#c4a000>QUARKUS_MONGODB_CONNECTION_STRING</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>mongodb://<username>:<password>@<host>:<port></span>
-</span></span></code></pre></div><p>Using properties file:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-properties data-lang=properties><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span><span style=color:#c4a000>polaris.persistence.type</span><span style=color:#ce5c [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#c4a000>polaris.persistence.nosql.backend</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>MongoDb</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span><span style=color:#c4a000>quarkus.mongodb.database</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>polaris</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span><span style=color:#c4a000>quarkus.mongodb.connection-string</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>mongodb://<username>:<password>@<host>:<port></span>
-</span></span></code></pre></div><h2 id=mongodb-atlas-configuration id=mongodb-atlas-configuration>MongoDB Atlas Configuration<a class=heading-anchor href=#mongodb-atlas-configuration aria-label=Anchor>🔗</a></h2><p>For MongoDB Atlas deployments, use the <code>mongodb+srv://</code> connection string format:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-properties data-lang= [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#c4a000>polaris.persistence.nosql.backend</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>MongoDb</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span><span style=color:#c4a000>quarkus.mongodb.database</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>polaris</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span><span style=color:#c4a000>quarkus.mongodb.connection-string</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>mongodb+srv://<username>:<password>@<cluster>.mongodb.net/?retryWrites=true&w=majority</span>
-</span></span></code></pre></div><h2 id=mongodb-replica-set-configuration id=mongodb-replica-set-configuration>MongoDB Replica Set Configuration<a class=heading-anchor href=#mongodb-replica-set-configuration aria-label=Anchor>🔗</a></h2><p>For replica set deployments:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-properties data-lang=properties><span style=display:flex><spa [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#c4a000>polaris.persistence.nosql.backend</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>MongoDb</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span><span style=color:#c4a000>quarkus.mongodb.database</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>polaris</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span><span style=color:#c4a000>quarkus.mongodb.connection-string</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>mongodb://<username>:<password>@<host1>:<port1>,<host2>:<port2>,<host3>:<port3>/?replicaSet=<rs-name>&authSource=admin</span>
-</span></span></code></pre></div><h2 id=advanced-mongodb-configuration id=advanced-mongodb-configuration>Advanced MongoDB Configuration<a class=heading-anchor href=#advanced-mongodb-configuration aria-label=Anchor>🔗</a></h2><p>Additional MongoDB settings can be configured via Quarkus MongoDB properties:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-properties data-lang=pro [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#c4a000>quarkus.mongodb.read-timeout</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>30S</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span><span style=color:#c4a000>quarkus.mongodb.server-selection-timeout</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>30S</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span><span style=color:#c4a000>quarkus.mongodb.write-concern.safe</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>true</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span><span style=color:#c4a000>quarkus.mongodb.read-preference</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>primaryPreferred</span>
-</span></span></code></pre></div><p>For TLS/SSL connections, add <code>tls=true</code> to the connection string:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-properties data-lang=properties><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span><span style=color:#c4a000> [...]
-</span></span></code></pre></div><p>For more details on available MongoDB configuration options, please refer to the <a href=https://quarkus.io/guides/mongodb#configuration-reference>Quarkus MongoDB configuration reference</a>.</p><h2 id=bootstrapping-polaris id=bootstrapping-polaris>Bootstrapping Polaris<a class=heading-anchor href=#bootstrapping-polaris aria-label=Anchor>🔗</a></h2><p>Before using Polaris with the MongoDB backend, you must bootstrap the metastore to create the necessary [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> --env<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"polaris.persistence.type=nosql"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> --env<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"polaris.persistence.nosql.backend=MongoDb"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> --env<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"quarkus.mongodb.database=polaris"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span> --env<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"quarkus.mongodb.connection-string=mongodb://<username>:<password>@<host>:<port>"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">6</span><span> apache/polaris-admin-tool:latest bootstrap -r <realm-name> -c <realm-name>,<client-id>,<client-secret>
-</span></span></code></pre></div><p>Using the standalone JAR:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span>java <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> -Dpolaris.persistence.type<span style=color:#ce5c00;font-weight:700>=</span>nosql <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> -Dpolaris.persistence.nosql.backend<span style=color:#ce5c00;font-weight:700>=</span>MongoDb <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> -Dquarkus.mongodb.database<span style=color:#ce5c00;font-weight:700>=</span>polaris <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span> -Dquarkus.mongodb.connection-string<span style=color:#ce5c00;font-weight:700>=</span>mongodb://<username>:<password>@<host>:<port> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">6</span><span> -jar polaris-admin-tool.jar bootstrap -r <realm-name> -c <realm-name>,<client-id>,<client-secret>
+<a href=/releases/latest/>latest release docs</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/docs/>Documentation</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/>Developer Docs</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/metastores/>Metastores</a></li><li class="breadcrumb-item active" aria-current=page>NoSQL MongoDB</li></ol></nav><div class=td-content><h1>NoSQL MongoDB</h1><header class [...]
+</span></span><span style=display:flex><span><span style=color:#c4a000>POLARIS_PERSISTENCE_NOSQL_BACKEND</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>MongoDb</span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>QUARKUS_MONGODB_DATABASE</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>polaris</span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>QUARKUS_MONGODB_CONNECTION_STRING</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>mongodb://<username>:<password>@<host>:<port></span>
+</span></span></code></pre></div><p>Using properties file:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-properties data-lang=properties><span style=display:flex><span><span style=color:#c4a000>polaris.persistence.type</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>nosql</span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>polaris.persistence.nosql.backend</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>MongoDb</span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>quarkus.mongodb.database</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>polaris</span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>quarkus.mongodb.connection-string</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>mongodb://<username>:<password>@<host>:<port></span>
+</span></span></code></pre></div><h2 id=mongodb-atlas-configuration id=mongodb-atlas-configuration>MongoDB Atlas Configuration<a class=heading-anchor href=#mongodb-atlas-configuration aria-label=Anchor>🔗</a></h2><p>For MongoDB Atlas deployments, use the <code>mongodb+srv://</code> connection string format:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-properties data-lang= [...]
+</span></span><span style=display:flex><span><span style=color:#c4a000>polaris.persistence.nosql.backend</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>MongoDb</span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>quarkus.mongodb.database</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>polaris</span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>quarkus.mongodb.connection-string</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>mongodb+srv://<username>:<password>@<cluster>.mongodb.net/?retryWrites=true&w=majority</span>
+</span></span></code></pre></div><h2 id=mongodb-replica-set-configuration id=mongodb-replica-set-configuration>MongoDB Replica Set Configuration<a class=heading-anchor href=#mongodb-replica-set-configuration aria-label=Anchor>🔗</a></h2><p>For replica set deployments:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-properties data-lang=properties><span style=display:flex><spa [...]
+</span></span><span style=display:flex><span><span style=color:#c4a000>polaris.persistence.nosql.backend</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>MongoDb</span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>quarkus.mongodb.database</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>polaris</span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>quarkus.mongodb.connection-string</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>mongodb://<username>:<password>@<host1>:<port1>,<host2>:<port2>,<host3>:<port3>/?replicaSet=<rs-name>&authSource=admin</span>
+</span></span></code></pre></div><h2 id=advanced-mongodb-configuration id=advanced-mongodb-configuration>Advanced MongoDB Configuration<a class=heading-anchor href=#advanced-mongodb-configuration aria-label=Anchor>🔗</a></h2><p>Additional MongoDB settings can be configured via Quarkus MongoDB properties:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-properties data-lang=pro [...]
+</span></span><span style=display:flex><span><span style=color:#c4a000>quarkus.mongodb.read-timeout</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>30S</span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>quarkus.mongodb.server-selection-timeout</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>30S</span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>quarkus.mongodb.write-concern.safe</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>true</span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>quarkus.mongodb.read-preference</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>primaryPreferred</span>
+</span></span></code></pre></div><p>For TLS/SSL connections, add <code>tls=true</code> to the connection string:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-properties data-lang=properties><span style=display:flex><span><span style=color:#c4a000>quarkus.mongodb.connection-string</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>mongodb://& [...]
+</span></span></code></pre></div><p>For more details on available MongoDB configuration options, please refer to the <a href=https://quarkus.io/guides/mongodb#configuration-reference>Quarkus MongoDB configuration reference</a>.</p><h2 id=bootstrapping-polaris id=bootstrapping-polaris>Bootstrapping Polaris<a class=heading-anchor href=#bootstrapping-polaris aria-label=Anchor>🔗</a></h2><p>Before using Polaris with the MongoDB backend, you must bootstrap the metastore to create the necessary [...]
+</span></span></span><span style=display:flex><span> --env<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"polaris.persistence.type=nosql"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --env<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"polaris.persistence.nosql.backend=MongoDb"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --env<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"quarkus.mongodb.database=polaris"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --env<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"quarkus.mongodb.connection-string=mongodb://<username>:<password>@<host>:<port>"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> apache/polaris-admin-tool:latest bootstrap -r <realm-name> -c <realm-name>,<client-id>,<client-secret>
+</span></span></code></pre></div><p>Using the standalone JAR:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span>java <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -Dpolaris.persistence.type<span style=color:#ce5c00;font-weight:700>=</span>nosql <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -Dpolaris.persistence.nosql.backend<span style=color:#ce5c00;font-weight:700>=</span>MongoDb <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -Dquarkus.mongodb.database<span style=color:#ce5c00;font-weight:700>=</span>polaris <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -Dquarkus.mongodb.connection-string<span style=color:#ce5c00;font-weight:700>=</span>mongodb://<username>:<password>@<host>:<port> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -jar polaris-admin-tool.jar bootstrap -r <realm-name> -c <realm-name>,<client-id>,<client-secret>
</span></span></code></pre></div><p>For more details on the bootstrap command and other administrative operations, see the <a href=https://polaris.apache.org/in-dev/unreleased/admin-tool/>Admin Tool</a> documentation.</p><h2 id=regular-maintenance id=regular-maintenance>Regular maintenance<a class=heading-anchor href=#regular-maintenance aria-label=Anchor>🔗</a></h2><p>The Polaris NoSQL backend requires regular maintenance to remove stale data from the backend database.
The frequency of this maintenance depends on the size of the database and the frequency of data updates.
The recommended maintenance frequency is once per day.
diff --git a/in-dev/unreleased/metastores/relational-jdbc/index.html b/in-dev/unreleased/metastores/relational-jdbc/index.html
index 581f63c4b8..836db71018 100644
--- a/in-dev/unreleased/metastores/relational-jdbc/index.html
+++ b/in-dev/unreleased/metastores/relational-jdbc/index.html
@@ -1,16 +1,20 @@
<!doctype html><html itemscope itemtype=http://schema.org/WebPage lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon.png sizes=100x100><link rel=icon type=image/png href=/favicons/android-ch [...]
We have 2 options for configuring the persistence backend:
1. Relational JDBC metastore with username and password🔗 Using environment variables:
-1POLARIS_PERSISTENCE_TYPE=relational-jdbc 2 3QUARKUS_DATASOURCE_USERNAME=<your-username> 4QUARKUS_DATASOURCE_PASSWORD=<your-password> 5QUARKUS_DATASOURCE_JDBC_URL=<jdbc-url-of-postgres> Using properties file:"><meta property="og:url" content="https://polaris.apache.org/in-dev/unreleased/metastores/relational-jdbc/"><meta property="og:site_name" content="Apache Polaris"><meta property="og:title" content="Relational JDBC"><meta property="og:description" content="This implementation leverag [...]
+POLARIS_PERSISTENCE_TYPE=relational-jdbc QUARKUS_DATASOURCE_USERNAME=<your-username> QUARKUS_DATASOURCE_PASSWORD=<your-password> QUARKUS_DATASOURCE_JDBC_URL=<jdbc-url-of-postgres> Using properties file:
+polaris.persistence.type=relational-jdbc quarkus.datasource.jdbc.username=<your-username> quarkus.datasource.jdbc.password=<your-password> quarkus.datasource.jdbc.jdbc-url=<jdbc-url-of-postgres> 2. AWS Aurora PostgreSQL metastore using IAM AWS authentication🔗 polaris.persistence.type=relational-jdbc quarkus.datasource.jdbc.url=jdbc:postgresql://polaris-cluster.cluster-xyz.us-east-1.rds.amazonaws.com:6160/polaris quarkus.datasource.jdbc.additional-jdbc-properties.wrapperPlugins=iam quarku [...]
We have 2 options for configuring the persistence backend:
1. Relational JDBC metastore with username and password🔗 Using environment variables:
-1POLARIS_PERSISTENCE_TYPE=relational-jdbc 2 3QUARKUS_DATASOURCE_USERNAME=<your-username> 4QUARKUS_DATASOURCE_PASSWORD=<your-password> 5QUARKUS_DATASOURCE_JDBC_URL=<jdbc-url-of-postgres> Using properties file:"><meta property="og:locale" content="en_us"><meta property="og:type" content="article"><meta property="article:section" content="in-dev"><meta itemprop=name content="Relational JDBC"><meta itemprop=description content="This implementation leverages Quarkus for datasource management [...]
+POLARIS_PERSISTENCE_TYPE=relational-jdbc QUARKUS_DATASOURCE_USERNAME=<your-username> QUARKUS_DATASOURCE_PASSWORD=<your-password> QUARKUS_DATASOURCE_JDBC_URL=<jdbc-url-of-postgres> Using properties file:
+polaris.persistence.type=relational-jdbc quarkus.datasource.jdbc.username=<your-username> quarkus.datasource.jdbc.password=<your-password> quarkus.datasource.jdbc.jdbc-url=<jdbc-url-of-postgres> 2. AWS Aurora PostgreSQL metastore using IAM AWS authentication🔗 polaris.persistence.type=relational-jdbc quarkus.datasource.jdbc.url=jdbc:postgresql://polaris-cluster.cluster-xyz.us-east-1.rds.amazonaws.com:6160/polaris quarkus.datasource.jdbc.additional-jdbc-properties.wrapperPlugins=iam quarku [...]
We have 2 options for configuring the persistence backend:
1. Relational JDBC metastore with username and password🔗 Using environment variables:
-1POLARIS_PERSISTENCE_TYPE=relational-jdbc 2 3QUARKUS_DATASOURCE_USERNAME=<your-username> 4QUARKUS_DATASOURCE_PASSWORD=<your-password> 5QUARKUS_DATASOURCE_JDBC_URL=<jdbc-url-of-postgres> Using properties file:"><meta itemprop=wordCount content="251"><meta name=twitter:card content="summary"><meta name=twitter:title content="Relational JDBC"><meta name=twitter:description content="This implementation leverages Quarkus for datasource management and supports configuration through environment [...]
+POLARIS_PERSISTENCE_TYPE=relational-jdbc QUARKUS_DATASOURCE_USERNAME=<your-username> QUARKUS_DATASOURCE_PASSWORD=<your-password> QUARKUS_DATASOURCE_JDBC_URL=<jdbc-url-of-postgres> Using properties file:
+polaris.persistence.type=relational-jdbc quarkus.datasource.jdbc.username=<your-username> quarkus.datasource.jdbc.password=<your-password> quarkus.datasource.jdbc.jdbc-url=<jdbc-url-of-postgres> 2. AWS Aurora PostgreSQL metastore using IAM AWS authentication🔗 polaris.persistence.type=relational-jdbc quarkus.datasource.jdbc.url=jdbc:postgresql://polaris-cluster.cluster-xyz.us-east-1.rds.amazonaws.com:6160/polaris quarkus.datasource.jdbc.additional-jdbc-properties.wrapperPlugins=iam quarku [...]
We have 2 options for configuring the persistence backend:
1. Relational JDBC metastore with username and password🔗 Using environment variables:
-1POLARIS_PERSISTENCE_TYPE=relational-jdbc 2 3QUARKUS_DATASOURCE_USERNAME=<your-username> 4QUARKUS_DATASOURCE_PASSWORD=<your-password> 5QUARKUS_DATASOURCE_JDBC_URL=<jdbc-url-of-postgres> Using properties file:"><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba3 [...]
+POLARIS_PERSISTENCE_TYPE=relational-jdbc QUARKUS_DATASOURCE_USERNAME=<your-username> QUARKUS_DATASOURCE_PASSWORD=<your-password> QUARKUS_DATASOURCE_JDBC_URL=<jdbc-url-of-postgres> Using properties file:
+polaris.persistence.type=relational-jdbc quarkus.datasource.jdbc.username=<your-username> quarkus.datasource.jdbc.password=<your-password> quarkus.datasource.jdbc.jdbc-url=<jdbc-url-of-postgres> 2. AWS Aurora PostgreSQL metastore using IAM AWS authentication🔗 polaris.persistence.type=relational-jdbc quarkus.datasource.jdbc.url=jdbc:postgresql://polaris-cluster.cluster-xyz.us-east-1.rds.amazonaws.com:6160/polaris quarkus.datasource.jdbc.additional-jdbc-properties.wrapperPlugins=iam quarku [...]
<label for=m-in-devunreleased-check><a href=/in-dev/unreleased/ title="Apache Polaris Documentation (Unreleased)" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleased><span>Unreleased</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-in-devunreleasedgetting-started-li><input type=checkbox id=m-in-devunreleasedgetting-started-check>
<label for=m-in-devunreleasedgetting-started-check><a href=/in-dev/unreleased/getting-started/ title="Getting Started with Apache Polaris" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleasedgetting-started><span>Getting Started</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedquick-start-li><input type=checkbox id=m-in-devunreleasedgetting-star [...]
<label for=m-in-devunreleasedgetting-startedquick-start-check><a href=/in-dev/unreleased/getting-started/quick-start/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-in-devunreleasedgetting-startedquick-start><span>Quickstart</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedsetup-tools-li><input type=checkbox id=m-in-devunreleasedgetting-startedsetup-tools-check>
@@ -79,40 +83,40 @@ We have 2 options for configuring the persistence backend:
This content is unreleased and may change before the next Polaris release.
For stable user documentation, see the
<a href=/releases/latest/>latest release docs</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/docs/>Documentation</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/>Developer Docs</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/metastores/>Metastores</a></li><li class="breadcrumb-item active" aria-current=page>Relational JDBC</li></ol></nav><div class=td-content><h1>Relational JDBC</h1><header c [...]
-environment variables or JVM -D flags at startup. For more information, refer to the <a href=https://quarkus.io/guides/config-reference#env-file>Quarkus configuration reference</a>.</p><p>We have 2 options for configuring the persistence backend:</p><h2 id=1-relational-jdbc-metastore-with-username-and-password id=1-relational-jdbc-metastore-with-username-and-password>1. Relational JDBC metastore with username and password<a class=heading-anchor href=#1-relational-jdbc-metastore-with-user [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span><span style=color:#c4a000>QUARKUS_DATASOURCE_USERNAME</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06><your-username></span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span><span style=color:#c4a000>QUARKUS_DATASOURCE_PASSWORD</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06><your-password></span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span><span style=color:#c4a000>QUARKUS_DATASOURCE_JDBC_URL</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06><jdbc-url-of-postgres></span>
-</span></span></code></pre></div><p>Using properties file:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-properties data-lang=properties><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span><span style=color:#c4a000>polaris.persistence.type</span><span style=color:#ce5c [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#c4a000>quarkus.datasource.jdbc.username</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06><your-username></span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span><span style=color:#c4a000>quarkus.datasource.jdbc.password</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06><your-password></span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span><span style=color:#c4a000>quarkus.datasource.jdbc.jdbc-url</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06><jdbc-url-of-postgres></span>
-</span></span></code></pre></div><h2 id=2-aws-aurora-postgresql-metastore-using-iam-aws-authentication id=2-aws-aurora-postgresql-metastore-using-iam-aws-authentication>2. AWS Aurora PostgreSQL metastore using IAM AWS authentication<a class=heading-anchor href=#2-aws-aurora-postgresql-metastore-using-iam-aws-authentication aria-label=Anchor>🔗</a></h2><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none> [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span><span style=color:#c4a000>quarkus.datasource.jdbc.url</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>jdbc:postgresql://polaris-cluster.cluster-xyz.us-east-1.rds.amazonaws.com:6160/polaris</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span><span style=color:#c4a000>quarkus.datasource.jdbc.additional-jdbc-properties.wrapperPlugins</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>iam</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span><span style=color:#c4a000>quarkus.datasource.username</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>dbusername</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span><span style=color:#c4a000>quarkus.datasource.db-kind</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>postgresql</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span><span style=color:#c4a000>quarkus.datasource.jdbc.additional-jdbc-properties.ssl</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>true</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span><span style=color:#c4a000>quarkus.datasource.jdbc.additional-jdbc-properties.sslmode</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>require</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span><span style=color:#c4a000>quarkus.datasource.credentials-provider</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>aws</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">10</span><span><span style=color:#c4a000>quarkus.rds.credentials-provider.aws.use-quarkus-client</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>true</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">11</span><span><span style=color:#c4a000>quarkus.rds.credentials-provider.aws.username</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>dbusername</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">12</span><span><span style=color:#c4a000>quarkus.rds.credentials-provider.aws.hostname</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>polaris-cluster.cluster-xyz.us-east-1.rds.amazonaws.com</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">13</span><span><span style=color:#c4a000>quarkus.rds.credentials-provider.aws.port</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>6160</span>
+environment variables or JVM -D flags at startup. For more information, refer to the <a href=https://quarkus.io/guides/config-reference#env-file>Quarkus configuration reference</a>.</p><p>We have 2 options for configuring the persistence backend:</p><h2 id=1-relational-jdbc-metastore-with-username-and-password id=1-relational-jdbc-metastore-with-username-and-password>1. Relational JDBC metastore with username and password<a class=heading-anchor href=#1-relational-jdbc-metastore-with-user [...]
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>QUARKUS_DATASOURCE_USERNAME</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06><your-username></span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>QUARKUS_DATASOURCE_PASSWORD</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06><your-password></span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>QUARKUS_DATASOURCE_JDBC_URL</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06><jdbc-url-of-postgres></span>
+</span></span></code></pre></div><p>Using properties file:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-properties data-lang=properties><span style=display:flex><span><span style=color:#c4a000>polaris.persistence.type</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>relational-jdbc</span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>quarkus.datasource.jdbc.username</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06><your-username></span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>quarkus.datasource.jdbc.password</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06><your-password></span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>quarkus.datasource.jdbc.jdbc-url</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06><jdbc-url-of-postgres></span>
+</span></span></code></pre></div><h2 id=2-aws-aurora-postgresql-metastore-using-iam-aws-authentication id=2-aws-aurora-postgresql-metastore-using-iam-aws-authentication>2. AWS Aurora PostgreSQL metastore using IAM AWS authentication<a class=heading-anchor href=#2-aws-aurora-postgresql-metastore-using-iam-aws-authentication aria-label=Anchor>🔗</a></h2><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none> [...]
+</span></span><span style=display:flex><span><span style=color:#c4a000>quarkus.datasource.jdbc.url</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>jdbc:postgresql://polaris-cluster.cluster-xyz.us-east-1.rds.amazonaws.com:6160/polaris</span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>quarkus.datasource.jdbc.additional-jdbc-properties.wrapperPlugins</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>iam</span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>quarkus.datasource.username</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>dbusername</span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>quarkus.datasource.db-kind</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>postgresql</span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>quarkus.datasource.jdbc.additional-jdbc-properties.ssl</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>true</span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>quarkus.datasource.jdbc.additional-jdbc-properties.sslmode</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>require</span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>quarkus.datasource.credentials-provider</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>aws</span>
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>quarkus.rds.credentials-provider.aws.use-quarkus-client</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>true</span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>quarkus.rds.credentials-provider.aws.username</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>dbusername</span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>quarkus.rds.credentials-provider.aws.hostname</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>polaris-cluster.cluster-xyz.us-east-1.rds.amazonaws.com</span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>quarkus.rds.credentials-provider.aws.port</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>6160</span>
</span></span></code></pre></div><p>This is the basic configuration. For more details, please refer to the <a href=https://docs.quarkiverse.io/quarkus-amazon-services/dev/amazon-rds.html#_configuration_reference>Quarkus plugin documentation</a>.</p><p>The Relational JDBC metastore currently relies on a Quarkus-managed datasource and supports only PostgresSQL and H2 databases. At this time, official documentation is provided exclusively for usage with PostgreSQL.
Please refer to the documentation here:
-<a href=https://quarkus.io/guides/datasource>Configure data sources in Quarkus</a>.</p><p>Additionally, the retries can be configured via <code>polaris.persistence.relational.jdbc.*</code> properties; please refer to the <a href=https://polaris.apache.org/in-dev/unreleased/configuration/>Configuring Polaris</a> section.</p><h2 id=bootstrapping-polaris id=bootstrapping-polaris>Bootstrapping Polaris<a class=heading-anchor href=#bootstrapping-polaris aria-label=Anchor>🔗</a></h2><p>Before us [...]
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> --env<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"polaris.persistence.type=relational-jdbc"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> --env<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"quarkus.datasource.username=<your-username>"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> --env<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"quarkus.datasource.password=<your-password>"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span> --env<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"quarkus.datasource.jdbc.url=<jdbc-url-of-postgres>"</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">6</span><span> apache/polaris-admin-tool:latest bootstrap -r <realm-name> -c <realm-name>,<client-id>,<client-secret>
-</span></span></code></pre></div><p>Using the standalone JAR:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span>java <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> -Dpolaris.persistence.type<span style=color:#ce5c00;font-weight:700>=</span>relational-jdbc <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> -Dquarkus.datasource.username<span style=color:#ce5c00;font-weight:700>=</span><your-username> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> -Dquarkus.datasource.password<span style=color:#ce5c00;font-weight:700>=</span><your-password> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span> -Dquarkus.datasource.jdbc.url<span style=color:#ce5c00;font-weight:700>=</span><jdbc-url-of-postgres> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">6</span><span> -jar polaris-admin-tool.jar bootstrap -r <realm-name> -c <realm-name>,<client-id>,<client-secret>
+<a href=https://quarkus.io/guides/datasource>Configure data sources in Quarkus</a>.</p><p>Additionally, the retries can be configured via <code>polaris.persistence.relational.jdbc.*</code> properties; please refer to the <a href=https://polaris.apache.org/in-dev/unreleased/configuration/>Configuring Polaris</a> section.</p><h2 id=bootstrapping-polaris id=bootstrapping-polaris>Bootstrapping Polaris<a class=heading-anchor href=#bootstrapping-polaris aria-label=Anchor>🔗</a></h2><p>Before us [...]
+</span></span></span><span style=display:flex><span> --env<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"polaris.persistence.type=relational-jdbc"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --env<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"quarkus.datasource.username=<your-username>"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --env<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"quarkus.datasource.password=<your-password>"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> --env<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>"quarkus.datasource.jdbc.url=<jdbc-url-of-postgres>"</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> apache/polaris-admin-tool:latest bootstrap -r <realm-name> -c <realm-name>,<client-id>,<client-secret>
+</span></span></code></pre></div><p>Using the standalone JAR:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-bash data-lang=bash><span style=display:flex><span>java <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -Dpolaris.persistence.type<span style=color:#ce5c00;font-weight:700>=</span>relational-jdbc <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -Dquarkus.datasource.username<span style=color:#ce5c00;font-weight:700>=</span><your-username> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -Dquarkus.datasource.password<span style=color:#ce5c00;font-weight:700>=</span><your-password> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -Dquarkus.datasource.jdbc.url<span style=color:#ce5c00;font-weight:700>=</span><jdbc-url-of-postgres> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span> -jar polaris-admin-tool.jar bootstrap -r <realm-name> -c <realm-name>,<client-id>,<client-secret>
</span></span></code></pre></div><p>For more details on the bootstrap command and other administrative operations, see the <a href=https://polaris.apache.org/in-dev/unreleased/admin-tool/>Admin Tool</a> documentation.</p></div></main></div></div><footer class="td-footer row d-print-none"><div class=container-fluid><div class="row mx-md-2"><div class="td-footer__left col-6 col-sm-4 order-sm-1"><ul class=td-footer__links-list><li class=td-footer__links-item data-bs-toggle=tooltip title=Sla [...]
\ No newline at end of file
diff --git a/in-dev/unreleased/polaris-api-specs/index.html b/in-dev/unreleased/polaris-api-specs/index.html
index dfdcae8ef3..efd6352457 100644
--- a/in-dev/unreleased/polaris-api-specs/index.html
+++ b/in-dev/unreleased/polaris-api-specs/index.html
@@ -2,7 +2,7 @@
It follows REST standards, using clear, resource-based URLs, standard HTTP methods, response codes, and secure authentication. With the Polaris API, you can create, manage, and query Iceberg catalogs efficiently."><meta property="og:url" content="https://polaris.apache.org/in-dev/unreleased/polaris-api-specs/"><meta property="og:site_name" content="Apache Polaris"><meta property="og:title" content="Polaris API Reference"><meta property="og:description" content="The Apache Polaris API off [...]
It follows REST standards, using clear, resource-based URLs, standard HTTP methods, response codes, and secure authentication. With the Polaris API, you can create, manage, and query Iceberg catalogs efficiently."><meta property="og:locale" content="en_us"><meta property="og:type" content="website"><meta itemprop=name content="Polaris API Reference"><meta itemprop=description content="The Apache Polaris API offers a comprehensive set of endpoints that enable you to manage principals, pri [...]
It follows REST standards, using clear, resource-based URLs, standard HTTP methods, response codes, and secure authentication. With the Polaris API, you can create, manage, and query Iceberg catalogs efficiently."><meta itemprop=wordCount content="50"><meta name=twitter:card content="summary"><meta name=twitter:title content="Polaris API Reference"><meta name=twitter:description content="The Apache Polaris API offers a comprehensive set of endpoints that enable you to manage principals, [...]
-It follows REST standards, using clear, resource-based URLs, standard HTTP methods, response codes, and secure authentication. With the Polaris API, you can create, manage, and query Iceberg catalogs efficiently."><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed84 [...]
+It follows REST standards, using clear, resource-based URLs, standard HTTP methods, response codes, and secure authentication. With the Polaris API, you can create, manage, and query Iceberg catalogs efficiently."><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed84 [...]
<label for=m-in-devunreleased-check><a href=/in-dev/unreleased/ title="Apache Polaris Documentation (Unreleased)" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleased><span>Unreleased</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-in-devunreleasedgetting-started-li><input type=checkbox id=m-in-devunreleasedgetting-started-check>
<label for=m-in-devunreleasedgetting-started-check><a href=/in-dev/unreleased/getting-started/ title="Getting Started with Apache Polaris" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleasedgetting-started><span>Getting Started</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedquick-start-li><input type=checkbox id=m-in-devunreleasedgetting-star [...]
<label for=m-in-devunreleasedgetting-startedquick-start-check><a href=/in-dev/unreleased/getting-started/quick-start/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-in-devunreleasedgetting-startedquick-start><span>Quickstart</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedsetup-tools-li><input type=checkbox id=m-in-devunreleasedgetting-startedsetup-tools-check>
diff --git a/in-dev/unreleased/polaris-api-specs/polaris-catalog-api/index.html b/in-dev/unreleased/polaris-api-specs/polaris-catalog-api/index.html
index e80a39fe65..fd09766b37 100644
--- a/in-dev/unreleased/polaris-api-specs/polaris-catalog-api/index.html
+++ b/in-dev/unreleased/polaris-api-specs/polaris-catalog-api/index.html
@@ -1,4 +1,4 @@
-<!doctype html><html itemscope itemtype=http://schema.org/WebPage lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon.png sizes=100x100><link rel=icon type=image/png href=/favicons/android-ch [...]
+<!doctype html><html itemscope itemtype=http://schema.org/WebPage lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon.png sizes=100x100><link rel=icon type=image/png href=/favicons/android-ch [...]
<label for=m-in-devunreleased-check><a href=/in-dev/unreleased/ title="Apache Polaris Documentation (Unreleased)" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleased><span>Unreleased</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-in-devunreleasedgetting-started-li><input type=checkbox id=m-in-devunreleasedgetting-started-check>
<label for=m-in-devunreleasedgetting-started-check><a href=/in-dev/unreleased/getting-started/ title="Getting Started with Apache Polaris" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleasedgetting-started><span>Getting Started</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedquick-start-li><input type=checkbox id=m-in-devunreleasedgetting-star [...]
<label for=m-in-devunreleasedgetting-startedquick-start-check><a href=/in-dev/unreleased/getting-started/quick-start/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-in-devunreleasedgetting-startedquick-start><span>Quickstart</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedsetup-tools-li><input type=checkbox id=m-in-devunreleasedgetting-startedsetup-tools-check>
diff --git a/in-dev/unreleased/polaris-api-specs/polaris-management-api/index.html b/in-dev/unreleased/polaris-api-specs/polaris-management-api/index.html
index 038939aef1..faa055542b 100644
--- a/in-dev/unreleased/polaris-api-specs/polaris-management-api/index.html
+++ b/in-dev/unreleased/polaris-api-specs/polaris-management-api/index.html
@@ -1,4 +1,4 @@
-<!doctype html><html itemscope itemtype=http://schema.org/WebPage lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon.png sizes=100x100><link rel=icon type=image/png href=/favicons/android-ch [...]
+<!doctype html><html itemscope itemtype=http://schema.org/WebPage lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon.png sizes=100x100><link rel=icon type=image/png href=/favicons/android-ch [...]
<label for=m-in-devunreleased-check><a href=/in-dev/unreleased/ title="Apache Polaris Documentation (Unreleased)" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleased><span>Unreleased</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-in-devunreleasedgetting-started-li><input type=checkbox id=m-in-devunreleasedgetting-started-check>
<label for=m-in-devunreleasedgetting-started-check><a href=/in-dev/unreleased/getting-started/ title="Getting Started with Apache Polaris" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleasedgetting-started><span>Getting Started</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedquick-start-li><input type=checkbox id=m-in-devunreleasedgetting-star [...]
<label for=m-in-devunreleasedgetting-startedquick-start-check><a href=/in-dev/unreleased/getting-started/quick-start/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-in-devunreleasedgetting-startedquick-start><span>Quickstart</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedsetup-tools-li><input type=checkbox id=m-in-devunreleasedgetting-startedsetup-tools-check>
diff --git a/in-dev/unreleased/polaris-spark-client/index.html b/in-dev/unreleased/polaris-spark-client/index.html
index 95f25459cf..3d38c9332b 100644
--- a/in-dev/unreleased/polaris-spark-client/index.html
+++ b/in-dev/unreleased/polaris-spark-client/index.html
@@ -13,12 +13,12 @@ Quick Start with Local Polaris Service🔗 If you want to quickly try out the fu
The Spark client can manage Iceberg tables and non-Iceberg tables.
Users who only use Iceberg tables do not need to use this client and can use the Iceberg-provided Spark client.
This page documents how to connect Spark with Polaris Service using the Polaris Spark client.
-Quick Start with Local Polaris Service🔗 If you want to quickly try out the functionality with a local Polaris service, simply check out the Polaris repo and follow the instructions in the Spark plugin getting-started README."><meta itemprop=wordCount content="598"><meta name=twitter:card content="summary"><meta name=twitter:title content="Polaris Spark Client"><meta name=twitter:description content="Polaris provides a Spark client to manage non-Iceberg tables through Generic Tables.
+Quick Start with Local Polaris Service🔗 If you want to quickly try out the functionality with a local Polaris service, simply check out the Polaris repo and follow the instructions in the Spark plugin getting-started README."><meta itemprop=wordCount content="585"><meta name=twitter:card content="summary"><meta name=twitter:title content="Polaris Spark Client"><meta name=twitter:description content="Polaris provides a Spark client to manage non-Iceberg tables through Generic Tables.
📝 Note
The Spark client can manage Iceberg tables and non-Iceberg tables.
Users who only use Iceberg tables do not need to use this client and can use the Iceberg-provided Spark client.
This page documents how to connect Spark with Polaris Service using the Polaris Spark client.
-Quick Start with Local Polaris Service🔗 If you want to quickly try out the functionality with a local Polaris service, simply check out the Polaris repo and follow the instructions in the Spark plugin getting-started README."><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333ae [...]
+Quick Start with Local Polaris Service🔗 If you want to quickly try out the functionality with a local Polaris service, simply check out the Polaris repo and follow the instructions in the Spark plugin getting-started README."><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333ae [...]
<label for=m-in-devunreleased-check><a href=/in-dev/unreleased/ title="Apache Polaris Documentation (Unreleased)" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleased><span>Unreleased</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-in-devunreleasedgetting-started-li><input type=checkbox id=m-in-devunreleasedgetting-started-check>
<label for=m-in-devunreleasedgetting-started-check><a href=/in-dev/unreleased/getting-started/ title="Getting Started with Apache Polaris" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleasedgetting-started><span>Getting Started</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedquick-start-li><input type=checkbox id=m-in-devunreleasedgetting-star [...]
<label for=m-in-devunreleasedgetting-startedquick-start-check><a href=/in-dev/unreleased/getting-started/quick-start/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-in-devunreleasedgetting-startedquick-start><span>Quickstart</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedsetup-tools-li><input type=checkbox id=m-in-devunreleasedgetting-startedsetup-tools-check>
@@ -88,51 +88,51 @@ This content is unreleased and may change before the next Polaris release.
For stable user documentation, see the
<a href=/releases/latest/>latest release docs</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/docs/>Documentation</a></li><li class=breadcrumb-item><a href=/in-dev/unreleased/>Developer Docs</a></li><li class="breadcrumb-item active" aria-current=page>Polaris Spark Client</li></ol></nav><div class=td-content><h1>Polaris Spark Client</h1><header class=article-meta></header><p>Polaris provides a Spark client to manage no [...]
and follow the instructions in the Spark plugin getting-started
-<a href=https://github.com/apache/polaris/blob/main/plugins/spark/v3.5/getting-started/README.md>README</a>.</p><p>Check out the Polaris repo:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span>git cl [...]
+<a href=https://github.com/apache/polaris/blob/main/plugins/spark/v3.5/getting-started/README.md>README</a>.</p><p>Check out the Polaris repo:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span>git clone https://github.com/apache/polaris.git ~/polaris
</span></span></code></pre></div><h2 id=start-spark-against-a-deployed-polaris-service id=start-spark-against-a-deployed-polaris-service>Start Spark against a Deployed Polaris Service<a class=heading-anchor href=#start-spark-against-a-deployed-polaris-service aria-label=Anchor>🔗</a></h2><p>Before starting, ensure that the deployed Polaris service supports Generic Tables, and that Spark 3.5(version 3.5.3 or later is installed).
-Spark 3.5.6 is recommended, and you can follow the instructions below to get a Spark 3.5.6 distribution.</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span><span style=color:#204a87>cd</span> ~
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span>wget https://www.apache.org/dyn/closer.lua/spark/spark-3.5.6/spark-3.5.6-bin-hadoop3.tgz?action<span style=color:#ce5c00;font-weight:700>=</span>download
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span>mkdir spark-3.5
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span>tar xzvf spark-3.5.6-bin-hadoop3.tgz -C spark-3.5 --strip-components<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#0000cf;font-weight:700>1</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span><span style=color:#204a87>cd</span> spark-3.5
+Spark 3.5.6 is recommended, and you can follow the instructions below to get a Spark 3.5.6 distribution.</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span><span style=color:#204a87>cd</span> ~
+</span></span><span style=display:flex><span>wget https://www.apache.org/dyn/closer.lua/spark/spark-3.5.6/spark-3.5.6-bin-hadoop3.tgz?action<span style=color:#ce5c00;font-weight:700>=</span>download
+</span></span><span style=display:flex><span>mkdir spark-3.5
+</span></span><span style=display:flex><span>tar xzvf spark-3.5.6-bin-hadoop3.tgz -C spark-3.5 --strip-components<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#0000cf;font-weight:700>1</span>
+</span></span><span style=display:flex><span><span style=color:#204a87>cd</span> spark-3.5
</span></span></code></pre></div><h3 id=connecting-with-spark-using-the-polaris-spark-client id=connecting-with-spark-using-the-polaris-spark-client>Connecting with Spark using the Polaris Spark Client<a class=heading-anchor href=#connecting-with-spark-using-the-polaris-spark-client aria-label=Anchor>🔗</a></h3><p>The following CLI command can be used to start the Spark with connection to the deployed Polaris service using
-a released Polaris Spark client.</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 1</span><span>bin/spark-shell <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span>--packages <polaris-spark-client-package>,org.apache.iceberg:iceberg-aws-bundle:1.10.0,io.delta:delta-spark_2.12:3.3.1 <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span>--conf spark.sql.extensions<span style=color:#ce5c00;font-weight:700>=</span>org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions,io.delta.sql.DeltaSparkSessionExtension <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span>--conf spark.sql.catalog.spark_catalog<span style=color:#ce5c00;font-weight:700>=</span>org.apache.spark.sql.delta.catalog.DeltaCatalog <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span>--conf spark.sql.catalog.<spark-catalog-name>.warehouse<span style=color:#ce5c00;font-weight:700>=</span><polaris-catalog-name> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span>--conf spark.sql.catalog.<spark-catalog-name>.header.X-Iceberg-Access-Delegation<span style=color:#ce5c00;font-weight:700>=</span>vended-credentials <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span>--conf spark.sql.catalog.<spark-catalog-name><span style=color:#ce5c00;font-weight:700>=</span>org.apache.polaris.spark.SparkCatalog <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span>--conf spark.sql.catalog.<spark-catalog-name>.uri<span style=color:#ce5c00;font-weight:700>=</span><polaris-service-uri> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span>--conf spark.sql.catalog.<spark-catalog-name>.credential<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>'<client-id>:<client-secret>'</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">10</span><span>--conf spark.sql.catalog.<spark-catalog-name>.scope<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>'PRINCIPAL_ROLE:ALL'</span> <span style=color:#4e9a06>\
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">11</span><span>--conf spark.sql.catalog.<spark-catalog-name>.token-refresh-enabled<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#204a87>true</span>
+a released Polaris Spark client.</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-shell data-lang=shell><span style=display:flex><span>bin/spark-shell <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span>--packages <polaris-spark-client-package>,org.apache.iceberg:iceberg-aws-bundle:1.10.0,io.delta:delta-spark_2.12:3.3.1 <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span>--conf spark.sql.extensions<span style=color:#ce5c00;font-weight:700>=</span>org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions,io.delta.sql.DeltaSparkSessionExtension <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span>--conf spark.sql.catalog.spark_catalog<span style=color:#ce5c00;font-weight:700>=</span>org.apache.spark.sql.delta.catalog.DeltaCatalog <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span>--conf spark.sql.catalog.<spark-catalog-name>.warehouse<span style=color:#ce5c00;font-weight:700>=</span><polaris-catalog-name> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span>--conf spark.sql.catalog.<spark-catalog-name>.header.X-Iceberg-Access-Delegation<span style=color:#ce5c00;font-weight:700>=</span>vended-credentials <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span>--conf spark.sql.catalog.<spark-catalog-name><span style=color:#ce5c00;font-weight:700>=</span>org.apache.polaris.spark.SparkCatalog <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span>--conf spark.sql.catalog.<spark-catalog-name>.uri<span style=color:#ce5c00;font-weight:700>=</span><polaris-service-uri> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span>--conf spark.sql.catalog.<spark-catalog-name>.credential<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>'<client-id>:<client-secret>'</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span>--conf spark.sql.catalog.<spark-catalog-name>.scope<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>'PRINCIPAL_ROLE:ALL'</span> <span style=color:#4e9a06>\
+</span></span></span><span style=display:flex><span>--conf spark.sql.catalog.<spark-catalog-name>.token-refresh-enabled<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#204a87>true</span>
</span></span></code></pre></div><p>Assume the released Polaris Spark client you want to use is <code>org.apache.polaris:polaris-spark-3.5_2.12:1.0.0</code>,
replace the <code>polaris-spark-client-package</code> field with the release.</p><p>The <code>spark-catalog-name</code> is the catalog name you will use with Spark, and <code>polaris-catalog-name</code> is the catalog name used
by Polaris service, for simplicity, you can use the same name.</p><p>Replace the <code>polaris-service-uri</code> with the uri of the deployed Polaris service. For example, with a locally deployed
Polaris service, the uri would be <code>http://localhost:8181/api/catalog</code>.</p><p>For <code>client-id</code> and <code>client-secret</code> values, you can refer to <a href=https://polaris.apache.org/in-dev/unreleased/getting-started/using-polaris/>Using Polaris</a>
-for more details.</p><p>You can also start the connection by programmatically initialize a SparkSession, following is an example with PySpark:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-python data-lang=python><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 1</span><span><sp [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span><span style=color:#000>spark</span> <span style=color:#ce5c00;font-weight:700>=</span> <span style=color:#000>SparkSession</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>builder</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span> <span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>config</span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>"spark.jars.packages"</span><span style=color:#000;font-weight:700>,</span> <span style=color:#4e9a06>"<polaris-spark-client-package>,org.ap [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span> <span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>config</span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>"spark.sql.catalog.spark_catalog"</span><span style=color:#000;font-weight:700>,</span> <span style=color:#4e9a06>"org.apache.spark.sql.delta.cata [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span> <span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>config</span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>"spark.sql.extensions"</span><span style=color:#000;font-weight:700>,</span> <span style=color:#4e9a06>"org.apache.iceberg.spark.extensions.Iceber [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span> <span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>config</span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>"spark.sql.catalog.<spark-catalog-name>"</span><span style=color:#000;font-weight:700>,</span> <span style=color:#4e9a06>"org.apache.polaris [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span> <span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>config</span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>"spark.sql.catalog.<spark-catalog-name>.uri"</span><span style=color:#000;font-weight:700>,</span> <span style=color:#ce5c00;font-weight:700>< [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span> <span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>config</span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>"spark.sql.catalog.<spark-catalog-name>.token-refresh-enabled"</span><span style=color:#000;font-weight:700>,</span> <span style=color:#4e9a06>& [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">10</span><span> <span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>config</span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>"spark.sql.catalog.<spark-catalog-name>.credential"</span><span style=color:#000;font-weight:700>,</span> <span style=color:#4e9a06>"<cli [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">11</span><span> <span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>config</span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>"spark.sql.catalog.<spark-catalog-name>.warehouse"</span><span style=color:#000;font-weight:700>,</span> <span style=color:#ce5c00;font-weight:7 [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">12</span><span> <span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>config</span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>"spark.sql.catalog.polaris.scope"</span><span style=color:#000;font-weight:700>,</span> <span style=color:#4e9a06>'PRINCIPAL_ROLE:ALL'</span>< [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">13</span><span> <span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>config</span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>"spark.sql.catalog.polaris.header.X-Iceberg-Access-Delegation"</span><span style=color:#000;font-weight:700>,</span> <span style=color:#4e9a06>'ve [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">14</span><span> <span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>getOrCreate</span><span style=color:#000;font-weight:700>()</span>
-</span></span></code></pre></div><p>Similar as the CLI command, make sure the corresponding fields are replaced correctly.</p><h3 id=create-tables-with-spark id=create-tables-with-spark>Create tables with Spark<a class=heading-anchor href=#create-tables-with-spark aria-label=Anchor>🔗</a></h3><p>After Spark is started, you can use it to create and access Iceberg and Delta tables. For example:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-siz [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#000>spark</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>sql</span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>"CREATE NAMESPACE IF NOT EXISTS DELTA_NS"</span><span style=color:#000;font-weight:700>)</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span><span style=color:#000>spark</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>sql</span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>"CREATE NAMESPACE IF NOT EXISTS DELTA_NS.PUBLIC"</span><span style=color:#000;font-weight:700>)</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span><span style=color:#000>spark</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>sql</span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>"USE NAMESPACE DELTA_NS.PUBLIC"</span><span style=color:#000;font-weight:700>)</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span><span style=color:#000>spark</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>sql</span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>"""CREATE TABLE IF NOT EXISTS PEOPLE (
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">6</span><span><span style=color:#4e9a06> id int, name string)
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">7</span><span><span style=color:#4e9a06>USING delta LOCATION 'file:///tmp/var/delta_tables/people';
-</span></span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">8</span><span><span style=color:#4e9a06>"""</span><span style=color:#000;font-weight:700>)</span>
+for more details.</p><p>You can also start the connection by programmatically initialize a SparkSession, following is an example with PySpark:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-python data-lang=python><span style=display:flex><span><span style=color:#204a87;font-weight:700>from</span> <span style=color:#000>pyspark.sql</span> <span style=color:#204a87;font-weig [...]
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span><span style=color:#000>spark</span> <span style=color:#ce5c00;font-weight:700>=</span> <span style=color:#000>SparkSession</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>builder</span>
+</span></span><span style=display:flex><span> <span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>config</span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>"spark.jars.packages"</span><span style=color:#000;font-weight:700>,</span> <span style=color:#4e9a06>"<polaris-spark-client-package>,org.apache.iceberg:iceberg-aws-bundle:1.10.0,io.delta:delta-spark_2.12:3.3.1"</span><span style=color:#000;font-weight:700>)</span>
+</span></span><span style=display:flex><span> <span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>config</span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>"spark.sql.catalog.spark_catalog"</span><span style=color:#000;font-weight:700>,</span> <span style=color:#4e9a06>"org.apache.spark.sql.delta.catalog.DeltaCatalog"</span><span style=color:#000;font-weight:700>)</span>
+</span></span><span style=display:flex><span> <span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>config</span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>"spark.sql.extensions"</span><span style=color:#000;font-weight:700>,</span> <span style=color:#4e9a06>"org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions,io.delta.sql.DeltaSparkSessionExtension"</span><span style=color:#000;font-weight:700>)</span>
+</span></span><span style=display:flex><span> <span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>config</span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>"spark.sql.catalog.<spark-catalog-name>"</span><span style=color:#000;font-weight:700>,</span> <span style=color:#4e9a06>"org.apache.polaris.spark.SparkCatalog"</span><span style=color:#000;font-weight:700>)</span>
+</span></span><span style=display:flex><span> <span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>config</span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>"spark.sql.catalog.<spark-catalog-name>.uri"</span><span style=color:#000;font-weight:700>,</span> <span style=color:#ce5c00;font-weight:700><</span><span style=color:#000>polaris</span><span style=color:#ce5c00;font-weight:700>-</span><span style=color:#000>service</s [...]
+</span></span><span style=display:flex><span> <span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>config</span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>"spark.sql.catalog.<spark-catalog-name>.token-refresh-enabled"</span><span style=color:#000;font-weight:700>,</span> <span style=color:#4e9a06>"true"</span><span style=color:#000;font-weight:700>)</span>
+</span></span><span style=display:flex><span> <span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>config</span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>"spark.sql.catalog.<spark-catalog-name>.credential"</span><span style=color:#000;font-weight:700>,</span> <span style=color:#4e9a06>"<client-id>:<client_secret>"</span><span style=color:#000;font-weight:700>)</span>
+</span></span><span style=display:flex><span> <span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>config</span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>"spark.sql.catalog.<spark-catalog-name>.warehouse"</span><span style=color:#000;font-weight:700>,</span> <span style=color:#ce5c00;font-weight:700><</span><span style=color:#000>polaris_catalog_name</span><span style=color:#ce5c00;font-weight:700>></span><span style [...]
+</span></span><span style=display:flex><span> <span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>config</span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>"spark.sql.catalog.polaris.scope"</span><span style=color:#000;font-weight:700>,</span> <span style=color:#4e9a06>'PRINCIPAL_ROLE:ALL'</span><span style=color:#000;font-weight:700>)</span>
+</span></span><span style=display:flex><span> <span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>config</span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>"spark.sql.catalog.polaris.header.X-Iceberg-Access-Delegation"</span><span style=color:#000;font-weight:700>,</span> <span style=color:#4e9a06>'vended-credentials'</span><span style=color:#000;font-weight:700>)</span>
+</span></span><span style=display:flex><span> <span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>getOrCreate</span><span style=color:#000;font-weight:700>()</span>
+</span></span></code></pre></div><p>Similar as the CLI command, make sure the corresponding fields are replaced correctly.</p><h3 id=create-tables-with-spark id=create-tables-with-spark>Create tables with Spark<a class=heading-anchor href=#create-tables-with-spark aria-label=Anchor>🔗</a></h3><p>After Spark is started, you can use it to create and access Iceberg and Delta tables. For example:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-siz [...]
+</span></span><span style=display:flex><span><span style=color:#000>spark</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>sql</span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>"CREATE NAMESPACE IF NOT EXISTS DELTA_NS"</span><span style=color:#000;font-weight:700>)</span>
+</span></span><span style=display:flex><span><span style=color:#000>spark</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>sql</span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>"CREATE NAMESPACE IF NOT EXISTS DELTA_NS.PUBLIC"</span><span style=color:#000;font-weight:700>)</span>
+</span></span><span style=display:flex><span><span style=color:#000>spark</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>sql</span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>"USE NAMESPACE DELTA_NS.PUBLIC"</span><span style=color:#000;font-weight:700>)</span>
+</span></span><span style=display:flex><span><span style=color:#000>spark</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#000>sql</span><span style=color:#000;font-weight:700>(</span><span style=color:#4e9a06>"""CREATE TABLE IF NOT EXISTS PEOPLE (
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06> id int, name string)
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06>USING delta LOCATION 'file:///tmp/var/delta_tables/people';
+</span></span></span><span style=display:flex><span><span style=color:#4e9a06>"""</span><span style=color:#000;font-weight:700>)</span>
</span></span></code></pre></div><h2 id=connecting-with-spark-using-local-polaris-spark-client-jar id=connecting-with-spark-using-local-polaris-spark-client-jar>Connecting with Spark using local Polaris Spark client jar<a class=heading-anchor href=#connecting-with-spark-using-local-polaris-spark-client-jar aria-label=Anchor>🔗</a></h2><p>If you would like to use a version of the Spark client that is currently not yet released, you can
build a Spark client jar locally from source. Please check out the Polaris repo and refer to the Spark plugin
<a href=https://github.com/apache/polaris/blob/main/plugins/spark/README.md>README</a> for detailed instructions.</p><h2 id=current-limitations id=current-limitations>Current Limitations<a class=heading-anchor href=#current-limitations aria-label=Anchor>🔗</a></h2><p>The following describes the current limitations of the Polaris Spark client:</p><h3 id=general-limitations id=general-limitations>General Limitations<a class=heading-anchor href=#general-limitations aria-label=Anchor>🔗</a></h [...]
diff --git a/in-dev/unreleased/policy/index.html b/in-dev/unreleased/policy/index.html
index 1894f4e1e3..bd388972e8 100644
--- a/in-dev/unreleased/policy/index.html
+++ b/in-dev/unreleased/policy/index.html
@@ -4,9 +4,9 @@ Create and manage policies Attach policies to specific resources (catalogs, name
With the policy API, you can:
Create and manage policies Attach policies to specific resources (catalogs, namespaces, tables, or views) Check applicable policies for any given resource What is a Policy?🔗 A policy in Apache Polaris is a structured entity that defines rules governing actions on specified resources under predefined conditions. Each policy contains:"><meta property="og:locale" content="en_us"><meta property="og:type" content="article"><meta property="article:section" content="in-dev"><meta itemprop=name [...]
With the policy API, you can:
-Create and manage policies Attach policies to specific resources (catalogs, namespaces, tables, or views) Check applicable policies for any given resource What is a Policy?🔗 A policy in Apache Polaris is a structured entity that defines rules governing actions on specified resources under predefined conditions. Each policy contains:"><meta itemprop=wordCount content="690"><meta name=twitter:card content="summary"><meta name=twitter:title content="Policy"><meta name=twitter:description co [...]
+Create and manage policies Attach policies to specific resources (catalogs, namespaces, tables, or views) Check applicable policies for any given resource What is a Policy?🔗 A policy in Apache Polaris is a structured entity that defines rules governing actions on specified resources under predefined conditions. Each policy contains:"><meta itemprop=wordCount content="640"><meta name=twitter:card content="summary"><meta name=twitter:title content="Policy"><meta name=twitter:description co [...]
With the policy API, you can:
-Create and manage policies Attach policies to specific resources (catalogs, namespaces, tables, or views) Check applicable policies for any given resource What is a Policy?🔗 A policy in Apache Polaris is a structured entity that defines rules governing actions on specified resources under predefined conditions. Each policy contains:"><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2 [...]
+Create and manage policies Attach policies to specific resources (catalogs, namespaces, tables, or views) Check applicable policies for any given resource What is a Policy?🔗 A policy in Apache Polaris is a structured entity that defines rules governing actions on specified resources under predefined conditions. Each policy contains:"><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2 [...]
<label for=m-in-devunreleased-check><a href=/in-dev/unreleased/ title="Apache Polaris Documentation (Unreleased)" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleased><span>Unreleased</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-in-devunreleasedgetting-started-li><input type=checkbox id=m-in-devunreleasedgetting-started-check>
<label for=m-in-devunreleasedgetting-started-check><a href=/in-dev/unreleased/getting-started/ title="Getting Started with Apache Polaris" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleasedgetting-started><span>Getting Started</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedquick-start-li><input type=checkbox id=m-in-devunreleasedgetting-star [...]
<label for=m-in-devunreleasedgetting-startedquick-start-check><a href=/in-dev/unreleased/getting-started/quick-start/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-in-devunreleasedgetting-startedquick-start><span>Quickstart</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedsetup-tools-li><input type=checkbox id=m-in-devunreleasedgetting-startedsetup-tools-check>
@@ -85,69 +85,69 @@ For more details, please refer to the <a href=https://github.com/apache/polaris/
Iceberg Iceberg Generic
Table View Table
</code></pre><p>Policies can be attached at any level, and inheritance flows from catalog down to namespace, then to tables and views.</p><p>Policies can be inheritable or non-inheritable:</p><ul><li><strong>Inheritable policies</strong>: Apply to the target resource and all its applicable child resources</li><li><strong>Non-inheritable policies</strong>: Apply only to the specific target resource</li></ul><p>The inheritance follows an override mechanism:</p><ol><li>Table-level policies [...]
-<strong>only one instance of a given policy type can be attached to (and therefore affect) a resource</strong>.</div><h2 id=working-with-policies id=working-with-policies>Working with Policies<a class=heading-anchor href=#working-with-policies aria-label=Anchor>🔗</a></h2><h3 id=creating-a-policy id=creating-a-policy>Creating a Policy<a class=heading-anchor href=#creating-a-policy aria-label=Anchor>🔗</a></h3><p>To create a policy, you need to provide a name, type, and optionally a descrip [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#000;font-weight:700>{</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> <span style=color:#204a87;font-weight:700>"name"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"compaction-policy"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> <span style=color:#204a87;font-weight:700>"type"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"system.data-compaction"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span> <span style=color:#204a87;font-weight:700>"description"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"Policy for optimizing table storage"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">6</span><span> <span style=color:#204a87;font-weight:700>"content"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"{\"version\": \"2025-02-03\", \"enable\": true, \"config\": {\"target_file_size_bytes\": 134217728}}"</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">7</span><span><span style=color:#000;font-weight:700>}</span>
-</span></span></code></pre></div><p>The policy content is validated against a schema specific to its type. Here are a few policy content examples:</p><ul><li>Data Compaction Policy</li></ul><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-json data-lang=json><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding: [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> <span style=color:#204a87;font-weight:700>"version"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"2025-02-03"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> <span style=color:#204a87;font-weight:700>"enable"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#204a87;font-weight:700>true</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> <span style=color:#204a87;font-weight:700>"config"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span> <span style=color:#204a87;font-weight:700>"target_file_size_bytes"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#0000cf;font-weight:700>134217728</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">6</span><span> <span style=color:#204a87;font-weight:700>"compaction_strategy"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"bin-pack"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">7</span><span> <span style=color:#204a87;font-weight:700>"max-concurrent-file-group-rewrites"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#0000cf;font-weight:700>5</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">8</span><span> <span style=color:#000;font-weight:700>}</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">9</span><span><span style=color:#000;font-weight:700>}</span>
-</span></span></code></pre></div><ul><li>Orphan File Removal Policy</li></ul><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-json data-lang=json><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span><span style=color:#000;font-weight:700>{</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span> <span style=color:#204a87;font-weight:700>"version"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"2025-02-03"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> <span style=color:#204a87;font-weight:700>"enable"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#204a87;font-weight:700>true</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> <span style=color:#204a87;font-weight:700>"max_orphan_file_age_in_days"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#0000cf;font-weight:700>30</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span> <span style=color:#204a87;font-weight:700>"locations"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span><span style=color:#4e9a06>"s3://my-bucket/my-table-location"</span><span style=color:#000;font-weight:700>],</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">6</span><span> <span style=color:#204a87;font-weight:700>"config"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">7</span><span> <span style=color:#204a87;font-weight:700>"prefix_mismatch_mode"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"ignore"</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">8</span><span> <span style=color:#000;font-weight:700>}</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">9</span><span><span style=color:#000;font-weight:700>}</span>
-</span></span></code></pre></div><h3 id=attaching-policies-to-resources id=attaching-policies-to-resources>Attaching Policies to Resources<a class=heading-anchor href=#attaching-policies-to-resources aria-label=Anchor>🔗</a></h3><p>Policies can be attached to different resource levels:</p><ol><li><strong>Catalog level</strong>: Applies to the entire catalog</li><li><strong>Namespace level</strong>: Applies to a specific namespace</li><li><strong>Table-like level</strong>: Applies to indiv [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#000;font-weight:700>{</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span> <span style=color:#204a87;font-weight:700>"target"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">4</span><span> <span style=color:#204a87;font-weight:700>"type"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"table-like"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">5</span><span> <span style=color:#204a87;font-weight:700>"path"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span><span style=color:#4e9a06>"NS1"</span><span style=color:#000;font-weight:700>,</span> <span style=color:#4e9a06>"NS2"</span><span style=color: [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">6</span><span> <span style=color:#000;font-weight:700>}</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">7</span><span><span style=color:#000;font-weight:700>}</span>
+<strong>only one instance of a given policy type can be attached to (and therefore affect) a resource</strong>.</div><h2 id=working-with-policies id=working-with-policies>Working with Policies<a class=heading-anchor href=#working-with-policies aria-label=Anchor>🔗</a></h2><h3 id=creating-a-policy id=creating-a-policy>Creating a Policy<a class=heading-anchor href=#creating-a-policy aria-label=Anchor>🔗</a></h3><p>To create a policy, you need to provide a name, type, and optionally a descrip [...]
+</span></span><span style=display:flex><span><span style=color:#000;font-weight:700>{</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"name"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"compaction-policy"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"type"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"system.data-compaction"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"description"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"Policy for optimizing table storage"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"content"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"{\"version\": \"2025-02-03\", \"enable\": true, \"config\": {\"target_file_size_bytes\": 134217728}}"</span>
+</span></span><span style=display:flex><span><span style=color:#000;font-weight:700>}</span>
+</span></span></code></pre></div><p>The policy content is validated against a schema specific to its type. Here are a few policy content examples:</p><ul><li>Data Compaction Policy</li></ul><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-json data-lang=json><span style=display:flex><span><span style=color:#000;font-weight:700>{</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"version"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"2025-02-03"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"enable"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#204a87;font-weight:700>true</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"config"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"target_file_size_bytes"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#0000cf;font-weight:700>134217728</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"compaction_strategy"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"bin-pack"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"max-concurrent-file-group-rewrites"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#0000cf;font-weight:700>5</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>}</span>
+</span></span><span style=display:flex><span><span style=color:#000;font-weight:700>}</span>
+</span></span></code></pre></div><ul><li>Orphan File Removal Policy</li></ul><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-json data-lang=json><span style=display:flex><span><span style=color:#000;font-weight:700>{</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"version"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"2025-02-03"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"enable"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#204a87;font-weight:700>true</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"max_orphan_file_age_in_days"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#0000cf;font-weight:700>30</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"locations"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span><span style=color:#4e9a06>"s3://my-bucket/my-table-location"</span><span style=color:#000;font-weight:700>],</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"config"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"prefix_mismatch_mode"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"ignore"</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>}</span>
+</span></span><span style=display:flex><span><span style=color:#000;font-weight:700>}</span>
+</span></span></code></pre></div><h3 id=attaching-policies-to-resources id=attaching-policies-to-resources>Attaching Policies to Resources<a class=heading-anchor href=#attaching-policies-to-resources aria-label=Anchor>🔗</a></h3><p>Policies can be attached to different resource levels:</p><ol><li><strong>Catalog level</strong>: Applies to the entire catalog</li><li><strong>Namespace level</strong>: Applies to a specific namespace</li><li><strong>Table-like level</strong>: Applies to indiv [...]
+</span></span><span style=display:flex><span><span style=color:#000;font-weight:700>{</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"target"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"type"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"table-like"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"path"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span><span style=color:#4e9a06>"NS1"</span><span style=color:#000;font-weight:700>,</span> <span style=color:#4e9a06>"NS2"</span><span style=color:#000;font-weight:700>,</span> <span style=color:#4e9a06>"test_table_1"</span><span style=color:#000;font-weight:700>]</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>}</span>
+</span></span><span style=display:flex><span><span style=color:#000;font-weight:700>}</span>
</span></span></code></pre></div><p>For inheritable policies, only one policy of a given type can be attached to a resource. For non-inheritable policies,
multiple policies of the same type can be attached.</p><h3 id=retrieving-applicable-policies id=retrieving-applicable-policies>Retrieving Applicable Policies<a class=heading-anchor href=#retrieving-applicable-policies aria-label=Anchor>🔗</a></h3><p>A user can view applicable policies on a resource (e.g., table, namespace, or catalog) as long as they have
read permission on that resource.</p><p>Here is an example to find all policies that apply to a specific resource (including inherited policies):</p><pre tabindex=0><code>GET /polaris/v1/catalog/applicable-policies?namespace=finance%1Fquarterly&target-name=transactions
-</code></pre><p><strong>Sample response:</strong></p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-json data-lang=json><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 1</span><span><span style=color:#000;font-weight:700>{</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 2</span><span> <span style=color:#204a87;font-weight:700>"policies"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 3</span><span> <span style=color:#000;font-weight:700>{</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 4</span><span> <span style=color:#204a87;font-weight:700>"name"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"snapshot-expiry-policy"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 5</span><span> <span style=color:#204a87;font-weight:700>"type"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"system.snapshot-expiry"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 6</span><span> <span style=color:#204a87;font-weight:700>"appliedAt"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"namespace"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 7</span><span> <span style=color:#204a87;font-weight:700>"content"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 8</span><span> <span style=color:#204a87;font-weight:700>"version"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"2025-02-03"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f"> 9</span><span> <span style=color:#204a87;font-weight:700>"enable"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#204a87;font-weight:700>true</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">10</span><span> <span style=color:#204a87;font-weight:700>"config"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">11</span><span> <span style=color:#204a87;font-weight:700>"min_snapshot_to_keep"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#0000cf;font-weight:700>1</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">12</span><span> <span style=color:#204a87;font-weight:700>"max_snapshot_age_days"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#0000cf;font-weight:700>2</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">13</span><span> <span style=color:#204a87;font-weight:700>"max_ref_age_days"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#0000cf;font-weight:700>3</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">14</span><span> <span style=color:#000;font-weight:700>}</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">15</span><span> <span style=color:#000;font-weight:700>}</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">16</span><span> <span style=color:#000;font-weight:700>},</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">17</span><span> <span style=color:#000;font-weight:700>{</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">18</span><span> <span style=color:#204a87;font-weight:700>"name"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"compaction-policy"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">19</span><span> <span style=color:#204a87;font-weight:700>"type"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"system.data-compaction"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">20</span><span> <span style=color:#204a87;font-weight:700>"appliedAt"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"catalog"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">21</span><span> <span style=color:#204a87;font-weight:700>"content"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">22</span><span> <span style=color:#204a87;font-weight:700>"version"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"2025-02-03"</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">23</span><span> <span style=color:#204a87;font-weight:700>"enable"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#204a87;font-weight:700>true</span><span style=color:#000;font-weight:700>,</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">24</span><span> <span style=color:#204a87;font-weight:700>"config"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">25</span><span> <span style=color:#204a87;font-weight:700>"target_file_size_bytes"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#0000cf;font-weight:700>134217728</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">26</span><span> <span style=color:#000;font-weight:700>}</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">27</span><span> <span style=color:#000;font-weight:700>}</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">28</span><span> <span style=color:#000;font-weight:700>}</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">29</span><span> <span style=color:#000;font-weight:700>]</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">30</span><span><span style=color:#000;font-weight:700>}</span>
+</code></pre><p><strong>Sample response:</strong></p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-json data-lang=json><span style=display:flex><span><span style=color:#000;font-weight:700>{</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"policies"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>[</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>{</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"name"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"snapshot-expiry-policy"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"type"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"system.snapshot-expiry"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"appliedAt"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"namespace"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"content"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"version"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"2025-02-03"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"enable"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#204a87;font-weight:700>true</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"config"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"min_snapshot_to_keep"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#0000cf;font-weight:700>1</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"max_snapshot_age_days"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#0000cf;font-weight:700>2</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"max_ref_age_days"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#0000cf;font-weight:700>3</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>}</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>}</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>},</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>{</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"name"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"compaction-policy"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"type"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"system.data-compaction"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"appliedAt"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"catalog"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"content"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"version"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#4e9a06>"2025-02-03"</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"enable"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#204a87;font-weight:700>true</span><span style=color:#000;font-weight:700>,</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"config"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#000;font-weight:700>{</span>
+</span></span><span style=display:flex><span> <span style=color:#204a87;font-weight:700>"target_file_size_bytes"</span><span style=color:#000;font-weight:700>:</span> <span style=color:#0000cf;font-weight:700>134217728</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>}</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>}</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>}</span>
+</span></span><span style=display:flex><span> <span style=color:#000;font-weight:700>]</span>
+</span></span><span style=display:flex><span><span style=color:#000;font-weight:700>}</span>
</span></span></code></pre></div><h3 id=api-reference id=api-reference>API Reference<a class=heading-anchor href=#api-reference aria-label=Anchor>🔗</a></h3><p>For the complete and up-to-date API specification, see the <a href=https://github.com/apache/polaris/blob/main/spec/polaris-catalog-apis/policy-apis.yaml>policy-api.yaml</a>.</p></div></main></div></div><footer class="td-footer row d-print-none"><div class=container-fluid><div class="row mx-md-2"><div class="td-footer__left col-6 c [...]
\ No newline at end of file
diff --git a/in-dev/unreleased/realm/index.html b/in-dev/unreleased/realm/index.html
index bfa1284e3d..746bcee276 100644
--- a/in-dev/unreleased/realm/index.html
+++ b/in-dev/unreleased/realm/index.html
@@ -6,7 +6,7 @@ Key Characteristics🔗 Isolation: Each realm encapsulates its own set of resour
What is it?🔗 A realm in Polaris serves as logical partitioning mechanism within the catalog system. This isolation allows for multitenancy, enabling different teams, environments or organizations to operate independently within the same Polaris deployment.
Key Characteristics🔗 Isolation: Each realm encapsulates its own set of resources, ensuring that operations, policies in one realm do not affect others."><meta itemprop=wordCount content="240"><meta name=twitter:card content="summary"><meta name=twitter:title content="Realm"><meta name=twitter:description content="This page explains what a realm is and what it is used for in Polaris.
What is it?🔗 A realm in Polaris serves as logical partitioning mechanism within the catalog system. This isolation allows for multitenancy, enabling different teams, environments or organizations to operate independently within the same Polaris deployment.
-Key Characteristics🔗 Isolation: Each realm encapsulates its own set of resources, ensuring that operations, policies in one realm do not affect others."><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css rel=stylesheet integrity="sha256-PXPPJ8EAm [...]
+Key Characteristics🔗 Isolation: Each realm encapsulates its own set of resources, ensuring that operations, policies in one realm do not affect others."><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLthCujKcJfi7Q=" crossorigin=anonymous><link href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css rel=stylesheet integrity="sha256-PXPPJ8EAm [...]
<label for=m-in-devunreleased-check><a href=/in-dev/unreleased/ title="Apache Polaris Documentation (Unreleased)" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleased><span>Unreleased</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-in-devunreleasedgetting-started-li><input type=checkbox id=m-in-devunreleasedgetting-started-check>
<label for=m-in-devunreleasedgetting-started-check><a href=/in-dev/unreleased/getting-started/ title="Getting Started with Apache Polaris" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleasedgetting-started><span>Getting Started</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedquick-start-li><input type=checkbox id=m-in-devunreleasedgetting-star [...]
<label for=m-in-devunreleasedgetting-startedquick-start-check><a href=/in-dev/unreleased/getting-started/quick-start/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-in-devunreleasedgetting-startedquick-start><span>Quickstart</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedsetup-tools-li><input type=checkbox id=m-in-devunreleasedgetting-startedsetup-tools-check>
diff --git a/in-dev/unreleased/telemetry/index.html b/in-dev/unreleased/telemetry/index.html
index 315cc8d8d5..d4dfc353de 100644
--- a/in-dev/unreleased/telemetry/index.html
+++ b/in-dev/unreleased/telemetry/index.html
@@ -6,7 +6,7 @@ Additional tags can be added to the metrics by setting the polaris.metrics.tags.
Metrics can be scraped by Prometheus or any compatible metrics scraping server. See: Prometheus for more information.
Additional tags can be added to the metrics by setting the polaris.metrics.tags.* property. Each tag is a key-value pair, where the key is the tag name and the value is the tag value. For example, to add a tag environment=prod to all metrics, set polaris.metrics.tags.environment=prod. Many tags can be added, such as below:"><meta itemprop=wordCount content="972"><meta name=twitter:card content="summary"><meta name=twitter:title content="Telemetry"><meta name=twitter:description content=" [...]
Metrics can be scraped by Prometheus or any compatible metrics scraping server. See: Prometheus for more information.
-Additional tags can be added to the metrics by setting the polaris.metrics.tags.* property. Each tag is a key-value pair, where the key is the tag name and the value is the tag value. For example, to add a tag environment=prod to all metrics, set polaris.metrics.tags.environment=prod. Many tags can be added, such as below:"><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLt [...]
+Additional tags can be added to the metrics by setting the polaris.metrics.tags.* property. Each tag is a key-value pair, where the key is the tag name and the value is the tag value. For example, to add a tag environment=prod to all metrics, set polaris.metrics.tags.environment=prod. Many tags can be added, such as below:"><link rel=preload href=/scss/main.min.3d73cf27c1009b1dc9bf1792c1f7914f6333aeb6c79e72ed842ba329c25f8bb4.css as=style integrity="sha256-PXPPJ8EAmx3JvxeSwfeRT2MzrrbHnnLt [...]
<label for=m-in-devunreleased-check><a href=/in-dev/unreleased/ title="Apache Polaris Documentation (Unreleased)" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleased><span>Unreleased</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-in-devunreleasedgetting-started-li><input type=checkbox id=m-in-devunreleasedgetting-started-check>
<label for=m-in-devunreleasedgetting-started-check><a href=/in-dev/unreleased/getting-started/ title="Getting Started with Apache Polaris" class="align-left ps-0 td-sidebar-link td-sidebar-link__section" id=m-in-devunreleasedgetting-started><span>Getting Started</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedquick-start-li><input type=checkbox id=m-in-devunreleasedgetting-star [...]
<label for=m-in-devunreleasedgetting-startedquick-start-check><a href=/in-dev/unreleased/getting-started/quick-start/ class="align-left ps-0 td-sidebar-link td-sidebar-link__page" id=m-in-devunreleasedgetting-startedquick-start><span>Quickstart</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-in-devunreleasedgetting-startedsetup-tools-li><input type=checkbox id=m-in-devunreleasedgetting-startedsetup-tools-check>
@@ -80,13 +80,13 @@ localhost, the metrics can be accessed via http://localhost:8182/q/metrics.</p><
<a href=https://prometheus.io>Prometheus</a> for more information.</p><p>Additional tags can be added to the metrics by setting the <code>polaris.metrics.tags.*</code> property. Each
tag is a key-value pair, where the key is the tag name and the value is the tag value. For example,
to add a tag <code>environment=prod</code> to all metrics, set <code>polaris.metrics.tags.environment=prod</code>. Many
-tags can be added, such as below:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-properties data-lang=properties><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span><span style=color:#c4a000>polaris.metrics.tags.service</span><span style=color:#ce5c00;font-weight:700>=< [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#c4a000>polaris.metrics.tags.environment</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>prod</span>
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">3</span><span><span style=color:#c4a000>polaris.metrics.tags.region</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>us-west-2</span>
+tags can be added, such as below:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-properties data-lang=properties><span style=display:flex><span><span style=color:#c4a000>polaris.metrics.tags.service</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>polaris</span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>polaris.metrics.tags.environment</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>prod</span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>polaris.metrics.tags.region</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>us-west-2</span>
</span></span></code></pre></div><p>Note that by default Polaris adds one tag: <code>application=Polaris</code>. You can override this tag by
setting the <code>polaris.metrics.tags.application=<new-value></code> property.</p><h3 id=realm-id-tag id=realm-id-tag>Realm ID Tag<a class=heading-anchor href=#realm-id-tag aria-label=Anchor>🔗</a></h3><p>Polaris can add the realm ID as a tag to all API and HTTP request metrics. This is disabled by
-default to prevent high cardinality issues, but can be enabled by setting the following properties:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-properties data-lang=properties><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span><span style=color:#c4a000>polaris.metri [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#c4a000>polaris.metrics.realm-id-tag.enable-in-http-metrics</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>true</span>
+default to prevent high cardinality issues, but can be enabled by setting the following properties:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-properties data-lang=properties><span style=display:flex><span><span style=color:#c4a000>polaris.metrics.realm-id-tag.enable-in-api-metrics</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>true</span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>polaris.metrics.realm-id-tag.enable-in-http-metrics</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>true</span>
</span></span></code></pre></div><p>You should be particularly careful when enabling the realm ID tag in HTTP request metrics, as these
metrics typically have a much higher cardinality than API request metrics.</p><p>In order to prevent the number of tags from growing indefinitely and causing performance issues or
crashing the server, the number of unique realm IDs in HTTP request metrics is limited to 100 by
@@ -100,9 +100,9 @@ and configure a valid collector endpoint URL with <code>http://</code> or <code>
and notably:</p><ul><li><code>service.name</code>: set to <code>Apache Polaris Server</code>;</li><li><code>service.version</code>: set to the Polaris version.</li></ul><p>You can override the default resource attributes or add additional ones by setting the
<code>quarkus.otel.resource.attributes</code> property.</p><p>This property expects a comma-separated list of key-value pairs, where the key is the attribute name
and the value is the attribute value. For example, to change the service name to <code>Polaris</code> and add
-an attribute <code>deployment.environment=dev</code>, set the following property:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-properties data-lang=properties><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span><span style=color:#c4a000>quarkus.otel.resource.attribute [...]
-</span></span></code></pre></div><p>The alternative syntax below can also be used:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-properties data-lang=properties><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span><span style=color:#c4a000>quarkus.otel.resource.attribut [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#c4a000>quarkus.otel.resource.attributes[1]</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>deployment.environment=dev</span>
+an attribute <code>deployment.environment=dev</code>, set the following property:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-properties data-lang=properties><span style=display:flex><span><span style=color:#c4a000>quarkus.otel.resource.attributes</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>service.name=Polaris,deployment.environment [...]
+</span></span></code></pre></div><p>The alternative syntax below can also be used:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-properties data-lang=properties><span style=display:flex><span><span style=color:#c4a000>quarkus.otel.resource.attributes[0]</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>service.name=Polaris</span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>quarkus.otel.resource.attributes[1]</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>deployment.environment=dev</span>
</span></span></code></pre></div><p>Finally, two additional span attributes are added to all request parent spans:</p><ul><li><code>polaris.request.id</code>: The unique identifier of the request, if set by the caller through the
<code>X-Request-ID</code> header.</li><li><code>polaris.realm</code>: The unique identifier of the realm. Always set (unless the request failed because
of a realm resolution error).</li></ul><h3 id=troubleshooting-traces id=troubleshooting-traces>Troubleshooting Traces<a class=heading-anchor href=#troubleshooting-traces aria-label=Anchor>🔗</a></h3><p>If the server is unable to publish traces, check first for a log warning message like the following:</p><pre tabindex=0><code>SEVERE [io.ope.exp.int.grp.OkHttpGrpcExporter] (OkHttp http://localhost:4317/...) Failed to export spans.
@@ -115,7 +115,7 @@ properties to <code>true</code>. By default, JSON logging is disabled.</p><p>The
is <code>INFO</code>. To set the log level for the entire application, use the <code>quarkus.log.level</code> property.</p><p>To set the log level for a specific package, use the <code>quarkus.log.category."package-name".level</code>,
where <code>package-name</code> is the name of the package. For example, the package <code>io.smallrye.config</code> has a
useful logger to help debugging configuration issues; but it needs to be set to the <code>DEBUG</code> level.
-This can be done by setting the following property:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-properties data-lang=properties><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span><span style=color:#c4a000>quarkus.log.category."io.smallrye.config".level</span [...]
+This can be done by setting the following property:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-properties data-lang=properties><span style=display:flex><span><span style=color:#c4a000>quarkus.log.category."io.smallrye.config".level</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>DEBUG</span>
</span></span></code></pre></div><p>The log message format for both console and file output is highly configurable. The default format
is:</p><pre tabindex=0><code>%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p [%c{3.}] [%X{requestId},%X{realmId}] [%X{traceId},%X{parentId},%X{spanId},%X{sampled}] (%t) %s%e%n
</code></pre><p>Refer to the <a href=https://quarkus.io/guides/logging#logging-format>Logging format</a> guide for more
@@ -128,6 +128,6 @@ originating from a traced context.</li><li><code>sampled</code>: Whether the tra
originating from a traced context.</li></ul><p>Other MDC keys can be added by setting the <code>polaris.log.mdc.*</code> property. Each property is a
key-value pair, where the key is the MDC key name and the value is the MDC key value. For example,
to add the MDC keys <code>environment=prod</code> and <code>region=us-west-2</code> to all log messages, set the following
-properties:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-properties data-lang=properties><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">1</span><span><span style=color:#c4a000>polaris.log.mdc.environment</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color [...]
-</span></span><span style=display:flex><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f">2</span><span><span style=color:#c4a000>polaris.log.mdc.region</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>us-west-2</span>
+properties:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none><code class=language-properties data-lang=properties><span style=display:flex><span><span style=color:#c4a000>polaris.log.mdc.environment</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>prod</span>
+</span></span><span style=display:flex><span><span style=color:#c4a000>polaris.log.mdc.region</span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#4e9a06>us-west-2</span>
</span></span></code></pre></div><p>MDC context is propagated across threads, including in <code>TaskExecutor</code> threads.</p><h2 id=links id=links>Links<a class=heading-anchor href=#links aria-label=Anchor>🔗</a></h2><p>Visit <a href=/in-dev/unreleased/getting-started/using-polaris/telemetry-tools/>Using Polaris with telemetry tools</a> to see sample Polaris config with Prometheus and Jaeger.</p></div></main></div></div><footer class="td-footer row d-print-none"><div class=container-f [...]
\ No newline at end of file
diff --git a/index.html b/index.html
index b75b10900a..95ce026f31 100644
--- a/index.html
+++ b/index.html
@@ -1 +1 @@
-<!doctype html><html itemscope itemtype=http://schema.org/WebPage lang=en class=no-js><head><meta name=generator content="Hugo 0.157.0"><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><link rel=alternate type=application/rss+xml href=https://polaris.apache.org/index.xml><meta name=robots content="index, follow"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon.png sizes=180 [...]
\ No newline at end of file
+<!doctype html><html itemscope itemtype=http://schema.org/WebPage lang=en class=no-js><head><meta name=generator content="Hugo 0.157.0"><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><link rel=alternate type=application/rss+xml href=https://polaris.apache.org/index.xml><meta name=robots content="index, follow"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon.png sizes=180 [...]
\ No newline at end of file
diff --git a/index.xml b/index.xml
index 62dcb87f85..2546272bd3 100644
--- a/index.xml
+++ b/index.xml
@@ -419,17 +419,17 @@ However, you can now instead grant privileges just for specific operations, such
from <code>symmetric.pem</code> to <code>symmetric.key</code>.</li>
<li>For migrations from 1.0.x to 1.1.x, users using JDBC persistence and wanting to continue using v1 schema, must ensure
that they, run following SQL statement under <code>POLARIS_SCHEMA</code> to make sure version table exists:
-<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-sql" data-lang="sql"><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 1</span><span><span style="color:#204a87;font-weight:bold">CREATE</span><span style="col [...]
-</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 2</span><span><span style="color:#f8f8f8"> </span><span style="color:#000">version_key</span><span style="color:#f8f8f8"> </span><span style="color:#204a87">TEXT</span><span style="color:#f8f8f8"> </span><spa [...]
-</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 3</span><span><span style="color:#f8f8f8"> </span><span style="color:#000">version_value</span><span style="color:#f8f8f8"> </span><span style="color:#204a87">INTEGER</span><span style="color:#f8f8f8"> </span>&l [...]
-</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 4</span><span><span style="color:#000;font-weight:bold">);</span><span style="color:#f8f8f8">
-</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 5</span><span><span style="color:#204a87;font-weight:bold">INSERT</span><span style="color:#f8f8f8"> </span><span style="color:#204a87;font-weight:bold">INTO</span><span style="color:#f8f8f8"> </span><span style="color:# [...]
-</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 6</span><span><span style="color:#f8f8f8"> </span><span style="color:#204a87;font-weight:bold">VALUES</span><span style="color:#f8f8f8"> </span><span style="color:#000;font-weight:bold">(</span><span style="color:#4e9a06 [...]
-</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 7</span><span><span style="color:#204a87;font-weight:bold">ON</span><span style="color:#f8f8f8"> </span><span style="color:#000">CONFLICT</span><span style="color:#f8f8f8"> </span><span style="color:#000;font-weight:bold [...]
-</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 8</span><span><span style="color:#f8f8f8"> </span><span style="color:#204a87;font-weight:bold">SET</span><span style="color:#f8f8f8"> </span><span style="color:#000">version_value</span><span style="color:#f8f8f8"> &l [...]
-</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 9</span><span><span style="color:#204a87;font-weight:bold">COMMENT</span><span style="color:#f8f8f8"> </span><span style="color:#204a87;font-weight:bold">ON</span><span style="color:#f8f8f8"> </span><span style="color:#2 [...]
-</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">10</span><span><span style="color:#f8f8f8">
-</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">11</span><span><span style="color:#204a87;font-weight:bold">ALTER</span><span style="color:#f8f8f8"> </span><span style="color:#204a87;font-weight:bold">TABLE</span><span style="color:#f8f8f8"> </span><span style="color:# [...]
+<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-sql" data-lang="sql"><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">CREATE</span><span style="color:#f8f8f8"> </span><span style="color:#204a87;font-weight:bold">TABLE</span><span style="color:#f8f8f8"> </span>< [...]
+</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8"> </span><span style="color:#000">version_key</span><span style="color:#f8f8f8"> </span><span style="color:#204a87">TEXT</span><span style="color:#f8f8f8"> </span><span style="color:#204a87;font-weight:bold">PRIMARY</span><span style="color:#f8f8f8"> </span><span style="color:#204a87;font-wei [...]
+</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8"> </span><span style="color:#000">version_value</span><span style="color:#f8f8f8"> </span><span style="color:#204a87">INTEGER</span><span style="color:#f8f8f8"> </span><span style="color:#204a87;font-weight:bold">NOT</span><span style="color:#f8f8f8"> </span><span style="color:#204a87;font-we [...]
+</span></span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">);</span><span style="color:#f8f8f8">
+</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">INSERT</span><span style="color:#f8f8f8"> </span><span style="color:#204a87;font-weight:bold">INTO</span><span style="color:#f8f8f8"> </span><span style="color:#204a87;font-weight:bold">version</span><span style="color:#f8f8f8"> </span><span style="color:#000;font-weight:bold">(</ [...]
+</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8"> </span><span style="color:#204a87;font-weight:bold">VALUES</span><span style="color:#f8f8f8"> </span><span style="color:#000;font-weight:bold">(</span><span style="color:#4e9a06">&#39;version&#39;</span><span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8"> </span& [...]
+</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">ON</span><span style="color:#f8f8f8"> </span><span style="color:#000">CONFLICT</span><span style="color:#f8f8f8"> </span><span style="color:#000;font-weight:bold">(</span><span style="color:#000">version_key</span><span style="color:#000;font-weight:bold">)</span><span style [...]
+</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8"> </span><span style="color:#204a87;font-weight:bold">SET</span><span style="color:#f8f8f8"> </span><span style="color:#000">version_value</span><span style="color:#f8f8f8"> </span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#f8f8f8"> </span><span style="color:#000 [...]
+</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">COMMENT</span><span style="color:#f8f8f8"> </span><span style="color:#204a87;font-weight:bold">ON</span><span style="color:#f8f8f8"> </span><span style="color:#204a87;font-weight:bold">TABLE</span><span style="color:#f8f8f8"> </span><span style="color:#204a87;font-weight:bold">versio [...]
+</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8">
+</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">ALTER</span><span style="color:#f8f8f8"> </span><span style="color:#204a87;font-weight:bold">TABLE</span><span style="color:#f8f8f8"> </span><span style="color:#000">polaris_schema</span><span style="color:#000;font-weight:bold">.</span><span style="color:#000">entities</span>& [...]
</span></span></span></code></pre></div><ul>
<li>Please don&rsquo;t enable <a href="https://github.com/apache/polaris/blob/740993963cb41c2c1b4638be5e04dd00f1263c98/polaris-core/src/main/java/org/apache/polaris/core/config/FeatureConfiguration.java#L346">OPTIMIZED_SIBLING_CHECK</a> feature configuration, once the above SQL statements are run. As it may lead to incorrect behavior, due to missing data for location_without_scheme column.</li>
</ul>
@@ -592,7 +592,7 @@ docker compose up
<h2 id="running-the-quickstart" id="running-the-quickstart">Running the Quickstart<a class="heading-anchor" href="#running-the-quickstart" aria-label="Anchor">🔗</a>
</h2>
<p>Run the following command:</p>
-<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1</span><span>curl -s https://raw.githubusercontent.com/apache/polaris/refs/heads/main/site/content/gu [...]
+<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>curl -s https://raw.githubusercontent.com/apache/polaris/refs/heads/main/site/content/guides/quickstart/docker-compose.yml <span style="color:#000;font-weight:bold">|</span> docker compose -p polaris-quickstart -f - up -d
</span></span></code></pre></div><p>This command will start Polaris + RustFS and automatically create:</p></description></item><item><title>Quickstart</title><link>https://polaris.apache.org/in-dev/unreleased/getting-started/quick-start/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://polaris.apache.org/in-dev/unreleased/getting-started/quick-start/</guid><description><p>Use the <strong><a href="https://polari [...]
<p>This setup is not intended for production use.</p></description></item><item><title>Quickstart</title><link>https://polaris.apache.org/releases/1.3.0/getting-started/quick-start/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://polaris.apache.org/releases/1.3.0/getting-started/quick-start/</guid><description><p>Use this guide to quickly start running Polaris. This is not intended for production use.</p>
<h2 id="prerequisites" id="prerequisites">Prerequisites<a class="heading-anchor" href="#prerequisites" aria-label="Anchor">🔗</a>
@@ -603,7 +603,7 @@ docker compose up
<h2 id="running" id="running">Running<a class="heading-anchor" href="#running" aria-label="Anchor">🔗</a>
</h2>
<p>Run the following command:</p>
-<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1</span><span>curl -s https://raw.githubusercontent.com/apache/polaris/main/site/content/guides/quicks [...]
+<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>curl -s https://raw.githubusercontent.com/apache/polaris/main/site/content/guides/quickstart/docker-compose.yml <span style="color:#000;font-weight:bold">|</span> docker compose -f - up
</span></span></code></pre></div><p>This command will:</p>
<ol>
<li>Create a Catalog named <code>quickstart_catalog</code> with MinIO-backed storage.</li>
@@ -618,7 +618,7 @@ docker compose up
<h2 id="running" id="running">Running<a class="heading-anchor" href="#running" aria-label="Anchor">🔗</a>
</h2>
<p>Run the following command:</p>
-<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1</span><span>curl -s https://raw.githubusercontent.com/apache/polaris/refs/heads/main/site/content/gu [...]
+<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>curl -s https://raw.githubusercontent.com/apache/polaris/refs/heads/main/site/content/guides/quickstart/docker-compose.yml <span style="color:#000;font-weight:bold">|</span> docker compose -f - up
</span></span></code></pre></div><p>This command will:</p>
<ol>
<li>Create a Catalog named <code>quickstart_catalog</code> with RustFS-backed storage.</li>
@@ -633,7 +633,7 @@ docker compose up
<h2 id="running" id="running">Running<a class="heading-anchor" href="#running" aria-label="Anchor">🔗</a>
</h2>
<p>Run the following command:</p>
-<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1</span><span>curl -s https://raw.githubusercontent.com/apache/polaris/refs/heads/main/site/content/gu [...]
+<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>curl -s https://raw.githubusercontent.com/apache/polaris/refs/heads/main/site/content/guides/quickstart/docker-compose.yml <span style="color:#000;font-weight:bold">|</span> docker compose -f - up
</span></span></code></pre></div><p>This command will:</p>
<ol>
<li>Create a Catalog named <code>quickstart_catalog</code> with RustFS-backed storage.</li>
... 28399 lines suppressed ...