开发者社区> 问答> 正文

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



基本语法


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

  • 提供列名的方式,请确保SELECT的列表与提供的INSERT目标表的列匹配(顺序、数据类型):
<PRE prettyprinted? linenums>
  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目标表的列匹配(顺序、数据类型):
<PRE prettyprinted? linenums>
  1. INSERT INTO db_name.target_table_name
  2. SELECT col1, col2, col3, col4 FROM db_name.source_table_name
  3. WHERE col4 = 'xxx';

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


多种引擎模式下的执行


目前,INSERT from SELECT支持多种执行模式,在LM模式下:
  • SELECT部分的查询走FRONTNODE + COMPUTENODE的两阶段模式,该模式下具有最好的执行性能,但是SELECT的查询部分不会做最终的数据聚合,所以,查询要考虑是否符合按HASH分区分片计算ONLY的模式,否则写入的数据不保证整体语义的正确性、完整性,默认执行引擎为 COMPUTENODE 时,无需加 /*+engine=COMPUTENODE*/ hint:
<PRE prettyprinted? linenums>
  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-26 15:21:23 1853 0
0 条回答
写回答
取消 提交回答
问答排行榜
最热
最新

相关电子书

更多
Get rid of traditional ETL, Move to Spark! 立即下载
Get rid of traditional ETL, Mo 立即下载
Scaling 30 TB’s of Data Lake with Apache HBase and Scala DSL at Production 立即下载