This is an automated email from the ASF dual-hosted git repository. yuqi4733 pushed a commit to branch internal-main in repository https://gitbox.apache.org/repos/asf/gravitino.git
commit 1a6c872fc128046404afb40629882548ff66b2d2 Author: geyanggang <[email protected]> AuthorDate: Fri Feb 6 17:00:42 2026 +0800 [#118] feat (bigquery-catalog): Fix exceptions when converting data types from timestamp with precision to datetime. --- .../catalog/bigquery/converter/BigQueryTypeConverter.java | 11 +++-------- .../catalog/bigquery/converter/TestBigQueryTypeConverter.java | 11 ++++++++--- .../catalog/bigquery/operation/TestBigQuerySqlGeneration.java | 4 ++-- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/catalogs/catalog-jdbc-bigquery/src/main/java/org/apache/gravitino/catalog/bigquery/converter/BigQueryTypeConverter.java b/catalogs/catalog-jdbc-bigquery/src/main/java/org/apache/gravitino/catalog/bigquery/converter/BigQueryTypeConverter.java index 3b2ec0d4ab..dd5a7bbb4d 100644 --- a/catalogs/catalog-jdbc-bigquery/src/main/java/org/apache/gravitino/catalog/bigquery/converter/BigQueryTypeConverter.java +++ b/catalogs/catalog-jdbc-bigquery/src/main/java/org/apache/gravitino/catalog/bigquery/converter/BigQueryTypeConverter.java @@ -117,15 +117,10 @@ public class BigQueryTypeConverter extends JdbcTypeConverter { return BYTES; } else if (type instanceof Types.DateType) { return DATE; - } else if (type instanceof Types.TimeType timeType) { - return timeType.hasPrecisionSet() - ? String.format("%s(%d)", TIME, timeType.precision()) - : TIME; + } else if (type instanceof Types.TimeType) { + return TIME; } else if (type instanceof Types.TimestampType timestampType) { - String baseType = timestampType.hasTimeZone() ? TIMESTAMP : DATETIME; - return timestampType.hasPrecisionSet() - ? String.format("%s(%d)", baseType, timestampType.precision()) - : baseType; + return timestampType.hasTimeZone() ? TIMESTAMP : DATETIME; } else if (type instanceof Types.DecimalType decimalType) { // BigQuery NUMERIC: precision 1-38, scale 0-9 (or 0-precision) // For Gravitino DecimalType (max precision 38), always use NUMERIC diff --git a/catalogs/catalog-jdbc-bigquery/src/test/java/org/apache/gravitino/catalog/bigquery/converter/TestBigQueryTypeConverter.java b/catalogs/catalog-jdbc-bigquery/src/test/java/org/apache/gravitino/catalog/bigquery/converter/TestBigQueryTypeConverter.java index 14a394ed3f..2843995c80 100644 --- a/catalogs/catalog-jdbc-bigquery/src/test/java/org/apache/gravitino/catalog/bigquery/converter/TestBigQueryTypeConverter.java +++ b/catalogs/catalog-jdbc-bigquery/src/test/java/org/apache/gravitino/catalog/bigquery/converter/TestBigQueryTypeConverter.java @@ -51,7 +51,7 @@ public class TestBigQueryTypeConverter { assertEquals("time", typeConverter.fromGravitino(Types.TimeType.get())); // Time with precision - assertEquals("time(6)", typeConverter.fromGravitino(Types.TimeType.of(6))); + assertEquals("time", typeConverter.fromGravitino(Types.TimeType.of(3))); // Timestamp without timezone (DATETIME in BigQuery) assertEquals("datetime", typeConverter.fromGravitino(Types.TimestampType.withoutTimeZone())); @@ -60,9 +60,14 @@ public class TestBigQueryTypeConverter { assertEquals("timestamp", typeConverter.fromGravitino(Types.TimestampType.withTimeZone())); // Timestamp with precision + // NOTE: BigQuery DATETIME precision is microsecond by default, it does not support specify + // precision + // so a TimestampType without timezone should still map to plain "datetime" even if a + // precision is set. assertEquals( - "datetime(3)", typeConverter.fromGravitino(Types.TimestampType.withoutTimeZone(3))); - assertEquals("timestamp(6)", typeConverter.fromGravitino(Types.TimestampType.withTimeZone(6))); + "datetime", // DATETIME in BigQuery (precision ignored) + typeConverter.fromGravitino(Types.TimestampType.withoutTimeZone(6))); + assertEquals("timestamp", typeConverter.fromGravitino(Types.TimestampType.withTimeZone(6))); } @Test diff --git a/catalogs/catalog-jdbc-bigquery/src/test/java/org/apache/gravitino/catalog/bigquery/operation/TestBigQuerySqlGeneration.java b/catalogs/catalog-jdbc-bigquery/src/test/java/org/apache/gravitino/catalog/bigquery/operation/TestBigQuerySqlGeneration.java index 768807da6f..b09e8c5cd8 100644 --- a/catalogs/catalog-jdbc-bigquery/src/test/java/org/apache/gravitino/catalog/bigquery/operation/TestBigQuerySqlGeneration.java +++ b/catalogs/catalog-jdbc-bigquery/src/test/java/org/apache/gravitino/catalog/bigquery/operation/TestBigQuerySqlGeneration.java @@ -161,8 +161,8 @@ public class TestBigQuerySqlGeneration { tableName, columns, null, null, new Transform[0], Distributions.NONE, new Index[0]); assertTrue(sql.contains("`decimal_col` NUMERIC(10, 2) NOT NULL")); - assertTrue(sql.contains("`timestamp_col` timestamp(6)")); - assertTrue(sql.contains("`time_col` time(3)")); + assertTrue(sql.contains("`timestamp_col` timestamp")); + assertTrue(sql.contains("`time_col` time")); } @Test
