This is an automated email from the ASF dual-hosted git repository. xxyu pushed a commit to branch kylin-on-parquet-v2 in repository https://gitbox.apache.org/repos/asf/kylin.git
commit 97cebbdca78911d505b63ad16ea5df825c951612 Author: yaqian.zhang <598593...@qq.com> AuthorDate: Tue Nov 3 18:03:10 2020 +0800 KYLIN-4801 Clean up and add test sql --- .../data/release_test_0001.json | 626 --------------------- .../features/specs/generic_test.spec | 64 --- .../features/specs/query/query.spec | 22 + .../features/step_impl/before_suite.py | 10 +- .../features/step_impl/generic_test_step.py | 15 +- .../features/step_impl/query/query.py | 40 ++ .../kylin_instances/kylin_instance.yml | 2 +- .../CI/kylin-system-testing/kylin_utils/equals.py | 11 +- .../generic_desc_data/generic_desc_data_3x.json | 0 .../generic_desc_data/generic_desc_data_4x.json | 2 +- .../query/sql/sql_test/sql1.sql | 26 + .../query/sql_result/sql_test/sql1.json | 6 + build/CI/run-ci.sh | 14 +- 13 files changed, 126 insertions(+), 712 deletions(-) diff --git a/build/CI/kylin-system-testing/data/release_test_0001.json b/build/CI/kylin-system-testing/data/release_test_0001.json deleted file mode 100644 index 0b5558a..0000000 --- a/build/CI/kylin-system-testing/data/release_test_0001.json +++ /dev/null @@ -1,626 +0,0 @@ -{ - "load_table_list": - "DEFAULT.KYLIN_SALES,DEFAULT.KYLIN_CAL_DT,DEFAULT.KYLIN_CATEGORY_GROUPINGS,DEFAULT.KYLIN_ACCOUNT,DEFAULT.KYLIN_COUNTRY", - - "model_desc_data": - { - "uuid": "0928468a-9fab-4185-9a14-6f2e7c74823f", - "last_modified": 0, - "version": "3.0.0.20500", - "name": "release_test_0001_model", - "owner": null, - "is_draft": false, - "description": "", - "fact_table": "DEFAULT.KYLIN_SALES", - "lookups": [ - { - "table": "DEFAULT.KYLIN_CAL_DT", - "kind": "LOOKUP", - "alias": "KYLIN_CAL_DT", - "join": { - "type": "inner", - "primary_key": [ - "KYLIN_CAL_DT.CAL_DT" - ], - "foreign_key": [ - "KYLIN_SALES.PART_DT" - ] - } - }, - { - "table": "DEFAULT.KYLIN_CATEGORY_GROUPINGS", - "kind": "LOOKUP", - "alias": "KYLIN_CATEGORY_GROUPINGS", - "join": { - "type": "inner", - "primary_key": [ - "KYLIN_CATEGORY_GROUPINGS.LEAF_CATEG_ID", - "KYLIN_CATEGORY_GROUPINGS.SITE_ID" - ], - "foreign_key": [ - "KYLIN_SALES.LEAF_CATEG_ID", - "KYLIN_SALES.LSTG_SITE_ID" - ] - } - }, - { - "table": "DEFAULT.KYLIN_ACCOUNT", - "kind": "LOOKUP", - "alias": "BUYER_ACCOUNT", - "join": { - "type": "inner", - "primary_key": [ - "BUYER_ACCOUNT.ACCOUNT_ID" - ], - "foreign_key": [ - "KYLIN_SALES.BUYER_ID" - ] - } - }, - { - "table": "DEFAULT.KYLIN_ACCOUNT", - "kind": "LOOKUP", - "alias": "SELLER_ACCOUNT", - "join": { - "type": "inner", - "primary_key": [ - "SELLER_ACCOUNT.ACCOUNT_ID" - ], - "foreign_key": [ - "KYLIN_SALES.SELLER_ID" - ] - } - }, - { - "table": "DEFAULT.KYLIN_COUNTRY", - "kind": "LOOKUP", - "alias": "BUYER_COUNTRY", - "join": { - "type": "inner", - "primary_key": [ - "BUYER_COUNTRY.COUNTRY" - ], - "foreign_key": [ - "BUYER_ACCOUNT.ACCOUNT_COUNTRY" - ] - } - }, - { - "table": "DEFAULT.KYLIN_COUNTRY", - "kind": "LOOKUP", - "alias": "SELLER_COUNTRY", - "join": { - "type": "inner", - "primary_key": [ - "SELLER_COUNTRY.COUNTRY" - ], - "foreign_key": [ - "SELLER_ACCOUNT.ACCOUNT_COUNTRY" - ] - } - } - ], - "dimensions": [ - { - "table": "KYLIN_SALES", - "columns": [ - "TRANS_ID", - "SELLER_ID", - "BUYER_ID", - "PART_DT", - "LEAF_CATEG_ID", - "LSTG_FORMAT_NAME", - "LSTG_SITE_ID", - "OPS_USER_ID", - "OPS_REGION" - ] - }, - { - "table": "KYLIN_CAL_DT", - "columns": [ - "CAL_DT", - "WEEK_BEG_DT", - "MONTH_BEG_DT", - "YEAR_BEG_DT" - ] - }, - { - "table": "KYLIN_CATEGORY_GROUPINGS", - "columns": [ - "USER_DEFINED_FIELD1", - "USER_DEFINED_FIELD3", - "META_CATEG_NAME", - "CATEG_LVL2_NAME", - "CATEG_LVL3_NAME", - "LEAF_CATEG_ID", - "SITE_ID" - ] - }, - { - "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": "BUYER_COUNTRY", - "columns": [ - "COUNTRY", - "NAME" - ] - }, - { - "table": "SELLER_COUNTRY", - "columns": [ - "COUNTRY", - "NAME" - ] - } - ], - "metrics": [ - "KYLIN_SALES.PRICE", - "KYLIN_SALES.ITEM_COUNT" - ], - "filter_condition": "", - "partition_desc": { - "partition_date_column": "KYLIN_SALES.PART_DT", - "partition_time_column": null, - "partition_date_start": 0, - "partition_date_format": "yyyy-MM-dd HH:mm:ss", - "partition_time_format": "HH:mm:ss", - "partition_type": "APPEND", - "partition_condition_builder": "org.apache.kylin.metadata.model.PartitionDesc$DefaultPartitionConditionBuilder" - }, - "capacity": "MEDIUM", - "projectName": null - }, - "cube_desc_data": - { - "uuid": "0ef9b7a8-3929-4dff-b59d-2100aadc8dbf", - "last_modified": 0, - "version": "3.0.0.20500", - "name": "release_test_0001_cube", - "is_draft": false, - "model_name": "release_test_0001_model", - "description": "", - "null_string": null, - "dimensions": [ - { - "name": "TRANS_ID", - "table": "KYLIN_SALES", - "column": "TRANS_ID", - "derived": null - }, - { - "name": "YEAR_BEG_DT", - "table": "KYLIN_CAL_DT", - "column": null, - "derived": [ - "YEAR_BEG_DT" - ] - }, - { - "name": "MONTH_BEG_DT", - "table": "KYLIN_CAL_DT", - "column": null, - "derived": [ - "MONTH_BEG_DT" - ] - }, - { - "name": "WEEK_BEG_DT", - "table": "KYLIN_CAL_DT", - "column": null, - "derived": [ - "WEEK_BEG_DT" - ] - }, - { - "name": "USER_DEFINED_FIELD1", - "table": "KYLIN_CATEGORY_GROUPINGS", - "column": null, - "derived": [ - "USER_DEFINED_FIELD1" - ] - }, - { - "name": "USER_DEFINED_FIELD3", - "table": "KYLIN_CATEGORY_GROUPINGS", - "column": null, - "derived": [ - "USER_DEFINED_FIELD3" - ] - }, - { - "name": "META_CATEG_NAME", - "table": "KYLIN_CATEGORY_GROUPINGS", - "column": "META_CATEG_NAME", - "derived": null - }, - { - "name": "CATEG_LVL2_NAME", - "table": "KYLIN_CATEGORY_GROUPINGS", - "column": "CATEG_LVL2_NAME", - "derived": null - }, - { - "name": "CATEG_LVL3_NAME", - "table": "KYLIN_CATEGORY_GROUPINGS", - "column": "CATEG_LVL3_NAME", - "derived": null - }, - { - "name": "LSTG_FORMAT_NAME", - "table": "KYLIN_SALES", - "column": "LSTG_FORMAT_NAME", - "derived": null - }, - { - "name": "SELLER_ID", - "table": "KYLIN_SALES", - "column": "SELLER_ID", - "derived": null - }, - { - "name": "BUYER_ID", - "table": "KYLIN_SALES", - "column": "BUYER_ID", - "derived": null - }, - { - "name": "ACCOUNT_BUYER_LEVEL", - "table": "BUYER_ACCOUNT", - "column": "ACCOUNT_BUYER_LEVEL", - "derived": null - }, - { - "name": "ACCOUNT_SELLER_LEVEL", - "table": "SELLER_ACCOUNT", - "column": "ACCOUNT_SELLER_LEVEL", - "derived": null - }, - { - "name": "BUYER_COUNTRY", - "table": "BUYER_ACCOUNT", - "column": "ACCOUNT_COUNTRY", - "derived": null - }, - { - "name": "SELLER_COUNTRY", - "table": "SELLER_ACCOUNT", - "column": "ACCOUNT_COUNTRY", - "derived": null - }, - { - "name": "BUYER_COUNTRY_NAME", - "table": "BUYER_COUNTRY", - "column": "NAME", - "derived": null - }, - { - "name": "SELLER_COUNTRY_NAME", - "table": "SELLER_COUNTRY", - "column": "NAME", - "derived": null - }, - { - "name": "OPS_USER_ID", - "table": "KYLIN_SALES", - "column": "OPS_USER_ID", - "derived": null - }, - { - "name": "OPS_REGION", - "table": "KYLIN_SALES", - "column": "OPS_REGION", - "derived": null - } - ], - "measures": [ - { - "name": "GMV_SUM", - "function": { - "expression": "SUM", - "parameter": { - "type": "column", - "value": "KYLIN_SALES.PRICE" - }, - "returntype": "decimal(19,4)" - } - }, - { - "name": "BUYER_LEVEL_SUM", - "function": { - "expression": "SUM", - "parameter": { - "type": "column", - "value": "BUYER_ACCOUNT.ACCOUNT_BUYER_LEVEL" - }, - "returntype": "bigint" - } - }, - { - "name": "SELLER_LEVEL_SUM", - "function": { - "expression": "SUM", - "parameter": { - "type": "column", - "value": "SELLER_ACCOUNT.ACCOUNT_SELLER_LEVEL" - }, - "returntype": "bigint" - } - }, - { - "name": "TRANS_CNT", - "function": { - "expression": "COUNT", - "parameter": { - "type": "constant", - "value": "1" - }, - "returntype": "bigint" - } - }, - { - "name": "SELLER_CNT_HLL", - "function": { - "expression": "COUNT_DISTINCT", - "parameter": { - "type": "column", - "value": "KYLIN_SALES.SELLER_ID" - }, - "returntype": "hllc(10)" - } - }, - { - "name": "TOP_SELLER", - "function": { - "expression": "TOP_N", - "parameter": { - "type": "column", - "value": "KYLIN_SALES.PRICE", - "next_parameter": { - "type": "column", - "value": "KYLIN_SALES.SELLER_ID" - } - }, - "returntype": "topn(100)", - "configuration": { - "topn.encoding.KYLIN_SALES.SELLER_ID": "dict", - "topn.encoding_version.KYLIN_SALES.SELLER_ID": "1" - } - } - } - ], - "rowkey": { - "rowkey_columns": [ - { - "column": "KYLIN_SALES.BUYER_ID", - "encoding": "integer:4", - "encoding_version": 1, - "isShardBy": false - }, - { - "column": "KYLIN_SALES.SELLER_ID", - "encoding": "integer:4", - "encoding_version": 1, - "isShardBy": false - }, - { - "column": "KYLIN_SALES.TRANS_ID", - "encoding": "integer:4", - "encoding_version": 1, - "isShardBy": false - }, - { - "column": "KYLIN_SALES.PART_DT", - "encoding": "date", - "encoding_version": 1, - "isShardBy": false - }, - { - "column": "KYLIN_SALES.LEAF_CATEG_ID", - "encoding": "dict", - "encoding_version": 1, - "isShardBy": false - }, - { - "column": "KYLIN_CATEGORY_GROUPINGS.META_CATEG_NAME", - "encoding": "dict", - "encoding_version": 1, - "isShardBy": false - }, - { - "column": "KYLIN_CATEGORY_GROUPINGS.CATEG_LVL2_NAME", - "encoding": "dict", - "encoding_version": 1, - "isShardBy": false - }, - { - "column": "KYLIN_CATEGORY_GROUPINGS.CATEG_LVL3_NAME", - "encoding": "dict", - "encoding_version": 1, - "isShardBy": false - }, - { - "column": "BUYER_ACCOUNT.ACCOUNT_BUYER_LEVEL", - "encoding": "dict", - "encoding_version": 1, - "isShardBy": false - }, - { - "column": "SELLER_ACCOUNT.ACCOUNT_SELLER_LEVEL", - "encoding": "dict", - "encoding_version": 1, - "isShardBy": false - }, - { - "column": "BUYER_ACCOUNT.ACCOUNT_COUNTRY", - "encoding": "dict", - "encoding_version": 1, - "isShardBy": false - }, - { - "column": "SELLER_ACCOUNT.ACCOUNT_COUNTRY", - "encoding": "dict", - "encoding_version": 1, - "isShardBy": false - }, - { - "column": "BUYER_COUNTRY.NAME", - "encoding": "dict", - "encoding_version": 1, - "isShardBy": false - }, - { - "column": "SELLER_COUNTRY.NAME", - "encoding": "dict", - "encoding_version": 1, - "isShardBy": false - }, - { - "column": "KYLIN_SALES.LSTG_FORMAT_NAME", - "encoding": "dict", - "encoding_version": 1, - "isShardBy": false - }, - { - "column": "KYLIN_SALES.LSTG_SITE_ID", - "encoding": "dict", - "encoding_version": 1, - "isShardBy": false - }, - { - "column": "KYLIN_SALES.OPS_USER_ID", - "encoding": "dict", - "encoding_version": 1, - "isShardBy": false - }, - { - "column": "KYLIN_SALES.OPS_REGION", - "encoding": "dict", - "encoding_version": 1, - "isShardBy": false - } - ] - }, - "hbase_mapping": { - "column_family": [ - { - "name": "F1", - "columns": [ - { - "qualifier": "M", - "measure_refs": [ - "GMV_SUM", - "BUYER_LEVEL_SUM", - "SELLER_LEVEL_SUM", - "TRANS_CNT" - ] - } - ] - }, - { - "name": "F2", - "columns": [ - { - "qualifier": "M", - "measure_refs": [ - "SELLER_CNT_HLL", - "TOP_SELLER" - ] - } - ] - } - ] - }, - "aggregation_groups": [ - { - "includes": [ - "KYLIN_SALES.PART_DT", - "KYLIN_CATEGORY_GROUPINGS.META_CATEG_NAME", - "KYLIN_CATEGORY_GROUPINGS.CATEG_LVL2_NAME", - "KYLIN_CATEGORY_GROUPINGS.CATEG_LVL3_NAME", - "KYLIN_SALES.LEAF_CATEG_ID", - "KYLIN_SALES.LSTG_FORMAT_NAME", - "KYLIN_SALES.LSTG_SITE_ID", - "KYLIN_SALES.OPS_USER_ID", - "KYLIN_SALES.OPS_REGION", - "BUYER_ACCOUNT.ACCOUNT_BUYER_LEVEL", - "SELLER_ACCOUNT.ACCOUNT_SELLER_LEVEL", - "BUYER_ACCOUNT.ACCOUNT_COUNTRY", - "SELLER_ACCOUNT.ACCOUNT_COUNTRY", - "BUYER_COUNTRY.NAME", - "SELLER_COUNTRY.NAME" - ], - "select_rule": { - "hierarchy_dims": [ - [ - "KYLIN_CATEGORY_GROUPINGS.META_CATEG_NAME", - "KYLIN_CATEGORY_GROUPINGS.CATEG_LVL2_NAME", - "KYLIN_CATEGORY_GROUPINGS.CATEG_LVL3_NAME", - "KYLIN_SALES.LEAF_CATEG_ID" - ] - ], - "mandatory_dims": [ - "KYLIN_SALES.PART_DT" - ], - "joint_dims": [ - [ - "BUYER_ACCOUNT.ACCOUNT_COUNTRY", - "BUYER_COUNTRY.NAME" - ], - [ - "SELLER_ACCOUNT.ACCOUNT_COUNTRY", - "SELLER_COUNTRY.NAME" - ], - [ - "BUYER_ACCOUNT.ACCOUNT_BUYER_LEVEL", - "SELLER_ACCOUNT.ACCOUNT_SELLER_LEVEL" - ], - [ - "KYLIN_SALES.LSTG_FORMAT_NAME", - "KYLIN_SALES.LSTG_SITE_ID" - ], - [ - "KYLIN_SALES.OPS_USER_ID", - "KYLIN_SALES.OPS_REGION" - ] - ] - } - } - ], - "signature": null, - "notify_list": [], - "status_need_notify": [], - "partition_date_start": 0, - "partition_date_end": 3153600000000, - "auto_merge_time_ranges": [], - "volatile_range": 0, - "retention_range": 0, - "engine_type": 2, - "storage_type": 2, - "override_kylin_properties": { - "kylin.cube.aggrgroup.is-mandatory-only-valid": "true", - "kylin.engine.spark.rdd-partition-cut-mb": "500" - }, - "cuboid_black_list": [], - "parent_forward": 3, - "mandatory_dimension_set_list": [], - "snapshot_table_desc_list": [] - } -} \ No newline at end of file diff --git a/build/CI/kylin-system-testing/features/specs/generic_test.spec b/build/CI/kylin-system-testing/features/specs/generic_test.spec deleted file mode 100644 index d37e236..0000000 --- a/build/CI/kylin-system-testing/features/specs/generic_test.spec +++ /dev/null @@ -1,64 +0,0 @@ -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. - -# Kylin Release Test -Tags:3.x -## Prepare env -* Get kylin instance - -* prepare data file from "release_test_0001.json" - -* Create project "release_test_0001_project" and load table "load_table_list" - - -## MR engine - -* Create model with "model_desc_data" in "release_test_0001_project" - -* Create cube with "cube_desc_data" in "release_test_0001_project", cube name is "release_test_0001_cube" - -* Build segment from "1325347200000" to "1356969600000" in "release_test_0001_cube" - -* Build segment from "1356969600000" to "1391011200000" in "release_test_0001_cube" - -* Merge cube "release_test_0001_cube" segment from "1325347200000" to "1391011200000" - - -SPARK engine - -Clone cube "release_test_0001_cube" and name it "kylin_spark_cube" in "release_test_0001_project", modify build engine to "SPARK" - -Build segment from "1325347200000" to "1356969600000" in "kylin_spark_cube" - -Build segment from "1356969600000" to "1391011200000" in "kylin_spark_cube" - -Merge cube "kylin_spark_cube" segment from "1325347200000" to "1391011200000" - - -## Query cube and pushdown - -* Query SQL "select count(*) from kylin_sales" and specify "release_test_0001_cube" cube to query in "release_test_0001_project", compare result with "10000" - -Query SQL "select count(*) from kylin_sales" and specify "kylin_spark_cube" cube to query in "release_test_0001_project", compare result with "10000" - -* Disable cube "release_test_0001_cube" - -Disable cube "kylin_spark_cube" - -* Query SQL "select count(*) from kylin_sales" in "release_test_0001_project" and pushdown, compare result with "10000" - - - diff --git a/build/CI/kylin-system-testing/features/specs/query/query.spec b/build/CI/kylin-system-testing/features/specs/query/query.spec new file mode 100644 index 0000000..8cd3a6f --- /dev/null +++ b/build/CI/kylin-system-testing/features/specs/query/query.spec @@ -0,0 +1,22 @@ +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. + +# Kylin SQL test +Tags:4.x + +## Query sql + +* Query all SQL file in directory "query/sql/sql_test/" in project "generic_test_project", compare result with hive pushdown result and compare metrics info with sql_result json file in "query/sql_result/sql_test/" \ No newline at end of file diff --git a/build/CI/kylin-system-testing/features/step_impl/before_suite.py b/build/CI/kylin-system-testing/features/step_impl/before_suite.py index 3cd86ca..d1cd3fd 100644 --- a/build/CI/kylin-system-testing/features/step_impl/before_suite.py +++ b/build/CI/kylin-system-testing/features/step_impl/before_suite.py @@ -26,10 +26,10 @@ from kylin_utils import util def create_generic_model_and_cube(): client = util.setup_instance('kylin_instance.yml') if client.version == '3.x': - with open(os.path.join('data/generic_desc_data', 'generic_desc_data_3x.json'), 'r') as f: + with open(os.path.join('meta_data/generic_desc_data', 'generic_desc_data_3x.json'), 'r') as f: data = json.load(f) elif client.version == '4.x': - with open(os.path.join('data/generic_desc_data', 'generic_desc_data_4x.json'), 'r') as f: + with open(os.path.join('meta_data/generic_desc_data', 'generic_desc_data_4x.json'), 'r') as f: data = json.load(f) project_name = client.generic_project @@ -56,6 +56,6 @@ def create_generic_model_and_cube(): cube_name=cube_name, cube_desc_data=cube_desc_data) assert json.loads(resp['cubeDescData'])['name'] == cube_name - if client.get_cube_instance(cube_name=cube_name).get('status') != 'READY': - resp = client.full_build_cube(cube_name=cube_name) - assert client.await_job_finished(job_id=resp['uuid'], waiting_time=20) + if client.get_cube_instance(cube_name=cube_name).get('status') != 'READY' and len(client.list_jobs(project_name=project_name, job_search_mode='CUBING_ONLY')) == 0: + client.full_build_cube(cube_name=cube_name) + assert client.await_all_jobs(project_name=project_name) diff --git a/build/CI/kylin-system-testing/features/step_impl/generic_test_step.py b/build/CI/kylin-system-testing/features/step_impl/generic_test_step.py index 0aabb98..cea47c1 100644 --- a/build/CI/kylin-system-testing/features/step_impl/generic_test_step.py +++ b/build/CI/kylin-system-testing/features/step_impl/generic_test_step.py @@ -28,10 +28,10 @@ def get_kylin_instance_with_config_file(): client = util.setup_instance('kylin_instance.yml') -@step("prepare data file from <release_test_0001.json>") -def prepare_data_file_from(file_name): +@step("prepare data file from release_test_0001.json") +def prepare_data_file_from_data(file_name): global data - with open(os.path.join('data', file_name), 'r') as f: + with open(os.path.join('meta_data', file_name), 'r') as f: data = json.load(f) @@ -54,7 +54,7 @@ def create_model_step(model_desc, project): assert json.loads(resp['modelDescData'])['name'] == model_name -@step("Create cube with <cube_desc> in <prpject>, cube name is <cube_name>") +@step("Create cube with <cube_desc> in <project>, cube name is <cube_name>") def create_cube_step(cube_desc, project, cube_name): resp = client.create_cube(project_name=project, cube_name=cube_name, @@ -113,3 +113,10 @@ def query_pushdown_step(sql, project, result): assert resp.get('cube') == '' assert resp.get('pushDown') is True + +@step("Query all SQL file in directory <directory>, compare result with hive pushdown result") +def query_sql_file_and_compare(directory): + sql_directory = os.listdir(directory) + for sql_file in sql_directory: + sql = open(sql_file, 'r', encoding='utf8') + sqltxt = sql.readlines() diff --git a/build/CI/kylin-system-testing/features/step_impl/query/query.py b/build/CI/kylin-system-testing/features/step_impl/query/query.py new file mode 100644 index 0000000..55f5597 --- /dev/null +++ b/build/CI/kylin-system-testing/features/step_impl/query/query.py @@ -0,0 +1,40 @@ +#!/usr/bin/python +# +# 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. + +import os +import json + +from getgauge.python import step + +from kylin_utils import util +from kylin_utils import equals + + +@step("Query all SQL file in directory <sql_directory> in project <project_name>, compare result with hive pushdown result and compare metrics info with sql_result json file in <sql_result_directory>") +def query_sql_file_and_compare(sql_directory, project_name, sql_result_directory): + sql_directory_list = os.listdir(sql_directory) + for sql_file_name in sql_directory_list: + with open(sql_directory + sql_file_name, 'r', encoding='utf8') as sql_file: + sql = sql_file.read() + + client = util.setup_instance('kylin_instance.yml') + with open(sql_result_directory + sql_file_name.split(".")[0] + '.json', 'r', encoding='utf8') as expected_result_file: + expected_result = json.loads(expected_result_file.read()) + equals.compare_sql_result(sql=sql, project=project_name, kylin_client=client, expected_result=expected_result) + + + diff --git a/build/CI/kylin-system-testing/kylin_instances/kylin_instance.yml b/build/CI/kylin-system-testing/kylin_instances/kylin_instance.yml index 501428f..5454a41 100644 --- a/build/CI/kylin-system-testing/kylin_instances/kylin_instance.yml +++ b/build/CI/kylin-system-testing/kylin_instances/kylin_instance.yml @@ -17,6 +17,6 @@ # All mode - host: localhost port: 7070 - version: 3.x + version: 4.x hadoop_platform: HDP2.4 deploy_mode: ALL \ No newline at end of file diff --git a/build/CI/kylin-system-testing/kylin_utils/equals.py b/build/CI/kylin-system-testing/kylin_utils/equals.py index 9d44aaf..6c990d4 100644 --- a/build/CI/kylin-system-testing/kylin_utils/equals.py +++ b/build/CI/kylin-system-testing/kylin_utils/equals.py @@ -197,7 +197,7 @@ def dataset_equals(expect, return True -def compare_sql_result(sql, project, kylin_client, cube=None): +def compare_sql_result(sql, project, kylin_client, cube=None, expected_result=None): pushdown_project = kylin_client.pushdown_project if not util.if_project_exists(kylin_client=kylin_client, project=pushdown_project): kylin_client.create_project(project_name=pushdown_project) @@ -218,4 +218,11 @@ def compare_sql_result(sql, project, kylin_client, cube=None): pushdown_resp = kylin_client.execute_query(project_name=pushdown_project, sql=sql) assert pushdown_resp.get('isException') is False - assert query_result_equals(kylin_resp, pushdown_resp) \ No newline at end of file + assert query_result_equals(kylin_resp, pushdown_resp) + + if expected_result is not None: + print(kylin_resp.get("totalScanCount")) + assert expected_result.get("totalScanCount") == kylin_resp.get("totalScanCount") + assert expected_result.get("totalScanBytes") == kylin_resp.get("totalScanBytes") + assert expected_result.get("totalScanFiles") == kylin_resp.get("totalScanFiles") + assert expected_result.get("pushDown") == kylin_resp.get("pushDown") \ No newline at end of file diff --git a/build/CI/kylin-system-testing/data/generic_desc_data/generic_desc_data_3x.json b/build/CI/kylin-system-testing/meta_data/generic_desc_data/generic_desc_data_3x.json similarity index 100% rename from build/CI/kylin-system-testing/data/generic_desc_data/generic_desc_data_3x.json rename to build/CI/kylin-system-testing/meta_data/generic_desc_data/generic_desc_data_3x.json diff --git a/build/CI/kylin-system-testing/data/generic_desc_data/generic_desc_data_4x.json b/build/CI/kylin-system-testing/meta_data/generic_desc_data/generic_desc_data_4x.json similarity index 99% rename from build/CI/kylin-system-testing/data/generic_desc_data/generic_desc_data_4x.json rename to build/CI/kylin-system-testing/meta_data/generic_desc_data/generic_desc_data_4x.json index 8d533b5..4055cf4 100644 --- a/build/CI/kylin-system-testing/data/generic_desc_data/generic_desc_data_4x.json +++ b/build/CI/kylin-system-testing/meta_data/generic_desc_data/generic_desc_data_4x.json @@ -6,7 +6,7 @@ { "uuid": "0928468a-9fab-4185-9a14-6f2e7c74823f", "last_modified": 0, - "version": "3.0.0.20500", + "version": "4.0", "name": "generic_test_model", "owner": null, "is_draft": false, diff --git a/build/CI/kylin-system-testing/query/sql/sql_test/sql1.sql b/build/CI/kylin-system-testing/query/sql/sql_test/sql1.sql new file mode 100644 index 0000000..9d5e678 --- /dev/null +++ b/build/CI/kylin-system-testing/query/sql/sql_test/sql1.sql @@ -0,0 +1,26 @@ +-- +-- 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. +-- + +SELECT cal_dt ,sum(price) AS sum_price +FROM +(SELECT kylin_cal_dt.cal_dt, kylin_sales.price +FROM kylin_sales INNER JOIN kylin_cal_dt AS kylin_cal_dt +ON kylin_sales.part_dt = kylin_cal_dt.cal_dt +INNER JOIN kylin_category_groupings ON kylin_sales.leaf_categ_id = kylin_category_groupings.leaf_categ_id +AND kylin_sales.lstg_site_id = kylin_category_groupings.site_id) t +GROUP BY cal_dt; \ No newline at end of file diff --git a/build/CI/kylin-system-testing/query/sql_result/sql_test/sql1.json b/build/CI/kylin-system-testing/query/sql_result/sql_test/sql1.json new file mode 100644 index 0000000..3c2ec22 --- /dev/null +++ b/build/CI/kylin-system-testing/query/sql_result/sql_test/sql1.json @@ -0,0 +1,6 @@ +{ + "totalScanCount":7349, + "totalScanBytes":229078, + "totalScanFiles":2, + "pushDown": false +} \ No newline at end of file diff --git a/build/CI/run-ci.sh b/build/CI/run-ci.sh index 41a4bb6..acbb2c7 100644 --- a/build/CI/run-ci.sh +++ b/build/CI/run-ci.sh @@ -38,7 +38,7 @@ pwd # 1. Package kylin if [[ -z $binary_file ]]; then cd dev-support/build-release - bash -x package.sh + bash -x packaging.sh cd - fi @@ -55,14 +55,10 @@ mkdir kylin-job cp -r apache-kylin-bin/* kylin-all cat > kylin-all/conf/kylin.properties <<EOL +kylin.metadata.url=kylin_metadata@jdbc,url=jdbc:mysql://metastore-db:3306/metastore,username=kylin,password=kylin,maxActive=10,maxIdle=10 +kylin.env.zookeeper-connect-string=write-zookeeper:2181 kylin.job.scheduler.default=100 -kylin.server.self-discovery-enabled=true -kylin.query.pushdown.runner-class-name=org.apache.kylin.query.adhoc.PushDownRunnerJdbcImpl -kylin.query.pushdown.update-enabled=false -kylin.query.pushdown.jdbc.url=jdbc:hive2://write-hive-server:10000/default -kylin.query.pushdown.jdbc.driver=org.apache.hive.jdbc.HiveDriver -kylin.query.pushdown.jdbc.username=hive -kylin.query.pushdown.jdbc.password= +kylin.query.pushdown.runner-class-name=org.apache.kylin.query.pushdown.PushDownRunnerSparkImpl EOL #cp -r apache-kylin-bin/* kylin-query @@ -123,7 +119,7 @@ sleep ${AWAIT_SECOND} cd build/CI/kylin-system-testing pip install -r requirements.txt -gauge run --tags 3.x +gauge run --tags 4.x cd - echo "Please check build/CI/kylin-system-testing/reports/html-report/index.html for reports."