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");
+ }
}