TiSpark不支持auto random做主键的表批量写入

想用TiSpark进行ETL大量计算后批量写入,发现TiSpark并不支持Auto Random id为主键的表的批量写入。需要更新或者是不会支持这种特性吗?

tidb 什么版本呢? 表结构是用的聚簇索引么?
tispark 和 spark 分别什么版本?

然后数据操作的过程是怎么样的?

tidb: 5.2.1
表结构:
create table xxx
(
id bigint PRIMARY KEY AUTO_RANDOM(8),
uniqueKey varchar(256) null,
xxxx…
constraint idx_unique_key
unique (uniqueKey)
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

tispark: 3.1-2.5.1
spark: 3.1.3

tispark写的时候,是按照预估region数量做rdd的repartition,然后并发直接写入tikv的,这种场景写Auto_Random列 ,应该是有问题的,图中所示,是tipark代码在写表之前的一个检查,如果目标表Auto_Random列,就会有以上信息。这个解释不是太技术,我再咨询一下其他大佬,争取给个根本性的解释。

经查,TiSpark 3.0.1已经支持上述auto_random了,可以测试一下。
参考:https://github.com/pingcap/tispark/blob/4e0860ad2d7dd46c5af6e2486197bceff863b183/CHANGELOG.md


这不是TiSpark 2.3.11的新特性么

这个change我看了下,应该是throw出一个不支持写入auto_random列的报错。:rofl:

好的,谢谢。我检查下。

https://github.com/pingcap/tispark/blob/master/core/src/test/scala/com/pingcap/tispark/datasource/AutoRandomSuite.scala#L57
支持auto_random但是不是支持写入

  1. 你的插入语句是什么?是指定了 id 列吗? auto random 不需要指定,使用默认分配值。
  2. 如果要指定,使用tidb 时需要设置参数,tispark 应该不行,你可以试试。
    https://docs.pingcap.com/zh/tidb/stable/dev-guide-insert-data#主键为-auto_random-表插入数据

是在提交spark-job的时候的语句,并不是sql。没有指定auto random列,语句类似于:
dataframe.write() ...
其中dataframe没有auto random那列。所以应该是目前还不支持用spark批量写入带auto random列的数据吗?给的链接算是TiDB的,并不经过TiSpark。

确认了下,不支持写入, 这个支持的是读取。