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