Repository: carbondata Updated Branches: refs/heads/carbonstore 638ed1fa7 -> b3f782062
[CARBONDATA-2521] Support create carbonReader without tableName Add new method for creating carbonReader without tableName 1.add new interface: public static CarbonReaderBuilder builder(String tablePath) 2.Default value of table name is UnknownTable + time This closes #2336 Project: http://git-wip-us.apache.org/repos/asf/carbondata/repo Commit: http://git-wip-us.apache.org/repos/asf/carbondata/commit/5b2b9130 Tree: http://git-wip-us.apache.org/repos/asf/carbondata/tree/5b2b9130 Diff: http://git-wip-us.apache.org/repos/asf/carbondata/diff/5b2b9130 Branch: refs/heads/carbonstore Commit: 5b2b9130411da7737a76b8901f61c59639113e5d Parents: b338459 Author: xubo245 <xub...@huawei.com> Authored: Wed May 23 21:08:23 2018 +0800 Committer: Jacky Li <jacky.li...@qq.com> Committed: Thu May 31 14:19:47 2018 +0800 ---------------------------------------------------------------------- docs/sdk-guide.md | 21 +++++- .../carbondata/sdk/file/CarbonReader.java | 19 +++++ .../carbondata/sdk/file/CarbonReaderTest.java | 76 ++++++++++++++++++++ 3 files changed, 113 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/carbondata/blob/5b2b9130/docs/sdk-guide.md ---------------------------------------------------------------------- diff --git a/docs/sdk-guide.md b/docs/sdk-guide.md index 1d225a9..360516a 100644 --- a/docs/sdk-guide.md +++ b/docs/sdk-guide.md @@ -429,14 +429,29 @@ Find example code at [CarbonReaderExample](https://github.com/apache/carbondata/ ### Class org.apache.carbondata.sdk.file.CarbonReader ``` - /** - * Return a new CarbonReaderBuilder instance - */ + /** + * Return a new {@link CarbonReaderBuilder} instance + * + * @param tablePath table store path + * @param tableName table name + * @return CarbonReaderBuilder object + */ public static CarbonReaderBuilder builder(String tablePath, String tableName); ``` ``` /** + * Return a new CarbonReaderBuilder instance + * Default value of table name is table + tablePath + time + * + * @param tablePath table path + * @return CarbonReaderBuilder object + */ + public static CarbonReaderBuilder builder(String tablePath); +``` + +``` + /** * Return true if has next row */ public boolean hasNext(); http://git-wip-us.apache.org/repos/asf/carbondata/blob/5b2b9130/store/sdk/src/main/java/org/apache/carbondata/sdk/file/CarbonReader.java ---------------------------------------------------------------------- diff --git a/store/sdk/src/main/java/org/apache/carbondata/sdk/file/CarbonReader.java b/store/sdk/src/main/java/org/apache/carbondata/sdk/file/CarbonReader.java index 60ead05..81db7b2 100644 --- a/store/sdk/src/main/java/org/apache/carbondata/sdk/file/CarbonReader.java +++ b/store/sdk/src/main/java/org/apache/carbondata/sdk/file/CarbonReader.java @@ -18,6 +18,8 @@ package org.apache.carbondata.sdk.file; import java.io.IOException; +import java.text.SimpleDateFormat; +import java.util.Date; import java.util.List; import org.apache.carbondata.common.annotations.InterfaceAudience; @@ -83,12 +85,29 @@ public class CarbonReader<T> { /** * Return a new {@link CarbonReaderBuilder} instance + * + * @param tablePath table store path + * @param tableName table name + * @return CarbonReaderBuilder object */ public static CarbonReaderBuilder builder(String tablePath, String tableName) { return new CarbonReaderBuilder(tablePath, tableName); } /** + * Return a new {@link CarbonReaderBuilder} instance + * Default value of table name is table + tablePath + time + * + * @param tablePath table path + * @return CarbonReaderBuilder object + */ + public static CarbonReaderBuilder builder(String tablePath) { + String time = new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date()); + String tableName = "UnknownTable" + time; + return builder(tablePath, tableName); + } + + /** * Close reader * * @throws IOException http://git-wip-us.apache.org/repos/asf/carbondata/blob/5b2b9130/store/sdk/src/test/java/org/apache/carbondata/sdk/file/CarbonReaderTest.java ---------------------------------------------------------------------- diff --git a/store/sdk/src/test/java/org/apache/carbondata/sdk/file/CarbonReaderTest.java b/store/sdk/src/test/java/org/apache/carbondata/sdk/file/CarbonReaderTest.java index deb6d06..95c25f8 100644 --- a/store/sdk/src/test/java/org/apache/carbondata/sdk/file/CarbonReaderTest.java +++ b/store/sdk/src/test/java/org/apache/carbondata/sdk/file/CarbonReaderTest.java @@ -225,6 +225,82 @@ public class CarbonReaderTest extends TestCase { } @Test + public void testWriteAndReadFilesWithoutTableName() throws IOException, InterruptedException { + String path = "./testWriteFiles"; + FileUtils.deleteDirectory(new File(path)); + + Field[] fields = new Field[2]; + fields[0] = new Field("name", DataTypes.STRING); + fields[1] = new Field("age", DataTypes.INT); + + TestUtil.writeFilesAndVerify(new Schema(fields), path, true); + + CarbonReader reader = CarbonReader + .builder(path) + .projection(new String[]{"name", "age"}) + .isTransactionalTable(true) + .build(); + + // expected output after sorting + String[] name = new String[100]; + int[] age = new int[100]; + for (int i = 0; i < 100; i++) { + name[i] = "robot" + (i / 10); + age[i] = (i % 10) * 10 + i / 10; + } + + int i = 0; + while (reader.hasNext()) { + Object[] row = (Object[]) reader.readNextRow(); + // Default sort column is applied for dimensions. So, need to validate accordingly + Assert.assertEquals(name[i], row[0]); + Assert.assertEquals(age[i], row[1]); + i++; + } + Assert.assertEquals(i, 100); + + reader.close(); + FileUtils.deleteDirectory(new File(path)); + } + + @Test + public void testWriteAndReadFilesWithoutTableName2() throws IOException, InterruptedException { + String path = "./testWriteFiles"; + FileUtils.deleteDirectory(new File(path)); + + Field[] fields = new Field[2]; + fields[0] = new Field("name", DataTypes.STRING); + fields[1] = new Field("age", DataTypes.INT); + + TestUtil.writeFilesAndVerify(new Schema(fields), path, true,false); + + CarbonReader reader = CarbonReader + .builder(path) + .build(); + + // expected output after sorting + String[] name = new String[100]; + int[] age = new int[100]; + for (int i = 0; i < 100; i++) { + name[i] = "robot" + (i / 10); + age[i] = (i % 10) * 10 + i / 10; + } + + int i = 0; + while (reader.hasNext()) { + Object[] row = (Object[]) reader.readNextRow(); + // Default sort column is applied for dimensions. So, need to validate accordingly + Assert.assertEquals(name[i], row[0]); + Assert.assertEquals(age[i], row[1]); + i++; + } + Assert.assertEquals(i, 100); + + reader.close(); + FileUtils.deleteDirectory(new File(path)); + } + + @Test public void testReadSchemaFromDataFile() throws IOException { String path = "./testWriteFiles"; FileUtils.deleteDirectory(new File(path));