This is an automated email from the ASF dual-hosted git repository.
mchades pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/gravitino.git
The following commit(s) were added to refs/heads/main by this push:
new 4f7ac0794 [#5691] fix(doris-catalog): Fix errors in type mapping about
timestamp in Doris catalog. (#5693)
4f7ac0794 is described below
commit 4f7ac0794dc53a49f3e0c8306264fa88fbb10c68
Author: Qi Yu <[email protected]>
AuthorDate: Thu Nov 28 21:40:24 2024 +0800
[#5691] fix(doris-catalog): Fix errors in type mapping about timestamp in
Doris catalog. (#5693)
### What changes were proposed in this pull request?
When loading table with datetime column from Doris table, we should
convert it to Gravitno timestamp without timezone NOT
timestamp_tz(timestamp with timezone)
### Why are the changes needed?
According to docs
1.
https://gravitino.apache.org/docs/0.7.0-incubating/jdbc-doris-catalog#table-column-types
2.
https://doris.apache.org/docs/1.2/sql-manual/sql-reference/Data-Definition-Statements/Create/CREATE-TABLE
it's a bug when converting Gravitino timestamp type to Doris datetime
type.
Fix: #5691
### Does this PR introduce _any_ user-facing change?
N/A
### How was this patch tested?
UT & IT
---
.../doris/converter/DorisTypeConverter.java | 2 +-
.../doris/integration/test/CatalogDorisIT.java | 37 ++++++++++++++++++++++
.../doris/operation/TestDorisTableOperations.java | 5 +++
3 files changed, 43 insertions(+), 1 deletion(-)
diff --git
a/catalogs/catalog-jdbc-doris/src/main/java/org/apache/gravitino/catalog/doris/converter/DorisTypeConverter.java
b/catalogs/catalog-jdbc-doris/src/main/java/org/apache/gravitino/catalog/doris/converter/DorisTypeConverter.java
index e855a46ca..8121e0eb1 100644
---
a/catalogs/catalog-jdbc-doris/src/main/java/org/apache/gravitino/catalog/doris/converter/DorisTypeConverter.java
+++
b/catalogs/catalog-jdbc-doris/src/main/java/org/apache/gravitino/catalog/doris/converter/DorisTypeConverter.java
@@ -59,7 +59,7 @@ public class DorisTypeConverter extends JdbcTypeConverter {
case DATE:
return Types.DateType.get();
case DATETIME:
- return Types.TimestampType.withTimeZone();
+ return Types.TimestampType.withoutTimeZone();
case CHAR:
return
Types.FixedCharType.of(Integer.parseInt(typeBean.getColumnSize()));
case VARCHAR:
diff --git
a/catalogs/catalog-jdbc-doris/src/test/java/org/apache/gravitino/catalog/doris/integration/test/CatalogDorisIT.java
b/catalogs/catalog-jdbc-doris/src/test/java/org/apache/gravitino/catalog/doris/integration/test/CatalogDorisIT.java
index ca04c03c4..9288c9616 100644
---
a/catalogs/catalog-jdbc-doris/src/test/java/org/apache/gravitino/catalog/doris/integration/test/CatalogDorisIT.java
+++
b/catalogs/catalog-jdbc-doris/src/test/java/org/apache/gravitino/catalog/doris/integration/test/CatalogDorisIT.java
@@ -35,6 +35,7 @@ import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
+import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.gravitino.Catalog;
import org.apache.gravitino.NameIdentifier;
@@ -863,6 +864,42 @@ public class CatalogDorisIT extends BaseIT {
assertPartition(p5, loadedListPartitions.get("p5"));
}
+ @Test
+ void testTableWithTimeStampColumn() {
+ // create a table
+ String tableName =
GravitinoITUtils.genRandomName("test_table_with_timestamp_column");
+ NameIdentifier tableIdentifier = NameIdentifier.of(schemaName, tableName);
+ Column[] columns = createColumns();
+ columns =
+ ArrayUtils.add(columns, Column.of("timestamp_col",
Types.TimestampType.withoutTimeZone()));
+ Distribution distribution = createDistribution();
+ Index[] indexes =
+ new Index[] {
+ Indexes.of(Index.IndexType.PRIMARY_KEY, "k1_index", new String[][]
{{DORIS_COL_NAME1}})
+ };
+ Map<String, String> properties = createTableProperties();
+ TableCatalog tableCatalog = catalog.asTableCatalog();
+ tableCatalog.createTable(
+ tableIdentifier,
+ columns,
+ table_comment,
+ properties,
+ Transforms.EMPTY_TRANSFORM,
+ distribution,
+ null,
+ indexes);
+
+ // load table
+ Table loadTable = tableCatalog.loadTable(tableIdentifier);
+ Column timestampColumn =
+ Arrays.stream(loadTable.columns())
+ .filter(c -> "timestamp_col".equals(c.name()))
+ .findFirst()
+ .get();
+
+ Assertions.assertEquals(Types.TimestampType.withoutTimeZone(),
timestampColumn.dataType());
+ }
+
@Test
void testNonPartitionedTable() {
// create a non-partitioned table
diff --git
a/catalogs/catalog-jdbc-doris/src/test/java/org/apache/gravitino/catalog/doris/operation/TestDorisTableOperations.java
b/catalogs/catalog-jdbc-doris/src/test/java/org/apache/gravitino/catalog/doris/operation/TestDorisTableOperations.java
index 8bc082073..a9dfb0ed6 100644
---
a/catalogs/catalog-jdbc-doris/src/test/java/org/apache/gravitino/catalog/doris/operation/TestDorisTableOperations.java
+++
b/catalogs/catalog-jdbc-doris/src/test/java/org/apache/gravitino/catalog/doris/operation/TestDorisTableOperations.java
@@ -433,6 +433,11 @@ public class TestDorisTableOperations extends TestDoris {
JdbcColumn.builder().withName("col_11").withType(Types.FixedCharType.of(10)).build());
columns.add(JdbcColumn.builder().withName("col_12").withType(Types.VarCharType.of(10)).build());
columns.add(JdbcColumn.builder().withName("col_13").withType(Types.StringType.get()).build());
+ columns.add(
+ JdbcColumn.builder()
+ .withName("col_14")
+ .withType(Types.TimestampType.withoutTimeZone())
+ .build());
Distribution distribution =
Distributions.hash(DEFAULT_BUCKET_SIZE, NamedReference.field("col_1"));