# [KB]关于TiSpark v4.0.10 插入数据，在 TiKV 和 TiFlash 中查看到的结果不一致的问题

## Issue

1. 建表

    create database test_data;
    CREATE TABLE test_data.test_table (
    `id` varchar(36) COLLATE utf8_general_ci NOT NULL,
    `amount` decimal(16,4) NOT NULL,
    `tax_amount` decimal(16,4) NOT NULL,
    PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci

2. 设置 TiFlash

    ALTER TABLE test_data.test_table SET TIFLASH REPLICA 2;

3. TiSpark sbt

    scalaVersion := "2.11.12"libraryDependencies += "org.apache.spark" %% "spark-core" % "2.4.0" % "provided"
    libraryDependencies += "org.apache.spark" %% "spark-sql" % "2.4.0" % "provided"
    libraryDependencies += "com.pingcap.tispark" % "tispark-assembly" % "2.3.13"
    // code scale
    object RatificationApp { def main(args: Array[String]): Unit =
    { val sparkConf = new SparkConf(). setIfMissing("spark.master", "local[*]"). setIfMissing("spark.sql.extensions", "org.apache.spark.sql.TiExtensions"). setIfMissing("spark.tispark.pd.addresses", "127.0.0.1:2379"). setIfMissing("spark.tispark.isolation_read_engines", "tiflash") val spark = SparkSession.builder.config(sparkConf).getOrCreate() import spark.implicits._ val df = Seq( (0, 0), (0, 0), (0, 0) ).toDF("amount", "tax_amount") val tidbOptions: Map[String, String] = Map( "tidb.addr" -> "127.0.0.1", "tidb.port" -> "4000", "tidb.user"-> "root", "tidb.password" -> "", "database" -> "test_data", "table" -> "test_table") df.select( expr("UUID()").as("id"), col("amount"), col("tax_amount")) .write .format("tidb") .options(tidbOptions) .mode("append") .save() }
    }

4. TiFlash 查询

    set @@session.tidb_isolation_read_engines ="tiflash";
    select * from test_data.test_table 
    id                                           amount                tax_amount
    1b1a9ac2-e679-4b58-8d90-27d7181d55a0          1,717,986.9184       1,717,986.9184
    641a9ac2-e679-4b58-8d90-27d7181d55a0          1,717,986.9184       1,717,986.9184
    d91a9ac2-e679-4b58-8d90-27d7181d55a0          1,717,986.9184       1,717,986.9184

5. TiKV 查询

    set @@session.tidb_isolation_read_engines ="tikv";
    select * from test_data.test_table
    id                                           amount                     tax_amount
    1b1a9ac2-e679-4b58-8d90-27d7181d55a0          0                         0
    641a9ac2-e679-4b58-8d90-27d7181d55a0          0                         0
    d91a9ac2-e679-4b58-8d90-27d7181d55a0          0                         0

## Root Cause

TiSpark 在编码 decimal 数据的时候使用了 实际数据的 precision 和 frac，而 TiDB 使用的是 schema 里面定义的 precision 和 frac。 当 schema 里面定义 和 实际数据的 precision frac 不一致时，TiKV 能正确处理，但 TiFlash 没有做对应的转换，导致数据出错。

## Diagnostic Steps

N/A

## Resolution

修复 PR：[https://github.com/pingcap/tispark/pull/2054](https://github.com/pingcap/tispark/pull/2054)

## Workaround

N/A
