基本语法
分析型数据库支持通过查询方式进行表数据复制,目标表必须是实时写入表:
- 提供列名的方式,请确保SELECT的列表与提供的INSERT目标表的列匹配(顺序、数据类型):
- INSERT INTO db_name.target_table_name (col1, col2, col3)
- SELECT col1, col2, col3 FROM db_name.source_table_name
- WHERE col4 = 'xxx';
- 不提供列名的方式,请确保SELECT的列表与提供的INSERT目标表的列匹配(顺序、数据类型):
- INSERT INTO db_name.target_table_name
- SELECT col1, col2, col3, col4 FROM db_name.source_table_name
- WHERE col4 = 'xxx';
可通过如下语句查询表的列定义的顺序:
- SHOW CREATE TABLE db_name.target_table_name;
多种引擎模式下的执行
目前,INSERT from SELECT支持多种执行模式,在LM模式下:
- SELECT部分的查询走FRONTNODE +COMPUTENODE的两阶段模式,该模式下具有最好的执行性能,但是SELECT的查询部分不会做最终的数据聚合,所以,查询要考虑是否符合按HASH分区分片计算ONLY的模式,否则写入的数据不保证整体语义的正确性、完整性,默认执行引擎为COMPUTENODE 时,无需加 /*+engine=COMPUTENODE*/ hint:
- /*+engine=COMPUTENODE*/INSERT INTO db_name.target_table_name (col1, col2, col3)
- SELECT col1, col2, col3 FROM db_name.source_table_name
- WHERE col4 = 'xxx';