Zealot
2023 年12 月 15 日 15:59
1
TiDB版本:7.1.2
TiSpark版本:[tispark-assembly-3.3_2.12-3.2.2.jar]
Spark版本:3.3.1
现象:
1、通过TiSpark运行insert into select得到表dw_company_extend,此时表中已存在数据
2、在tidb执行select id from dw_company_extend limit 1得到结果:95100000101705142Q
3、在tidb执行select id from dw_company_extend where id = ‘95100000101705142Q’,没有结果
建表DDL:
CREATE TABLE dw_company_extend
(
id
varchar(20) NOT NULL DEFAULT ‘’ COMMENT ‘公司ID’,
staff_size
varchar(255) DEFAULT ‘’ COMMENT ‘人员规模’,
PRIMARY KEY (id
) /*T![clustered_index] NONCLUSTERED */
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT=‘扩展信息dw表’;
随缘天空
(Ti D Ber Ivw R7o Pj)
2023 年12 月 16 日 05:35
3
可能是由于TiDB和TiSpark在处理字符串时的差异导致的。TiDB字符串默认使用utf8编码,而TiSpark默认使用latin1编码,你调整编码试试
1 个赞
这正常操作不应该会有这种情况,把这些语句的执行计划都贴一下
Kongdom
(Kongdom)
2023 年12 月 16 日 06:49
5
explain analyze table之后在查询试试?或者用mysql客户端连接查询试试
Zealot
2023 年12 月 18 日 01:43
11
我感觉似乎是主键索引没有被创建,我插入相同的主键ID,不会报错
Zealot
2023 年12 月 18 日 01:58
12
org.apache.spark.SparkException: Job aborted due to stage failure: Task 4 in stage 24.0 failed 4 times, most recent failure: Lost task 4.3 in stage 24.0 (TID 473) (hadoop-0002 executor 2): com.pingcap.tikv.exception.CodecException: Unsupported collation: latin1_bin
TiSpark真的支持这个编码吗?
select id from where id
这种查询方法是可以查询到数据的吗?后面是不是得加 and id=id?
Zealot
2023 年12 月 18 日 02:05
14
这种方法可以查到数据,加上and id= ?后就查不到了
dba远航
(Ti D Ber M Lo7 Bqhk)
2023 年12 月 18 日 02:23
15
检查一下数据库的排序规则:collation_database
dba远航
(Ti D Ber M Lo7 Bqhk)
2023 年12 月 18 日 02:31
17
我本地测试结果 ,没有发现异常
mysql> CREATE TABLE dw_company_extend (
→ id varchar(20) NOT NULL DEFAULT ‘’ COMMENT ‘公司ID’,
→ staff_size varchar(255) DEFAULT ‘’ COMMENT ‘人员规’,
→ PRIMARY KEY (id) /*T![clustered_index] NONCLUSTERED */
→ ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT=‘扩展信息dw表’;
Query OK, 0 rows affected (0.19 sec)
mysql> insert into dw_company_extend values (‘95100000101705142Q’,‘非常大’);
Query OK, 1 row affected (0.01 sec)
mysql> select * from dw_company_extend where id = ‘95100000101705142Q’;
±-------------------±-----------+
| id | staff_size |
±-------------------±-----------+
| 95100000101705142Q | 非常大 |
±-------------------±-----------+
1 row in set (0.00 sec)
mysql> select id from dw_company_extend limit 1;
±-------------------+
| id |
±-------------------+
| 95100000101705142Q |
±-------------------+
1 row in set (0.01 sec)
Zealot
2023 年12 月 18 日 02:40
18
你复现的方式不对,我正常使用mysql端的insert select也是没问题的,问题在于,使用TiSpark插入大量数据的时候,执行insert into select,数据量在5000万-1亿,执行成功后,查询出现异常现象,这个问题不好复现,因为我在数据量小的时候(10条数据),也是正常的
Zealot
2023 年12 月 18 日 03:14
19
admin check table dw_company_extend
检查了索引似乎没问题,突然发现insert into select的两张表编码不一致,一张是utf8,一张是utf8mb4,我调整一致后再跑一次数据试试
Zealot
2023 年12 月 18 日 04:39
20
重新跑完正常了,看来真的是两个表字符集不一致导致的问题,不知道算不算是bug