开发者社区 问答 正文

LM计算引擎 INSERT FROM SELECT语法是什么?



基本语法


分析型数据库支持通过查询方式进行表数据复制,目标表必须是实时写入表:

  • 提供列名的方式,请确保SELECT的列表与提供的INSERT目标表的列匹配(顺序、数据类型):
  1. INSERT INTO db_name.target_table_name (col1, col2, col3)
  2. SELECT col1, col2, col3 FROM db_name.source_table_name
  3. WHERE col4 = 'xxx';
  • 不提供列名的方式,请确保SELECT的列表与提供的INSERT目标表的列匹配(顺序、数据类型):
  1. INSERT INTO db_name.target_table_name
  2. SELECT col1, col2, col3, col4 FROM db_name.source_table_name
  3. WHERE col4 = 'xxx';

可通过如下语句查询表的列定义的顺序:
  1. SHOW CREATE TABLE db_name.target_table_name;


多种引擎模式下的执行


目前,INSERT from SELECT支持多种执行模式,在LM模式下:
  • SELECT部分的查询走FRONTNODE +COMPUTENODE的两阶段模式,该模式下具有最好的执行性能,但是SELECT的查询部分不会做最终的数据聚合,所以,查询要考虑是否符合按HASH分区分片计算ONLY的模式,否则写入的数据不保证整体语义的正确性、完整性,默认执行引擎为COMPUTENODE 时,无需加 /*+engine=COMPUTENODE*/ hint:
  1. /*+engine=COMPUTENODE*/INSERT INTO db_name.target_table_name (col1, col2, col3)
  2. SELECT col1, col2, col3 FROM db_name.source_table_name
  3. WHERE col4 = 'xxx';

展开
收起
nicenelly 2017-10-31 13:07:54 1765 分享 版权
阿里云 AI 助理回答

您提到的是关于阿里云分析型数据库(AnalyticDB,原名MaxCompute)中如何使用SQL语句进行表数据复制的操作,以及在不同执行模式下的注意事项。下面我将根据您的描述,进一步解释这些操作和概念。

基本语法说明

  1. 提供列名的方式:这种方式要求你在INSERT INTO语句中明确指定目标表的列名,并确保这些列与SELECT语句中选择的列在顺序和数据类型上完全匹配。例如:

    INSERT INTO db_name.target_table_name (col1, col2, col3)
    SELECT col1, col2, col3 
    FROM db_name.source_table_name
    WHERE col4 = 'xxx';
    
  2. 不提供列名的方式:如果目标表的列顺序和数据类型与源表的查询结果完全一致,可以省略列名列表。但这种做法需要非常确定两表结构的一致性,示例如下:

    INSERT INTO db_name.target_table_name
    SELECT col1, col2, col3, col4 
    FROM db_name.source_table_name
    WHERE col4 = 'xxx';
    
  3. 查询表的列定义顺序:使用SHOW CREATE TABLE命令可以帮助你检查目标表的列定义顺序和类型,确保插入操作的准确性。

    SHOW CREATE TABLE db_name.target_table_name;
    

多种引擎模式下的执行

  • LM模式(可能指特定的执行模式或优化策略):在这种模式下,SELECT部分的查询通过FRONTNODE和COMPUTENODE的两阶段模式执行,这通常意味着更高的执行性能。但是,需要注意的是,此模式下SELECT查询不会做最终的数据聚合,因此适用于那些能够按HASH分区分片计算的场景。这意味着写入数据的前提是查询逻辑必须符合分布式计算的限制,否则可能导致数据的正确性和完整性问题。

  • 执行引擎选择:默认情况下,无需特别指定执行引擎为COMPUTENODE,因为系统会自动选择最佳执行策略。然而,如果你确信需要强制使用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';
    

总结来说,在使用阿里云分析型数据库进行数据复制时,理解并正确应用SQL语法、熟悉不同执行模式的特点及限制,对于保证数据处理的效率和准确性至关重要。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答