This is an automated email from the ASF dual-hosted git repository.

honahx pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/polaris.git


The following commit(s) were added to refs/heads/main by this push:
     new b31120c8b Site: Add a page for policy management (#1600)
b31120c8b is described below

commit b31120c8b42dfc68a77108e72e6fdd3c45ad53f1
Author: Yufei Gu <[email protected]>
AuthorDate: Tue May 20 09:39:31 2025 -0700

    Site: Add a page for policy management (#1600)
---
 site/content/in-dev/unreleased/policy.md | 197 +++++++++++++++++++++++++++++++
 1 file changed, 197 insertions(+)

diff --git a/site/content/in-dev/unreleased/policy.md 
b/site/content/in-dev/unreleased/policy.md
new file mode 100644
index 000000000..3f4935388
--- /dev/null
+++ b/site/content/in-dev/unreleased/policy.md
@@ -0,0 +1,197 @@
+---
+#
+# 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
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+title: Policy
+type: docs
+weight: 425 
+---
+
+The Polaris Policy framework empowers organizations to centrally define, 
manage, and enforce fine-grained governance, lifecycle, and operational rules 
across all data resources in the catalog. 
+
+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:
+
+- **Name**: A unique identifier within a namespace
+- **Type**: Determines the semantics and expected format of the policy content
+- **Description**: Explains the purpose of the policy
+- **Content**: Contains the actual rules defining the policy behavior
+- **Version**: An automatically tracked revision number
+- **Inheritable**: Whether the policy can be inherited by child resources, 
decided by its type
+
+### Policy Types
+
+Polaris supports several predefined system policy types (prefixed with 
`system.`):
+
+| Policy Type | Purpose                                               | 
JSON-Schema | Applies To |
+|-------------|-------------------------------------------------------|-------------|------------|
+| **`system.data-compaction`** | Defines rules for data file compaction 
operations     | 
[`data-compaction/2025-02-03.json`](https://polaris.apache.org/schemas/policies/system/data-compaction/2025-02-03.json)
 | Iceberg **table**, **namespace**, **catalog** |
+| **`system.metadata-compaction`** | Defines rules for metadata file 
compaction operations | 
[`metadata-compaction/2025-02-03.json`](https://polaris.apache.org/schemas/policies/system/metadata-compaction/2025-02-03.json)
 | Iceberg **table**, **namespace**, **catalog** |
+| **`system.orphan-file-removal`** | Defines rules for removing orphaned files 
            | 
[`orphan-file-removal/2025-02-03.json`](https://polaris.apache.org/schemas/policies/system/orphan-file-removal/2025-02-03.json)
 | Iceberg **table**, **namespace**, **catalog** |
+| **`system.snapshot-expiry`** | Defines rules for snapshot expiration         
        | 
[`snapshot-expiry/2025-02-03.json`](https://polaris.apache.org/schemas/policies/system/snapshot-expiry/2025-02-03.json)
 | Iceberg **table**, **namespace**, **catalog** |
+
+Support for additional predefined system policy types and custom policy type 
definitions is in progress.
+For more details, please refer to the 
[roadmap](https://github.com/apache/polaris/discussions/1028).
+
+### Policy Inheritance
+
+The entity hierarchy in Polaris is structured as follows:
+
+```
+            Catalog
+               |
+           Namespace
+               |
+   +-----------+----------+
+   |           |          |
+Iceberg     Iceberg     Generic
+ Table       View        Table
+```
+
+Policies can be attached at any level, and inheritance flows from catalog down 
to namespace, then to tables and views.
+
+Policies can be inheritable or non-inheritable:
+
+- **Inheritable policies**: Apply to the target resource and all its 
applicable child resources
+- **Non-inheritable policies**: Apply only to the specific target resource
+
+The inheritance follows an override mechanism:
+1. Table-level policies override namespace and catalog policies
+2. Namespace-level policies override parent namespace and catalog policies
+
+> **Important:** Because an override completely replaces the same policy type 
at higher levels, 
+> **only one instance of a given policy type can be attached to (and therefore 
affect) a resource**.
+
+## Working with Policies
+
+### Creating a Policy
+
+To create a policy, you need to provide a name, type, and optionally a 
description and content:
+
+```json
+POST /polaris/v1/{prefix}/namespaces/{namespace}/policies
+{
+  "name": "compaction-policy",
+  "type": "system.data-compaction",
+  "description": "Policy for optimizing table storage",
+  "content": "{\"version\": \"2025-02-03\", \"enable\": true, \"config\": 
{\"target_file_size_bytes\": 134217728}}"
+}
+```
+
+The policy content is validated against a schema specific to its type. Here 
are a few policy content examples:
+- Data Compaction Policy
+```json
+{
+  "version": "2025-02-03",
+  "enable": true,
+  "config": {
+    "target_file_size_bytes": 134217728,
+    "compaction_strategy": "bin-pack",
+    "max-concurrent-file-group-rewrites": 5
+  }
+}
+```
+- Orphan File Removal Policy
+```json
+{
+  "version": "2025-02-03",
+  "enable": true,
+  "max_orphan_file_age_in_days": 30,
+  "locations": ["s3://my-bucket/my-table-location"],
+  "config": {
+    "prefix_mismatch_mode": "ignore"
+  }
+}
+```
+
+### Attaching Policies to Resources
+
+Policies can be attached to different resource levels:
+
+1. **Catalog level**: Applies to the entire catalog
+2. **Namespace level**: Applies to a specific namespace
+3. **Table-like level**: Applies to individual tables or views
+
+Example of attaching a policy to a table:
+
+```json
+PUT /polaris/v1/{prefix}/namespaces/{namespace}/policies/{policy-name}/mappings
+{
+  "target": {
+    "type": "table-like",
+    "path": ["NS1", "NS2", "test_table_1"]
+  }
+}
+```
+
+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.
+
+### Retrieving Applicable Policies
+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.
+
+Here is an example to find all policies that apply to a specific resource 
(including inherited policies):
+```
+GET 
/polaris/v1/catalog/applicable-policies?namespace=finance%1Fquarterly&target-name=transactions
+```
+
+**Sample response:**
+```json
+{
+  "policies": [
+    {
+      "name": "snapshot-expiry-policy",
+      "type": "system.snapshot-expiry",
+      "appliedAt": "namespace",
+      "content": {
+        "version": "2025-02-03",
+        "enable": true,
+        "config": {
+          "min_snapshot_to_keep": 1,
+          "max_snapshot_age_days": 2,
+          "max_ref_age_days": 3
+        }
+      }
+    },
+    {
+      "name": "compaction-policy",
+      "type": "system.data-compaction",
+      "appliedAt": "catalog",
+      "content": {
+        "version": "2025-02-03",
+        "enable": true,
+        "config": {
+          "target_file_size_bytes": 134217728
+        }
+      }
+    }
+  ]
+}
+```
+
+### API Reference
+
+For the complete and up-to-date API specification, see the 
[policy-api.yaml](https://github.com/apache/polaris/blob/main/spec/polaris-catalog-apis/policy-apis.yaml).
\ No newline at end of file

Reply via email to