forked from docs/doc-exports
Reviewed-by: Pruthi, Vineet <vineet.pruthi@t-systems.com> Co-authored-by: Lu, Huayi <luhuayi@huawei.com> Co-committed-by: Lu, Huayi <luhuayi@huawei.com>
93 lines
20 KiB
HTML
93 lines
20 KiB
HTML
<a name="EN-US_TOPIC_0000001856158625"></a><a name="EN-US_TOPIC_0000001856158625"></a>
|
|
|
|
<h1 class="topictitle1">MERGE INTO</h1>
|
|
<div id="body8662426"><div class="section" id="EN-US_TOPIC_0000001856158625__en-us_topic_0000001491918821_sc38eadebc8e74e1e8200bca116ca55ef"><h4 class="sectiontitle">Function</h4><p id="EN-US_TOPIC_0000001856158625__en-us_topic_0000001491918821_p19459338183014">The <strong id="EN-US_TOPIC_0000001856158625__en-us_topic_0000001491918821_b17247125117544">MERGE INTO</strong> statement is used to conditionally match data in a target table with that in a source table. If data matches, <strong id="EN-US_TOPIC_0000001856158625__en-us_topic_0000001491918821_b20247115113543">UPDATE</strong> is executed on the target table; if data does not match, <strong id="EN-US_TOPIC_0000001856158625__en-us_topic_0000001491918821_b42471751105412">INSERT</strong> is executed. You can use this syntax to run <strong id="EN-US_TOPIC_0000001856158625__en-us_topic_0000001491918821_b62310336105516">UPDATE</strong> and <strong id="EN-US_TOPIC_0000001856158625__en-us_topic_0000001491918821_b132459113805516">INSERT</strong> at a time for convenience.</p>
|
|
</div>
|
|
<div class="section" id="EN-US_TOPIC_0000001856158625__en-us_topic_0000001491918821_section425872720304"><h4 class="sectiontitle">Precautions</h4><p id="EN-US_TOPIC_0000001856158625__en-us_topic_0000001491918821_p8580143418302">In concurrent MERGE INTO scenarios, the update operations triggered on the same CU will cause lock conflicts in traditional column-store tables and result in low performance. For HStore tables, the operations can be concurrently performed, and the MERGE INTO performance can be more than 100 times that of column-store tables.</p>
|
|
</div>
|
|
<div class="section" id="EN-US_TOPIC_0000001856158625__en-us_topic_0000001491918821_s63e68d20fc8a4670b54b531fc5722bb9"><h4 class="sectiontitle">Syntax</h4><div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001856158625__en-us_topic_0000001491918821_s60d8dda324084db98740133562841b8c"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span>
|
|
<span class="normal"> 2</span>
|
|
<span class="normal"> 3</span>
|
|
<span class="normal"> 4</span>
|
|
<span class="normal"> 5</span>
|
|
<span class="normal"> 6</span>
|
|
<span class="normal"> 7</span>
|
|
<span class="normal"> 8</span>
|
|
<span class="normal"> 9</span>
|
|
<span class="normal">10</span>
|
|
<span class="normal">11</span>
|
|
<span class="normal">12</span>
|
|
<span class="normal">13</span>
|
|
<span class="normal">14</span></pre></div></td><td class="code"><div><pre><span></span><span class="n">MERGE</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="k">table_name</span><span class="w"> </span><span class="p">[</span><span class="w"> </span><span class="p">[</span><span class="w"> </span><span class="k">AS</span><span class="w"> </span><span class="p">]</span><span class="w"> </span><span class="k">alias</span><span class="w"> </span><span class="p">]</span>
|
|
<span class="k">USING</span><span class="w"> </span><span class="err">{</span><span class="w"> </span><span class="err">{</span><span class="w"> </span><span class="k">table_name</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">view_name</span><span class="w"> </span><span class="err">}</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">subquery</span><span class="w"> </span><span class="err">}</span><span class="w"> </span><span class="p">[</span><span class="w"> </span><span class="p">[</span><span class="w"> </span><span class="k">AS</span><span class="w"> </span><span class="p">]</span><span class="w"> </span><span class="k">alias</span><span class="w"> </span><span class="p">]</span>
|
|
<span class="k">ON</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="n">condition</span><span class="w"> </span><span class="p">)</span>
|
|
<span class="p">[</span>
|
|
<span class="w"> </span><span class="k">WHEN</span><span class="w"> </span><span class="n">MATCHED</span><span class="w"> </span><span class="k">THEN</span>
|
|
<span class="w"> </span><span class="k">UPDATE</span><span class="w"> </span><span class="k">SET</span><span class="w"> </span><span class="err">{</span><span class="w"> </span><span class="k">column_name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="err">{</span><span class="w"> </span><span class="n">expression</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="k">DEFAULT</span><span class="w"> </span><span class="err">}</span><span class="w"> </span><span class="o">|</span>
|
|
<span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="k">column_name</span><span class="w"> </span><span class="p">[,</span><span class="w"> </span><span class="p">...]</span><span class="w"> </span><span class="p">)</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="err">{</span><span class="w"> </span><span class="n">expression</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="k">DEFAULT</span><span class="w"> </span><span class="err">}</span><span class="w"> </span><span class="p">[,</span><span class="w"> </span><span class="p">...]</span><span class="w"> </span><span class="p">)</span><span class="w"> </span><span class="err">}</span><span class="w"> </span><span class="p">[,</span><span class="w"> </span><span class="p">...]</span>
|
|
<span class="w"> </span><span class="p">[</span><span class="w"> </span><span class="k">WHERE</span><span class="w"> </span><span class="n">condition</span><span class="w"> </span><span class="p">]</span>
|
|
<span class="p">]</span>
|
|
<span class="p">[</span>
|
|
<span class="w"> </span><span class="k">WHEN</span><span class="w"> </span><span class="k">NOT</span><span class="w"> </span><span class="n">MATCHED</span><span class="w"> </span><span class="k">THEN</span>
|
|
<span class="w"> </span><span class="k">INSERT</span><span class="w"> </span><span class="err">{</span><span class="w"> </span><span class="k">DEFAULT</span><span class="w"> </span><span class="k">VALUES</span><span class="w"> </span><span class="o">|</span>
|
|
<span class="w"> </span><span class="p">[</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="k">column_name</span><span class="w"> </span><span class="p">[,</span><span class="w"> </span><span class="p">...]</span><span class="w"> </span><span class="p">)</span><span class="w"> </span><span class="p">]</span><span class="w"> </span><span class="k">VALUES</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="err">{</span><span class="w"> </span><span class="n">expression</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="k">DEFAULT</span><span class="w"> </span><span class="err">}</span><span class="w"> </span><span class="p">[,</span><span class="w"> </span><span class="p">...]</span><span class="w"> </span><span class="p">)</span><span class="w"> </span><span class="p">[,</span><span class="w"> </span><span class="p">...]</span><span class="w"> </span><span class="p">[</span><span class="w"> </span><span class="k">WHERE</span><span class="w"> </span><span class="n">condition</span><span class="w"> </span><span class="p">]</span><span class="w"> </span><span class="err">}</span>
|
|
<span class="p">];</span>
|
|
</pre></div></td></tr></table></div>
|
|
|
|
</div>
|
|
</div>
|
|
<div class="section" id="EN-US_TOPIC_0000001856158625__en-us_topic_0000001491918821_s0568dfe900e948eaa67d0a335c26701c"><h4 class="sectiontitle">Parameters</h4><ul id="EN-US_TOPIC_0000001856158625__en-us_topic_0000001491918821_ua3cdf4f3c73f4d4f9f931f40929ad83b"><li id="EN-US_TOPIC_0000001856158625__en-us_topic_0000001491918821_l2e7c51aac0a94a18bf457a6cb51fc92b"><strong id="EN-US_TOPIC_0000001856158625__en-us_topic_0000001491918821_b6293120125319">INTO</strong> clause<p id="EN-US_TOPIC_0000001856158625__en-us_topic_0000001491918821_afd87c3971a4d4428b1326a6b1633bd60">Specifies the target table that is being updated or has data being inserted.</p>
|
|
<ul id="EN-US_TOPIC_0000001856158625__en-us_topic_0000001491918821_ul1536131117155"><li id="EN-US_TOPIC_0000001856158625__en-us_topic_0000001491918821_li355611952012"><strong id="EN-US_TOPIC_0000001856158625__en-us_topic_0000001491918821_b457694211213">talbe_name</strong><p id="EN-US_TOPIC_0000001856158625__en-us_topic_0000001491918821_p139262952113">Specifies the name of the target table.</p>
|
|
</li><li id="EN-US_TOPIC_0000001856158625__en-us_topic_0000001491918821_l9d81378151c840608c7f91620059e663"><strong id="EN-US_TOPIC_0000001856158625__en-us_topic_0000001491918821_a870e440c9dbc4c2b8d332416c636b5b7">alias</strong><p id="EN-US_TOPIC_0000001856158625__en-us_topic_0000001491918821_a849db2fd073941289d905ecac08ab8ac">Specifies the alias for the target table.</p>
|
|
<p id="EN-US_TOPIC_0000001856158625__en-us_topic_0000001491918821_a4047bf2bb850400982359fec570c4f9b">Value range: a string. It must comply with the naming convention.</p>
|
|
</li></ul>
|
|
</li><li id="EN-US_TOPIC_0000001856158625__en-us_topic_0000001491918821_li639155673"><strong id="EN-US_TOPIC_0000001856158625__en-us_topic_0000001491918821_b038815526222">USING</strong> clause<p id="EN-US_TOPIC_0000001856158625__en-us_topic_0000001491918821_p58570217715">Specifies the source table, which can be a table, view, or subquery.</p>
|
|
</li><li id="EN-US_TOPIC_0000001856158625__en-us_topic_0000001491918821_l849b5f8b1c044e69b209289558768817"><strong id="EN-US_TOPIC_0000001856158625__en-us_topic_0000001491918821_b43151096475">ON</strong> clause<p id="EN-US_TOPIC_0000001856158625__en-us_topic_0000001491918821_a20ef3ea8919b439aa87cd0dc7571a357">Specifies the condition used to match data between the source and target tables. Columns in the condition cannot be updated. The <strong id="EN-US_TOPIC_0000001856158625__en-us_topic_0000001491918821_b116203616005516">ON</strong> association condition can be <strong id="EN-US_TOPIC_0000001856158625__en-us_topic_0000001491918821_b129240519305516">ctid</strong>,<strong id="EN-US_TOPIC_0000001856158625__en-us_topic_0000001491918821_b176436649705516"> xc_node_id</strong>, or <strong id="EN-US_TOPIC_0000001856158625__en-us_topic_0000001491918821_b87423729705516">tableoid</strong>.</p>
|
|
</li><li id="EN-US_TOPIC_0000001856158625__en-us_topic_0000001491918821_li2630142874718"><strong id="EN-US_TOPIC_0000001856158625__en-us_topic_0000001491918821_b98745324920">WHEN MATCHED</strong> clause<p id="EN-US_TOPIC_0000001856158625__en-us_topic_0000001491918821_p12887162312286">Performs <strong id="EN-US_TOPIC_0000001856158625__en-us_topic_0000001491918821_b195690351105516">UPDATE</strong> if data in the source table matches that in the target table based on the condition.</p>
|
|
<div class="note" id="EN-US_TOPIC_0000001856158625__en-us_topic_0000001491918821_note9695125011323"><img src="public_sys-resources/note_3.0-en-us.png"><span class="notetitle"> </span><div class="notebody"><p id="EN-US_TOPIC_0000001856158625__en-us_topic_0000001491918821_p269515010326">Distribution columns, system catalogs, and system columns cannot be updated.</p>
|
|
</div></div>
|
|
</li><li id="EN-US_TOPIC_0000001856158625__en-us_topic_0000001491918821_li227205134712"><strong id="EN-US_TOPIC_0000001856158625__en-us_topic_0000001491918821_b45865724915">WHEN NOT MATCHED</strong> clause<p id="EN-US_TOPIC_0000001856158625__en-us_topic_0000001491918821_p14681335172619">Specifies that the INSERT operation is performed if data in the source table does not match that in the target table based on the condition.</p>
|
|
<div class="note" id="EN-US_TOPIC_0000001856158625__en-us_topic_0000001491918821_note355315238360"><img src="public_sys-resources/note_3.0-en-us.png"><span class="notetitle"> </span><div class="notebody"><ul id="EN-US_TOPIC_0000001856158625__en-us_topic_0000001491918821_ul1061601423719"><li id="EN-US_TOPIC_0000001856158625__en-us_topic_0000001491918821_li8616191423717">An <strong id="EN-US_TOPIC_0000001856158625__en-us_topic_0000001491918821_b5868283905516">INSERT</strong> clause can contain only one <strong id="EN-US_TOPIC_0000001856158625__en-us_topic_0000001491918821_b45909540905516">VALUES</strong>.</li><li id="EN-US_TOPIC_0000001856158625__en-us_topic_0000001491918821_li176161414103716">The sequence of <strong id="EN-US_TOPIC_0000001856158625__en-us_topic_0000001491918821_b193944127405516">WHEN NOT MATCHED</strong> and <strong id="EN-US_TOPIC_0000001856158625__en-us_topic_0000001491918821_b1581831405516">WHEN NOT MATCHED</strong> clauses can be exchanged. One of them can be omitted, but they cannot be omitted at the same time.</li><li id="EN-US_TOPIC_0000001856158625__en-us_topic_0000001491918821_li186171914173719">Two <strong id="EN-US_TOPIC_0000001856158625__en-us_topic_0000001491918821_b138943735919">WHEN MATCHED</strong> or <strong id="EN-US_TOPIC_0000001856158625__en-us_topic_0000001491918821_b11504164018594">WHEN NOT MATCHED</strong> clauses cannot be specified at the same time.</li></ul>
|
|
</div></div>
|
|
</li></ul>
|
|
</div>
|
|
<div class="section" id="EN-US_TOPIC_0000001856158625__en-us_topic_0000001491918821_sc62f0ffeacde4228a7e8c56b5a2b85f1"><h4 class="sectiontitle">Example</h4><div class="p" id="EN-US_TOPIC_0000001856158625__en-us_topic_0000001491918821_p1365113318374">Create a target for <strong id="EN-US_TOPIC_0000001856158625__en-us_topic_0000001491918821_b1454716885916">MERGE INTO</strong>.<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001856158625__en-us_topic_0000001491918821_screen1914014452439"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span>
|
|
<span class="normal">2</span></pre></div></td><td class="code"><div><pre><span></span><span class="k">CREATE</span><span class="w"> </span><span class="k">TABLE</span><span class="w"> </span><span class="n">target</span><span class="p">(</span><span class="n">a</span><span class="w"> </span><span class="nb">int</span><span class="p">,</span><span class="w"> </span><span class="n">b</span><span class="w"> </span><span class="nb">int</span><span class="p">)</span><span class="k">WITH</span><span class="p">(</span><span class="n">ORIENTATION</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">COLUMN</span><span class="p">,</span><span class="w"> </span><span class="n">ENABLE_HSTORE</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">ON</span><span class="p">);</span>
|
|
<span class="k">INSERT</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="n">target</span><span class="w"> </span><span class="k">VALUES</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">),(</span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">);</span>
|
|
</pre></div></td></tr></table></div>
|
|
|
|
</div>
|
|
</div>
|
|
<div class="p" id="EN-US_TOPIC_0000001856158625__en-us_topic_0000001491918821_p6595513183819">Create a data source table.<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001856158625__en-us_topic_0000001491918821_screen1759512136386"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span>
|
|
<span class="normal">2</span></pre></div></td><td class="code"><div><pre><span></span><span class="k">CREATE</span><span class="w"> </span><span class="k">TABLE</span><span class="w"> </span><span class="k">source</span><span class="p">(</span><span class="n">a</span><span class="w"> </span><span class="nb">int</span><span class="p">,</span><span class="w"> </span><span class="n">b</span><span class="w"> </span><span class="nb">int</span><span class="p">)</span><span class="k">WITH</span><span class="p">(</span><span class="n">ORIENTATION</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">COLUMN</span><span class="p">,</span><span class="w"> </span><span class="n">ENABLE_HSTORE</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">ON</span><span class="p">);</span>
|
|
<span class="k">INSERT</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="k">source</span><span class="w"> </span><span class="k">VALUES</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">),(</span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">),(</span><span class="mi">3</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">),(</span><span class="mi">4</span><span class="p">,</span><span class="w"> </span><span class="mi">4</span><span class="p">),(</span><span class="mi">5</span><span class="p">,</span><span class="w"> </span><span class="mi">5</span><span class="p">);</span>
|
|
</pre></div></td></tr></table></div>
|
|
|
|
</div>
|
|
</div>
|
|
<div class="p" id="EN-US_TOPIC_0000001856158625__en-us_topic_0000001491918821_p175649568386">Run the <strong id="EN-US_TOPIC_0000001856158625__en-us_topic_0000001491918821_b8944201415592">MERGE INTO</strong> command.<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001856158625__en-us_topic_0000001491918821_screen1564356153815"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span>
|
|
<span class="normal">2</span>
|
|
<span class="normal">3</span>
|
|
<span class="normal">4</span>
|
|
<span class="normal">5</span>
|
|
<span class="normal">6</span>
|
|
<span class="normal">7</span></pre></div></td><td class="code"><div><pre><span></span><span class="n">MERGE</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="n">target</span><span class="w"> </span><span class="n">t</span><span class="w"> </span>
|
|
<span class="k">USING</span><span class="w"> </span><span class="k">source</span><span class="w"> </span><span class="n">s</span><span class="w"> </span>
|
|
<span class="k">ON</span><span class="w"> </span><span class="p">(</span><span class="n">t</span><span class="p">.</span><span class="n">a</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">s</span><span class="p">.</span><span class="n">a</span><span class="p">)</span><span class="w"> </span>
|
|
<span class="k">WHEN</span><span class="w"> </span><span class="n">MATCHED</span><span class="w"> </span><span class="k">THEN</span><span class="w"> </span>
|
|
<span class="w"> </span><span class="k">UPDATE</span><span class="w"> </span><span class="k">SET</span><span class="w"> </span><span class="n">t</span><span class="p">.</span><span class="n">b</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">t</span><span class="p">.</span><span class="n">b</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span>
|
|
<span class="k">WHEN</span><span class="w"> </span><span class="k">NOT</span><span class="w"> </span><span class="n">MATCHED</span><span class="w"> </span><span class="k">THEN</span><span class="w"> </span>
|
|
<span class="w"> </span><span class="k">INSERT</span><span class="w"> </span><span class="k">VALUES</span><span class="w"> </span><span class="p">(</span><span class="n">s</span><span class="p">.</span><span class="n">a</span><span class="p">,</span><span class="w"> </span><span class="n">s</span><span class="p">.</span><span class="n">b</span><span class="p">)</span><span class="w"> </span><span class="k">WHERE</span><span class="w"> </span><span class="n">s</span><span class="p">.</span><span class="n">b</span><span class="w"> </span><span class="o">%</span><span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
|
|
</pre></div></td></tr></table></div>
|
|
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div>
|
|
<div class="familylinks">
|
|
<div class="parentlink"><strong>Parent topic:</strong> <a href="dws_04_1026.html">Hybrid Data Warehouse Syntax</a></div>
|
|
</div>
|
|
</div>
|
|
|