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

Jackie-Jiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pinot.git


The following commit(s) were added to refs/heads/master by this push:
     new e55c18172a5 Add explicit target data type constructor to 
DataTypeColumnTransformer (#18954)
e55c18172a5 is described below

commit e55c18172a5ddfc313dc79420d86268c167bec66
Author: Xiaotian (Jackie) Jiang <[email protected]>
AuthorDate: Thu Jul 9 23:49:56 2026 -0700

    Add explicit target data type constructor to DataTypeColumnTransformer 
(#18954)
---
 .../DataTypeColumnTransformer.java                 | 22 ++++++++++++++++------
 .../DataTypeColumnTransformerTest.java             | 11 +++++++++++
 2 files changed, 27 insertions(+), 6 deletions(-)

diff --git 
a/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/columntransformer/DataTypeColumnTransformer.java
 
b/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/columntransformer/DataTypeColumnTransformer.java
index f108aeb7926..5214a97d2c8 100644
--- 
a/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/columntransformer/DataTypeColumnTransformer.java
+++ 
b/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/columntransformer/DataTypeColumnTransformer.java
@@ -30,8 +30,13 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 
+/// The `DataTypeColumnTransformer` is the column-major counterpart of the 
row-major `DataTypeTransformer`. It converts
+/// the values read from a [ColumnReader] to a target [PinotDataType]. It has 
two usages:
+/// - Schema columns: constructed from a [FieldSpec], it converts the values 
to the data type defined for the column in
+///   the [org.apache.pinot.spi.data.Schema].
+/// - Source fields: constructed from an explicit [PinotDataType] (see 
`IngestionConfig.sourceFieldConfigs`), it fixes
+///   the data type of a source field before other transformers (such as the 
expression transformer) consume it.
 public class DataTypeColumnTransformer implements ColumnTransformer {
-
   private static final Logger LOGGER = 
LoggerFactory.getLogger(DataTypeColumnTransformer.class);
 
   private final PinotDataType _destDataType;
@@ -39,12 +44,17 @@ public class DataTypeColumnTransformer implements 
ColumnTransformer {
   private final boolean _continueOnError;
   private final ThrottledLogger _throttledLogger;
 
-  /**
-   * @param fieldSpec - The field spec for the column being created in Pinot.
-   * @param columnReader - The column reader to read the source data.
-   */
+  /// Creates a transformer that converts the values read from `columnReader` 
to the data type defined for the column
+  /// in the [org.apache.pinot.spi.data.Schema] (derived from the given 
[FieldSpec]).
   public DataTypeColumnTransformer(TableConfig tableConfig, FieldSpec 
fieldSpec, ColumnReader columnReader) {
-    _destDataType = PinotDataType.getPinotDataTypeForIngestion(fieldSpec);
+    this(tableConfig, PinotDataType.getPinotDataTypeForIngestion(fieldSpec), 
columnReader);
+  }
+
+  /// Creates a transformer that converts the values read from `columnReader` 
to the given [PinotDataType]. This is
+  /// useful for fixing the data type of a source field before other 
transformers (such as the expression transformer)
+  /// consume it.
+  public DataTypeColumnTransformer(TableConfig tableConfig, PinotDataType 
destDataType, ColumnReader columnReader) {
+    _destDataType = destDataType;
     _columnReader = columnReader;
     IngestionConfig ingestionConfig = tableConfig.getIngestionConfig();
     _continueOnError = ingestionConfig != null && 
ingestionConfig.isContinueOnError();
diff --git 
a/pinot-segment-local/src/test/java/org/apache/pinot/segment/local/columntransformer/DataTypeColumnTransformerTest.java
 
b/pinot-segment-local/src/test/java/org/apache/pinot/segment/local/columntransformer/DataTypeColumnTransformerTest.java
index aa1c02598ca..c493c024928 100644
--- 
a/pinot-segment-local/src/test/java/org/apache/pinot/segment/local/columntransformer/DataTypeColumnTransformerTest.java
+++ 
b/pinot-segment-local/src/test/java/org/apache/pinot/segment/local/columntransformer/DataTypeColumnTransformerTest.java
@@ -600,4 +600,15 @@ public class DataTypeColumnTransformerTest {
     Object result = transformer.transform("not_a_number");
     assertNull(result, "Invalid conversion should return null when 
continueOnError=true");
   }
+
+  @Test
+  public void testExplicitDestDataTypeConstructor() {
+    TableConfig tableConfig = new 
TableConfigBuilder(TableType.OFFLINE).setTableName("testTable").build();
+    ColumnReader reader = mockReader(PinotDataType.STRING);
+    // The explicit target type drives the conversion, independent of any 
field spec.
+    DataTypeColumnTransformer transformer = new 
DataTypeColumnTransformer(tableConfig, PinotDataType.LONG, reader);
+
+    assertFalse(transformer.isNoOp(), "STRING source, LONG dest should not be 
a no-op");
+    assertEquals(transformer.transform("12345"), 12345L);
+  }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to