[ 
https://issues.apache.org/jira/browse/KYLIN-6002?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17928037#comment-17928037
 ] 

Guoliang Sun commented on KYLIN-6002:
-------------------------------------

h3. Design

When deleting a model, the corresponding records in the CC <-> model mapping 
table will also be deleted. If a CC is no longer associated with any model, the 
orphaned CC will be removed from the CC metadata table.  

Considering this as a design flaw and that the current version has not yet 
entered production, we will not introduce overly complex logic to handle such 
dirty data. How to handle the current dirty data? Please refer to the following 
SQL. Replace `\{metadata_url}_compute_column` and 
`\{metadata_url}_cc_model_relation` with the actual names of your metadata 
tables, then execute the SQL to clean up.
{code:java}
delete from pfzhan_open_kylin_compute_column where uuid not in 
(select distinct cc_uuid from pfzhan_open_kylin_cc_model_relation) {code}

> When recommending CC, it should check if there are reusable CCs in the CC 
> table.
> --------------------------------------------------------------------------------
>
>                 Key: KYLIN-6002
>                 URL: https://issues.apache.org/jira/browse/KYLIN-6002
>             Project: Kylin
>          Issue Type: Bug
>    Affects Versions: 5.0.0
>            Reporter: Guoliang Sun
>            Priority: Major
>
> Error see following
> {code:java}
> org.postgresql.util.PSQLException: ERROR: duplicate key value violates unique 
> constraint \"step_cdh632_azure_all_5_compute_column_uk4\"\n  详细:Key (project, 
> table_identity, expression_md5)=(project_34948, SSB_STEP.LINEORDER, 
> 4af65bfef97a50f00557d3d037a1bc63) already exists.
> at 
> org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2676)
> at 
> org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2366)
> at 
> org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:356)
> at org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:496)
> at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:413)
> at 
> org.postgresql.jdbc.PgPreparedStatement.executeWithFlags(PgPreparedStatement.java:190)
> at 
> org.postgresql.jdbc.PgPreparedStatement.execute(PgPreparedStatement.java:177)
> at 
> org.apache.commons.dbcp2.DelegatingPreparedStatement.execute(DelegatingPreparedStatement.java:94)
> at 
> org.apache.commons.dbcp2.DelegatingPreparedStatement.execute(DelegatingPreparedStatement.java:94)
> at sun.reflect.GeneratedMethodAccessor50.invoke(Unknown Source)
> at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> at java.lang.reflect.Method.invoke(Method.java:498)
> at 
> org.apache.ibatis.logging.jdbc.PreparedStatementLogger.invoke(PreparedStatementLogger.java:59)
> at com.sun.proxy.$Proxy203.execute(Unknown Source)
> at 
> org.apache.ibatis.executor.statement.PreparedStatementHandler.update(PreparedStatementHandler.java:47)
> at 
> org.apache.ibatis.executor.statement.RoutingStatementHandler.update(RoutingStatementHandler.java:74)
> at org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:50)
> at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:117)
> at 
> org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:197)
> at 
> org.apache.ibatis.session.defaults.DefaultSqlSession.insert(DefaultSqlSession.java:184)
> at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:62)
> at 
> org.apache.ibatis.binding.MapperProxy$PlainMethodInvoker.invoke(MapperProxy.java:152)
> at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:85)
> at com.sun.proxy.$Proxy213.insert(Unknown Source)
> at 
> org.mybatis.dynamic.sql.util.mybatis3.MyBatis3Utils.insert(MyBatis3Utils.java:114)
> at 
> org.apache.kylin.common.persistence.metadata.mapper.ComputeColumnMapper.insert(ComputeColumnMapper.java:73)
> at java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:627)
> at 
> org.apache.ibatis.binding.MapperProxy$DefaultMethodInvoker.invoke(MapperProxy.java:166)
> at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:85)
> at com.sun.proxy.$Proxy213.insert(Unknown Source)
> at 
> org.apache.kylin.common.persistence.metadata.mapper.ComputeColumnMapper.insert(ComputeColumnMapper.java:46)
> at java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:627)
> at 
> org.apache.ibatis.binding.MapperProxy$DefaultMethodInvoker.invoke(MapperProxy.java:166)
> at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:85)
> at com.sun.proxy.$Proxy213.insert(Unknown Source)
> at 
> org.apache.kylin.common.persistence.metadata.mapper.BasicMapper.insertOne(BasicMapper.java:144)
> at java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:627)
> at 
> org.apache.ibatis.binding.MapperProxy$DefaultMethodInvoker.invoke(MapperProxy.java:166)
> at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:85)
> at com.sun.proxy.$Proxy213.insertOne(Unknown Source)
> at 
> org.apache.kylin.common.persistence.metadata.JdbcMetadataStore.save(JdbcMetadataStore.java:182)
> at 
> org.apache.kylin.common.persistence.TransparentResourceStore.checkAndPutResource(TransparentResourceStore.java:135)
> at 
> org.apache.kylin.common.persistence.TransparentResourceStore.checkAndPutResource(TransparentResourceStore.java:123)
> at 
> org.apache.kylin.common.persistence.ResourceStore.checkAndPutResource(ResourceStore.java:331)
> at 
> org.apache.kylin.metadata.cachesync.CachedCrudAssist.save(CachedCrudAssist.java:273)
> at org.apache.kylin.metadata.Manager.save(Manager.java:123)
> at org.apache.kylin.metadata.Manager.createAS(Manager.java:141)
> at 
> org.apache.kylin.metadata.model.ComputedColumnManager.saveCCWithCheck(ComputedColumnManager.java:75)
> at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
> at 
> java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1384)
> at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:482)
> at 
> java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:472)
> at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
> at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
> at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:566)
> at 
> org.apache.kylin.metadata.model.NDataModelManager.updateCcAndRelations(NDataModelManager.java:346)
> at 
> org.apache.kylin.metadata.model.NDataModelManager.saveModel(NDataModelManager.java:334)
> at 
> org.apache.kylin.metadata.model.NDataModelManager.updateDataModel(NDataModelManager.java:308)
> at 
> org.apache.kylin.rest.service.OptRecApproveService$RecApproveContext.rewriteModel(OptRecApproveService.java:250)
> at 
> org.apache.kylin.rest.service.OptRecApproveService$RecApproveContext.lambda$approveRawRecItems$1(OptRecApproveService.java:139)
> at 
> org.apache.kylin.common.persistence.transaction.UnitOfWork.doInTransactionWithRetry(UnitOfWork.java:99)
> at 
> org.apache.kylin.metadata.project.EnhancedUnitOfWork.doInTransactionWithCheckAndRetry(EnhancedUnitOfWork.java:49)
> at 
> org.apache.kylin.metadata.project.EnhancedUnitOfWork.doInTransactionWithCheckAndRetry(EnhancedUnitOfWork.java:44)
> at 
> org.apache.kylin.metadata.project.EnhancedUnitOfWork.doInTransactionWithCheckAndRetry(EnhancedUnitOfWork.java:39)
> at 
> org.apache.kylin.metadata.project.EnhancedUnitOfWork.doInTransactionWithCheckAndRetry(EnhancedUnitOfWork.java:30)
> at 
> org.apache.kylin.metadata.project.EnhancedUnitOfWork.doInTransactionWithCheckAndRetry(EnhancedUnitOfWork.java:26)
> at 
> org.apache.kylin.rest.service.OptRecApproveService$RecApproveContext.approveRawRecItems(OptRecApproveService.java:135)
> at 
> org.apache.kylin.rest.service.OptRecApproveService.approveRecItemsToAddLayout(OptRecApproveService.java:842)
> at 
> org.apache.kylin.rest.service.OptRecApproveService.approveAllRecItems(OptRecApproveService.java:811)
> at 
> org.apache.kylin.rest.service.OptRecApproveService.lambda$batchApprove$2(OptRecApproveService.java:774)
> at 
> org.apache.kylin.common.persistence.transaction.UnitOfWork.doTransaction(UnitOfWork.java:150)
> at 
> org.apache.kylin.common.persistence.transaction.UnitOfWork.doInTransactionWithRetry(UnitOfWork.java:115)
> at 
> org.apache.kylin.metadata.project.EnhancedUnitOfWork.doInTransactionWithCheckAndRetry(EnhancedUnitOfWork.java:49)
> at 
> org.apache.kylin.metadata.project.EnhancedUnitOfWork.doInTransactionWithCheckAndRetry(EnhancedUnitOfWork.java:44)
> at 
> org.apache.kylin.metadata.project.EnhancedUnitOfWork.doInTransactionWithCheckAndRetry(EnhancedUnitOfWork.java:39)
> at 
> org.apache.kylin.metadata.project.EnhancedUnitOfWork.doInTransactionWithCheckAndRetry(EnhancedUnitOfWork.java:30)
> at 
> org.apache.kylin.metadata.project.EnhancedUnitOfWork.doInTransactionWithCheckAndRetry(EnhancedUnitOfWork.java:26)
> at 
> org.apache.kylin.rest.service.OptRecApproveService.batchApprove(OptRecApproveService.java:765)
> at 
> org.apache.kylin.rest.controller.open.OpenModelRecController.batchApproveRecommendations(OpenModelRecController.java:97)
> at 
> org.apache.kylin.rest.controller.open.OpenModelRecController$$FastClassBySpringCGLIB$$bc6647f8.invoke(<generated>)
> at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) 
> {code}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to