Recently I upgraded kylin from 2.3.1 to 2.3.2, and when I tried to build a cube, the Web UI told me that my cube signature is inconsistent, and suggested that I use the metastore.sh script to refresh all cube signatures.
I did what I was told to, but as I can read from the log, the script didn't update any cube signature, and I still received the same error message when I retried to build the cube.
I did some digging on the source code, and add some logging statements, re-packaged kylin and deployed the more-logging version. I found that when kylin refreshes cube signatures and build new cube segments, it always check whether the cube signature equals to the calculated signature which is calculated by method org.apache.kylin.cube.model.CubeDesc#calculateSignature().
And as I observed from the log, this method return DIFFERENT RESULT under the above two occasions!
The Difference lies in that when building cube segments invokes calculateSignature(), it will add "encoding_version" into the "rowkey" json string.