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

karan pushed a commit to branch 26.0.0
in repository https://gitbox.apache.org/repos/asf/druid.git


The following commit(s) were added to refs/heads/26.0.0 by this push:
     new b5e84a98af Change time column name when reading from external sources 
in MSQ (#14148) (#14159)
b5e84a98af is described below

commit b5e84a98afe27c5e2977eb8980d4ce9a527b818f
Author: Adarsh Sanjeev <[email protected]>
AuthorDate: Tue Apr 25 19:35:27 2023 +0530

    Change time column name when reading from external sources in MSQ (#14148) 
(#14159)
    
    When ingesting from an external source which already contains a column 
"__time", currently, the value is dropped. Changing the time column name in the 
external input slice reader resolves this.
---
 .../input/external/ExternalInputSliceReader.java   |  3 +-
 .../org/apache/druid/msq/exec/MSQInsertTest.java   | 37 ++++++++++++++++++++++
 .../test/resources/dataset-with-time-column.json   |  3 ++
 3 files changed, 42 insertions(+), 1 deletion(-)

diff --git 
a/extensions-core/multi-stage-query/src/main/java/org/apache/druid/msq/input/external/ExternalInputSliceReader.java
 
b/extensions-core/multi-stage-query/src/main/java/org/apache/druid/msq/input/external/ExternalInputSliceReader.java
index fe4e0b5a62..c609f8b4c1 100644
--- 
a/extensions-core/multi-stage-query/src/main/java/org/apache/druid/msq/input/external/ExternalInputSliceReader.java
+++ 
b/extensions-core/multi-stage-query/src/main/java/org/apache/druid/msq/input/external/ExternalInputSliceReader.java
@@ -52,6 +52,7 @@ import org.apache.druid.msq.querykit.LazyResourceHolder;
 import org.apache.druid.msq.util.DimensionSchemaUtils;
 import org.apache.druid.segment.RowAdapters;
 import org.apache.druid.segment.RowBasedSegment;
+import org.apache.druid.segment.column.ColumnHolder;
 import org.apache.druid.segment.column.RowSignature;
 import org.apache.druid.segment.incremental.SimpleRowIngestionMeters;
 import org.apache.druid.timeline.SegmentId;
@@ -120,7 +121,7 @@ public class ExternalInputSliceReader implements 
InputSliceReader
   )
   {
     final InputRowSchema schema = new InputRowSchema(
-        new TimestampSpec("__dummy__", "auto", DateTimes.utc(0)),
+        new TimestampSpec(ColumnHolder.TIME_COLUMN_NAME, "auto", 
DateTimes.utc(0)),
         new DimensionsSpec(
             signature.getColumnNames().stream().map(
                 column ->
diff --git 
a/extensions-core/multi-stage-query/src/test/java/org/apache/druid/msq/exec/MSQInsertTest.java
 
b/extensions-core/multi-stage-query/src/test/java/org/apache/druid/msq/exec/MSQInsertTest.java
index b20e44313a..33e30986be 100644
--- 
a/extensions-core/multi-stage-query/src/test/java/org/apache/druid/msq/exec/MSQInsertTest.java
+++ 
b/extensions-core/multi-stage-query/src/test/java/org/apache/druid/msq/exec/MSQInsertTest.java
@@ -137,6 +137,43 @@ public class MSQInsertTest extends MSQTestBase
 
   }
 
+  @Test
+  public void testInsertWithExistingTimeColumn() throws IOException
+  {
+    List<Object[]> expectedRows = ImmutableList.of(
+        new Object[] {1678897351000L, "A"},
+        new Object[] {1679588551000L, "B"},
+        new Object[] {1682266951000L, "C"}
+    );
+
+    RowSignature rowSignature = RowSignature.builder()
+                                            .add("__time", ColumnType.LONG)
+                                            .add("flags", ColumnType.STRING)
+                                            .build();
+
+    final File toRead = 
MSQTestFileUtils.getResourceAsTemporaryFile(temporaryFolder, this,
+                                                                    
"/dataset-with-time-column.json"
+    );
+    final String toReadFileNameAsJson = 
queryFramework().queryJsonMapper().writeValueAsString(toRead.getAbsolutePath());
+
+    testIngestQuery().setSql(" INSERT INTO foo1 SELECT\n"
+                             + "  __time,\n"
+                             + "  flags\n"
+                             + "FROM TABLE(\n"
+                             + "  EXTERN(\n"
+                             + "    '{ \"files\": [" + toReadFileNameAsJson + 
"],\"type\":\"local\"}',\n"
+                             + "    '{\"type\": \"json\"}',\n"
+                             + "    '[{\"name\": \"__time\", \"type\": 
\"long\"}, {\"name\": \"flags\", \"type\": \"string\"}]'\n"
+                             + "  )\n"
+                             + ") PARTITIONED BY day")
+                     .setQueryContext(context)
+                     .setExpectedResultRows(expectedRows)
+                     .setExpectedDataSource("foo1")
+                     .setExpectedRowSignature(rowSignature)
+                     .verifyResults();
+
+  }
+
   @Test
   public void testInsertOnExternalDataSource() throws IOException
   {
diff --git 
a/extensions-core/multi-stage-query/src/test/resources/dataset-with-time-column.json
 
b/extensions-core/multi-stage-query/src/test/resources/dataset-with-time-column.json
new file mode 100644
index 0000000000..485e3b3de9
--- /dev/null
+++ 
b/extensions-core/multi-stage-query/src/test/resources/dataset-with-time-column.json
@@ -0,0 +1,3 @@
+{"__time":"1678897351000","flags":"A"}
+{"__time":"1679588551000","flags":"B"}
+{"__time":"1682266951000","flags":"C"}


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

Reply via email to