You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lens.apache.org by am...@apache.org on 2015/04/15 21:50:22 UTC
[48/50] [abbrv] incubator-lens git commit: LENS-441 : Add command to
get all dimtables of a dimension and get all facts of a cube (Rajat
Khandelwal via amareshwari)
LENS-441 : Add command to get all dimtables of a dimension and get all facts of a cube (Rajat Khandelwal via amareshwari)
Project: http://git-wip-us.apache.org/repos/asf/incubator-lens/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-lens/commit/309f62cc
Tree: http://git-wip-us.apache.org/repos/asf/incubator-lens/tree/309f62cc
Diff: http://git-wip-us.apache.org/repos/asf/incubator-lens/diff/309f62cc
Branch: refs/heads/current-release-line
Commit: 309f62cc0863615383ccb69f815bf55887831414
Parents: e3486e0
Author: Rajat Khandelwal <pr...@apache.org>
Authored: Wed Apr 15 06:03:20 2015 -0500
Committer: Amareshwari Sriramadasu <am...@apache.org>
Committed: Wed Apr 15 06:03:20 2015 -0500
----------------------------------------------------------------------
.../commands/LensDimensionTableCommands.java | 5 +-
.../lens/cli/commands/LensFactCommands.java | 5 +-
.../cli/TestLensDimensionTableCommands.java | 47 ++++++++++++--
.../apache/lens/cli/TestLensFactCommands.java | 22 +++++--
lens-cli/src/test/resources/dim_table2.xml | 2 +-
.../java/org/apache/lens/client/LensClient.java | 9 ++-
.../apache/lens/client/LensMetadataClient.java | 34 ++++++++--
.../lens/cube/metadata/CubeMetastoreClient.java | 39 ++++++-----
.../lens/cube/parse/CandidateTableResolver.java | 2 +-
.../cube/metadata/TestCubeMetastoreClient.java | 12 ++--
.../api/metastore/CubeMetastoreService.java | 19 ++----
.../metastore/CubeMetastoreServiceImpl.java | 68 +++++++++-----------
.../server/metastore/MetastoreResource.java | 39 +++++++++--
13 files changed, 202 insertions(+), 101 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/309f62cc/lens-cli/src/main/java/org/apache/lens/cli/commands/LensDimensionTableCommands.java
----------------------------------------------------------------------
diff --git a/lens-cli/src/main/java/org/apache/lens/cli/commands/LensDimensionTableCommands.java b/lens-cli/src/main/java/org/apache/lens/cli/commands/LensDimensionTableCommands.java
index c61be09..c3b7f37 100644
--- a/lens-cli/src/main/java/org/apache/lens/cli/commands/LensDimensionTableCommands.java
+++ b/lens-cli/src/main/java/org/apache/lens/cli/commands/LensDimensionTableCommands.java
@@ -45,8 +45,9 @@ public class LensDimensionTableCommands extends BaseLensCommand implements Comma
* @return the string
*/
@CliCommand(value = "show dimtables", help = "show list of dimension tables in database")
- public String showDimensionTables() {
- List<String> dims = getClient().getAllDimensionTables();
+ public String showDimensionTables(
+ @CliOption(key = {"", "dimension"}, mandatory = false, help = "<optional dimension name>") String dimensionName) {
+ List<String> dims = getClient().getAllDimensionTables(dimensionName);
if (dims != null) {
return Joiner.on("\n").join(dims);
} else {
http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/309f62cc/lens-cli/src/main/java/org/apache/lens/cli/commands/LensFactCommands.java
----------------------------------------------------------------------
diff --git a/lens-cli/src/main/java/org/apache/lens/cli/commands/LensFactCommands.java b/lens-cli/src/main/java/org/apache/lens/cli/commands/LensFactCommands.java
index a69d361..1e8abf9 100644
--- a/lens-cli/src/main/java/org/apache/lens/cli/commands/LensFactCommands.java
+++ b/lens-cli/src/main/java/org/apache/lens/cli/commands/LensFactCommands.java
@@ -45,8 +45,9 @@ public class LensFactCommands extends BaseLensCommand implements CommandMarker {
* @return the string
*/
@CliCommand(value = "show facts", help = "display list of fact tables in database")
- public String showFacts() {
- List<String> facts = getClient().getAllFactTables();
+ public String showFacts(
+ @CliOption(key = {"", "cube"}, mandatory = false, help = "<optional cube name>") String cubeName) {
+ List<String> facts = getClient().getAllFactTables(cubeName);
if (facts != null) {
return Joiner.on("\n").join(facts);
} else {
http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/309f62cc/lens-cli/src/test/java/org/apache/lens/cli/TestLensDimensionTableCommands.java
----------------------------------------------------------------------
diff --git a/lens-cli/src/test/java/org/apache/lens/cli/TestLensDimensionTableCommands.java b/lens-cli/src/test/java/org/apache/lens/cli/TestLensDimensionTableCommands.java
index 5430c7f..5d8d453 100644
--- a/lens-cli/src/test/java/org/apache/lens/cli/TestLensDimensionTableCommands.java
+++ b/lens-cli/src/test/java/org/apache/lens/cli/TestLensDimensionTableCommands.java
@@ -22,6 +22,9 @@ import java.io.*;
import java.net.URISyntaxException;
import java.net.URL;
+import javax.ws.rs.NotFoundException;
+
+import org.apache.lens.cli.commands.LensDimensionCommands;
import org.apache.lens.cli.commands.LensDimensionTableCommands;
import org.apache.lens.client.LensClient;
@@ -43,6 +46,7 @@ public class TestLensDimensionTableCommands extends LensCliApplicationTest {
/** The command. */
private static LensDimensionTableCommands command = null;
+ private static LensDimensionCommands dimensionCommand = null;
private static LensDimensionTableCommands getCommand() {
if (command == null) {
@@ -53,6 +57,16 @@ public class TestLensDimensionTableCommands extends LensCliApplicationTest {
return command;
}
+ private static LensDimensionCommands getDimensionCommand() {
+ if (dimensionCommand == null) {
+ LensClient client = new LensClient();
+ dimensionCommand = new LensDimensionCommands();
+ dimensionCommand.setClient(client);
+ }
+ return dimensionCommand;
+ }
+
+
/**
* Test dim table commands.
*
@@ -61,11 +75,23 @@ public class TestLensDimensionTableCommands extends LensCliApplicationTest {
*/
@Test
public void testDimTableCommands() throws IOException, URISyntaxException {
+ createDimension();
addDim1Table("dim_table2", "dim_table2.xml", DIM_LOCAL);
updateDim1Table();
testDimStorageActions();
testDimPartitionActions();
dropDim1Table();
+ dropDimension();
+ }
+
+ private void dropDimension() {
+ getDimensionCommand().dropDimension("test_dim");
+ }
+
+ private void createDimension() throws URISyntaxException {
+ URL dimensionSpec = TestLensDimensionTableCommands.class.getClassLoader().getResource("test-dimension.xml");
+ getDimensionCommand().createDimension(new File(dimensionSpec.toURI()).getAbsolutePath());
+
}
/**
@@ -79,7 +105,9 @@ public class TestLensDimensionTableCommands extends LensCliApplicationTest {
public static synchronized void addDim1Table(String tableName, String specName, String storageName)
throws IOException {
LensDimensionTableCommands command = getCommand();
- String dimList = command.showDimensionTables();
+ String dimList = command.showDimensionTables(null);
+ Assert.assertEquals(command.showDimensionTables("test_dim"), dimList);
+
// add local storage before adding fact table
TestLensStorageCommands.addLocalStorage(storageName);
URL dimSpec = TestLensDimensionTableCommands.class.getClassLoader().getResource(specName);
@@ -91,7 +119,18 @@ public class TestLensDimensionTableCommands extends LensCliApplicationTest {
Assert.fail("Unable to create dimtable" + e.getMessage());
}
- dimList = command.showDimensionTables();
+ dimList = command.showDimensionTables(null);
+ Assert.assertEquals(command.showDimensionTables("test_dim"), dimList);
+ try {
+ Assert.assertEquals(command.showDimensionTables("blah"), dimList);
+ Assert.fail();
+ } catch (NotFoundException e) {
+ }
+ try {
+ Assert.assertEquals(command.showDimensionTables("dim_table2"), dimList);
+ Assert.fail();
+ } catch (NotFoundException e) {
+ }
Assert.assertTrue(dimList.contains(tableName), "dim_table table should be found");
}
@@ -220,10 +259,10 @@ public class TestLensDimensionTableCommands extends LensCliApplicationTest {
*/
public static void dropDim1Table() {
LensDimensionTableCommands command = getCommand();
- String dimList = command.showDimensionTables();
+ String dimList = command.showDimensionTables(null);
Assert.assertEquals("dim_table2", dimList, "dim_table table should be found");
command.dropDimensionTable("dim_table2", false);
- dimList = command.showDimensionTables();
+ dimList = command.showDimensionTables(null);
Assert.assertEquals("No Dimensions Found", dimList, "Dim tables should not be found");
TestLensStorageCommands.dropStorage(DIM_LOCAL);
}
http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/309f62cc/lens-cli/src/test/java/org/apache/lens/cli/TestLensFactCommands.java
----------------------------------------------------------------------
diff --git a/lens-cli/src/test/java/org/apache/lens/cli/TestLensFactCommands.java b/lens-cli/src/test/java/org/apache/lens/cli/TestLensFactCommands.java
index 244b9ec..b906f18 100644
--- a/lens-cli/src/test/java/org/apache/lens/cli/TestLensFactCommands.java
+++ b/lens-cli/src/test/java/org/apache/lens/cli/TestLensFactCommands.java
@@ -22,6 +22,8 @@ import java.io.*;
import java.net.URISyntaxException;
import java.net.URL;
+import javax.ws.rs.NotFoundException;
+
import org.apache.lens.cli.commands.LensCubeCommands;
import org.apache.lens.cli.commands.LensFactCommands;
import org.apache.lens.client.LensClient;
@@ -98,7 +100,8 @@ public class TestLensFactCommands extends LensCliApplicationTest {
*/
public static void addFact1Table() throws IOException {
LensFactCommands command = getCommand();
- String factList = command.showFacts();
+ String factList = command.showFacts(null);
+ Assert.assertEquals(command.showFacts("sample_cube"), factList);
Assert.assertEquals("No Facts Found", factList, "Fact tables should not be found");
// add local storage before adding fact table
TestLensStorageCommands.addLocalStorage(FACT_LOCAL);
@@ -108,7 +111,18 @@ public class TestLensFactCommands extends LensCliApplicationTest {
} catch (Exception e) {
Assert.fail("Unable to create fact table" + e.getMessage());
}
- factList = command.showFacts();
+ factList = command.showFacts(null);
+ Assert.assertEquals(command.showFacts("sample_cube"), factList);
+ try {
+ Assert.assertEquals(command.showFacts("blah"), factList);
+ Assert.fail();
+ } catch (NotFoundException e) {
+ }
+ try {
+ Assert.assertEquals(command.showFacts("fact1"), factList);
+ Assert.fail();
+ } catch (NotFoundException e) {
+ }
Assert.assertEquals("fact1", factList, "Fact1 table should be found");
}
@@ -257,10 +271,10 @@ public class TestLensFactCommands extends LensCliApplicationTest {
*/
public static void dropFact1Table() {
LensFactCommands command = getCommand();
- String factList = command.showFacts();
+ String factList = command.showFacts(null);
Assert.assertEquals("fact1", factList, "Fact1 table should be found");
command.dropFact("fact1", false);
- factList = command.showFacts();
+ factList = command.showFacts(null);
Assert.assertEquals("No Facts Found", factList, "Fact tables should not be found");
TestLensStorageCommands.dropStorage(FACT_LOCAL);
}
http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/309f62cc/lens-cli/src/test/resources/dim_table2.xml
----------------------------------------------------------------------
diff --git a/lens-cli/src/test/resources/dim_table2.xml b/lens-cli/src/test/resources/dim_table2.xml
index 3631065..1d6e138 100644
--- a/lens-cli/src/test/resources/dim_table2.xml
+++ b/lens-cli/src/test/resources/dim_table2.xml
@@ -19,7 +19,7 @@
under the License.
-->
-<x_dimension_table dimension_name="test_dim2" table_name="dim_table2" weight="0.0" xmlns="uri:lens:cube:0.1"
+<x_dimension_table dimension_name="test_dim" table_name="dim_table2" weight="0.0" xmlns="uri:lens:cube:0.1"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="uri:lens:cube:0.1 cube-0.1.xsd ">
<columns>
<column comment="ID" name="id" type="INT" />
http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/309f62cc/lens-client/src/main/java/org/apache/lens/client/LensClient.java
----------------------------------------------------------------------
diff --git a/lens-client/src/main/java/org/apache/lens/client/LensClient.java b/lens-client/src/main/java/org/apache/lens/client/LensClient.java
index 449c8ec..016e4ab 100644
--- a/lens-client/src/main/java/org/apache/lens/client/LensClient.java
+++ b/lens-client/src/main/java/org/apache/lens/client/LensClient.java
@@ -212,11 +212,18 @@ public class LensClient {
return mc.getAllFactTables();
}
-
+ public List<String> getAllFactTables(String cubeName) {
+ LOG.debug("Getting all fact table");
+ return mc.getAllFactTables(cubeName);
+ }
public List<String> getAllDimensionTables() {
LOG.debug("Getting all dimension table");
return mc.getAllDimensionTables();
}
+ public List<String> getAllDimensionTables(String dimensionName) {
+ LOG.debug("Getting all dimension table");
+ return mc.getAllDimensionTables(dimensionName);
+ }
public List<String> getAllCubes() {
LOG.debug("Getting all cubes in database");
http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/309f62cc/lens-client/src/main/java/org/apache/lens/client/LensMetadataClient.java
----------------------------------------------------------------------
diff --git a/lens-client/src/main/java/org/apache/lens/client/LensMetadataClient.java b/lens-client/src/main/java/org/apache/lens/client/LensMetadataClient.java
index 1e243e8..5e406b5 100644
--- a/lens-client/src/main/java/org/apache/lens/client/LensMetadataClient.java
+++ b/lens-client/src/main/java/org/apache/lens/client/LensMetadataClient.java
@@ -406,25 +406,31 @@ public class LensMetadataClient {
return result;
}
- public List<XFactTable> getAllFactTables(String cubeName) {
+ public List<String> getAllFactTables(String cubeName) {
+ if (cubeName == null) {
+ return getAllFactTables();
+ }
WebTarget target = getMetastoreWebTarget();
- List<XFactTable> factTables = target.path("cubes").path(cubeName).path("facts")
+ StringList factTables;
+ factTables = target.path("cubes").path(cubeName).path("facts")
.queryParam("sessionid", this.connection.getSessionHandle())
.request(MediaType.APPLICATION_XML)
- .get(new GenericType<List<XFactTable>>() {
- });
- return factTables;
+ .get(StringList.class);
+ return factTables.getElements();
}
public List<String> getAllFactTables() {
WebTarget target = getMetastoreWebTarget();
- StringList factTables = target.path("facts")
+ StringList factTables;
+ factTables = target.path("facts")
.queryParam("sessionid", this.connection.getSessionHandle())
.request(MediaType.APPLICATION_XML)
.get(StringList.class);
+
return factTables.getElements();
}
+
public APIResult deleteAllFactTables(boolean cascade) {
WebTarget target = getMetastoreWebTarget();
APIResult result = target.path("facts")
@@ -636,9 +642,23 @@ public class LensMetadataClient {
}
+ public List<String> getAllDimensionTables(String dimensionName) {
+ if (dimensionName == null) {
+ return getAllDimensionTables();
+ }
+ WebTarget target = getMetastoreWebTarget();
+ StringList dimtables;
+ dimtables = target.path("dimensions").path(dimensionName).path("dimtables")
+ .queryParam("sessionid", this.connection.getSessionHandle())
+ .request(MediaType.APPLICATION_XML)
+ .get(StringList.class);
+ return dimtables.getElements();
+ }
+
public List<String> getAllDimensionTables() {
WebTarget target = getMetastoreWebTarget();
- StringList dimtables = target.path("dimtables")
+ StringList dimtables;
+ dimtables = target.path("dimtables")
.queryParam("sessionid", this.connection.getSessionHandle())
.request(MediaType.APPLICATION_XML)
.get(StringList.class);
http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/309f62cc/lens-cube/src/main/java/org/apache/lens/cube/metadata/CubeMetastoreClient.java
----------------------------------------------------------------------
diff --git a/lens-cube/src/main/java/org/apache/lens/cube/metadata/CubeMetastoreClient.java b/lens-cube/src/main/java/org/apache/lens/cube/metadata/CubeMetastoreClient.java
index fa56213..324002f 100644
--- a/lens-cube/src/main/java/org/apache/lens/cube/metadata/CubeMetastoreClient.java
+++ b/lens-cube/src/main/java/org/apache/lens/cube/metadata/CubeMetastoreClient.java
@@ -111,7 +111,7 @@ public class CubeMetastoreClient {
String partCol = cube.getPartitionColumnOfTimeDim(timeDimension);
Date max = new Date(Long.MIN_VALUE);
boolean updated = false;
- for (CubeFactTable fact : getAllFactTables(cube)) {
+ for (CubeFactTable fact : getAllFacts(cube)) {
for (String storage : fact.getStorages()) {
for (UpdatePeriod updatePeriod : fact.getUpdatePeriods().get(storage)) {
PartitionTimeline timeline = partitionTimelineCache.get(fact.getName(), storage, updatePeriod,
@@ -1380,6 +1380,9 @@ public class CubeMetastoreClient {
* @throws HiveException
*/
public CubeInterface getCube(String tableName) throws HiveException {
+ if (tableName == null) {
+ return null;
+ }
tableName = tableName.trim().toLowerCase();
CubeInterface cube = allCubes.get(tableName);
if (cube == null) {
@@ -1408,6 +1411,9 @@ public class CubeMetastoreClient {
* @throws HiveException
*/
public Dimension getDimension(String tableName) throws HiveException {
+ if (tableName == null) {
+ return null;
+ }
tableName = tableName.trim().toLowerCase();
Dimension dim = allDims.get(tableName);
if (dim == null) {
@@ -1617,22 +1623,25 @@ public class CubeMetastoreClient {
* @return List of fact tables
* @throws HiveException
*/
- public List<CubeFactTable> getAllFactTables(CubeInterface cube) throws HiveException {
- if (cube instanceof Cube) {
- List<CubeFactTable> cubeFacts = new ArrayList<CubeFactTable>();
- try {
- for (CubeFactTable fact : getAllFacts()) {
- if (fact.getCubeName().equalsIgnoreCase(((Cube) cube).getName())) {
- cubeFacts.add(fact);
- }
+ public List<CubeFactTable> getAllFacts(CubeInterface cube) throws HiveException {
+ String cubeName = null;
+ if (cube != null) {
+ if (cube instanceof DerivedCube) {
+ cube = ((DerivedCube) cube).getParent();
+ }
+ cubeName = cube.getName();
+ }
+ List<CubeFactTable> cubeFacts = new ArrayList<CubeFactTable>();
+ try {
+ for (CubeFactTable fact : getAllFacts()) {
+ if (cubeName == null || fact.getCubeName().equalsIgnoreCase(cubeName)) {
+ cubeFacts.add(fact);
}
- } catch (HiveException e) {
- throw new HiveException("Could not get all fact tables of " + cube, e);
}
- return cubeFacts;
- } else {
- return getAllFactTables(((DerivedCube) cube).getParent());
+ } catch (HiveException e) {
+ throw new HiveException("Could not get all fact tables of " + cube, e);
}
+ return cubeFacts;
}
/**
@@ -1689,7 +1698,7 @@ public class CubeMetastoreClient {
List<CubeDimensionTable> dimTables = new ArrayList<CubeDimensionTable>();
try {
for (CubeDimensionTable dimTbl : getAllDimensionTables()) {
- if (dimTbl.getDimName().equalsIgnoreCase(dim.getName().toLowerCase())) {
+ if (dim == null || dimTbl.getDimName().equalsIgnoreCase(dim.getName().toLowerCase())) {
dimTables.add(dimTbl);
}
}
http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/309f62cc/lens-cube/src/main/java/org/apache/lens/cube/parse/CandidateTableResolver.java
----------------------------------------------------------------------
diff --git a/lens-cube/src/main/java/org/apache/lens/cube/parse/CandidateTableResolver.java b/lens-cube/src/main/java/org/apache/lens/cube/parse/CandidateTableResolver.java
index a1022fd..6b6a09b 100644
--- a/lens-cube/src/main/java/org/apache/lens/cube/parse/CandidateTableResolver.java
+++ b/lens-cube/src/main/java/org/apache/lens/cube/parse/CandidateTableResolver.java
@@ -89,7 +89,7 @@ class CandidateTableResolver implements ContextRewriter {
private void populateCandidateTables(CubeQueryContext cubeql) throws SemanticException {
try {
if (cubeql.getCube() != null) {
- List<CubeFactTable> factTables = cubeql.getMetastoreClient().getAllFactTables(cubeql.getCube());
+ List<CubeFactTable> factTables = cubeql.getMetastoreClient().getAllFacts(cubeql.getCube());
if (factTables.isEmpty()) {
throw new SemanticException(ErrorMsg.NO_CANDIDATE_FACT_AVAILABLE, cubeql.getCube().getName()
+ " does not have any facts");
http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/309f62cc/lens-cube/src/test/java/org/apache/lens/cube/metadata/TestCubeMetastoreClient.java
----------------------------------------------------------------------
diff --git a/lens-cube/src/test/java/org/apache/lens/cube/metadata/TestCubeMetastoreClient.java b/lens-cube/src/test/java/org/apache/lens/cube/metadata/TestCubeMetastoreClient.java
index 9ceea48..96f2b9b 100644
--- a/lens-cube/src/test/java/org/apache/lens/cube/metadata/TestCubeMetastoreClient.java
+++ b/lens-cube/src/test/java/org/apache/lens/cube/metadata/TestCubeMetastoreClient.java
@@ -690,7 +690,7 @@ public class TestCubeMetastoreClient {
addedMsr = altered.getMeasureByName("testaddmsr1");
Assert.assertNotNull(addedMsr);
Assert.assertEquals(addedMsr.getType(), "double");
- Assert.assertTrue(client.getAllFactTables(altered).isEmpty());
+ Assert.assertTrue(client.getAllFacts(altered).isEmpty());
}
@Test(priority = 2)
@@ -765,8 +765,8 @@ public class TestCubeMetastoreClient {
Table cubeTbl = client.getHiveTable(factName);
Assert.assertTrue(client.isFactTable(cubeTbl));
Assert.assertTrue(client.isFactTableForCube(cubeTbl, CUBE_NAME));
- Assert.assertEquals(client.getAllFactTables(client.getCube(CUBE_NAME)).get(0).getName(), factName.toLowerCase());
- Assert.assertEquals(client.getAllFactTables(client.getCube(DERIVED_CUBE_NAME)).get(0).getName(),
+ Assert.assertEquals(client.getAllFacts(client.getCube(CUBE_NAME)).get(0).getName(), factName.toLowerCase());
+ Assert.assertEquals(client.getAllFacts(client.getCube(DERIVED_CUBE_NAME)).get(0).getName(),
factName.toLowerCase());
CubeFactTable cubeFact2 = new CubeFactTable(cubeTbl);
Assert.assertTrue(cubeFact.equals(cubeFact2));
@@ -955,13 +955,13 @@ public class TestCubeMetastoreClient {
client.dropStorageFromFact(factName, c2);
storageTableName = MetastoreUtil.getFactStorageTableName(factName, c2);
Assert.assertFalse(client.tableExists(storageTableName));
- List<CubeFactTable> cubeFacts = client.getAllFactTables(client.getCube(CUBE_NAME));
+ List<CubeFactTable> cubeFacts = client.getAllFacts(client.getCube(CUBE_NAME));
List<String> cubeFactNames = new ArrayList<String>();
for (CubeFactTable cfact : cubeFacts) {
cubeFactNames.add(cfact.getName());
}
Assert.assertTrue(cubeFactNames.contains(factName.toLowerCase()));
- cubeFacts = client.getAllFactTables(client.getCube(DERIVED_CUBE_NAME));
+ cubeFacts = client.getAllFacts(client.getCube(DERIVED_CUBE_NAME));
cubeFactNames = new ArrayList<String>();
for (CubeFactTable cfact : cubeFacts) {
cubeFactNames.add(cfact.getName());
@@ -971,7 +971,7 @@ public class TestCubeMetastoreClient {
Assert.assertFalse(client.tableExists(MetastoreUtil.getFactStorageTableName(factName, c1)));
Assert.assertFalse(client.tableExists(MetastoreUtil.getFactStorageTableName(factName, c3)));
Assert.assertFalse(client.tableExists(factName));
- cubeFacts = client.getAllFactTables(cube);
+ cubeFacts = client.getAllFacts(cube);
cubeFactNames = new ArrayList<String>();
for (CubeFactTable cfact : cubeFacts) {
cubeFactNames.add(cfact.getName());
http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/309f62cc/lens-server-api/src/main/java/org/apache/lens/server/api/metastore/CubeMetastoreService.java
----------------------------------------------------------------------
diff --git a/lens-server-api/src/main/java/org/apache/lens/server/api/metastore/CubeMetastoreService.java b/lens-server-api/src/main/java/org/apache/lens/server/api/metastore/CubeMetastoreService.java
index 9de5f79..090e0d7 100644
--- a/lens-server-api/src/main/java/org/apache/lens/server/api/metastore/CubeMetastoreService.java
+++ b/lens-server-api/src/main/java/org/apache/lens/server/api/metastore/CubeMetastoreService.java
@@ -322,13 +322,15 @@ public interface CubeMetastoreService {
void dropStorageOfDimTable(LensSessionHandle sessionid, String dimTblName, String storage) throws LensException;
/**
- * Get all dimension tables
+ * Get all dimension tables. dimensionName is an optional filter of dimension name.
+ * If provided, only the dimension tables belonging to given dimension will be returned
*
* @param sessionid
+ * @param dimensionName dimension name to be filtered with. Optional
* @return
* @throws LensException
*/
- List<String> getAllDimTableNames(LensSessionHandle sessionid) throws LensException;
+ List<String> getAllDimTableNames(LensSessionHandle sessionid, String dimensionName) throws LensException;
/**
* Get all partitions of a dimension table in a storage
@@ -367,16 +369,6 @@ public interface CubeMetastoreService {
XPartitionList partitions) throws LensException;
/**
- * Get all facts of cube. Cube can also be a derived cube
- *
- * @param sessionid The session id
- * @param cubeName The cube name
- * @return List of FactTable objects
- * @throws LensException
- */
- List<XFactTable> getAllFactsOfCube(LensSessionHandle sessionid, String cubeName) throws LensException;
-
- /**
* Get fact table given by name
*
* @param sessionid The sessionid
@@ -418,10 +410,11 @@ public interface CubeMetastoreService {
* Get all fact names
*
* @param sessionid The sessionid
+ * @param cubeName optional filter filter facts by cube name.
* @return List of fact table names
* @throws LensException
*/
- List<String> getAllFactNames(LensSessionHandle sessionid) throws LensException;
+ List<String> getAllFactNames(LensSessionHandle sessionid, String cubeName) throws LensException;
/**
* Get all storages of fact
http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/309f62cc/lens-server/src/main/java/org/apache/lens/server/metastore/CubeMetastoreServiceImpl.java
----------------------------------------------------------------------
diff --git a/lens-server/src/main/java/org/apache/lens/server/metastore/CubeMetastoreServiceImpl.java b/lens-server/src/main/java/org/apache/lens/server/metastore/CubeMetastoreServiceImpl.java
index 0e6d057..1a2b5b5 100644
--- a/lens-server/src/main/java/org/apache/lens/server/metastore/CubeMetastoreServiceImpl.java
+++ b/lens-server/src/main/java/org/apache/lens/server/metastore/CubeMetastoreServiceImpl.java
@@ -416,6 +416,28 @@ public class CubeMetastoreServiceImpl extends LensService implements CubeMetasto
}
@Override
+ public List<String> getAllDimTableNames(LensSessionHandle sessionid, String dimensionName) throws LensException {
+ try {
+ acquire(sessionid);
+ CubeMetastoreClient client = getClient(sessionid);
+ Dimension dimension = client.getDimension(dimensionName);
+ if (dimensionName != null && dimension == null) {
+ throw new LensException("Could not get table: " + dimensionName + " as a dimension");
+ }
+ Collection<CubeDimensionTable> dims = client.getAllDimensionTables(dimension);
+ List<String> dimNames = new ArrayList<String>(dims.size());
+ for (CubeDimensionTable cdt : dims) {
+ dimNames.add(cdt.getName());
+ }
+ return dimNames;
+ } catch (HiveException e) {
+ throw new LensException(e);
+ } finally {
+ release(sessionid);
+ }
+ }
+
+ @Override
public void dropAllStoragesOfFact(LensSessionHandle sessionid, String factName) throws LensException {
try {
acquire(sessionid);
@@ -458,27 +480,6 @@ public class CubeMetastoreServiceImpl extends LensService implements CubeMetasto
}
@Override
- public List<XFactTable> getAllFactsOfCube(LensSessionHandle sessionid, String cubeName) throws LensException {
- try {
- acquire(sessionid);
- CubeMetastoreClient msClient = getClient(sessionid);
- List<CubeFactTable> cubeFacts = msClient.getAllFactTables(msClient.getCube(cubeName));
- if (cubeFacts != null && !cubeFacts.isEmpty()) {
- List<XFactTable> facts = new ArrayList<XFactTable>(cubeFacts.size());
- for (CubeFactTable cft : cubeFacts) {
- facts.add(JAXBUtils.factTableFromCubeFactTable(cft));
- }
- return facts;
- }
- } catch (HiveException e) {
- throw new LensException(e);
- } finally {
- release(sessionid);
- }
- return null;
- }
-
- @Override
public XFactTable getFactTable(LensSessionHandle sessionid, String fact) throws LensException {
try {
acquire(sessionid);
@@ -550,10 +551,15 @@ public class CubeMetastoreServiceImpl extends LensService implements CubeMetasto
}
@Override
- public List<String> getAllFactNames(LensSessionHandle sessionid) throws LensException {
+ public List<String> getAllFactNames(LensSessionHandle sessionid, String cubeName) throws LensException {
try {
acquire(sessionid);
- Collection<CubeFactTable> facts = getClient(sessionid).getAllFacts();
+ CubeMetastoreClient client = getClient(sessionid);
+ CubeInterface fact = client.getCube(cubeName);
+ if (cubeName != null && fact == null) {
+ throw new LensException("Could not get table: " + cubeName + " as a cube");
+ }
+ Collection<CubeFactTable> facts = client.getAllFacts(fact);
List<String> factNames = new ArrayList<String>(facts.size());
for (CubeFactTable cft : facts) {
factNames.add(cft.getName());
@@ -566,22 +572,6 @@ public class CubeMetastoreServiceImpl extends LensService implements CubeMetasto
}
}
- @Override
- public List<String> getAllDimTableNames(LensSessionHandle sessionid) throws LensException {
- try {
- acquire(sessionid);
- Collection<CubeDimensionTable> dims = getClient(sessionid).getAllDimensionTables();
- List<String> dimNames = new ArrayList<String>(dims.size());
- for (CubeDimensionTable cdt : dims) {
- dimNames.add(cdt.getName());
- }
- return dimNames;
- } catch (HiveException e) {
- throw new LensException(e);
- } finally {
- release(sessionid);
- }
- }
@Override
public List<String> getStoragesOfFact(LensSessionHandle sessionid, String fact) throws LensException {
http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/309f62cc/lens-server/src/main/java/org/apache/lens/server/metastore/MetastoreResource.java
----------------------------------------------------------------------
diff --git a/lens-server/src/main/java/org/apache/lens/server/metastore/MetastoreResource.java b/lens-server/src/main/java/org/apache/lens/server/metastore/MetastoreResource.java
index 06c352e..a6178e2 100644
--- a/lens-server/src/main/java/org/apache/lens/server/metastore/MetastoreResource.java
+++ b/lens-server/src/main/java/org/apache/lens/server/metastore/MetastoreResource.java
@@ -37,6 +37,8 @@ import org.apache.log4j.Logger;
import org.glassfish.jersey.media.multipart.FormDataParam;
+import com.google.common.collect.Lists;
+
/**
* metastore resource api
* <p/>
@@ -341,9 +343,13 @@ public class MetastoreResource {
private void checkTableNotFound(LensException e, String table) {
+ List<String> messages = Lists.newArrayList();
+ messages.add(e.getMessage());
if (e.getCause() instanceof HiveException) {
- HiveException hiveErr = (HiveException) e.getCause();
- if (hiveErr.getMessage().startsWith("Could not get table")) {
+ messages.add(e.getCause().getMessage());
+ }
+ for (String message : messages) {
+ if (message.startsWith("Could not get table")) {
throw new NotFoundException("Table not found " + table, e);
}
}
@@ -714,6 +720,27 @@ public class MetastoreResource {
}
/**
+ * Get all dimtables that belong to a dimension in the metastore
+ *
+ * @param sessionid The sessionid in which user is working
+ * @param dimensionName name of the dimension
+ * @return List of {@link XDimensionTable} objects
+ */
+ @GET
+ @Path("/dimensions/{dimName}/dimtables")
+ public StringList getAllDimensionTablesOfDimension(
+ @QueryParam("sessionid") LensSessionHandle sessionid, @PathParam("dimName") String dimensionName)
+ throws LensException {
+ checkSessionId(sessionid);
+ try {
+ return new StringList(getSvc().getAllDimTableNames(sessionid, dimensionName));
+ } catch (LensException exc) {
+ checkTableNotFound(exc, dimensionName);
+ throw exc;
+ }
+ }
+
+ /**
* Get all facts that belong to a cube in the metastore
*
* @param sessionid The sessionid in which user is working
@@ -722,12 +749,12 @@ public class MetastoreResource {
*/
@GET
@Path("/cubes/{cubeName}/facts")
- public List<XFactTable> getAllFactsOfCube(
+ public StringList getAllFactsOfCube(
@QueryParam("sessionid") LensSessionHandle sessionid, @PathParam("cubeName") String cubeName)
throws LensException {
checkSessionId(sessionid);
try {
- return getSvc().getAllFactsOfCube(sessionid, cubeName);
+ return new StringList(getSvc().getAllFactNames(sessionid, cubeName));
} catch (LensException exc) {
checkTableNotFound(exc, cubeName);
throw exc;
@@ -744,7 +771,7 @@ public class MetastoreResource {
@Path("/facts")
public StringList getAllFacts(@QueryParam("sessionid") LensSessionHandle sessionid) throws LensException {
checkSessionId(sessionid);
- return new StringList(getSvc().getAllFactNames(sessionid));
+ return new StringList(getSvc().getAllFactNames(sessionid, null));
}
/**
@@ -1147,7 +1174,7 @@ public class MetastoreResource {
@GET
@Path("/dimtables")
public StringList getAllDims(@QueryParam("sessionid") LensSessionHandle sessionid) throws LensException {
- return new StringList(getSvc().getAllDimTableNames(sessionid));
+ return new StringList(getSvc().getAllDimTableNames(sessionid, null));
}
/**