You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pinot.apache.org by ri...@apache.org on 2022/04/11 16:21:14 UTC

[pinot] branch master updated: Error message if the dimension table in memory hasn't been populated (#8505)

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

richardstartin 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 436e8ee85c Error message if the dimension table in memory hasn't been populated (#8505)
436e8ee85c is described below

commit 436e8ee85c4972c377a87902b91347f99127da84
Author: Mark Needham <m....@gmail.com>
AuthorDate: Mon Apr 11 17:21:03 2022 +0100

    Error message if the dimension table in memory hasn't been populated (#8505)
    
    * Error message if the dimension table in memory hasn't been populated
    
    * linter
---
 .../core/data/manager/offline/DimensionTable.java  |  4 ++
 .../manager/offline/DimensionTableDataManager.java |  4 ++
 .../function/LookupTransformFunction.java          |  2 +
 .../function/LookupTransformFunctionTest.java      | 45 ++++++++++++++++++++++
 4 files changed, 55 insertions(+)

diff --git a/pinot-core/src/main/java/org/apache/pinot/core/data/manager/offline/DimensionTable.java b/pinot-core/src/main/java/org/apache/pinot/core/data/manager/offline/DimensionTable.java
index d738b5f98c..6485f4456c 100644
--- a/pinot-core/src/main/java/org/apache/pinot/core/data/manager/offline/DimensionTable.java
+++ b/pinot-core/src/main/java/org/apache/pinot/core/data/manager/offline/DimensionTable.java
@@ -51,6 +51,10 @@ class DimensionTable {
     return _lookupTable.get(pk);
   }
 
+  boolean isEmpty() {
+    return _lookupTable.isEmpty();
+  }
+
   FieldSpec getFieldSpecFor(String columnName) {
     return _tableSchema.getFieldSpecFor(columnName);
   }
diff --git a/pinot-core/src/main/java/org/apache/pinot/core/data/manager/offline/DimensionTableDataManager.java b/pinot-core/src/main/java/org/apache/pinot/core/data/manager/offline/DimensionTableDataManager.java
index 3cbfea7286..dae481fb80 100644
--- a/pinot-core/src/main/java/org/apache/pinot/core/data/manager/offline/DimensionTableDataManager.java
+++ b/pinot-core/src/main/java/org/apache/pinot/core/data/manager/offline/DimensionTableDataManager.java
@@ -154,6 +154,10 @@ public class DimensionTableDataManager extends OfflineTableDataManager {
     }
   }
 
+  public boolean isPopulated() {
+    return !_dimensionTable.isEmpty();
+  }
+
   public GenericRow lookupRowByPrimaryKey(PrimaryKey pk) {
     return _dimensionTable.get(pk);
   }
