You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kylin.apache.org by li...@apache.org on 2018/03/03 04:53:59 UTC
[kylin] 11/11: KYLIN-3251,
add a hook that can customize test_case_data and add
MetadataCleanupJob UT.
This is an automated email from the ASF dual-hosted git repository.
liyang pushed a commit to branch sync
in repository https://gitbox.apache.org/repos/asf/kylin.git
commit a05a4d0058976f7a940fdf840643ab7c820ff6e4
Author: Jiatao Tao <24...@qq.com>
AuthorDate: Tue Feb 27 16:56:50 2018 +0800
KYLIN-3251, add a hook that can customize test_case_data and add MetadataCleanupJob UT.
minor, refine test.
minor, refine test.
---
.../common/util/LocalFileMetadataTestCase.java | 77 ++-
.../org/apache/kylin/tool/MetadataCleanupJob.java | 56 +-
.../apache/kylin/tool/MetadataCleanupJobTest.java | 76 +++
tool/src/test/resources/test_meta/UUID | Bin 0 -> 38 bytes
.../test_meta/cube/ci_inner_join_cube.json | 60 +++
.../test_meta/cube_desc/ci_inner_join_cube.json | 574 +++++++++++++++++++++
.../04b6db34-b243-4780-855a-4c7ea4cee817.seq | Bin 0 -> 2605183 bytes
.../NAME/b58ce89d-3df6-46d1-8cff-2a9cfc8b7510.dict | Bin 0 -> 823 bytes
.../NAME/64ca8fea-b859-4e63-aea3-bfb4c6ee0c9d.dict | Bin 0 -> 844 bytes
.../execute/d861b8b7-c773-47ab-bb1e-c8782ae8d930 | 41 ++
.../d861b8b7-c773-47ab-bb1e-c8782ae8d930 | 13 +
.../d861b8b7-c773-47ab-bb1e-c8782ae8d930-00 | 13 +
.../d861b8b7-c773-47ab-bb1e-c8782ae8d930-01 | 13 +
tool/src/test/resources/test_meta/kylin.properties | 0
.../test_meta/model_desc/ci_inner_join_model.json | 231 +++++++++
.../test/resources/test_meta/project/default.json | 35 ++
.../test_meta/table/DEFAULT.TEST_ACCOUNT.json | 36 ++
.../table/DEFAULT.TEST_CATEGORY_GROUPINGS.json | 155 ++++++
.../test_meta/table/DEFAULT.TEST_COUNTRY.json | 26 +
.../test_meta/table/DEFAULT.TEST_KYLIN_FACT.json | 68 +++
.../test_meta/table/DEFAULT.TEST_ORDER.json | 35 ++
.../resources/test_meta/table/EDW.TEST_CAL_DT.json | 413 +++++++++++++++
.../test_meta/table/EDW.TEST_SELLER_TYPE_DIM.json | 46 ++
.../resources/test_meta/table/EDW.TEST_SITES.json | 51 ++
.../92456efe-9b79-4385-a5a3-e7f37b677bf7.snapshot | Bin 0 -> 16063 bytes
.../7ecdb07b-a8d0-49d8-892b-fe2dd75512ca.snapshot | Bin 0 -> 16061 bytes
26 files changed, 1968 insertions(+), 51 deletions(-)
diff --git a/core-common/src/test/java/org/apache/kylin/common/util/LocalFileMetadataTestCase.java b/core-common/src/test/java/org/apache/kylin/common/util/LocalFileMetadataTestCase.java
index 5e6b840..20e1df7 100644
--- a/core-common/src/test/java/org/apache/kylin/common/util/LocalFileMetadataTestCase.java
+++ b/core-common/src/test/java/org/apache/kylin/common/util/LocalFileMetadataTestCase.java
@@ -27,37 +27,40 @@ import org.apache.kylin.common.persistence.ResourceStore;
public class LocalFileMetadataTestCase extends AbstractKylinTestCase {
- public static String LOCALMETA_TEST_DATA = "../examples/test_case_data/localmeta";
- public static String LOCALMETA_TEMP_DATA = "../examples/test_metadata/";
+ public static final String LOCALMETA_TEST_DATA = "../examples/test_case_data/localmeta";
+ public static final String LOCALMETA_TEMP_DATA = "../examples/test_metadata/";
@Override
public void createTestMetadata(String... overlayMetadataDirs) {
- //overlayMetadataDirs is useless yet
- staticCreateTestMetadata(overlayMetadataDirs);
+ staticCreateTestMetadata(true, new OverlayMetaHook(overlayMetadataDirs));
}
public static void staticCreateTestMetadata(String... overlayMetadataDirs) {
- String testDataFolder = LOCALMETA_TEST_DATA;
- KylinConfig.destroyInstance();
+ staticCreateTestMetadata(true, new OverlayMetaHook(overlayMetadataDirs));
+ }
- String tempTestMetadataUrl = LOCALMETA_TEMP_DATA;
+ public static void staticCreateTestMetadata(boolean useTestMeta, MetadataTestCaseHook hook) {
try {
- FileUtils.deleteDirectory(new File(tempTestMetadataUrl));
- FileUtils.copyDirectory(new File(testDataFolder), new File(tempTestMetadataUrl));
+ KylinConfig.destroyInstance();
- for (String overlay : overlayMetadataDirs) {
- FileUtils.copyDirectory(new File(overlay), new File(tempTestMetadataUrl));
+ FileUtils.deleteDirectory(new File(LOCALMETA_TEMP_DATA));
+ if (useTestMeta) {
+ FileUtils.copyDirectory(new File(LOCALMETA_TEST_DATA), new File(LOCALMETA_TEMP_DATA));
}
- } catch (IOException e) {
- e.printStackTrace();
- }
- if (System.getProperty(KylinConfig.KYLIN_CONF) == null && System.getenv(KylinConfig.KYLIN_CONF) == null)
- System.setProperty(KylinConfig.KYLIN_CONF, tempTestMetadataUrl);
+ if (System.getProperty(KylinConfig.KYLIN_CONF) == null && System.getenv(KylinConfig.KYLIN_CONF) == null) {
+ System.setProperty(KylinConfig.KYLIN_CONF, LOCALMETA_TEMP_DATA);
+ }
- KylinConfig config = KylinConfig.getInstanceFromEnv();
- config.setMetadataUrl(tempTestMetadataUrl);
- config.setProperty("kylin.env.hdfs-working-dir", "file:///tmp/kylin");
+ if (hook != null) {
+ hook.hook();
+ }
+ KylinConfig config = KylinConfig.getInstanceFromEnv();
+ config.setMetadataUrl(LOCALMETA_TEMP_DATA);
+ config.setProperty("kylin.env.hdfs-working-dir", "file:///tmp/kylin");
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
}
public static void cleanAfterClass() {
@@ -90,4 +93,40 @@ public class LocalFileMetadataTestCase extends AbstractKylinTestCase {
protected ResourceStore getStore() {
return ResourceStore.getStore(KylinConfig.getInstanceFromEnv());
}
+
+ public interface MetadataTestCaseHook {
+ void hook() throws IOException;
+ }
+
+ public static class OverlayMetaHook implements MetadataTestCaseHook {
+ private String[] overlayMetadataDirs;
+
+ public OverlayMetaHook(String... overlayMetadataDirs) {
+ this.overlayMetadataDirs = overlayMetadataDirs;
+ }
+
+ @Override
+ public void hook() throws IOException {
+ //some test cases may require additional metadata entries besides standard test metadata in test_case_data/localmeta
+ for (String overlay : overlayMetadataDirs) {
+ FileUtils.copyDirectory(new File(overlay), new File(LOCALMETA_TEMP_DATA));
+ }
+ }
+ }
+
+ public static class ExcludeMetaHook implements MetadataTestCaseHook {
+ private String[] excludeMetadataDirs;
+
+ public ExcludeMetaHook(String... excludeMetadataDirs) {
+ this.excludeMetadataDirs = excludeMetadataDirs;
+ }
+
+ @Override
+ public void hook() throws IOException {
+ //some test cases may want exclude metadata entries besides standard test metadata in test_case_data/localmeta
+ for (String exclude : excludeMetadataDirs) {
+ FileUtils.deleteQuietly(new File(exclude));
+ }
+ }
+ }
}
diff --git a/tool/src/main/java/org/apache/kylin/tool/MetadataCleanupJob.java b/tool/src/main/java/org/apache/kylin/tool/MetadataCleanupJob.java
index 8e17645..d1c8423 100644
--- a/tool/src/main/java/org/apache/kylin/tool/MetadataCleanupJob.java
+++ b/tool/src/main/java/org/apache/kylin/tool/MetadataCleanupJob.java
@@ -41,30 +41,23 @@ import org.slf4j.LoggerFactory;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
-/**
- */
public class MetadataCleanupJob extends AbstractHadoopJob {
@SuppressWarnings("static-access")
- private static final Option OPTION_DELETE = OptionBuilder.withArgName("delete").hasArg().isRequired(false).withDescription("Delete the unused metadata").create("delete");
+ private static final Option OPTION_DELETE = OptionBuilder.withArgName("delete").hasArg().isRequired(false)
+ .withDescription("Delete the unused metadata").create("delete");
@SuppressWarnings("static-access")
- private static final Option OPTION_THRESHOLD_FOR_JOB = OptionBuilder.withArgName("jobThreshold").hasArg().isRequired(false).withDescription("Specify how many days of job metadata keeping. Default 30 days").create("jobThreshold");
+ private static final Option OPTION_THRESHOLD_FOR_JOB = OptionBuilder.withArgName("jobThreshold").hasArg()
+ .isRequired(false).withDescription("Specify how many days of job metadata keeping. Default 30 days")
+ .create("jobThreshold");
protected static final Logger logger = LoggerFactory.getLogger(MetadataCleanupJob.class);
-
- boolean delete = false;
-
+ private boolean delete = false;
private KylinConfig config = null;
-
private static final long TIME_THREADSHOLD = 1 * 3600 * 1000L; // 1 hour
- private static final int DEFAULT_DAY_THREADSHOLD_FOR_JOB = 30 ; // 30 days
+ private static final int DEFAULT_DAY_THREADSHOLD_FOR_JOB = 30; // 30 days
- /*
- * (non-Javadoc)
- *
- * @see org.apache.hadoop.util.Tool#run(java.lang.String[])
- */
@Override
public int run(String[] args) throws Exception {
Options options = new Options();
@@ -78,11 +71,10 @@ public class MetadataCleanupJob extends AbstractHadoopJob {
logger.info("delete option value: '" + getOptionValue(OPTION_DELETE) + "'");
logger.info("jobThreshold option value: '" + getOptionValue(OPTION_THRESHOLD_FOR_JOB) + "'");
delete = Boolean.parseBoolean(getOptionValue(OPTION_DELETE));
-
- config = KylinConfig.getInstanceFromEnv();
-
- cleanup();
-
+ int jobThresholdDay = optionsHelper.hasOption(OPTION_THRESHOLD_FOR_JOB)
+ ? Integer.valueOf(optionsHelper.getOptionValue(OPTION_THRESHOLD_FOR_JOB))
+ : DEFAULT_DAY_THREADSHOLD_FOR_JOB;
+ cleanup(delete, jobThresholdDay);
return 0;
}
@@ -92,19 +84,17 @@ public class MetadataCleanupJob extends AbstractHadoopJob {
private boolean isOlderThanThreshold(long resourceTime) {
long currentTime = System.currentTimeMillis();
-
- if (currentTime - resourceTime > TIME_THREADSHOLD)
- return true;
- return false;
+ return currentTime - resourceTime > TIME_THREADSHOLD;
}
- public void cleanup() throws Exception {
- CubeManager cubeManager = CubeManager.getInstance(config);
-
+ public List<String> cleanup(boolean delete, int jobThresholdDay) throws Exception {
+ config = KylinConfig.getInstanceFromEnv();
+ CubeManager cubeManager = CubeManager.getInstance(KylinConfig.getInstanceFromEnv());
List<String> toDeleteResource = Lists.newArrayList();
// two level resources, snapshot tables and cube statistics
- for (String resourceRoot : new String[] { ResourceStore.SNAPSHOT_RESOURCE_ROOT, ResourceStore.CUBE_STATISTICS_ROOT }) {
+ for (String resourceRoot : new String[]{ResourceStore.SNAPSHOT_RESOURCE_ROOT,
+ ResourceStore.CUBE_STATISTICS_ROOT}) {
NavigableSet<String> snapshotTables = getStore().listResources(resourceRoot);
if (snapshotTables != null) {
@@ -153,10 +143,11 @@ public class MetadataCleanupJob extends AbstractHadoopJob {
for (ExecutablePO executable : allExecutable) {
long lastModified = executable.getLastModified();
ExecutableOutputPO output = executableDao.getJobOutput(executable.getUuid());
- int jobThresholdDay = optionsHelper.hasOption(OPTION_THRESHOLD_FOR_JOB) ? Integer.valueOf(optionsHelper.getOptionValue(OPTION_THRESHOLD_FOR_JOB)) : DEFAULT_DAY_THREADSHOLD_FOR_JOB;
long jobThresholdTime = jobThresholdDay * 24 * 3600 * 1000L;
- if (System.currentTimeMillis() - lastModified > jobThresholdTime && (ExecutableState.SUCCEED.toString().equals(output.getStatus()) || ExecutableState.DISCARDED.toString().equals(output.getStatus()))) {
+ if (System.currentTimeMillis() - lastModified > jobThresholdTime
+ && (ExecutableState.SUCCEED.toString().equals(output.getStatus())
+ || ExecutableState.DISCARDED.toString().equals(output.getStatus()))) {
toDeleteResource.add(ResourceStore.EXECUTE_RESOURCE_ROOT + "/" + executable.getUuid());
toDeleteResource.add(ResourceStore.EXECUTE_OUTPUT_RESOURCE_ROOT + "/" + executable.getUuid());
@@ -167,18 +158,19 @@ public class MetadataCleanupJob extends AbstractHadoopJob {
}
if (toDeleteResource.size() > 0) {
- logger.info("The following resources have no reference or is too old, will be cleaned from metadata store: \n");
+ logger.info(
+ "The following resources have no reference or is too old, will be cleaned from metadata store: \n");
for (String s : toDeleteResource) {
logger.info(s);
- if (delete == true) {
+ if (delete) {
getStore().deleteResource(s);
}
}
} else {
logger.info("No resource to be cleaned up from metadata store;");
}
-
+ return toDeleteResource;
}
public static void main(String[] args) throws Exception {
diff --git a/tool/src/test/java/org/apache/kylin/tool/MetadataCleanupJobTest.java b/tool/src/test/java/org/apache/kylin/tool/MetadataCleanupJobTest.java
new file mode 100644
index 0000000..ae3bef4
--- /dev/null
+++ b/tool/src/test/java/org/apache/kylin/tool/MetadataCleanupJobTest.java
@@ -0,0 +1,76 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.kylin.tool;
+
+import static org.apache.kylin.common.util.LocalFileMetadataTestCase.LOCALMETA_TEMP_DATA;
+import static org.apache.kylin.common.util.LocalFileMetadataTestCase.cleanAfterClass;
+import static org.apache.kylin.common.util.LocalFileMetadataTestCase.staticCreateTestMetadata;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Collection;
+import java.util.List;
+
+import org.apache.commons.io.FileUtils;
+import org.apache.kylin.common.util.LocalFileMetadataTestCase;
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Test;
+
+public class MetadataCleanupJobTest {
+
+ @After
+ public void after() throws Exception {
+ cleanAfterClass();
+ }
+
+ @Test
+ public void testCleanUp() throws Exception {
+ staticCreateTestMetadata(false, new ResetTimeHook(1, "src/test/resources/test_meta"));
+ MetadataCleanupJob metadataCleanupJob = new MetadataCleanupJob();
+ List<String> cleanupList = metadataCleanupJob.cleanup(false, 30);
+ Assert.assertEquals(7, cleanupList.size());
+ }
+
+ @Test
+ public void testNotCleanUp() throws Exception {
+ staticCreateTestMetadata(false, new ResetTimeHook(System.currentTimeMillis(), "src/test/resources/test_meta"));
+ MetadataCleanupJob metadataCleanupJob = new MetadataCleanupJob();
+ List<String> cleanupList = metadataCleanupJob.cleanup(false, 30);
+ Assert.assertEquals(0, cleanupList.size());
+ }
+
+ private class ResetTimeHook extends LocalFileMetadataTestCase.OverlayMetaHook {
+ private long lastModified;
+
+ ResetTimeHook(long lastModified, String... overlayMetadataDirs) {
+ super(overlayMetadataDirs);
+ this.lastModified = lastModified;
+ }
+
+ @Override
+ public void hook() throws IOException {
+ super.hook();
+ Collection<File> files = FileUtils.listFiles(new File(LOCALMETA_TEMP_DATA), null, true);
+ for (File file : files) {
+ file.setLastModified(lastModified);
+ }
+ }
+ }
+}
diff --git a/tool/src/test/resources/test_meta/UUID b/tool/src/test/resources/test_meta/UUID
new file mode 100644
index 0000000..981981c
Binary files /dev/null and b/tool/src/test/resources/test_meta/UUID differ
diff --git a/tool/src/test/resources/test_meta/cube/ci_inner_join_cube.json b/tool/src/test/resources/test_meta/cube/ci_inner_join_cube.json
new file mode 100644
index 0000000..0b074b6
--- /dev/null
+++ b/tool/src/test/resources/test_meta/cube/ci_inner_join_cube.json
@@ -0,0 +1,60 @@
+{
+ "uuid" : "8372c3b7-a33e-4b69-83dd-0bb8b1f8117e",
+ "last_modified" : 0,
+ "name" : "ci_inner_join_cube",
+ "owner" : null,
+ "descriptor" : "ci_inner_join_cube",
+ "display_name" : "ci_inner_join_cube",
+ "cost" : 50,
+ "status" : "READY",
+ "segments" : [{
+ "uuid" : "adb2275e-c1d5-498b-b8ea-0201586868aa",
+ "name" : "19700101000000_20220701000000",
+ "storage_location_identifier" : "KYLIN_J9TE08D9IA",
+ "date_range_start" : 0,
+ "date_range_end" : 1656633600000,
+ "source_offset_start" : 0,
+ "source_offset_end" : 0,
+ "status" : "READY",
+ "size_kb" : 78965,
+ "input_records" : 9911,
+ "input_records_size" : 3955601,
+ "last_build_time" : 1511364122982,
+ "last_build_job_id" : "b58ed952-3041-4431-b560-09b78fa1fca0",
+ "create_time_utc" : 1511363249614,
+ "cuboid_shard_nums" : {
+ "7864320" : 2,
+ "8847375" : 6,
+ "41943504" : 6,
+ "458784" : 2,
+ "3145728" : 2,
+ "8323104" : 4,
+ "2097152" : 2,
+ "8388608" : 2,
+ "16252928" : 6,
+ "25230848" : 6,
+ "3670016" : 2,
+ "67108863" : 6
+ },
+ "total_shards" : 0,
+ "blackout_cuboids" : [ ],
+ "binary_signature" : null,
+ "dictionaries" : {
+ "BUYER_COUNTRY.NAME" : "/dict/DEFAULT.TEST_COUNTRY/NAME/64ca8fea-b859-4e63-aea3-bfb4c6ee0c9d.dict"
+ },
+ "snapshots" : {
+ "DEFAULT.TEST_COUNTRY" : "/table_snapshot/DEFAULT.TEST_COUNTRY/7ecdb07b-a8d0-49d8-892b-fe2dd75512ca.snapshot"
+ },
+ "rowkey_stats" : [ [ "TEST_KYLIN_FACT.LEAF_CATEG_ID", 134, 1 ], [ "TEST_CATEGORY_GROUPINGS.META_CATEG_NAME", 44, 1 ], [ "TEST_CATEGORY_GROUPINGS.CATEG_LVL2_NAME", 94, 1 ], [ "TEST_CATEGORY_GROUPINGS.CATEG_LVL3_NAME", 127, 1 ], [ "TEST_KYLIN_FACT.LSTG_SITE_ID", 8, 1 ], [ "TEST_KYLIN_FACT.SLR_SEGMENT_CD", 8, 1 ], [ "BUYER_ACCOUNT.ACCOUNT_BUYER_LEVEL", 5, 1 ], [ "BUYER_ACCOUNT.ACCOUNT_SELLER_LEVEL", 5, 1 ], [ "BUYER_ACCOUNT.ACCOUNT_COUNTRY", 8, 1 ], [ "BUYER_COUNTRY.NAME", 8, 1 ], [ "SE [...]
+ "additionalInfo" : {
+ "storageType" : "99",
+ "segmentPath" : "file:///Users/imad/mock_kylin/metastore/ci_cube/parquet/8372c3b7-a33e-4b69-83dd-0bb8b1f8117e/adb2275e-c1d5-498b-b8ea-0201586868aa/",
+ "storageFileCount" : "30",
+ "storageSizeBytes" : "80860160",
+ "tableIndexSegmentPath" : "file:///Users/imad/mock_kylin/metastore/ci_cube/parquet/2993d0d2-ee05-4e3a-8247-b121a1bdf7bc/adb2275e-c1d5-498b-b8ea-0201586868aa/",
+ "tableIndexFileCount" : "7",
+ "tableIndexStorageSizeBytes" : "8700293"
+ }
+ }],
+ "create_time" : null
+}
\ No newline at end of file
diff --git a/tool/src/test/resources/test_meta/cube_desc/ci_inner_join_cube.json b/tool/src/test/resources/test_meta/cube_desc/ci_inner_join_cube.json
new file mode 100644
index 0000000..809e188
--- /dev/null
+++ b/tool/src/test/resources/test_meta/cube_desc/ci_inner_join_cube.json
@@ -0,0 +1,574 @@
+{
+ "uuid": "3819ad72-3929-4dff-b59d-cd89a01238af",
+ "name": "ci_inner_join_cube",
+ "model_name": "ci_inner_join_model",
+ "description": null,
+ "dimensions": [
+ {
+ "name": "CAL_DT",
+ "table": "TEST_CAL_DT",
+ "column": "{FK}",
+ "derived": [
+ "WEEK_BEG_DT"
+ ]
+ },
+ {
+ "name": "ORDER_ID",
+ "table": "TEST_KYLIN_FACT",
+ "column": "ORDER_ID"
+ },
+ {
+ "name": "TEST_DATE_ENC",
+ "table": "TEST_ORDER",
+ "column": "TEST_DATE_ENC"
+ },
+ {
+ "name": "TEST_TIME_ENC",
+ "table": "TEST_ORDER",
+ "column": "TEST_TIME_ENC"
+ },
+ {
+ "name": "CATEGORY",
+ "table": "TEST_CATEGORY_GROUPINGS",
+ "column": "{FK}",
+ "derived": [
+ "USER_DEFINED_FIELD1",
+ "USER_DEFINED_FIELD3",
+ "UPD_DATE",
+ "UPD_USER"
+ ]
+ },
+ {
+ "name": "CATEGORY_HIERARCHY",
+ "table": "TEST_CATEGORY_GROUPINGS",
+ "column": "META_CATEG_NAME",
+ "derived": null
+ },
+ {
+ "name": "CATEGORY_HIERARCHY",
+ "table": "TEST_CATEGORY_GROUPINGS",
+ "column": "CATEG_LVL2_NAME",
+ "derived": null
+ },
+ {
+ "name": "CATEGORY_HIERARCHY",
+ "table": "TEST_CATEGORY_GROUPINGS",
+ "column": "CATEG_LVL3_NAME",
+ "derived": null
+ },
+ {
+ "name": "LSTG_FORMAT_NAME",
+ "table": "TEST_KYLIN_FACT",
+ "column": "LSTG_FORMAT_NAME",
+ "derived": null
+ },
+ {
+ "name": "SITE_ID",
+ "table": "TEST_SITES",
+ "column": "{FK}",
+ "derived": [
+ "SITE_NAME",
+ "CRE_USER"
+ ]
+ },
+ {
+ "name": "SELLER_TYPE_CD",
+ "table": "TEST_SELLER_TYPE_DIM",
+ "column": "{FK}",
+ "derived": [
+ "SELLER_TYPE_DESC"
+ ]
+ },
+ {
+ "name": "SELLER_ID",
+ "table": "TEST_KYLIN_FACT",
+ "column": "SELLER_ID"
+ },
+ {
+ "name": "SELLER_BUYER_LEVEL",
+ "table": "SELLER_ACCOUNT",
+ "column": "ACCOUNT_BUYER_LEVEL"
+ },
+ {
+ "name": "SELLER_SELLER_LEVEL",
+ "table": "SELLER_ACCOUNT",
+ "column": "ACCOUNT_SELLER_LEVEL"
+ },
+ {
+ "name": "SELLER_COUNTRY",
+ "table": "SELLER_ACCOUNT",
+ "column": "ACCOUNT_COUNTRY"
+ },
+ {
+ "name": "SELLER_COUNTRY_NAME",
+ "table": "SELLER_COUNTRY",
+ "column": "NAME"
+ },
+ {
+ "name": "BUYER_ID",
+ "table": "TEST_ORDER",
+ "column": "BUYER_ID"
+ },
+ {
+ "name": "BUYER_BUYER_LEVEL",
+ "table": "BUYER_ACCOUNT",
+ "column": "ACCOUNT_BUYER_LEVEL"
+ },
+ {
+ "name": "BUYER_SELLER_LEVEL",
+ "table": "BUYER_ACCOUNT",
+ "column": "ACCOUNT_SELLER_LEVEL"
+ },
+ {
+ "name": "BUYER_COUNTRY",
+ "table": "BUYER_ACCOUNT",
+ "column": "ACCOUNT_COUNTRY"
+ },
+ {
+ "name": "BUYER_COUNTRY_NAME",
+ "table": "BUYER_COUNTRY",
+ "column": "NAME"
+ }
+ ],
+ "measures": [
+ {
+ "name": "TRANS_CNT",
+ "function": {
+ "expression": "COUNT",
+ "parameter": {
+ "type": "constant",
+ "value": "1"
+ },
+ "returntype": "bigint"
+ }
+ },
+ {
+ "name": "ITEM_COUNT_SUM",
+ "function": {
+ "expression": "SUM",
+ "parameter": {
+ "type": "column",
+ "value": "TEST_KYLIN_FACT.ITEM_COUNT"
+ },
+ "returntype": "bigint"
+ }
+ },
+ {
+ "name": "GMV_SUM",
+ "function": {
+ "expression": "SUM",
+ "parameter": {
+ "type": "column",
+ "value": "TEST_KYLIN_FACT.PRICE"
+ },
+ "returntype": "decimal(19,4)"
+ }
+ },
+ {
+ "name": "GMV_MIN",
+ "function": {
+ "expression": "MIN",
+ "parameter": {
+ "type": "column",
+ "value": "TEST_KYLIN_FACT.PRICE"
+ },
+ "returntype": "decimal(19,4)"
+ }
+ },
+ {
+ "name": "GMV_MAX",
+ "function": {
+ "expression": "MAX",
+ "parameter": {
+ "type": "column",
+ "value": "TEST_KYLIN_FACT.PRICE"
+ },
+ "returntype": "decimal(19,4)"
+ }
+ },
+ {
+ "name": "SELLER_HLL",
+ "function": {
+ "expression": "COUNT_DISTINCT",
+ "parameter": {
+ "type": "column",
+ "value": "TEST_KYLIN_FACT.SELLER_ID"
+ },
+ "returntype": "hllc(10)"
+ }
+ },
+ {
+ "name": "SELLER_FORMAT_HLL",
+ "function": {
+ "expression": "COUNT_DISTINCT",
+ "parameter": {
+ "type": "column",
+ "value": "TEST_KYLIN_FACT.LSTG_FORMAT_NAME",
+ "next_parameter": {
+ "type": "column",
+ "value": "TEST_KYLIN_FACT.SELLER_ID"
+ }
+ },
+ "returntype": "hllc(10)"
+ }
+ },
+ {
+ "name": "TOP_SELLER",
+ "function": {
+ "expression": "TOP_N",
+ "parameter": {
+ "type": "column",
+ "value": "TEST_KYLIN_FACT.PRICE",
+ "next_parameter": {
+ "type": "column",
+ "value": "TEST_KYLIN_FACT.SELLER_ID"
+ }
+ },
+ "returntype": "topn(100, 4)",
+ "configuration": {
+ "topn.encoding.TEST_KYLIN_FACT.SELLER_ID": "int:4"
+ }
+ }
+ },
+ {
+ "name": "TEST_COUNT_DISTINCT_BITMAP",
+ "function": {
+ "expression": "COUNT_DISTINCT",
+ "parameter": {
+ "type": "column",
+ "value": "TEST_KYLIN_FACT.TEST_COUNT_DISTINCT_BITMAP"
+ },
+ "returntype": "bitmap"
+ }
+ },
+ {
+ "name": "TEST_EXTENDED_COLUMN",
+ "function": {
+ "expression": "EXTENDED_COLUMN",
+ "parameter": {
+ "type": "column",
+ "value": "TEST_KYLIN_FACT.ORDER_ID",
+ "next_parameter": {
+ "type": "column",
+ "value": "TEST_ORDER.TEST_EXTENDED_COLUMN"
+ }
+ },
+ "returntype": "extendedcolumn(100)"
+ }
+ },
+ {
+ "name": "BUYER_CONTACT",
+ "function": {
+ "expression": "EXTENDED_COLUMN",
+ "parameter": {
+ "type": "column",
+ "value": "TEST_ORDER.BUYER_ID",
+ "next_parameter": {
+ "type": "column",
+ "value": "BUYER_ACCOUNT.ACCOUNT_CONTACT"
+ }
+ },
+ "returntype": "extendedcolumn(100)"
+ }
+ },
+ {
+ "name": "SELLER_CONTACT",
+ "function": {
+ "expression": "EXTENDED_COLUMN",
+ "parameter": {
+ "type": "column",
+ "value": "TEST_KYLIN_FACT.SELLER_ID",
+ "next_parameter": {
+ "type": "column",
+ "value": "SELLER_ACCOUNT.ACCOUNT_CONTACT"
+ }
+ },
+ "returntype": "extendedcolumn(100)"
+ }
+ },
+ {
+ "name": "TRANS_ID_RAW",
+ "function": {
+ "expression": "RAW",
+ "parameter": {
+ "type": "column",
+ "value": "TEST_KYLIN_FACT.TRANS_ID"
+ },
+ "returntype": "raw"
+ }
+ },
+ {
+ "name": "PRICE_RAW",
+ "function": {
+ "expression": "RAW",
+ "parameter": {
+ "type": "column",
+ "value": "TEST_KYLIN_FACT.PRICE"
+ },
+ "returntype": "raw"
+ }
+ },
+ {
+ "name": "CAL_DT_RAW",
+ "function": {
+ "expression": "RAW",
+ "parameter": {
+ "type": "column",
+ "value": "TEST_KYLIN_FACT.CAL_DT"
+ },
+ "returntype": "raw"
+ }
+ }
+ ],
+ "dictionaries": [
+ {
+ "column": "TEST_KYLIN_FACT.TEST_COUNT_DISTINCT_BITMAP",
+ "builder": "org.apache.kylin.dict.global.SegmentAppendTrieDictBuilder"
+ }
+ ],
+ "rowkey": {
+ "rowkey_columns": [
+ {
+ "column": "TEST_KYLIN_FACT.SELLER_ID",
+ "encoding": "int:4"
+ },
+ {
+ "column": "TEST_KYLIN_FACT.ORDER_ID",
+ "encoding": "int:4"
+ },
+ {
+ "column": "TEST_KYLIN_FACT.CAL_DT",
+ "encoding": "dict"
+ },
+ {
+ "column": "TEST_KYLIN_FACT.LEAF_CATEG_ID",
+ "encoding": "dict"
+ },
+ {
+ "column": "TEST_CATEGORY_GROUPINGS.META_CATEG_NAME",
+ "encoding": "dict"
+ },
+ {
+ "column": "TEST_CATEGORY_GROUPINGS.CATEG_LVL2_NAME",
+ "encoding": "dict"
+ },
+ {
+ "column": "TEST_CATEGORY_GROUPINGS.CATEG_LVL3_NAME",
+ "encoding": "dict"
+ },
+ {
+ "column": "TEST_KYLIN_FACT.LSTG_FORMAT_NAME",
+ "encoding": "fixed_length:12"
+ },
+ {
+ "column": "TEST_KYLIN_FACT.LSTG_SITE_ID",
+ "encoding": "dict"
+ },
+ {
+ "column": "TEST_KYLIN_FACT.SLR_SEGMENT_CD",
+ "encoding": "dict"
+ },
+ {
+ "column": "TEST_ORDER.TEST_TIME_ENC",
+ "encoding": "time"
+ },
+ {
+ "column": "TEST_ORDER.TEST_DATE_ENC",
+ "encoding": "date"
+ },
+ {
+ "column": "TEST_ORDER.BUYER_ID",
+ "encoding": "int:4"
+ },
+ {
+ "column": "BUYER_ACCOUNT.ACCOUNT_BUYER_LEVEL",
+ "encoding": "dict"
+ },
+ {
+ "column": "BUYER_ACCOUNT.ACCOUNT_SELLER_LEVEL",
+ "encoding": "dict"
+ },
+ {
+ "column": "BUYER_ACCOUNT.ACCOUNT_COUNTRY",
+ "encoding": "dict"
+ },
+ {
+ "column": "BUYER_COUNTRY.NAME",
+ "encoding": "dict"
+ },
+ {
+ "column": "SELLER_ACCOUNT.ACCOUNT_BUYER_LEVEL",
+ "encoding": "dict"
+ },
+ {
+ "column": "SELLER_ACCOUNT.ACCOUNT_SELLER_LEVEL",
+ "encoding": "dict"
+ },
+ {
+ "column": "SELLER_ACCOUNT.ACCOUNT_COUNTRY",
+ "encoding": "dict"
+ },
+ {
+ "column": "SELLER_COUNTRY.NAME",
+ "encoding": "dict"
+ }
+ ]
+ },
+ "signature": null,
+ "last_modified": 1448959801311,
+ "null_string": null,
+ "hbase_mapping": {
+ "column_family": [
+ {
+ "name": "f1",
+ "columns": [
+ {
+ "qualifier": "m",
+ "measure_refs": [
+ "TRANS_CNT",
+ "ITEM_COUNT_SUM",
+ "GMV_SUM",
+ "GMV_MIN",
+ "GMV_MAX"
+ ]
+ }
+ ]
+ },
+ {
+ "name": "f2",
+ "columns": [
+ {
+ "qualifier": "m",
+ "measure_refs": [
+ "SELLER_HLL",
+ "SELLER_FORMAT_HLL",
+ "TOP_SELLER",
+ "TEST_COUNT_DISTINCT_BITMAP"
+ ]
+ }
+ ]
+ },
+ {
+ "name": "f3",
+ "columns": [
+ {
+ "qualifier": "m",
+ "measure_refs": [
+ "TEST_EXTENDED_COLUMN",
+ "BUYER_CONTACT",
+ "SELLER_CONTACT",
+ "TRANS_ID_RAW",
+ "PRICE_RAW",
+ "CAL_DT_RAW"
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ "aggregation_groups": [
+ {
+ "includes": [
+ "TEST_KYLIN_FACT.CAL_DT",
+ "TEST_KYLIN_FACT.LEAF_CATEG_ID",
+ "TEST_KYLIN_FACT.LSTG_FORMAT_NAME",
+ "TEST_KYLIN_FACT.LSTG_SITE_ID",
+ "TEST_KYLIN_FACT.SLR_SEGMENT_CD",
+ "TEST_CATEGORY_GROUPINGS.META_CATEG_NAME",
+ "TEST_CATEGORY_GROUPINGS.CATEG_LVL2_NAME",
+ "TEST_CATEGORY_GROUPINGS.CATEG_LVL3_NAME"
+ ],
+ "select_rule": {
+ "hierarchy_dims": [
+ [
+ "TEST_CATEGORY_GROUPINGS.META_CATEG_NAME",
+ "TEST_CATEGORY_GROUPINGS.CATEG_LVL2_NAME",
+ "TEST_CATEGORY_GROUPINGS.CATEG_LVL3_NAME",
+ "TEST_KYLIN_FACT.LEAF_CATEG_ID"
+ ]
+ ],
+ "mandatory_dims": [],
+ "joint_dims": [
+ [
+ "TEST_KYLIN_FACT.LSTG_FORMAT_NAME",
+ "TEST_KYLIN_FACT.LSTG_SITE_ID",
+ "TEST_KYLIN_FACT.SLR_SEGMENT_CD"
+ ]
+ ],
+ "dim_cap": 3
+ }
+ },
+ {
+ "includes": [
+ "TEST_KYLIN_FACT.CAL_DT",
+ "TEST_KYLIN_FACT.LEAF_CATEG_ID",
+ "TEST_KYLIN_FACT.LSTG_FORMAT_NAME",
+ "TEST_KYLIN_FACT.LSTG_SITE_ID",
+ "TEST_KYLIN_FACT.SLR_SEGMENT_CD",
+ "TEST_CATEGORY_GROUPINGS.META_CATEG_NAME",
+ "TEST_CATEGORY_GROUPINGS.CATEG_LVL2_NAME",
+ "TEST_CATEGORY_GROUPINGS.CATEG_LVL3_NAME",
+ "TEST_KYLIN_FACT.SELLER_ID",
+ "SELLER_ACCOUNT.ACCOUNT_BUYER_LEVEL",
+ "SELLER_ACCOUNT.ACCOUNT_SELLER_LEVEL",
+ "SELLER_ACCOUNT.ACCOUNT_COUNTRY",
+ "SELLER_COUNTRY.NAME",
+ "TEST_KYLIN_FACT.ORDER_ID",
+ "TEST_ORDER.TEST_DATE_ENC",
+ "TEST_ORDER.TEST_TIME_ENC",
+ "TEST_ORDER.BUYER_ID",
+ "BUYER_ACCOUNT.ACCOUNT_BUYER_LEVEL",
+ "BUYER_ACCOUNT.ACCOUNT_SELLER_LEVEL",
+ "BUYER_ACCOUNT.ACCOUNT_COUNTRY",
+ "BUYER_COUNTRY.NAME"
+ ],
+ "select_rule": {
+ "hierarchy_dims": [],
+ "mandatory_dims": [
+ "TEST_KYLIN_FACT.CAL_DT"
+ ],
+ "joint_dims": [
+ [
+ "TEST_CATEGORY_GROUPINGS.META_CATEG_NAME",
+ "TEST_CATEGORY_GROUPINGS.CATEG_LVL2_NAME",
+ "TEST_CATEGORY_GROUPINGS.CATEG_LVL3_NAME",
+ "TEST_KYLIN_FACT.LEAF_CATEG_ID"
+ ],
+ [
+ "TEST_KYLIN_FACT.LSTG_FORMAT_NAME",
+ "TEST_KYLIN_FACT.LSTG_SITE_ID",
+ "TEST_KYLIN_FACT.SLR_SEGMENT_CD"
+ ],
+ [
+ "TEST_KYLIN_FACT.SELLER_ID",
+ "SELLER_ACCOUNT.ACCOUNT_BUYER_LEVEL",
+ "SELLER_ACCOUNT.ACCOUNT_SELLER_LEVEL",
+ "SELLER_ACCOUNT.ACCOUNT_COUNTRY",
+ "SELLER_COUNTRY.NAME"
+ ],
+ [
+ "TEST_KYLIN_FACT.ORDER_ID",
+ "TEST_ORDER.TEST_DATE_ENC",
+ "TEST_ORDER.TEST_TIME_ENC",
+ "TEST_ORDER.BUYER_ID",
+ "BUYER_ACCOUNT.ACCOUNT_BUYER_LEVEL",
+ "BUYER_ACCOUNT.ACCOUNT_SELLER_LEVEL",
+ "BUYER_ACCOUNT.ACCOUNT_COUNTRY",
+ "BUYER_COUNTRY.NAME"
+ ]
+ ],
+ "dim_cap": 5
+ }
+ }
+ ],
+ "notify_list": null,
+ "status_need_notify": [],
+ "auto_merge_time_ranges": null,
+ "retention_range": 0,
+ "engine_type": 4,
+ "storage_type": 2,
+ "override_kylin_properties": {
+ "kylin.cube.algorithm": "LAYER"
+ },
+ "partition_date_start": 0
+}
diff --git a/tool/src/test/resources/test_meta/cube_statistics/kylin_sales_cube/04b6db34-b243-4780-855a-4c7ea4cee817.seq b/tool/src/test/resources/test_meta/cube_statistics/kylin_sales_cube/04b6db34-b243-4780-855a-4c7ea4cee817.seq
new file mode 100644
index 0000000..5dc08b8
Binary files /dev/null and b/tool/src/test/resources/test_meta/cube_statistics/kylin_sales_cube/04b6db34-b243-4780-855a-4c7ea4cee817.seq differ
diff --git a/tool/src/test/resources/test_meta/dict/DEFAULT.KYLIN_COUNTRY/NAME/b58ce89d-3df6-46d1-8cff-2a9cfc8b7510.dict b/tool/src/test/resources/test_meta/dict/DEFAULT.KYLIN_COUNTRY/NAME/b58ce89d-3df6-46d1-8cff-2a9cfc8b7510.dict
new file mode 100644
index 0000000..7dcca2a
Binary files /dev/null and b/tool/src/test/resources/test_meta/dict/DEFAULT.KYLIN_COUNTRY/NAME/b58ce89d-3df6-46d1-8cff-2a9cfc8b7510.dict differ
diff --git a/tool/src/test/resources/test_meta/dict/DEFAULT.TEST_COUNTRY/NAME/64ca8fea-b859-4e63-aea3-bfb4c6ee0c9d.dict b/tool/src/test/resources/test_meta/dict/DEFAULT.TEST_COUNTRY/NAME/64ca8fea-b859-4e63-aea3-bfb4c6ee0c9d.dict
new file mode 100644
index 0000000..86a5154
Binary files /dev/null and b/tool/src/test/resources/test_meta/dict/DEFAULT.TEST_COUNTRY/NAME/64ca8fea-b859-4e63-aea3-bfb4c6ee0c9d.dict differ
diff --git a/tool/src/test/resources/test_meta/execute/d861b8b7-c773-47ab-bb1e-c8782ae8d930 b/tool/src/test/resources/test_meta/execute/d861b8b7-c773-47ab-bb1e-c8782ae8d930
new file mode 100644
index 0000000..ed6d6fa
--- /dev/null
+++ b/tool/src/test/resources/test_meta/execute/d861b8b7-c773-47ab-bb1e-c8782ae8d930
@@ -0,0 +1,41 @@
+{
+ "uuid" : "d861b8b7-c773-47ab-bb1e-c8782ae8d930",
+ "last_modified" : 0,
+ "version" : "2.3.0.20500",
+ "name" : "BUILD CUBE - ss - FULL_BUILD - GMT+08:00 2017-10-13 10:57:22",
+ "tasks" : [ {
+"uuid" : "d861b8b7-c773-47ab-bb1e-c8782ae8d930-00",
+ "last_modified" : 0,
+ "version" : "2.3.0.20500",
+ "name" : "Create Intermediate Flat Hive Table",
+ "tasks" : null,
+ "type" : "org.apache.kylin.source.hive.CreateFlatHiveTableStep",
+ "params" : {
+ "HiveInit" : "USE default;\n",
+ "HiveRedistributeData" : "DROP TABLE IF EXISTS kylin_intermediate_ss_a110ac52_9a91_49fe_944a_346d61e54115;\nCREATE EXTERNAL TABLE IF NOT EXISTS kylin_intermediate_ss_a110ac52_9a91_49fe_944a_346d61e54115\n(\nKYLIN_SALES_LSTG_FORMAT_NAME string\n,KYLIN_SALES_PRICE decimal(19,4)\n)\nSTORED AS SEQUENCEFILE\nLOCATION 'hdfs://sandbox.hortonworks.com:8020/Users/jiatao.tao/Documents/meta5/kylin-d861b8b7-c773-47ab-bb1e-c8782ae8d930/kylin_intermediate_ss_a110ac52_9a91_49fe_944a_346d61e54115' [...]
+ "cubeName" : "ss"
+ }
+ }, {
+ "uuid" : "d861b8b7-c773-47ab-bb1e-c8782ae8d930-01",
+ "last_modified" : 0,
+ "version" : "2.3.0.20500",
+ "name" : "Redistribute Flat Hive Table",
+ "tasks" : null,
+ "type" : "org.apache.kylin.source.hive.HiveMRInput$RedistributeFlatHiveTableStep",
+ "params" : {
+ "HiveInit" : "USE default;\n",
+ "HiveRedistributeData" : "INSERT OVERWRITE TABLE kylin_intermediate_ss_a110ac52_9a91_49fe_944a_346d61e54115 SELECT * FROM kylin_intermediate_ss_a110ac52_9a91_49fe_944a_346d61e54115 DISTRIBUTE BY RAND();\n",
+ "cubeName" : "ss",
+ "intermediateTable" : "kylin_intermediate_ss_a110ac52_9a91_49fe_944a_346d61e54115"
+ }
+ }],
+ "type" : "org.apache.kylin.engine.mr.CubingJob",
+ "params" : {
+ "submitter" : "ADMIN",
+ "envName" : "DEV",
+ "segmentId" : "a110ac52-9a91-49fe-944a-346d61e54115",
+ "notify_list" : "",
+ "projectName" : "learn_kylin",
+ "cubeName" : "ss"
+ }
+}
\ No newline at end of file
diff --git a/tool/src/test/resources/test_meta/execute_output/d861b8b7-c773-47ab-bb1e-c8782ae8d930 b/tool/src/test/resources/test_meta/execute_output/d861b8b7-c773-47ab-bb1e-c8782ae8d930
new file mode 100644
index 0000000..fab62b5
--- /dev/null
+++ b/tool/src/test/resources/test_meta/execute_output/d861b8b7-c773-47ab-bb1e-c8782ae8d930
@@ -0,0 +1,13 @@
+{
+ "uuid" : "d861b8b7-c773-47ab-bb1e-c8782ae8d930",
+ "last_modified" : 1507863555561,
+ "version" : "2.2.0.20500",
+ "content" : null,
+ "status" : "SUCCEED",
+ "info" : {
+ "startTime" : "1505914710093",
+ "mapReduceWaitTime" : "243712",
+ "algorithm" : "LAYER",
+ "endTime" : "1507863555561"
+ }
+}
\ No newline at end of file
diff --git a/tool/src/test/resources/test_meta/execute_output/d861b8b7-c773-47ab-bb1e-c8782ae8d930-00 b/tool/src/test/resources/test_meta/execute_output/d861b8b7-c773-47ab-bb1e-c8782ae8d930-00
new file mode 100644
index 0000000..19e88f7
--- /dev/null
+++ b/tool/src/test/resources/test_meta/execute_output/d861b8b7-c773-47ab-bb1e-c8782ae8d930-00
@@ -0,0 +1,13 @@
+{
+ "uuid" : "d861b8b7-c773-47ab-bb1e-c8782ae8d930-00",
+ "last_modified" : 1507863555561,
+ "version" : "2.2.0.20500",
+ "content" : null,
+ "status" : "SUCCEED",
+ "info" : {
+ "startTime" : "1505914710093",
+ "mapReduceWaitTime" : "243712",
+ "algorithm" : "LAYER",
+ "endTime" : "1507863555561"
+ }
+}
\ No newline at end of file
diff --git a/tool/src/test/resources/test_meta/execute_output/d861b8b7-c773-47ab-bb1e-c8782ae8d930-01 b/tool/src/test/resources/test_meta/execute_output/d861b8b7-c773-47ab-bb1e-c8782ae8d930-01
new file mode 100644
index 0000000..0759ee3
--- /dev/null
+++ b/tool/src/test/resources/test_meta/execute_output/d861b8b7-c773-47ab-bb1e-c8782ae8d930-01
@@ -0,0 +1,13 @@
+{
+ "uuid" : "d861b8b7-c773-47ab-bb1e-c8782ae8d930-01",
+ "last_modified" : 1507863555561,
+ "version" : "2.2.0.20500",
+ "content" : null,
+ "status" : "SUCCEED",
+ "info" : {
+ "startTime" : "1505914710093",
+ "mapReduceWaitTime" : "243712",
+ "algorithm" : "LAYER",
+ "endTime" : "1507863555561"
+ }
+}
\ No newline at end of file
diff --git a/tool/src/test/resources/test_meta/kylin.properties b/tool/src/test/resources/test_meta/kylin.properties
new file mode 100644
index 0000000..e69de29
diff --git a/tool/src/test/resources/test_meta/model_desc/ci_inner_join_model.json b/tool/src/test/resources/test_meta/model_desc/ci_inner_join_model.json
new file mode 100644
index 0000000..a3c3c05
--- /dev/null
+++ b/tool/src/test/resources/test_meta/model_desc/ci_inner_join_model.json
@@ -0,0 +1,231 @@
+{
+ "uuid": "72ab4ee2-2cdb-4b07-b39e-4c298563ae27",
+ "name": "ci_inner_join_model",
+ "fact_table": "DEFAULT.TEST_KYLIN_FACT",
+ "join_tables": [
+ {
+ "table": "DEFAULT.TEST_ORDER",
+ "kind": "FACT",
+ "join": {
+ "type": "INNER",
+ "primary_key": [
+ "TEST_ORDER.ORDER_ID"
+ ],
+ "foreign_key": [
+ "TEST_KYLIN_FACT.ORDER_ID"
+ ]
+ }
+ },
+ {
+ "table": "DEFAULT.TEST_ACCOUNT",
+ "alias": "BUYER_ACCOUNT",
+ "kind": "FACT",
+ "join": {
+ "type": "INNER",
+ "primary_key": [
+ "BUYER_ACCOUNT.ACCOUNT_ID"
+ ],
+ "foreign_key": [
+ "TEST_ORDER.BUYER_ID"
+ ]
+ }
+ },
+ {
+ "table": "EDW.TEST_CAL_DT",
+ "join": {
+ "type": "INNER",
+ "primary_key": [
+ "TEST_CAL_DT.CAL_DT"
+ ],
+ "foreign_key": [
+ "TEST_KYLIN_FACT.CAL_DT"
+ ]
+ }
+ },
+ {
+ "table": "DEFAULT.TEST_CATEGORY_GROUPINGS",
+ "join": {
+ "type": "INNER",
+ "primary_key": [
+ "TEST_CATEGORY_GROUPINGS.LEAF_CATEG_ID",
+ "TEST_CATEGORY_GROUPINGS.SITE_ID"
+ ],
+ "foreign_key": [
+ "TEST_KYLIN_FACT.LEAF_CATEG_ID",
+ "TEST_KYLIN_FACT.LSTG_SITE_ID"
+ ]
+ }
+ },
+ {
+ "table": "EDW.TEST_SITES",
+ "join": {
+ "type": "INNER",
+ "primary_key": [
+ "TEST_SITES.SITE_ID"
+ ],
+ "foreign_key": [
+ "TEST_KYLIN_FACT.LSTG_SITE_ID"
+ ]
+ }
+ },
+ {
+ "table": "EDW.TEST_SELLER_TYPE_DIM",
+ "join": {
+ "type": "INNER",
+ "primary_key": [
+ "TEST_SELLER_TYPE_DIM.SELLER_TYPE_CD"
+ ],
+ "foreign_key": [
+ "TEST_KYLIN_FACT.SLR_SEGMENT_CD"
+ ]
+ }
+ },
+ {
+ "table": "DEFAULT.TEST_COUNTRY",
+ "alias": "BUYER_COUNTRY",
+ "join": {
+ "type": "INNER",
+ "primary_key": [
+ "BUYER_COUNTRY.COUNTRY"
+ ],
+ "foreign_key": [
+ "BUYER_ACCOUNT.ACCOUNT_COUNTRY"
+ ]
+ }
+ },
+ {
+ "table": "DEFAULT.TEST_COUNTRY",
+ "alias": "SELLER_COUNTRY",
+ "join": {
+ "type": "INNER",
+ "primary_key": [
+ "SELLER_COUNTRY.COUNTRY"
+ ],
+ "foreign_key": [
+ "SELLER_ACCOUNT.ACCOUNT_COUNTRY"
+ ]
+ }
+ },
+ {
+ "table": "DEFAULT.TEST_ACCOUNT",
+ "alias": "SELLER_ACCOUNT",
+ "kind": "FACT",
+ "join": {
+ "type": "INNER",
+ "primary_key": [
+ "SELLER_ACCOUNT.ACCOUNT_ID"
+ ],
+ "foreign_key": [
+ "TEST_KYLIN_FACT.SELLER_ID"
+ ]
+ }
+ }
+ ],
+ "dimensions": [
+ {
+ "table": "TEST_KYLIN_FACT",
+ "columns": [
+ "TRANS_ID",
+ "ORDER_ID",
+ "CAL_DT",
+ "LSTG_FORMAT_NAME",
+ "LSTG_SITE_ID",
+ "LEAF_CATEG_ID",
+ "SLR_SEGMENT_CD",
+ "SELLER_ID",
+ "TEST_COUNT_DISTINCT_BITMAP"
+ ]
+ },
+ {
+ "table": "TEST_ORDER",
+ "columns": [
+ "ORDER_ID",
+ "BUYER_ID",
+ "TEST_DATE_ENC",
+ "TEST_TIME_ENC",
+ "TEST_EXTENDED_COLUMN"
+ ]
+ },
+ {
+ "table": "BUYER_ACCOUNT",
+ "columns": [
+ "ACCOUNT_ID",
+ "ACCOUNT_BUYER_LEVEL",
+ "ACCOUNT_SELLER_LEVEL",
+ "ACCOUNT_COUNTRY",
+ "ACCOUNT_CONTACT"
+ ]
+ },
+ {
+ "table": "SELLER_ACCOUNT",
+ "columns": [
+ "ACCOUNT_ID",
+ "ACCOUNT_BUYER_LEVEL",
+ "ACCOUNT_SELLER_LEVEL",
+ "ACCOUNT_COUNTRY",
+ "ACCOUNT_CONTACT"
+ ]
+ },
+ {
+ "table": "TEST_CATEGORY_GROUPINGS",
+ "columns": [
+ "LEAF_CATEG_ID",
+ "SITE_ID",
+ "META_CATEG_NAME",
+ "CATEG_LVL2_NAME",
+ "CATEG_LVL3_NAME",
+ "USER_DEFINED_FIELD1",
+ "USER_DEFINED_FIELD3",
+ "UPD_DATE",
+ "UPD_USER"
+ ]
+ },
+ {
+ "table": "TEST_SITES",
+ "columns": [
+ "SITE_ID",
+ "SITE_NAME",
+ "CRE_USER"
+ ]
+ },
+ {
+ "table": "TEST_SELLER_TYPE_DIM",
+ "columns": [
+ "SELLER_TYPE_CD",
+ "SELLER_TYPE_DESC"
+ ]
+ },
+ {
+ "table": "TEST_CAL_DT",
+ "columns": [
+ "CAL_DT",
+ "WEEK_BEG_DT"
+ ]
+ },
+ {
+ "table": "BUYER_COUNTRY",
+ "columns": [
+ "COUNTRY",
+ "NAME"
+ ]
+ },
+ {
+ "table": "SELLER_COUNTRY",
+ "columns": [
+ "COUNTRY",
+ "NAME"
+ ]
+ }
+ ],
+ "metrics": [
+ "TEST_KYLIN_FACT.PRICE",
+ "TEST_KYLIN_FACT.ITEM_COUNT"
+ ],
+ "last_modified": 1422435345352,
+ "filter_condition": null,
+ "partition_desc": {
+ "partition_date_column": "DEFAULT.TEST_KYLIN_FACT.CAL_DT",
+ "partition_date_start": 0,
+ "partition_type": "APPEND"
+ }
+}
diff --git a/tool/src/test/resources/test_meta/project/default.json b/tool/src/test/resources/test_meta/project/default.json
new file mode 100644
index 0000000..f2fd757
--- /dev/null
+++ b/tool/src/test/resources/test_meta/project/default.json
@@ -0,0 +1,35 @@
+{
+ "uuid": "1eaca32a-a33e-4b69-83dd-0bb8b1f8c91b",
+ "name": "default",
+ "realizations": [
+ {
+ "name": "ci_inner_join_cube",
+ "type": "CUBE",
+ "realization": "ci_inner_join_cube"
+ }
+ ],
+ "tables": [
+ "DEFAULT.TEST_KYLIN_FACT",
+ "DEFAULT.TEST_ORDER",
+ "DEFAULT.TEST_ACCOUNT",
+ "DEFAULT.TEST_COUNTRY",
+ "EDW.TEST_CAL_DT",
+ "DEFAULT.TEST_CATEGORY_GROUPINGS",
+ "EDW.TEST_SITES",
+ "EDW.TEST_SELLER_TYPE_DIM",
+ "DEFAULT.STREAMING_TABLE",
+ "SSB.CUSTOMER",
+ "SSB.DATES",
+ "SSB.PART",
+ "SSB.SUPPLIER",
+ "SSB.V_LINEORDER",
+ "DEFAULT.FIFTY_DIM",
+ "DEFAULT.WIDE_TABLE"
+ ],
+ "models": [
+ "ci_inner_join_model"
+ ],
+ "override_kylin_properties" :{
+ "kylin.storage.hbase.owner-tag": "kylin@kylin.apache.org"
+ }
+}
diff --git a/tool/src/test/resources/test_meta/table/DEFAULT.TEST_ACCOUNT.json b/tool/src/test/resources/test_meta/table/DEFAULT.TEST_ACCOUNT.json
new file mode 100644
index 0000000..5945713
--- /dev/null
+++ b/tool/src/test/resources/test_meta/table/DEFAULT.TEST_ACCOUNT.json
@@ -0,0 +1,36 @@
+{
+ "uuid" : "f386e39e-40d7-44c2-9eb3-41b365632231",
+
+ "name" : "TEST_ACCOUNT",
+ "data_gen" : "2000",
+
+ "columns" : [ {
+ "id" : "1",
+ "name" : "ACCOUNT_ID",
+ "datatype" : "bigint",
+ "data_gen" : "ID|10000000",
+ "index": "T"
+ }, {
+ "id" : "2",
+ "name" : "ACCOUNT_BUYER_LEVEL",
+ "datatype" : "int",
+ "data_gen" : "RAND||0|5"
+ }, {
+ "id" : "3",
+ "name" : "ACCOUNT_SELLER_LEVEL",
+ "datatype" : "int",
+ "data_gen" : "RAND||0|5"
+ }, {
+ "id" : "4",
+ "name" : "ACCOUNT_COUNTRY",
+ "datatype" : "string",
+ "data_gen" : "CN|FR|GB|GE|JP|IT|RU|US",
+ "index": "T"
+ }, {
+ "id" : "5",
+ "name" : "ACCOUNT_CONTACT",
+ "datatype" : "string"
+ } ],
+ "database" : "DEFAULT",
+ "last_modified" : 0
+}
\ No newline at end of file
diff --git a/tool/src/test/resources/test_meta/table/DEFAULT.TEST_CATEGORY_GROUPINGS.json b/tool/src/test/resources/test_meta/table/DEFAULT.TEST_CATEGORY_GROUPINGS.json
new file mode 100644
index 0000000..adaf987
--- /dev/null
+++ b/tool/src/test/resources/test_meta/table/DEFAULT.TEST_CATEGORY_GROUPINGS.json
@@ -0,0 +1,155 @@
+{
+
+ "uuid" : "952d11b5-69d9-45d1-92af-227489485e3f",
+ "name" : "TEST_CATEGORY_GROUPINGS",
+ "columns" : [ {
+ "id" : "1",
+ "name" : "LEAF_CATEG_ID",
+ "datatype" : "bigint",
+ "index": "T"
+ }, {
+ "id" : "2",
+ "name" : "LEAF_CATEG_NAME",
+ "datatype" : "string",
+ "index": "T"
+ }, {
+ "id" : "3",
+ "name" : "SITE_ID",
+ "datatype" : "int",
+ "index": "T"
+ }, {
+ "id" : "4",
+ "name" : "CATEG_BUSN_MGR",
+ "datatype" : "string"
+ }, {
+ "id" : "5",
+ "name" : "CATEG_BUSN_UNIT",
+ "datatype" : "string"
+ }, {
+ "id" : "6",
+ "name" : "REGN_CATEG",
+ "datatype" : "string"
+ }, {
+ "id" : "7",
+ "name" : "USER_DEFINED_FIELD1",
+ "datatype" : "string"
+ }, {
+ "id" : "8",
+ "name" : "USER_DEFINED_FIELD3",
+ "datatype" : "string"
+ }, {
+ "id" : "9",
+ "name" : "GROUPINGS_CRE_DATE",
+ "datatype" : "string"
+ }, {
+ "id" : "10",
+ "name" : "UPD_DATE",
+ "datatype" : "string"
+ }, {
+ "id" : "11",
+ "name" : "GROUPINGS_CRE_USER",
+ "datatype" : "string"
+ }, {
+ "id" : "12",
+ "name" : "UPD_USER",
+ "datatype" : "string"
+ }, {
+ "id" : "13",
+ "name" : "META_CATEG_ID",
+ "datatype" : "decimal"
+ }, {
+ "id" : "14",
+ "name" : "META_CATEG_NAME",
+ "datatype" : "string"
+ }, {
+ "id" : "15",
+ "name" : "CATEG_LVL2_ID",
+ "datatype" : "decimal"
+ }, {
+ "id" : "16",
+ "name" : "CATEG_LVL3_ID",
+ "datatype" : "decimal"
+ }, {
+ "id" : "17",
+ "name" : "CATEG_LVL4_ID",
+ "datatype" : "decimal"
+ }, {
+ "id" : "18",
+ "name" : "CATEG_LVL5_ID",
+ "datatype" : "decimal"
+ }, {
+ "id" : "19",
+ "name" : "CATEG_LVL6_ID",
+ "datatype" : "decimal"
+ }, {
+ "id" : "20",
+ "name" : "CATEG_LVL7_ID",
+ "datatype" : "decimal"
+ }, {
+ "id" : "21",
+ "name" : "CATEG_LVL2_NAME",
+ "datatype" : "string"
+ }, {
+ "id" : "22",
+ "name" : "CATEG_LVL3_NAME",
+ "datatype" : "string"
+ }, {
+ "id" : "23",
+ "name" : "CATEG_LVL4_NAME",
+ "datatype" : "string"
+ }, {
+ "id" : "24",
+ "name" : "CATEG_LVL5_NAME",
+ "datatype" : "string"
+ }, {
+ "id" : "25",
+ "name" : "CATEG_LVL6_NAME",
+ "datatype" : "string"
+ }, {
+ "id" : "26",
+ "name" : "CATEG_LVL7_NAME",
+ "datatype" : "string"
+ }, {
+ "id" : "27",
+ "name" : "CATEG_FLAGS",
+ "datatype" : "decimal"
+ }, {
+ "id" : "28",
+ "name" : "ADULT_CATEG_YN",
+ "datatype" : "string"
+ }, {
+ "id" : "29",
+ "name" : "DOMAIN_ID",
+ "datatype" : "decimal"
+ }, {
+ "id" : "30",
+ "name" : "USER_DEFINED_FIELD5",
+ "datatype" : "string"
+ }, {
+ "id" : "31",
+ "name" : "VCS_ID",
+ "datatype" : "decimal"
+ }, {
+ "id" : "32",
+ "name" : "GCS_ID",
+ "datatype" : "decimal"
+ }, {
+ "id" : "33",
+ "name" : "MOVE_TO",
+ "datatype" : "decimal"
+ }, {
+ "id" : "34",
+ "name" : "SAP_CATEGORY_ID",
+ "datatype" : "decimal"
+ }, {
+ "id" : "35",
+ "name" : "SRC_ID",
+ "datatype" : "tinyint"
+ }, {
+ "id" : "36",
+ "name" : "BSNS_VRTCL_NAME",
+ "datatype" : "string"
+ } ],
+ "database" : "DEFAULT",
+ "last_modified" : 0
+}
\ No newline at end of file
diff --git a/tool/src/test/resources/test_meta/table/DEFAULT.TEST_COUNTRY.json b/tool/src/test/resources/test_meta/table/DEFAULT.TEST_COUNTRY.json
new file mode 100644
index 0000000..870cb2d
--- /dev/null
+++ b/tool/src/test/resources/test_meta/table/DEFAULT.TEST_COUNTRY.json
@@ -0,0 +1,26 @@
+{
+ "uuid" : "e286e39e-40d7-44c2-8fa2-41b365632882",
+
+ "name" : "TEST_COUNTRY",
+ "columns" : [ {
+ "id" : "1",
+ "name" : "COUNTRY",
+ "datatype" : "string",
+ "index": "T"
+ }, {
+ "id" : "2",
+ "name" : "LATITUDE",
+ "datatype" : "double"
+ }, {
+ "id" : "3",
+ "name" : "LONGITUDE",
+ "datatype" : "double"
+ }, {
+ "id" : "4",
+ "name" : "NAME",
+ "datatype" : "string",
+ "index": "T"
+ } ],
+ "database" : "DEFAULT",
+ "last_modified" : 0
+}
\ No newline at end of file
diff --git a/tool/src/test/resources/test_meta/table/DEFAULT.TEST_KYLIN_FACT.json b/tool/src/test/resources/test_meta/table/DEFAULT.TEST_KYLIN_FACT.json
new file mode 100644
index 0000000..4be05f2
--- /dev/null
+++ b/tool/src/test/resources/test_meta/table/DEFAULT.TEST_KYLIN_FACT.json
@@ -0,0 +1,68 @@
+{
+ "uuid" : "e286e39e-40d7-44c2-8fa2-41b365522771",
+ "name" : "TEST_KYLIN_FACT",
+ "data_gen" : "1",
+ "columns" : [ {
+ "id" : "1",
+ "name" : "TRANS_ID",
+ "datatype" : "bigint",
+ "data_gen" : "ID"
+ }, {
+ "id" : "2",
+ "name" : "ORDER_ID",
+ "datatype" : "bigint",
+ "index": "T"
+ }, {
+ "id" : "3",
+ "name" : "CAL_DT",
+ "datatype" : "date",
+ "data_gen" : "FK,order",
+ "index": "T"
+ }, {
+ "id" : "4",
+ "name" : "LSTG_FORMAT_NAME",
+ "datatype" : "string",
+ "data_gen" : "FP-GTC|FP-non GTC|ABIN|Auction|Others",
+ "index": "T"
+ }, {
+ "id" : "5",
+ "name" : "LEAF_CATEG_ID",
+ "datatype" : "bigint",
+ "data_gen" : "FK,null,nullstr=0",
+ "index": "T"
+ }, {
+ "id" : "6",
+ "name" : "LSTG_SITE_ID",
+ "datatype" : "int",
+ "index": "T"
+ }, {
+ "id" : "7",
+ "name" : "SLR_SEGMENT_CD",
+ "datatype" : "smallint",
+ "data_gen" : "FK,pk=EDW.TEST_SELLER_TYPE_DIM_TABLE.SELLER_TYPE_CD",
+ "index": "T"
+ }, {
+ "id" : "8",
+ "name" : "SELLER_ID",
+ "datatype" : "int",
+ "data_gen" : "RAND||10000000|10001000",
+ "index": "T"
+ }, {
+ "id" : "9",
+ "name" : "PRICE",
+ "datatype" : "decimal",
+ "data_gen" : "RAND|.##|-100|1000"
+ }, {
+ "id" : "10",
+ "name" : "ITEM_COUNT",
+ "datatype" : "int",
+ "data_gen" : "RAND"
+ }, {
+ "id" : "11",
+ "name" : "TEST_COUNT_DISTINCT_BITMAP",
+ "datatype" : "string",
+ "data_gen" : "RAND"
+ } ],
+ "database" : "DEFAULT",
+ "last_modified" : 0
+}
diff --git a/tool/src/test/resources/test_meta/table/DEFAULT.TEST_ORDER.json b/tool/src/test/resources/test_meta/table/DEFAULT.TEST_ORDER.json
new file mode 100644
index 0000000..7232492
--- /dev/null
+++ b/tool/src/test/resources/test_meta/table/DEFAULT.TEST_ORDER.json
@@ -0,0 +1,35 @@
+{
+ "uuid" : "f216e39e-40d7-44c2-8fa2-41b3656398ae",
+ "name" : "TEST_ORDER",
+ "data_gen" : "0.5",
+ "columns" : [ {
+ "id" : "1",
+ "name" : "ORDER_ID",
+ "datatype" : "bigint",
+ "data_gen" : "ID",
+ "index": "T"
+ }, {
+ "id" : "2",
+ "name" : "BUYER_ID",
+ "datatype" : "bigint",
+ "data_gen" : "RAND||10000500|10001500",
+ "index": "T"
+ }, {
+ "id" : "3",
+ "name" : "TEST_DATE_ENC",
+ "datatype" : "date",
+ "data_gen" : "RAND"
+ }, {
+ "id" : "4",
+ "name" : "TEST_TIME_ENC",
+ "datatype" : "timestamp",
+ "data_gen" : "RAND"
+ }, {
+ "id" : "5",
+ "name" : "TEST_EXTENDED_COLUMN",
+ "datatype" : "string",
+ "data_gen" : "RAND"
+ } ],
+ "database" : "DEFAULT",
+ "last_modified" : 0
+}
\ No newline at end of file
diff --git a/tool/src/test/resources/test_meta/table/EDW.TEST_CAL_DT.json b/tool/src/test/resources/test_meta/table/EDW.TEST_CAL_DT.json
new file mode 100644
index 0000000..1230649
--- /dev/null
+++ b/tool/src/test/resources/test_meta/table/EDW.TEST_CAL_DT.json
@@ -0,0 +1,413 @@
+{
+
+ "uuid" : "0ff420eb-79ad-40bd-bca9-12d8cd05c60a",
+ "name" : "TEST_CAL_DT",
+ "columns" : [ {
+ "id" : "1",
+ "name" : "CAL_DT",
+ "datatype" : "date",
+ "index": "T"
+ }, {
+ "id" : "2",
+ "name" : "YEAR_BEG_DT",
+ "datatype" : "date",
+ "index": "T"
+ }, {
+ "id" : "3",
+ "name" : "QTR_BEG_DT",
+ "datatype" : "date",
+ "index": "T"
+ }, {
+ "id" : "4",
+ "name" : "MONTH_BEG_DT",
+ "datatype" : "date",
+ "index": "T"
+ }, {
+ "id" : "5",
+ "name" : "WEEK_BEG_DT",
+ "datatype" : "date",
+ "index": "T"
+ }, {
+ "id" : "6",
+ "name" : "AGE_FOR_YEAR_ID",
+ "datatype" : "smallint"
+ }, {
+ "id" : "7",
+ "name" : "AGE_FOR_QTR_ID",
+ "datatype" : "smallint"
+ }, {
+ "id" : "8",
+ "name" : "AGE_FOR_MONTH_ID",
+ "datatype" : "smallint"
+ }, {
+ "id" : "9",
+ "name" : "AGE_FOR_WEEK_ID",
+ "datatype" : "smallint"
+ }, {
+ "id" : "10",
+ "name" : "AGE_FOR_DT_ID",
+ "datatype" : "smallint"
+ }, {
+ "id" : "11",
+ "name" : "AGE_FOR_RTL_YEAR_ID",
+ "datatype" : "smallint"
+ }, {
+ "id" : "12",
+ "name" : "AGE_FOR_RTL_QTR_ID",
+ "datatype" : "smallint"
+ }, {
+ "id" : "13",
+ "name" : "AGE_FOR_RTL_MONTH_ID",
+ "datatype" : "smallint"
+ }, {
+ "id" : "14",
+ "name" : "AGE_FOR_RTL_WEEK_ID",
+ "datatype" : "smallint"
+ }, {
+ "id" : "15",
+ "name" : "AGE_FOR_CS_WEEK_ID",
+ "datatype" : "smallint"
+ }, {
+ "id" : "16",
+ "name" : "DAY_OF_CAL_ID",
+ "datatype" : "int"
+ }, {
+ "id" : "17",
+ "name" : "DAY_OF_YEAR_ID",
+ "datatype" : "smallint"
+ }, {
+ "id" : "18",
+ "name" : "DAY_OF_QTR_ID",
+ "datatype" : "smallint"
+ }, {
+ "id" : "19",
+ "name" : "DAY_OF_MONTH_ID",
+ "datatype" : "smallint"
+ }, {
+ "id" : "20",
+ "name" : "DAY_OF_WEEK_ID",
+ "datatype" : "int"
+ }, {
+ "id" : "21",
+ "name" : "WEEK_OF_YEAR_ID",
+ "datatype" : "tinyint"
+ }, {
+ "id" : "22",
+ "name" : "WEEK_OF_CAL_ID",
+ "datatype" : "int"
+ }, {
+ "id" : "23",
+ "name" : "MONTH_OF_QTR_ID",
+ "datatype" : "tinyint"
+ }, {
+ "id" : "24",
+ "name" : "MONTH_OF_YEAR_ID",
+ "datatype" : "tinyint"
+ }, {
+ "id" : "25",
+ "name" : "MONTH_OF_CAL_ID",
+ "datatype" : "smallint"
+ }, {
+ "id" : "26",
+ "name" : "QTR_OF_YEAR_ID",
+ "datatype" : "tinyint"
+ }, {
+ "id" : "27",
+ "name" : "QTR_OF_CAL_ID",
+ "datatype" : "smallint"
+ }, {
+ "id" : "28",
+ "name" : "YEAR_OF_CAL_ID",
+ "datatype" : "smallint"
+ }, {
+ "id" : "29",
+ "name" : "YEAR_END_DT",
+ "datatype" : "string"
+ }, {
+ "id" : "30",
+ "name" : "QTR_END_DT",
+ "datatype" : "string"
+ }, {
+ "id" : "31",
+ "name" : "MONTH_END_DT",
+ "datatype" : "string"
+ }, {
+ "id" : "32",
+ "name" : "WEEK_END_DT",
+ "datatype" : "string"
+ }, {
+ "id" : "33",
+ "name" : "CAL_DT_NAME",
+ "datatype" : "string"
+ }, {
+ "id" : "34",
+ "name" : "CAL_DT_DESC",
+ "datatype" : "string"
+ }, {
+ "id" : "35",
+ "name" : "CAL_DT_SHORT_NAME",
+ "datatype" : "string"
+ }, {
+ "id" : "36",
+ "name" : "YTD_YN_ID",
+ "datatype" : "tinyint"
+ }, {
+ "id" : "37",
+ "name" : "QTD_YN_ID",
+ "datatype" : "tinyint"
+ }, {
+ "id" : "38",
+ "name" : "MTD_YN_ID",
+ "datatype" : "tinyint"
+ }, {
+ "id" : "39",
+ "name" : "WTD_YN_ID",
+ "datatype" : "tinyint"
+ }, {
+ "id" : "40",
+ "name" : "SEASON_BEG_DT",
+ "datatype" : "string"
+ }, {
+ "id" : "41",
+ "name" : "DAY_IN_YEAR_COUNT",
+ "datatype" : "smallint"
+ }, {
+ "id" : "42",
+ "name" : "DAY_IN_QTR_COUNT",
+ "datatype" : "tinyint"
+ }, {
+ "id" : "43",
+ "name" : "DAY_IN_MONTH_COUNT",
+ "datatype" : "tinyint"
+ }, {
+ "id" : "44",
+ "name" : "DAY_IN_WEEK_COUNT",
+ "datatype" : "tinyint"
+ }, {
+ "id" : "45",
+ "name" : "RTL_YEAR_BEG_DT",
+ "datatype" : "string"
+ }, {
+ "id" : "46",
+ "name" : "RTL_QTR_BEG_DT",
+ "datatype" : "string"
+ }, {
+ "id" : "47",
+ "name" : "RTL_MONTH_BEG_DT",
+ "datatype" : "string"
+ }, {
+ "id" : "48",
+ "name" : "RTL_WEEK_BEG_DT",
+ "datatype" : "string"
+ }, {
+ "id" : "49",
+ "name" : "CS_WEEK_BEG_DT",
+ "datatype" : "string"
+ }, {
+ "id" : "50",
+ "name" : "CAL_DATE",
+ "datatype" : "string"
+ }, {
+ "id" : "51",
+ "name" : "DAY_OF_WEEK",
+ "datatype" : "string"
+ }, {
+ "id" : "52",
+ "name" : "MONTH_ID",
+ "datatype" : "string"
+ }, {
+ "id" : "53",
+ "name" : "PRD_DESC",
+ "datatype" : "string"
+ }, {
+ "id" : "54",
+ "name" : "PRD_FLAG",
+ "datatype" : "string"
+ }, {
+ "id" : "55",
+ "name" : "PRD_ID",
+ "datatype" : "string"
+ }, {
+ "id" : "56",
+ "name" : "PRD_IND",
+ "datatype" : "string"
+ }, {
+ "id" : "57",
+ "name" : "QTR_DESC",
+ "datatype" : "string"
+ }, {
+ "id" : "58",
+ "name" : "QTR_ID",
+ "datatype" : "string"
+ }, {
+ "id" : "59",
+ "name" : "QTR_IND",
+ "datatype" : "string"
+ }, {
+ "id" : "60",
+ "name" : "RETAIL_WEEK",
+ "datatype" : "string"
+ }, {
+ "id" : "61",
+ "name" : "RETAIL_YEAR",
+ "datatype" : "string"
+ }, {
+ "id" : "62",
+ "name" : "RETAIL_START_DATE",
+ "datatype" : "string"
+ }, {
+ "id" : "63",
+ "name" : "RETAIL_WK_END_DATE",
+ "datatype" : "string"
+ }, {
+ "id" : "64",
+ "name" : "WEEK_IND",
+ "datatype" : "string"
+ }, {
+ "id" : "65",
+ "name" : "WEEK_NUM_DESC",
+ "datatype" : "string"
+ }, {
+ "id" : "66",
+ "name" : "WEEK_BEG_DATE",
+ "datatype" : "string"
+ }, {
+ "id" : "67",
+ "name" : "WEEK_END_DATE",
+ "datatype" : "string"
+ }, {
+ "id" : "68",
+ "name" : "WEEK_IN_YEAR_ID",
+ "datatype" : "string"
+ }, {
+ "id" : "69",
+ "name" : "WEEK_ID",
+ "datatype" : "string"
+ }, {
+ "id" : "70",
+ "name" : "WEEK_BEG_END_DESC_MDY",
+ "datatype" : "string"
+ }, {
+ "id" : "71",
+ "name" : "WEEK_BEG_END_DESC_MD",
+ "datatype" : "string"
+ }, {
+ "id" : "72",
+ "name" : "YEAR_ID",
+ "datatype" : "string"
+ }, {
+ "id" : "73",
+ "name" : "YEAR_IND",
+ "datatype" : "string"
+ }, {
+ "id" : "74",
+ "name" : "CAL_DT_MNS_1YEAR_DT",
+ "datatype" : "string"
+ }, {
+ "id" : "75",
+ "name" : "CAL_DT_MNS_2YEAR_DT",
+ "datatype" : "string"
+ }, {
+ "id" : "76",
+ "name" : "CAL_DT_MNS_1QTR_DT",
+ "datatype" : "string"
+ }, {
+ "id" : "77",
+ "name" : "CAL_DT_MNS_2QTR_DT",
+ "datatype" : "string"
+ }, {
+ "id" : "78",
+ "name" : "CAL_DT_MNS_1MONTH_DT",
+ "datatype" : "string"
+ }, {
+ "id" : "79",
+ "name" : "CAL_DT_MNS_2MONTH_DT",
+ "datatype" : "string"
+ }, {
+ "id" : "80",
+ "name" : "CAL_DT_MNS_1WEEK_DT",
+ "datatype" : "string"
+ }, {
+ "id" : "81",
+ "name" : "CAL_DT_MNS_2WEEK_DT",
+ "datatype" : "string"
+ }, {
+ "id" : "82",
+ "name" : "CURR_CAL_DT_MNS_1YEAR_YN_ID",
+ "datatype" : "tinyint"
+ }, {
+ "id" : "83",
+ "name" : "CURR_CAL_DT_MNS_2YEAR_YN_ID",
+ "datatype" : "tinyint"
+ }, {
+ "id" : "84",
+ "name" : "CURR_CAL_DT_MNS_1QTR_YN_ID",
+ "datatype" : "tinyint"
+ }, {
+ "id" : "85",
+ "name" : "CURR_CAL_DT_MNS_2QTR_YN_ID",
+ "datatype" : "tinyint"
+ }, {
+ "id" : "86",
+ "name" : "CURR_CAL_DT_MNS_1MONTH_YN_ID",
+ "datatype" : "tinyint"
+ }, {
+ "id" : "87",
+ "name" : "CURR_CAL_DT_MNS_2MONTH_YN_ID",
+ "datatype" : "tinyint"
+ }, {
+ "id" : "88",
+ "name" : "CURR_CAL_DT_MNS_1WEEK_YN_IND",
+ "datatype" : "tinyint"
+ }, {
+ "id" : "89",
+ "name" : "CURR_CAL_DT_MNS_2WEEK_YN_IND",
+ "datatype" : "tinyint"
+ }, {
+ "id" : "90",
+ "name" : "RTL_MONTH_OF_RTL_YEAR_ID",
+ "datatype" : "string"
+ }, {
+ "id" : "91",
+ "name" : "RTL_QTR_OF_RTL_YEAR_ID",
+ "datatype" : "tinyint"
+ }, {
+ "id" : "92",
+ "name" : "RTL_WEEK_OF_RTL_YEAR_ID",
+ "datatype" : "tinyint"
+ }, {
+ "id" : "93",
+ "name" : "SEASON_OF_YEAR_ID",
+ "datatype" : "tinyint"
+ }, {
+ "id" : "94",
+ "name" : "YTM_YN_ID",
+ "datatype" : "tinyint"
+ }, {
+ "id" : "95",
+ "name" : "YTQ_YN_ID",
+ "datatype" : "tinyint"
+ }, {
+ "id" : "96",
+ "name" : "YTW_YN_ID",
+ "datatype" : "tinyint"
+ }, {
+ "id" : "97",
+ "name" : "CAL_DT_CRE_DATE",
+ "datatype" : "string"
+ }, {
+ "id" : "98",
+ "name" : "CAL_DT_CRE_USER",
+ "datatype" : "string"
+ }, {
+ "id" : "99",
+ "name" : "CAL_DT_UPD_DATE",
+ "datatype" : "string"
+ }, {
+ "id" : "100",
+ "name" : "CAL_DT_UPD_USER",
+ "datatype" : "string"
+ } ],
+ "database" : "edw",
+ "last_modified" : 0
+}
\ No newline at end of file
diff --git a/tool/src/test/resources/test_meta/table/EDW.TEST_SELLER_TYPE_DIM.json b/tool/src/test/resources/test_meta/table/EDW.TEST_SELLER_TYPE_DIM.json
new file mode 100644
index 0000000..136ae57
--- /dev/null
+++ b/tool/src/test/resources/test_meta/table/EDW.TEST_SELLER_TYPE_DIM.json
@@ -0,0 +1,46 @@
+{
+ "uuid" : "9ecc90c4-55df-436f-8602-2fbd4bca72e1",
+ "name" : "TEST_SELLER_TYPE_DIM",
+ "columns" : [ {
+ "id" : "1",
+ "name" : "SELLER_TYPE_CD",
+ "datatype" : "smallint",
+ "index": "T"
+ }, {
+ "id" : "2",
+ "name" : "SELLER_TYPE_DESC",
+ "datatype" : "string"
+ }, {
+ "id" : "3",
+ "name" : "GLBL_RPRT_SLR_SGMNT_CD",
+ "datatype" : "tinyint"
+ }, {
+ "id" : "4",
+ "name" : "SELLER_GROUP_CD",
+ "datatype" : "tinyint",
+ "index": "T"
+ }, {
+ "id" : "5",
+ "name" : "SELLER_GROUP_DESC",
+ "datatype" : "string"
+ }, {
+ "id" : "6",
+ "name" : "DIM_CRE_DATE",
+ "datatype" : "string"
+ }, {
+ "id" : "7",
+ "name" : "DIM_CRE_USER",
+ "datatype" : "string"
+ }, {
+ "id" : "8",
+ "name" : "DIM_UPD_DATE",
+ "datatype" : "string"
+ }, {
+ "id" : "9",
+ "name" : "DIM_UPD_USER",
+ "datatype" : "string"
+ } ],
+ "database" : "edw",
+ "table_type" : "VIRTUAL_VIEW",
+ "last_modified" : 0
+}
\ No newline at end of file
diff --git a/tool/src/test/resources/test_meta/table/EDW.TEST_SITES.json b/tool/src/test/resources/test_meta/table/EDW.TEST_SITES.json
new file mode 100644
index 0000000..4c2d727
--- /dev/null
+++ b/tool/src/test/resources/test_meta/table/EDW.TEST_SITES.json
@@ -0,0 +1,51 @@
+{
+
+ "uuid" : "338a3325-a947-46d1-9ece-e079b3b8d4a6",
+ "name" : "TEST_SITES",
+ "columns" : [ {
+ "id" : "1",
+ "name" : "SITE_ID",
+ "datatype" : "int",
+ "index": "T"
+ }, {
+ "id" : "2",
+ "name" : "SITE_NAME",
+ "datatype" : "string",
+ "index": "T"
+ }, {
+ "id" : "3",
+ "name" : "SITE_DOMAIN_CODE",
+ "datatype" : "string"
+ }, {
+ "id" : "4",
+ "name" : "DFAULT_LSTG_CURNCY",
+ "datatype" : "int"
+ }, {
+ "id" : "5",
+ "name" : "EOA_EMAIL_CSTMZBL_SITE_YN_ID",
+ "datatype" : "tinyint"
+ }, {
+ "id" : "6",
+ "name" : "SITE_CNTRY_ID",
+ "datatype" : "int",
+ "index": "T"
+ }, {
+ "id" : "7",
+ "name" : "CRE_DATE",
+ "datatype" : "string"
+ }, {
+ "id" : "8",
+ "name" : "SITES_UPD_DATE",
+ "datatype" : "string"
+ }, {
+ "id" : "9",
+ "name" : "CRE_USER",
+ "datatype" : "string"
+ }, {
+ "id" : "10",
+ "name" : "SITES_UPD_USER",
+ "datatype" : "string"
+ } ],
+ "database" : "edw",
+ "last_modified" : 0
+}
\ No newline at end of file
diff --git a/tool/src/test/resources/test_meta/table_snapshot/DEFAULT.KYLIN_COUNTRY/92456efe-9b79-4385-a5a3-e7f37b677bf7.snapshot b/tool/src/test/resources/test_meta/table_snapshot/DEFAULT.KYLIN_COUNTRY/92456efe-9b79-4385-a5a3-e7f37b677bf7.snapshot
new file mode 100644
index 0000000..58ca104
Binary files /dev/null and b/tool/src/test/resources/test_meta/table_snapshot/DEFAULT.KYLIN_COUNTRY/92456efe-9b79-4385-a5a3-e7f37b677bf7.snapshot differ
diff --git a/tool/src/test/resources/test_meta/table_snapshot/DEFAULT.TEST_COUNTRY/7ecdb07b-a8d0-49d8-892b-fe2dd75512ca.snapshot b/tool/src/test/resources/test_meta/table_snapshot/DEFAULT.TEST_COUNTRY/7ecdb07b-a8d0-49d8-892b-fe2dd75512ca.snapshot
new file mode 100644
index 0000000..4f24fe8
Binary files /dev/null and b/tool/src/test/resources/test_meta/table_snapshot/DEFAULT.TEST_COUNTRY/7ecdb07b-a8d0-49d8-892b-fe2dd75512ca.snapshot differ
--
To stop receiving notification emails like this one, please contact
liyang@apache.org.