【 TiDB 使用环境】生产环境
【 TiDB 版本】6.5.3
【复现路径】CREATE TABLE
【遇到的问题:问题现象及影响】报错“TIDB create table…select is not implemented yet”
【资源配置】
【附件:截图/日志/监控】
可以改成
create table aa like cc ;
insert into aa select * from cc ;
3 个赞
TiDB 不支持 CTAS 语句
是不支持 create table select * from 语法么?
你使用了不支持的 CTAS 语句
create table select 语法是不支持的,不过可以参考上面这位大佬的方式绕过。
这个语法之所以不支持,有一方面的考虑是分布式大事务处理的效率问题,而且除了比较小的表外,稍微大一点的表很容易出现超过事务限制的问题。
上面这个 insert into select 的方式也会有相同的问题,这个时候怎么处理呢?比较好的方式是放弃大事务的原子性和一致性,通过一些手段切分大事务变为多个小事务实现插入,这些方法之一就是用集群的非事务特性功能来实现、或者另外写脚本完成。
如果需要强烈保证事务特性,可以通过其他工具完成,比如使用dumpling+lightning导出导入、使用spark整表导出导入。
1 个赞
先创建表,然后再insert
和mysql的语法还是有差异的,语法上面不支持。建议换一种写法
不支持create table as ,可以用create table like或者手工建表再insert into select 导入数据。
insert into select 数据量大的时候很容oom,可以调整tidb_mem_quota_query参数,默认1G小了
此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。