diff --git a/pinot-core/src/main/java/org/apache/pinot/core/operator/transform/function/LookupTransformFunction.java b/pinot-core/src/main/java/org/apache/pinot/core/operator/transform/function/LookupTransformFunction.java
index d0debfa8f8..b931a13c03 100644
--- a/pinot-core/src/main/java/org/apache/pinot/core/operator/transform/function/LookupTransformFunction.java
+++ b/pinot-core/src/main/java/org/apache/pinot/core/operator/transform/function/LookupTransformFunction.java
@@ -130,6 +130,8 @@ public class LookupTransformFunction extends BaseTransformFunction {
     _dataManager = DimensionTableDataManager.getInstanceByTableName(dimTableName);
     Preconditions.checkArgument(_dataManager != null, "Dimension table does not exist: %s", dimTableName);
 
+    Preconditions.checkArgument(_dataManager.isPopulated(), "Dimension table is not populated: %s", dimTableName);
+
     _lookupColumnFieldSpec = _dataManager.getColumnFieldSpec(_dimColumnName);
     Preconditions
         .checkArgument(_lookupColumnFieldSpec != null, "Column does not exist in dimension table: %s:%s", dimTableName,
diff --git a/pinot-core/src/test/java/org/apache/pinot/core/operator/transform/function/LookupTransformFunctionTest.java b/pinot-core/src/test/java/org/apache/pinot/core/operator/transform/function/LookupTransformFunctionTest.java
index 02eb4bb111..313b2122d2 100644
--- a/pinot-core/src/test/java/org/apache/pinot/core/operator/transform/function/LookupTransformFunctionTest.java
+++ b/pinot-core/src/test/java/org/apache/pinot/core/operator/transform/function/LookupTransformFunctionTest.java
@@ -37,6 +37,7 @@ import org.testng.annotations.Test;
 import static org.mockito.Mockito.any;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
+import static org.testng.AssertJUnit.fail;
 
 
 public class LookupTransformFunctionTest extends BaseTransformFunctionTest {
@@ -65,6 +66,7 @@ public class LookupTransformFunctionTest extends BaseTransformFunctionTest {
     // , ...
     //
     when(_tableManager.getPrimaryKeyColumns()).thenReturn(Arrays.asList("teamID"));
+    when(_tableManager.isPopulated()).thenReturn(true);
     when(_tableManager.getColumnFieldSpec("teamID"))
         .thenReturn(new DimensionFieldSpec("teamID", FieldSpec.DataType.STRING, true));
     when(_tableManager.getColumnFieldSpec("teamName"))
@@ -173,6 +175,48 @@ public class LookupTransformFunctionTest extends BaseTransformFunctionTest {
     }
   }
 
+  @Test
+  public void dimensionTableNotPopulated() throws Exception {
+    DimensionTableDataManager tableManager = mock(DimensionTableDataManager.class);
+    when(tableManager.isPopulated()).thenReturn(false);
+    when(tableManager.getPrimaryKeyColumns()).thenReturn(Arrays.asList("leagueID"));
+    when(tableManager.getColumnFieldSpec("leagueID"))
+        .thenReturn(new DimensionFieldSpec("leagueID", FieldSpec.DataType.STRING, true));
+    when(tableManager.getColumnFieldSpec("leagueName"))
+        .thenReturn(new DimensionFieldSpec("leagueName", FieldSpec.DataType.STRING, true));
+
+    DimensionTableDataManager.registerDimensionTable("baseballLeagues_OFFLINE", tableManager);
+
+    try {
+      ExpressionContext expression = RequestContextUtils
+          .getExpressionFromSQL(String.format("lookup('baseballLeagues','leagueName','leagueID',%s)",
+              STRING_SV_COLUMN));
+      TransformFunctionFactory.get(expression, _dataSourceMap);
+      fail("Should have thrown BadQueryRequestException");
+    } catch (Exception ex) {
+      Assert.assertEquals(ex.getCause().getMessage(), "Dimension table is not populated: baseballLeagues_OFFLINE");
+    }
+  }
+
+  @Test
+  public void dimensionTableIsPopulated() throws Exception {
+    DimensionTableDataManager tableManager = mock(DimensionTableDataManager.class);
+    when(tableManager.isPopulated()).thenReturn(true);
+    when(tableManager.getPrimaryKeyColumns()).thenReturn(Arrays.asList("playerID"));
+    when(tableManager.getColumnFieldSpec("playerID"))
+        .thenReturn(new DimensionFieldSpec("playerID", FieldSpec.DataType.STRING, true));
+    when(tableManager.getColumnFieldSpec("playerName"))
+        .thenReturn(new DimensionFieldSpec("playerName", FieldSpec.DataType.STRING, true));
+
+    DimensionTableDataManager.registerDimensionTable("baseballPlayers_OFFLINE", tableManager);
+
+      ExpressionContext expression = RequestContextUtils
+          .getExpressionFromSQL(String.format("lookup('baseballPlayers','playerName','playerID',%s)",
+              STRING_SV_COLUMN));
+      TransformFunctionFactory.get(expression, _dataSourceMap);
+  }
+
+
   @Test
   public void basicLookupTests()
       throws Exception {
@@ -310,6 +354,7 @@ public class LookupTransformFunctionTest extends BaseTransformFunctionTest {
     for (Map.Entry<String, FieldSpec.DataType> table : testTables.entrySet()) {
       DimensionTableDataManager mgr = mock(DimensionTableDataManager.class);
       DimensionTableDataManager.registerDimensionTable(table.getKey(), mgr);
+      when(mgr.isPopulated()).thenReturn(true);
       when(mgr.getPrimaryKeyColumns()).thenReturn(Arrays.asList("primaryColumn"));
       when(mgr.getColumnFieldSpec("primaryColumn"))
           .thenReturn(new DimensionFieldSpec("primaryColumn", table.getValue(), true));


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@pinot.apache.org
For additional commands, e-mail: commits-help@pinot.apache.org