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

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


The following commit(s) were added to refs/heads/main by this push:
     new 17d69ff3f [lake/lance] Throw exception for create primary key table 
when datalake.format = lance (#1444)
17d69ff3f is described below

commit 17d69ff3fbbac14f1df16c1a62559d2acc334512
Author: naivedogger <[email protected]>
AuthorDate: Wed Aug 13 09:36:35 2025 +0800

    [lake/lance] Throw exception for create primary key table when 
datalake.format = lance (#1444)
---
 .../alibaba/fluss/lake/lance/LanceLakeCatalog.java |  7 +++++++
 .../lake/lance/LakeEnabledTableCreateITCase.java   | 22 ++++++++++++++++++++++
 2 files changed, 29 insertions(+)

diff --git 
a/fluss-lake/fluss-lake-lance/src/main/java/com/alibaba/fluss/lake/lance/LanceLakeCatalog.java
 
b/fluss-lake/fluss-lake-lance/src/main/java/com/alibaba/fluss/lake/lance/LanceLakeCatalog.java
index daaf26eb2..827c9582d 100644
--- 
a/fluss-lake/fluss-lake-lance/src/main/java/com/alibaba/fluss/lake/lance/LanceLakeCatalog.java
+++ 
b/fluss-lake/fluss-lake-lance/src/main/java/com/alibaba/fluss/lake/lance/LanceLakeCatalog.java
@@ -18,6 +18,7 @@
 package com.alibaba.fluss.lake.lance;
 
 import com.alibaba.fluss.config.Configuration;
+import com.alibaba.fluss.exception.InvalidTableException;
 import com.alibaba.fluss.lake.lakestorage.LakeCatalog;
 import com.alibaba.fluss.lake.lance.utils.LanceArrowUtils;
 import com.alibaba.fluss.lake.lance.utils.LanceDatasetAdapter;
@@ -58,6 +59,12 @@ public class LanceLakeCatalog implements LakeCatalog {
 
     @Override
     public void createTable(TablePath tablePath, TableDescriptor 
tableDescriptor) {
+        // currently, we don't support primary key table for lance
+        if (tableDescriptor.hasPrimaryKey()) {
+            throw new InvalidTableException(
+                    "Currently, we don't support tiering a primary key table 
to Lance");
+        }
+
         LanceConfig config =
                 LanceConfig.from(
                         options.toMap(), tablePath.getDatabaseName(), 
tablePath.getTableName());
diff --git 
a/fluss-lake/fluss-lake-lance/src/test/java/com/alibaba/fluss/lake/lance/LakeEnabledTableCreateITCase.java
 
b/fluss-lake/fluss-lake-lance/src/test/java/com/alibaba/fluss/lake/lance/LakeEnabledTableCreateITCase.java
index e0c16e30d..1b071e867 100644
--- 
a/fluss-lake/fluss-lake-lance/src/test/java/com/alibaba/fluss/lake/lance/LakeEnabledTableCreateITCase.java
+++ 
b/fluss-lake/fluss-lake-lance/src/test/java/com/alibaba/fluss/lake/lance/LakeEnabledTableCreateITCase.java
@@ -23,6 +23,7 @@ import com.alibaba.fluss.client.admin.Admin;
 import com.alibaba.fluss.config.ConfigOptions;
 import com.alibaba.fluss.config.Configuration;
 import com.alibaba.fluss.exception.FlussRuntimeException;
+import com.alibaba.fluss.exception.InvalidTableException;
 import com.alibaba.fluss.lake.lance.utils.LanceDatasetAdapter;
 import com.alibaba.fluss.metadata.DataLakeFormat;
 import com.alibaba.fluss.metadata.Schema;
@@ -49,6 +50,7 @@ import static 
com.alibaba.fluss.metadata.TableDescriptor.BUCKET_COLUMN_NAME;
 import static com.alibaba.fluss.metadata.TableDescriptor.OFFSET_COLUMN_NAME;
 import static com.alibaba.fluss.metadata.TableDescriptor.TIMESTAMP_COLUMN_NAME;
 import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
 
 /** ITCase for create lake enabled table with lance as lake storage. */
 class LakeEnabledTableCreateITCase {
@@ -201,4 +203,24 @@ class LakeEnabledTableCreateITCase {
                                 logC18, logC19));
         
assertThat(expectedSchema).isEqualTo(LanceDatasetAdapter.getSchema(config).get());
     }
+
+    @Test
+    void testPrimaryKeyTable() throws Exception {
+        TableDescriptor pkTable =
+                TableDescriptor.builder()
+                        .schema(
+                                Schema.newBuilder()
+                                        .column("pk_c1", DataTypes.INT())
+                                        .column("pk_c2", DataTypes.STRING())
+                                        .primaryKey("pk_c1")
+                                        .build())
+                        .distributedBy(BUCKET_NUM)
+                        .property(ConfigOptions.TABLE_DATALAKE_ENABLED, true)
+                        .build();
+        TablePath pkTablePath = TablePath.of(DATABASE, "pk_table");
+        assertThatThrownBy(() -> admin.createTable(pkTablePath, pkTable, 
false).get())
+                .cause()
+                .isInstanceOf(InvalidTableException.class)
+                .hasMessage("Currently, we don't support tiering a primary key 
table to Lance");
+    }
 }

Reply via email to