From cdcb5d28eafaa2fb8828e5c901e1e7951eb46783 Mon Sep 17 00:00:00 2001 From: SbloodyS <460888207@qq.com> Date: Wed, 13 Nov 2024 10:11:07 +0800 Subject: [PATCH 1/7] remove data-quality module --- .github/CODEOWNERS | 1 - .github/actions/labeler/labeler.yml | 1 - config/plugins_config | 1 - deploy/kubernetes/dolphinscheduler/README.md | 1 - .../kubernetes/dolphinscheduler/values.yaml | 4 - docs/configs/docsdev.js | 8 - docs/docs/en/architecture/configuration.md | 1 - docs/docs/en/guide/data-quality.md | 313 ----- docs/docs/en/guide/upgrade/incompatible.md | 3 +- docs/docs/zh/architecture/configuration.md | 1 - docs/docs/zh/guide/data-quality.md | 357 ----- docs/docs/zh/guide/upgrade/incompatible.md | 1 + .../docker/file-manage/common.properties | 9 +- dolphinscheduler-api/pom.xml | 5 - .../DynamicTaskTypeConfiguration.java | 6 +- .../configuration/TaskTypeConfiguration.java | 3 - .../api/controller/DataQualityController.java | 195 --- .../api/dto/RuleDefinition.java | 63 - .../dolphinscheduler/api/enums/Status.java | 6 - .../api/service/DqExecuteResultService.java | 36 - .../api/service/DqRuleService.java | 44 - .../impl/DqExecuteResultServiceImpl.java | 101 -- .../api/service/impl/DqRuleServiceImpl.java | 314 ----- .../service/impl/TaskInstanceServiceImpl.java | 5 - .../resources/dynamic-task-type-config.yaml | 2 - .../main/resources/i18n/messages.properties | 8 - .../resources/i18n/messages_en_US.properties | 8 - .../resources/i18n/messages_zh_CN.properties | 8 - .../src/main/resources/task-type-config.yaml | 2 - .../controller/DataQualityControllerTest.java | 164 --- .../api/service/DqRuleServiceTest.java | 249 ---- ...kflowInstanceExecuteResultServiceTest.java | 108 -- dolphinscheduler-bom/pom.xml | 49 - .../common/constants/Constants.java | 8 - .../common/enums/AuthorizationType.java | 14 +- .../src/main/resources/common.properties | 7 - .../log/SensitiveDataConverterTest.java | 28 - .../src/test/resources/common.properties | 7 - .../src/test/resources/sql/mysql_dml.sql | 7 - .../dao/entity/DqComparisonType.java | 74 - .../dao/entity/DqExecuteResult.java | 108 -- .../entity/DqExecuteResultAlertContent.java | 258 ---- .../dolphinscheduler/dao/entity/DqRule.java | 74 - .../dao/entity/DqRuleExecuteSql.java | 76 - .../dao/entity/DqRuleInputEntry.java | 130 -- .../dao/entity/DqTaskStatisticsValue.java | 72 - .../dao/mapper/DqComparisonTypeMapper.java | 29 - .../dao/mapper/DqExecuteResultMapper.java | 62 - .../dao/mapper/DqRuleExecuteSqlMapper.java | 39 - .../dao/mapper/DqRuleInputEntryMapper.java | 39 - .../dao/mapper/DqRuleMapper.java | 48 - .../mapper/DqTaskStatisticsValueMapper.java | 29 - .../dao/repository/DqExecuteResultDao.java | 25 - .../impl/DqExecuteResultDaoImpl.java | 42 - .../dao/utils/DqRuleUtils.java | 58 - .../dao/mapper/DqComparisonTypeMapper.xml | 22 - .../dao/mapper/DqExecuteResultMapper.xml | 111 -- .../dao/mapper/DqExecuteSqlMapper.xml | 27 - .../dao/mapper/DqRuleInputEntryMapper.xml | 43 - .../dao/mapper/DqRuleMapper.xml | 37 - .../mapper/DqTaskStatisticsValueMapper.xml | 22 - .../mysql/dolphinscheduler_dml.sql | 8 - .../postgresql/dolphinscheduler_dml.sql | 8 - .../mapper/DqRuleInputEntryMapperTest.java | 61 - dolphinscheduler-data-quality/pom.xml | 201 --- .../data/quality/Constants.java | 67 - .../data/quality/DataQualityApplication.java | 80 -- .../data/quality/config/BaseConfig.java | 66 - .../data/quality/config/Config.java | 94 -- .../config/DataQualityConfiguration.java | 133 -- .../data/quality/config/EnvConfig.java | 34 - .../data/quality/config/IConfig.java | 29 - .../data/quality/config/ReaderConfig.java | 33 - .../quality/config/TransformerConfig.java | 33 - .../data/quality/config/ValidateResult.java | 46 - .../data/quality/config/WriterConfig.java | 33 - .../quality/context/DataQualityContext.java | 67 - .../data/quality/enums/ReaderType.java | 41 - .../data/quality/enums/TransformerType.java | 39 - .../data/quality/enums/WriterType.java | 41 - .../exception/ConfigRuntimeException.java | 40 - .../exception/DataQualityException.java | 57 - .../data/quality/execution/Execution.java | 36 - .../execution/SparkBatchExecution.java | 134 -- .../execution/SparkRuntimeEnvironment.java | 75 - .../data/quality/flow/Component.java | 56 - .../data/quality/flow/batch/BatchReader.java | 37 - .../quality/flow/batch/BatchTransformer.java | 38 - .../data/quality/flow/batch/BatchWriter.java | 37 - .../quality/flow/batch/reader/HiveReader.java | 69 - .../quality/flow/batch/reader/JdbcReader.java | 101 -- .../flow/batch/reader/ReaderFactory.java | 78 -- .../batch/transformer/SqlTransformer.java | 62 - .../batch/transformer/TransformerFactory.java | 74 - .../quality/flow/batch/writer/JdbcWriter.java | 93 -- .../flow/batch/writer/WriterFactory.java | 83 -- .../batch/writer/file/BaseFileWriter.java | 132 -- .../batch/writer/file/HdfsFileWriter.java | 47 - .../batch/writer/file/LocalFileWriter.java | 47 - .../data/quality/utils/ConfigUtils.java | 56 - .../data/quality/utils/JsonUtils.java | 73 - .../data/quality/utils/ParserUtils.java | 58 - .../src/main/resources/log4j.properties | 22 - .../quality/SparkApplicationTestBase.java | 47 - .../ConfigurationParserTest.java | 62 - .../data/quality/flow/FlowTestBase.java | 45 - .../quality/flow/reader/JdbcReaderTest.java | 99 -- .../flow/reader/ReaderFactoryTest.java | 70 - .../quality/flow/writer/JdbcWriterTest.java | 101 -- .../flow/writer/WriterFactoryTest.java | 54 - .../data/quality/utils/ConfigUtilsTest.java | 46 - .../src/test/resources/logback.xml | 21 - .../api/constants/DataSourceConstants.java | 7 - .../datasource/api/utils/CommonUtils.java | 80 -- dolphinscheduler-dist/pom.xml | 5 - .../e2e/pages/common/NavBarPage.java | 3 - .../docker/file-manage/common.properties | 9 +- .../runner/TaskExecutionContextFactory.java | 235 ---- .../service/alert/WorkflowAlertManager.java | 105 -- .../service/process/ProcessService.java | 12 - .../service/process/ProcessServiceImpl.java | 49 - .../service/process/ProcessServiceTest.java | 120 -- .../dolphinscheduler-task-all/pom.xml | 6 - .../api/DataQualityTaskExecutionContext.java | 291 ---- .../plugin/task/api/TaskExecutionContext.java | 2 - .../task/api/enums/dp/DqFailureStrategy.java | 65 - .../plugin/task/api/enums/dp/DqTaskState.java | 70 - .../dataquality/DataQualityParameters.java | 100 -- .../dataquality/spark/ProgramType.java | 31 - .../dataquality/spark/SparkConstants.java | 73 - .../dataquality/spark/SparkParameters.java | 228 --- .../task/api/utils/DataQualityConstants.java | 104 -- .../api/enums/dp/DqFailureStrategyTest.java | 42 - .../task/api/enums/dp/DqTaskStateTest.java | 45 - .../src/test/resources/common.properties | 9 +- .../dolphinscheduler-task-dataquality/pom.xml | 84 -- .../plugin/task/dq/DataQualityTask.java | 200 --- .../task/dq/DataQualityTaskChannel.java | 39 - .../dq/DataQualityTaskChannelFactory.java | 37 - .../dq/exception/DataQualityException.java | 45 - .../plugin/task/dq/rule/RuleManager.java | 137 -- .../task/dq/rule/entity/DqRuleExecuteSql.java | 62 - .../task/dq/rule/entity/DqRuleInputEntry.java | 105 -- .../task/dq/rule/parameter/BaseConfig.java | 59 - .../parameter/DataQualityConfiguration.java | 122 -- .../task/dq/rule/parameter/EnvConfig.java | 34 - .../task/dq/rule/parser/IRuleParser.java | 33 - .../task/dq/rule/parser/MappingColumn.java | 61 - .../parser/MultiTableAccuracyRuleParser.java | 93 -- .../MultiTableComparisonRuleParser.java | 59 - .../SingleTableCustomSqlRuleParser.java | 74 - .../dq/rule/parser/SingleTableRuleParser.java | 82 -- .../plugin/task/dq/utils/Md5Utils.java | 47 - .../plugin/task/dq/utils/RuleParserUtils.java | 592 -------- .../plugin/task/dq/utils/SparkArgsUtils.java | 137 -- .../task/dq/DataQualityParameterTest.java | 131 -- .../plugin/task/dq/DataQualityTaskTest.java | 1241 ----------------- .../plugin/task/dq/utils/Md5UtilsTest.java | 29 - dolphinscheduler-task-plugin/pom.xml | 1 - .../public/images/task-icons/data_quality.png | Bin 1086 -> 0 bytes .../images/task-icons/data_quality_hover.png | Bin 1054 -> 0 bytes .../src/layouts/content/use-dataList.ts | 18 - .../src/locales/en_US/data-quality.ts | 114 -- .../src/locales/en_US/index.ts | 2 - dolphinscheduler-ui/src/locales/en_US/menu.ts | 1 - .../src/locales/en_US/project.ts | 1 - .../src/locales/zh_CN/data-quality.ts | 113 -- .../src/locales/zh_CN/index.ts | 2 - dolphinscheduler-ui/src/locales/zh_CN/menu.ts | 1 - .../src/locales/zh_CN/project.ts | 1 - .../src/router/modules/data-quality.ts | 55 - dolphinscheduler-ui/src/router/routes.ts | 2 - .../src/service/modules/data-quality/index.ts | 62 - .../src/service/modules/data-quality/types.ts | 94 -- .../src/store/project/task-type.ts | 4 - .../src/store/project/types.ts | 1 - .../rule/components/rule-modal.tsx | 100 -- .../rule/components/table-action.tsx | 74 - .../src/views/data-quality/rule/index.tsx | 157 --- .../src/views/data-quality/rule/use-table.ts | 152 -- .../views/data-quality/task-result/index.tsx | 186 --- .../data-quality/task-result/use-table.ts | 290 ---- .../task/components/node/fields/use-rules.ts | 304 ---- .../task/components/node/format-data.ts | 43 - .../task/components/node/tasks/index.ts | 2 - .../components/node/tasks/use-data-quality.ts | 107 -- .../projects/task/constants/task-type.ts | 5 - .../workflow/components/dag/dag-sidebar.tsx | 3 - .../workflow/components/dag/dag.module.scss | 6 - pom.xml | 7 - 190 files changed, 10 insertions(+), 13829 deletions(-) delete mode 100644 docs/docs/en/guide/data-quality.md delete mode 100644 docs/docs/zh/guide/data-quality.md delete mode 100644 dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/DataQualityController.java delete mode 100644 dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/dto/RuleDefinition.java delete mode 100644 dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/DqExecuteResultService.java delete mode 100644 dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/DqRuleService.java delete mode 100644 dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/DqExecuteResultServiceImpl.java delete mode 100644 dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/DqRuleServiceImpl.java delete mode 100644 dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/controller/DataQualityControllerTest.java delete mode 100644 dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/DqRuleServiceTest.java delete mode 100644 dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/DqWorkflowInstanceExecuteResultServiceTest.java delete mode 100644 dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/DqComparisonType.java delete mode 100644 dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/DqExecuteResult.java delete mode 100644 dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/DqExecuteResultAlertContent.java delete mode 100644 dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/DqRule.java delete mode 100644 dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/DqRuleExecuteSql.java delete mode 100644 dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/DqRuleInputEntry.java delete mode 100644 dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/DqTaskStatisticsValue.java delete mode 100644 dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/DqComparisonTypeMapper.java delete mode 100644 dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/DqExecuteResultMapper.java delete mode 100644 dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/DqRuleExecuteSqlMapper.java delete mode 100644 dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/DqRuleInputEntryMapper.java delete mode 100644 dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/DqRuleMapper.java delete mode 100644 dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/DqTaskStatisticsValueMapper.java delete mode 100644 dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/repository/DqExecuteResultDao.java delete mode 100644 dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/repository/impl/DqExecuteResultDaoImpl.java delete mode 100644 dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/utils/DqRuleUtils.java delete mode 100644 dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/DqComparisonTypeMapper.xml delete mode 100644 dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/DqExecuteResultMapper.xml delete mode 100644 dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/DqExecuteSqlMapper.xml delete mode 100644 dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/DqRuleInputEntryMapper.xml delete mode 100644 dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/DqRuleMapper.xml delete mode 100644 dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/DqTaskStatisticsValueMapper.xml delete mode 100644 dolphinscheduler-dao/src/test/java/org/apache/dolphinscheduler/dao/mapper/DqRuleInputEntryMapperTest.java delete mode 100644 dolphinscheduler-data-quality/pom.xml delete mode 100644 dolphinscheduler-data-quality/src/main/java/org/apache/dolphinscheduler/data/quality/Constants.java delete mode 100644 dolphinscheduler-data-quality/src/main/java/org/apache/dolphinscheduler/data/quality/DataQualityApplication.java delete mode 100644 dolphinscheduler-data-quality/src/main/java/org/apache/dolphinscheduler/data/quality/config/BaseConfig.java delete mode 100644 dolphinscheduler-data-quality/src/main/java/org/apache/dolphinscheduler/data/quality/config/Config.java delete mode 100644 dolphinscheduler-data-quality/src/main/java/org/apache/dolphinscheduler/data/quality/config/DataQualityConfiguration.java delete mode 100644 dolphinscheduler-data-quality/src/main/java/org/apache/dolphinscheduler/data/quality/config/EnvConfig.java delete mode 100644 dolphinscheduler-data-quality/src/main/java/org/apache/dolphinscheduler/data/quality/config/IConfig.java delete mode 100644 dolphinscheduler-data-quality/src/main/java/org/apache/dolphinscheduler/data/quality/config/ReaderConfig.java delete mode 100644 dolphinscheduler-data-quality/src/main/java/org/apache/dolphinscheduler/data/quality/config/TransformerConfig.java delete mode 100644 dolphinscheduler-data-quality/src/main/java/org/apache/dolphinscheduler/data/quality/config/ValidateResult.java delete mode 100644 dolphinscheduler-data-quality/src/main/java/org/apache/dolphinscheduler/data/quality/config/WriterConfig.java delete mode 100644 dolphinscheduler-data-quality/src/main/java/org/apache/dolphinscheduler/data/quality/context/DataQualityContext.java delete mode 100644 dolphinscheduler-data-quality/src/main/java/org/apache/dolphinscheduler/data/quality/enums/ReaderType.java delete mode 100644 dolphinscheduler-data-quality/src/main/java/org/apache/dolphinscheduler/data/quality/enums/TransformerType.java delete mode 100644 dolphinscheduler-data-quality/src/main/java/org/apache/dolphinscheduler/data/quality/enums/WriterType.java delete mode 100644 dolphinscheduler-data-quality/src/main/java/org/apache/dolphinscheduler/data/quality/exception/ConfigRuntimeException.java delete mode 100644 dolphinscheduler-data-quality/src/main/java/org/apache/dolphinscheduler/data/quality/exception/DataQualityException.java delete mode 100644 dolphinscheduler-data-quality/src/main/java/org/apache/dolphinscheduler/data/quality/execution/Execution.java delete mode 100644 dolphinscheduler-data-quality/src/main/java/org/apache/dolphinscheduler/data/quality/execution/SparkBatchExecution.java delete mode 100644 dolphinscheduler-data-quality/src/main/java/org/apache/dolphinscheduler/data/quality/execution/SparkRuntimeEnvironment.java delete mode 100644 dolphinscheduler-data-quality/src/main/java/org/apache/dolphinscheduler/data/quality/flow/Component.java delete mode 100644 dolphinscheduler-data-quality/src/main/java/org/apache/dolphinscheduler/data/quality/flow/batch/BatchReader.java delete mode 100644 dolphinscheduler-data-quality/src/main/java/org/apache/dolphinscheduler/data/quality/flow/batch/BatchTransformer.java delete mode 100644 dolphinscheduler-data-quality/src/main/java/org/apache/dolphinscheduler/data/quality/flow/batch/BatchWriter.java delete mode 100644 dolphinscheduler-data-quality/src/main/java/org/apache/dolphinscheduler/data/quality/flow/batch/reader/HiveReader.java delete mode 100644 dolphinscheduler-data-quality/src/main/java/org/apache/dolphinscheduler/data/quality/flow/batch/reader/JdbcReader.java delete mode 100644 dolphinscheduler-data-quality/src/main/java/org/apache/dolphinscheduler/data/quality/flow/batch/reader/ReaderFactory.java delete mode 100644 dolphinscheduler-data-quality/src/main/java/org/apache/dolphinscheduler/data/quality/flow/batch/transformer/SqlTransformer.java delete mode 100644 dolphinscheduler-data-quality/src/main/java/org/apache/dolphinscheduler/data/quality/flow/batch/transformer/TransformerFactory.java delete mode 100644 dolphinscheduler-data-quality/src/main/java/org/apache/dolphinscheduler/data/quality/flow/batch/writer/JdbcWriter.java delete mode 100644 dolphinscheduler-data-quality/src/main/java/org/apache/dolphinscheduler/data/quality/flow/batch/writer/WriterFactory.java delete mode 100644 dolphinscheduler-data-quality/src/main/java/org/apache/dolphinscheduler/data/quality/flow/batch/writer/file/BaseFileWriter.java delete mode 100644 dolphinscheduler-data-quality/src/main/java/org/apache/dolphinscheduler/data/quality/flow/batch/writer/file/HdfsFileWriter.java delete mode 100644 dolphinscheduler-data-quality/src/main/java/org/apache/dolphinscheduler/data/quality/flow/batch/writer/file/LocalFileWriter.java delete mode 100644 dolphinscheduler-data-quality/src/main/java/org/apache/dolphinscheduler/data/quality/utils/ConfigUtils.java delete mode 100644 dolphinscheduler-data-quality/src/main/java/org/apache/dolphinscheduler/data/quality/utils/JsonUtils.java delete mode 100644 dolphinscheduler-data-quality/src/main/java/org/apache/dolphinscheduler/data/quality/utils/ParserUtils.java delete mode 100644 dolphinscheduler-data-quality/src/main/resources/log4j.properties delete mode 100644 dolphinscheduler-data-quality/src/test/java/org/apache/dolphinscheduler/data/quality/SparkApplicationTestBase.java delete mode 100644 dolphinscheduler-data-quality/src/test/java/org/apache/dolphinscheduler/data/quality/configuration/ConfigurationParserTest.java delete mode 100644 dolphinscheduler-data-quality/src/test/java/org/apache/dolphinscheduler/data/quality/flow/FlowTestBase.java delete mode 100644 dolphinscheduler-data-quality/src/test/java/org/apache/dolphinscheduler/data/quality/flow/reader/JdbcReaderTest.java delete mode 100644 dolphinscheduler-data-quality/src/test/java/org/apache/dolphinscheduler/data/quality/flow/reader/ReaderFactoryTest.java delete mode 100644 dolphinscheduler-data-quality/src/test/java/org/apache/dolphinscheduler/data/quality/flow/writer/JdbcWriterTest.java delete mode 100644 dolphinscheduler-data-quality/src/test/java/org/apache/dolphinscheduler/data/quality/flow/writer/WriterFactoryTest.java delete mode 100644 dolphinscheduler-data-quality/src/test/java/org/apache/dolphinscheduler/data/quality/utils/ConfigUtilsTest.java delete mode 100644 dolphinscheduler-data-quality/src/test/resources/logback.xml delete mode 100644 dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/DataQualityTaskExecutionContext.java delete mode 100644 dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/enums/dp/DqFailureStrategy.java delete mode 100644 dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/enums/dp/DqTaskState.java delete mode 100644 dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/parameters/dataquality/DataQualityParameters.java delete mode 100644 dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/parameters/dataquality/spark/ProgramType.java delete mode 100644 dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/parameters/dataquality/spark/SparkConstants.java delete mode 100644 dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/parameters/dataquality/spark/SparkParameters.java delete mode 100644 dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/utils/DataQualityConstants.java delete mode 100644 dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/test/java/org/apache/dolphinscheduler/plugin/task/api/enums/dp/DqFailureStrategyTest.java delete mode 100644 dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/test/java/org/apache/dolphinscheduler/plugin/task/api/enums/dp/DqTaskStateTest.java delete mode 100644 dolphinscheduler-task-plugin/dolphinscheduler-task-dataquality/pom.xml delete mode 100644 dolphinscheduler-task-plugin/dolphinscheduler-task-dataquality/src/main/java/org/apache/dolphinscheduler/plugin/task/dq/DataQualityTask.java delete mode 100644 dolphinscheduler-task-plugin/dolphinscheduler-task-dataquality/src/main/java/org/apache/dolphinscheduler/plugin/task/dq/DataQualityTaskChannel.java delete mode 100644 dolphinscheduler-task-plugin/dolphinscheduler-task-dataquality/src/main/java/org/apache/dolphinscheduler/plugin/task/dq/DataQualityTaskChannelFactory.java delete mode 100644 dolphinscheduler-task-plugin/dolphinscheduler-task-dataquality/src/main/java/org/apache/dolphinscheduler/plugin/task/dq/exception/DataQualityException.java delete mode 100644 dolphinscheduler-task-plugin/dolphinscheduler-task-dataquality/src/main/java/org/apache/dolphinscheduler/plugin/task/dq/rule/RuleManager.java delete mode 100644 dolphinscheduler-task-plugin/dolphinscheduler-task-dataquality/src/main/java/org/apache/dolphinscheduler/plugin/task/dq/rule/entity/DqRuleExecuteSql.java delete mode 100644 dolphinscheduler-task-plugin/dolphinscheduler-task-dataquality/src/main/java/org/apache/dolphinscheduler/plugin/task/dq/rule/entity/DqRuleInputEntry.java delete mode 100644 dolphinscheduler-task-plugin/dolphinscheduler-task-dataquality/src/main/java/org/apache/dolphinscheduler/plugin/task/dq/rule/parameter/BaseConfig.java delete mode 100644 dolphinscheduler-task-plugin/dolphinscheduler-task-dataquality/src/main/java/org/apache/dolphinscheduler/plugin/task/dq/rule/parameter/DataQualityConfiguration.java delete mode 100644 dolphinscheduler-task-plugin/dolphinscheduler-task-dataquality/src/main/java/org/apache/dolphinscheduler/plugin/task/dq/rule/parameter/EnvConfig.java delete mode 100644 dolphinscheduler-task-plugin/dolphinscheduler-task-dataquality/src/main/java/org/apache/dolphinscheduler/plugin/task/dq/rule/parser/IRuleParser.java delete mode 100644 dolphinscheduler-task-plugin/dolphinscheduler-task-dataquality/src/main/java/org/apache/dolphinscheduler/plugin/task/dq/rule/parser/MappingColumn.java delete mode 100644 dolphinscheduler-task-plugin/dolphinscheduler-task-dataquality/src/main/java/org/apache/dolphinscheduler/plugin/task/dq/rule/parser/MultiTableAccuracyRuleParser.java delete mode 100644 dolphinscheduler-task-plugin/dolphinscheduler-task-dataquality/src/main/java/org/apache/dolphinscheduler/plugin/task/dq/rule/parser/MultiTableComparisonRuleParser.java delete mode 100644 dolphinscheduler-task-plugin/dolphinscheduler-task-dataquality/src/main/java/org/apache/dolphinscheduler/plugin/task/dq/rule/parser/SingleTableCustomSqlRuleParser.java delete mode 100644 dolphinscheduler-task-plugin/dolphinscheduler-task-dataquality/src/main/java/org/apache/dolphinscheduler/plugin/task/dq/rule/parser/SingleTableRuleParser.java delete mode 100644 dolphinscheduler-task-plugin/dolphinscheduler-task-dataquality/src/main/java/org/apache/dolphinscheduler/plugin/task/dq/utils/Md5Utils.java delete mode 100644 dolphinscheduler-task-plugin/dolphinscheduler-task-dataquality/src/main/java/org/apache/dolphinscheduler/plugin/task/dq/utils/RuleParserUtils.java delete mode 100644 dolphinscheduler-task-plugin/dolphinscheduler-task-dataquality/src/main/java/org/apache/dolphinscheduler/plugin/task/dq/utils/SparkArgsUtils.java delete mode 100644 dolphinscheduler-task-plugin/dolphinscheduler-task-dataquality/src/test/java/org/apache/dolphinscheduler/plugin/task/dq/DataQualityParameterTest.java delete mode 100644 dolphinscheduler-task-plugin/dolphinscheduler-task-dataquality/src/test/java/org/apache/dolphinscheduler/plugin/task/dq/DataQualityTaskTest.java delete mode 100644 dolphinscheduler-task-plugin/dolphinscheduler-task-dataquality/src/test/java/org/apache/dolphinscheduler/plugin/task/dq/utils/Md5UtilsTest.java delete mode 100644 dolphinscheduler-ui/public/images/task-icons/data_quality.png delete mode 100644 dolphinscheduler-ui/public/images/task-icons/data_quality_hover.png delete mode 100644 dolphinscheduler-ui/src/locales/en_US/data-quality.ts delete mode 100644 dolphinscheduler-ui/src/locales/zh_CN/data-quality.ts delete mode 100644 dolphinscheduler-ui/src/router/modules/data-quality.ts delete mode 100644 dolphinscheduler-ui/src/service/modules/data-quality/index.ts delete mode 100644 dolphinscheduler-ui/src/service/modules/data-quality/types.ts delete mode 100644 dolphinscheduler-ui/src/views/data-quality/rule/components/rule-modal.tsx delete mode 100644 dolphinscheduler-ui/src/views/data-quality/rule/components/table-action.tsx delete mode 100644 dolphinscheduler-ui/src/views/data-quality/rule/index.tsx delete mode 100644 dolphinscheduler-ui/src/views/data-quality/rule/use-table.ts delete mode 100644 dolphinscheduler-ui/src/views/data-quality/task-result/index.tsx delete mode 100644 dolphinscheduler-ui/src/views/data-quality/task-result/use-table.ts delete mode 100644 dolphinscheduler-ui/src/views/projects/task/components/node/fields/use-rules.ts delete mode 100644 dolphinscheduler-ui/src/views/projects/task/components/node/tasks/use-data-quality.ts diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 7a9e8f785a08..d1bc3385dc53 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -26,7 +26,6 @@ /dolphinscheduler-common/ @SbloodyS /dolphinscheduler-dao/ @SbloodyS @ruanwenjun /dolphinscheduler-dao-plugin/ @SbloodyS @ruanwenjun -/dolphinscheduler-data-quality/ @SbloodyS /dolphinscheduler-datasource-plugin/ @SbloodyS /dolphinscheduler-dist/ @SbloodyS /dolphinscheduler-e2e/ @SbloodyS diff --git a/.github/actions/labeler/labeler.yml b/.github/actions/labeler/labeler.yml index 6bd9b6daf1e5..de0f8319bf46 100644 --- a/.github/actions/labeler/labeler.yml +++ b/.github/actions/labeler/labeler.yml @@ -23,7 +23,6 @@ backend: - 'dolphinscheduler-common/**/*' - 'dolphinscheduler-dao/**/*' - 'dolphinscheduler-dao-plugin/**/*' - - 'dolphinscheduler-data-quality/**/*' - 'dolphinscheduler-datasource-plugin/**/*' - 'dolphinscheduler-dist/**/*' - 'dolphinscheduler-extract/**/*' diff --git a/config/plugins_config b/config/plugins_config index 6fac612b01c0..eff859100fe5 100644 --- a/config/plugins_config +++ b/config/plugins_config @@ -77,7 +77,6 @@ dolphinscheduler-storage-s3 dolphinscheduler-task-aliyunserverlessspark dolphinscheduler-task-chunjun dolphinscheduler-task-datafactory -dolphinscheduler-task-dataquality dolphinscheduler-task-datasync dolphinscheduler-task-datax dolphinscheduler-task-dinky diff --git a/deploy/kubernetes/dolphinscheduler/README.md b/deploy/kubernetes/dolphinscheduler/README.md index 4a38a5e4d3f3..d64053ffdd27 100644 --- a/deploy/kubernetes/dolphinscheduler/README.md +++ b/deploy/kubernetes/dolphinscheduler/README.md @@ -131,7 +131,6 @@ Please refer to the [Quick Start in Kubernetes](../../../docs/docs/en/guide/inst | conf.common."aws.s3.endpoint" | string | `"http://minio:9000"` | You need to set this parameter when private cloud s3. If S3 uses public cloud, you only need to set resource.aws.region or set to the endpoint of a public cloud such as S3.cn-north-1.amazonaws.com.cn | | conf.common."aws.s3.region" | string | `"ca-central-1"` | The AWS Region to use. if resource.storage.type=S3, This configuration is required | | conf.common."conda.path" | string | `"/opt/anaconda3/etc/profile.d/conda.sh"` | set path of conda.sh | -| conf.common."data-quality.jar.dir" | string | `nil` | data quality option | | conf.common."data.basedir.path" | string | `"/tmp/dolphinscheduler"` | user data local directory path, please make sure the directory exists and have read write permissions | | conf.common."datasource.encryption.enable" | bool | `false` | datasource encryption enable | | conf.common."datasource.encryption.salt" | string | `"!@#$%^&*"` | datasource encryption salt | diff --git a/deploy/kubernetes/dolphinscheduler/values.yaml b/deploy/kubernetes/dolphinscheduler/values.yaml index 41a7dfb9c286..5658a29c1189 100644 --- a/deploy/kubernetes/dolphinscheduler/values.yaml +++ b/deploy/kubernetes/dolphinscheduler/values.yaml @@ -336,9 +336,6 @@ conf: # -- datasource encryption salt datasource.encryption.salt: '!@#$%^&*' - # -- data quality option - data-quality.jar.dir: - # -- Whether hive SQL is executed in the same session support.hive.oneSession: false @@ -987,7 +984,6 @@ api: # cloud: [] # logic: [] # dataIntegration: [] - # dataQuality: [] # machineLearning: [] # other: [] diff --git a/docs/configs/docsdev.js b/docs/configs/docsdev.js index 8cf9d4d2f92a..0fa7adf2612d 100644 --- a/docs/configs/docsdev.js +++ b/docs/configs/docsdev.js @@ -457,10 +457,6 @@ export default { } ], }, - { - title: 'Data Quality', - link: '/en-us/docs/dev/user_doc/guide/data-quality.html', - }, { title: 'Remote Logging', link: '/en-us/docs/dev/user_doc/guide/remote-logging.html', @@ -1160,10 +1156,6 @@ export default { } ], }, - { - title: '数据质量', - link: '/zh-cn/docs/dev/user_doc/guide/data-quality.html', - }, { title: '远程日志存储', link: '/zh-cn/docs/dev/user_doc/guide/remote-logging.html', diff --git a/docs/docs/en/architecture/configuration.md b/docs/docs/en/architecture/configuration.md index 567163faed19..86d4357e1bd4 100644 --- a/docs/docs/en/architecture/configuration.md +++ b/docs/docs/en/architecture/configuration.md @@ -224,7 +224,6 @@ The default configuration is as follows: | yarn.job.history.status.address | http://ds1:19888/ws/v1/history/mapreduce/jobs/%s | job history status url of yarn | | datasource.encryption.enable | false | whether to enable datasource encryption | | datasource.encryption.salt | !@#$%^&* | the salt of the datasource encryption | -| data-quality.jar.dir | | the jar of data quality | | support.hive.oneSession | false | specify whether hive SQL is executed in the same session | | sudo.enable | true | whether to enable sudo | | alert.rpc.port | 50052 | the RPC port of Alert Server | diff --git a/docs/docs/en/guide/data-quality.md b/docs/docs/en/guide/data-quality.md deleted file mode 100644 index dca777d76fb8..000000000000 --- a/docs/docs/en/guide/data-quality.md +++ /dev/null @@ -1,313 +0,0 @@ -# Data Quality - -## Introduction - -The data quality task is used to check the data accuracy during the integration and processing of data. Data quality tasks in this release include single-table checking, single-table custom SQL checking, multi-table accuracy, and two-table value comparisons. The running environment of the data quality task is Spark 2.4.0, and other versions have not been verified, and users can verify by themselves. - -The execution logic of the data quality task is as follows: - -- The user defines the task in the interface, and the user input value is stored in `TaskParam`. -- When running a task, `Master` will parse `TaskParam`, encapsulate the parameters required by `DataQualityTask` and send it to `Worker`. -- Worker runs the data quality task. After the data quality task finishes running, it writes the statistical results to the specified storage engine. -- The current data quality task result is stored in the `t_ds_dq_execute_result` table of `dolphinscheduler` - `Worker` sends the task result to `Master`, after `Master` receives `TaskResponse`, it will judge whether the task type is `DataQualityTask`, if so, it will read the corresponding result from `t_ds_dq_execute_result` according to `taskInstanceId`, and then The result is judged according to the check mode, operator and threshold configured by the user. -- If the result is a failure, the corresponding operation, alarm or interruption will be performed according to the failure policy configured by the user. -- If you package `data-quality` separately, remember to modify the package name to be consistent with `data-quality.jar.dir` in `common.properties` with attribute name `data-quality.jar.dir` -- If the old version is upgraded and used, you need to execute the `sql` update script to initialize the database before running. -- `dolphinscheduler-data-quality-dev-SNAPSHOT.jar` was built with no dependencies. If a `JDBC` driver is required, you can set the `-jars` parameter in the `node settings` `Option Parameters`, e.g. `--jars /lib/jars/mysql-connector-java-8.0.16.jar`. -- Currently only `MySQL`, `PostgreSQL` and `HIVE` data sources have been tested, other data sources have not been tested yet. -- `Spark` needs to be configured to read `Hive` metadata, `Spark` does not use `jdbc` to read `Hive`. - -## Detailed Inspection Logic - -| **Parameter** | **Description** | -|---------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| CheckMethod | [CheckFormula][Operator][Threshold], if the result is true, it indicates that the data does not meet expectations, and the failure strategy is executed. | -| CheckFormula | | -| Operator | =, >, >=, <, <=, != | -| ExpectedValue | | -| Example | | - -In the example, assuming that the actual value is 10, the operator is >, and the expected value is 9, then the result 10 -9 > 0 is true, which means that the row data in the empty column has exceeded the threshold, and the task is judged to fail. - -# Task Operation Guide - -## Null Value Check for Single Table Check - -### Inspection Introduction - -The goal of the null value check is to check the number of empty rows in the specified column. The number of empty rows can be compared with the total number of rows or a specified threshold. If it is greater than a certain threshold, it will be judged as failure. - -- The SQL statement that calculates the null of the specified column is as follows: - - ```sql - SELECT COUNT(*) AS miss FROM ${src_table} WHERE (${src_field} is null or ${src_field} = '') AND (${src_filter}) - ``` -- The SQL to calculate the total number of rows in the table is as follows: - - ```sql - SELECT COUNT(*) AS total FROM ${src_table} WHERE (${src_filter}) - ``` - -### Interface Operation Guide - -![dataquality_null_check](../../../img/tasks/demo/null_check.png) - -| **Parameter** | **Description** | -|------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Source data type | Select MySQL, PostgreSQL, etc. | -| Source data source | The corresponding data source under the source data type. | -| Source data table | Drop-down to select the table where the validation data is located. | -| Src filter conditions | Such as the title, it will also be used when counting the total number of rows in the table, optional. | -| Src table check column | Drop-down to select the check column name. | -| Check method | | -| Check operators | =, >, >=, <, <=, ! = | -| Threshold | The value used in the formula for comparison. | -| Failure strategy | | -| Expected value type | Select the desired type from the drop-down menu. | - -## Timeliness Check of Single Table Check - -### Inspection Introduction - -The timeliness check is used to check whether the data is processed within the expected time. The start time and end time can be specified to define the time range. If the amount of data within the time range does not reach the set threshold, the check task will be judged as fail. - -### Interface Operation Guide - -![dataquality_timeliness_check](../../../img/tasks/demo/timeliness_check.png) - -| **Parameter** | **Description** | -|------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Source data type | Select MySQL, PostgreSQL, etc. | -| Source data source | The corresponding data source under the source data type. | -| Source data table | Drop-down to select the table where the validation data is located. | -| Src filter conditions | Such as the title, it will also be used when counting the total number of rows in the table, optional. | -| Src table check column | Drop-down to select check column name. | -| Start time | The start time of a time range. | -| end time | The end time of a time range. | -| Time Format | Set the corresponding time format. | -| Check method | | -| Check operators | =, >, >=, <, <=, ! = | -| Threshold | The value used in the formula for comparison. | -| Failure strategy | | -| Expected value type | Select the desired type from the drop-down menu. | - -## Field Length Check for Single Table Check - -### Inspection Introduction - -The goal of field length verification is to check whether the length of the selected field meets the expectations. If there is data that does not meet the requirements, and the number of rows exceeds the threshold, the task will be judged to fail. - -### Interface Operation Guide - -![dataquality_length_check](../../../img/tasks/demo/field_length_check.png) - -| **Parameter** | **Description** | -|------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Source data type | Select MySQL, PostgreSQL, etc. | -| Source data source | The corresponding data source under the source data type. | -| Source data table | Drop-down to select the table where the validation data is located. | -| Src filter conditions | Such as the title, it will also be used when counting the total number of rows in the table, optional. | -| Src table check column | Drop-down to select the check column name. | -| Logical operators | =, >, >=, <, <=, ! = | -| Field length limit | Like the title. | -| Check method | | -| Check operators | =, >, >=, <, <=, ! = | -| Threshold | The value used in the formula for comparison. | -| Failure strategy | | -| Expected value type | Select the desired type from the drop-down menu. | - -## Uniqueness Check for Single Table Check - -### Inspection Introduction - -The goal of the uniqueness check is to check whether the fields are duplicated. It is generally used to check whether the primary key is duplicated. If there are duplicates and the threshold is reached, the check task will be judged to be failed. - -### Interface Operation Guide - -![dataquality_uniqueness_check](../../../img/tasks/demo/uniqueness_check.png) - -| **Parameter** | **Description** | -|------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Source data type | Select MySQL, PostgreSQL, etc. | -| Source data source | The corresponding data source under the source data type. | -| Source data table | Drop-down to select the table where the validation data is located. | -| Src filter conditions | Such as the title, it will also be used when counting the total number of rows in the table, optional. | -| Src table check column | Drop-down to select the check column name. | -| Check method | | -| Check operators | =, >, >=, <, <=, ! = | -| Threshold | The value used in the formula for comparison. | -| Failure strategy | | -| Expected value type | Select the desired type from the drop-down menu. | - -## Regular Expression Check for Single Table Check - -### Inspection Introduction - -The goal of regular expression verification is to check whether the format of the value of a field meets the requirements, such as time format, email format, ID card format, etc. If there is data that does not meet the format and exceeds the threshold, the task will be judged as failed. - -### Interface Operation Guide - -![dataquality_regex_check](../../../img/tasks/demo/regexp_check.png) - -| **Parameter** | **Description** | -|------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Source data type | Select MySQL, PostgreSQL, etc. | -| Source data source | The corresponding data source under the source data type. | -| Source data table | Drop-down to select the table where the validation data is located. | -| Src filter conditions | Such as the title, it will also be used when counting the total number of rows in the table, optional. | -| Src table check column | Drop-down to select check column name. | -| Regular expression | As title. | -| Check method | | -| Check operators | =, >, >=, <, <=, ! = | -| Threshold | The value used in the formula for comparison. | -| Failure strategy | | -| Expected value type | Select the desired type from the drop-down menu. | - -## Enumeration Value Validation for Single Table Check - -### Inspection Introduction - -The goal of enumeration value verification is to check whether the value of a field is within the range of the enumeration value. If there is data that is not in the range of the enumeration value and exceeds the threshold, the task will be judged to fail. - -### Interface Operation Guide - -![dataquality_enum_check](../../../img/tasks/demo/enumeration_check.png) - -| **Parameter** | **Description** | -|-----------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Source data type | Select MySQL, PostgreSQL, etc. | -| Source data source | The corresponding data source under the source data type. | -| Source data table | Drop-down to select the table where the validation data is located. | -| Src table filter conditions | Such as title, also used when counting the total number of rows in the table, optional. | -| Src table check column | Drop-down to select the check column name. | -| List of enumeration values | Separated by commas. | -| Check method | | -| Check operators | =, >, >=, <, <=, ! = | -| Threshold | The value used in the formula for comparison. | -| Failure strategy | | -| Expected value type | Select the desired type from the drop-down menu. | - -## Table Row Number Verification for Single Table Check - -### Inspection Introduction - -The goal of table row number verification is to check whether the number of rows in the table reaches the expected value. If the number of rows does not meet the standard, the task will be judged as failed. - -### Interface Operation Guide - -![dataquality_count_check](../../../img/tasks/demo/table_count_check.png) - -| **Parameter** | **Description** | -|------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Source data type | Select MySQL, PostgreSQL, etc. | -| Source data source | The corresponding data source under the source data type. | -| Source data table | Drop-down to select the table where the validation data is located. | -| Src filter conditions | Such as the title, it will also be used when counting the total number of rows in the table, optional. | -| Src table check column | Drop-down to select the check column name. | -| Check method | | -| Check operators | =, >, >=, <, <=, ! = | -| Threshold | The value used in the formula for comparison. | -| Failure strategy | | -| Expected value type | Select the desired type from the drop-down menu. | - -## Custom SQL Check for Single Table Check - -### Interface Operation Guide - -![dataquality_custom_sql_check](../../../img/tasks/demo/custom_sql_check.png) - -| **Parameter** | **Description** | -|------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Source data type | Select MySQL, PostgreSQL, etc. | -| Source data source | The corresponding data source under the source data type. | -| Source data table | Drop-down to select the table where the data to be verified is located. | -| Actual value name | Alias in SQL for statistical value calculation, such as max_num. | -| Actual value calculation SQL | SQL for outputting actual values. Note: | -| Src filter conditions | Such as the title, it will also be used when counting the total number of rows in the table, optional. | -| Check method | | -| Check operators | =, >, >=, <, <=, ! = | -| Threshold | The value used in the formula for comparison. | -| Failure strategy | | -| Expected value type | Select the desired type from the drop-down menu. | - -## Accuracy Check of Multi-table - -### Inspection Introduction - -Accuracy checks are performed by comparing the accuracy differences of data records for selected fields between two tables, examples are as follows -- table test1 - -| c1 | c2 | -|:--:|:--:| -| a | 1 | -| b | 2 | - -- table test2 - -| c21 | c22 | -|:---:|:---:| -| a | 1 | -| b | 3 | - -If you compare the data in c1 and c21, the tables test1 and test2 are exactly the same. If you compare c2 and c22, the data in table test1 and table test2 are inconsistent. - -### Interface Operation Guide - -![dataquality_multi_table_accuracy_check](../../../img/tasks/demo/multi_table_accuracy_check.png) - -| **Parameter** | **Description** | -|--------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Source data type | Select MySQL, PostgreSQL, etc. | -| Source data source | The corresponding data source under the source data type. | -| Source data table | Drop-down to select the table where the data to be verified is located. | -| Src filter conditions | Such as the title, it will also be used when counting the total number of rows in the table, optional. | -| Target data type | Choose MySQL, PostgreSQL, etc. | -| Target data source | The corresponding data source under the source data type. | -| Target data table | Drop-down to select the table where the data to be verified is located. | -| Target filter conditions | Such as the title, it will also be used when counting the total number of rows in the table, optional. | -| Check column | Fill in the source data column, operator and target data column respectively. | -| Verification method | Select the desired verification method. | -| Operators | =, >, >=, <, <=, ! = | -| Failure strategy |