<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Load Incremental com Merge in Brasil</title>
    <link>https://community.qlik.com/t5/Brasil/Load-Incremental-com-Merge/m-p/1923068#M60395</link>
    <description>&lt;P&gt;Desde o surgimento do novo prefixo MERGE (&lt;A href="https://help.qlik.com/en-US/sense/February2022/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/Merge.htm" target="_blank" rel="noopener"&gt;https://help.qlik.com/en-US/sense/February2022/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/Merge.htm&lt;/A&gt;) ficou bem mais fácil criar uma carga incremental.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Esse comando recebe uma tabela com operações de insert,update e delete e é capaz de alterar um tabela já carregada em memória&lt;/P&gt;
&lt;P&gt;Agora nossa cargas incrementais de QVD ficam com um código bem mais limpo e performático.&lt;/P&gt;
&lt;P&gt;Para os exemplos abaixo temos duas premissas:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;OrderID é a chave primária da tabela (se for uma chave composta, só ajustar)&lt;/LI&gt;
&lt;LI&gt;update_dt armazena a data/hora da ultima inserção/alteração do registro&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Vejamos os exemplos:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;"Insert Only"&lt;LI-CODE lang="markup"&gt;QVDFile='lib://DataFiles/NW.Orders_InsertOnly.qvd';
if FileSize('$(QVDFile)') &amp;gt; 0 then //If there is already extracted data
	[NW.Orders]:
    Load	
        OrderID,
        CustomerID,
        EmployeeID,
        OrderDate,
        RequiredDate,
        ShippedDate,
        ShipVia,
        Freight,
        ShipName,
        ShipAddress,
        ShipCity,
        ShipRegion,
        ShipPostalCode,
        ShipCountry
    from [$(QVDFile)](qvd);
    t:load Max(OrderID) as MaxOrderID Resident [NW.Orders];
    LastOrderID=Peek('MaxOrderID'); // Retrieves the last OrderID
    Drop Table t;
else 
	LastOrderID = '0';
    [NW.Orders]:load null() as OrderID AutoGenerate 0; // fake table
endif 

Merge(updated_dt) on OrderID Concatenate([NW.Orders])
Load If(Exists(OrderID),'U','I') as Operation, *; // New record? based on OrderID
SELECT OrderID,
	CustomerID,
	EmployeeID,
	OrderDate,
	RequiredDate,
	ShippedDate,
	ShipVia,
	Freight,
	ShipName,
	ShipAddress,
	ShipCity,
	ShipRegion,
	ShipPostalCode,
	ShipCountry,
        updated_dt
FROM northwind.orders
Where OrderID &amp;gt; '$(LastOrderID)';

Store [NW.Orders] into [$(QVDFile)](qvd);
​&lt;/LI-CODE&gt;&lt;/LI&gt;
&lt;LI&gt;Carga de "Insert" e "Update"&amp;nbsp;&lt;LI-CODE lang="javascript"&gt;QVDFile='lib://DataFiles/NW.Orders_InsertUpdate.qvd';
if FileSize('$(QVDFile)') &amp;gt; 0 then //If there is already extracted data
	[NW.Orders]:
    Load	
        OrderID,
        CustomerID,
        EmployeeID,
        OrderDate,
        RequiredDate,
        ShippedDate,
        ShipVia,
        Freight,
        ShipName,
        ShipAddress,
        ShipCity,
        ShipRegion,
        ShipPostalCode,
        ShipCountry,
        updated_dt
    from [$(QVDFile)](qvd);
    t:load Max(updated_dt) as updated_dt Resident [NW.Orders];
    updated_dt=Timestamp(Peek('updated_dt'),'YYYY-MM-DD hh:mm:ss.fff'); // Retrieves the last udpate
    Drop Table t;
else 
	updated_dt = '2000-01-01';
    [NW.Orders]:load null() as OrderID AutoGenerate 0; // fake table
endif 

Merge(updated_dt) on OrderID Concatenate([NW.Orders])
Load If(Exists(OrderID),'U','I') as Operation, *; // New record? based on OrderID
SELECT OrderID,
	CustomerID,
	EmployeeID,
	OrderDate,
	RequiredDate,
	ShippedDate,
	ShipVia,
	Freight,
	ShipName,
	ShipAddress,
	ShipCity,
	ShipRegion,
	ShipPostalCode,
	ShipCountry,
    updated_dt
FROM northwind.orders
Where updated_dt &amp;gt; '$(updated_dt)';

Store [NW.Orders] into [$(QVDFile)](qvd);
​&lt;/LI-CODE&gt;&lt;/LI&gt;
&lt;LI&gt;Carga de "Insert" e "Update" e "Delete"&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang="javascript"&gt;QVDFile='lib://DataFiles/NW.Orders_InsertUpdateDelete.qvd';
if FileSize('$(QVDFile)') &amp;gt; 0 then //If there is already extracted data
	[NW.Orders]:
    Load	
        OrderID,
        CustomerID,
        EmployeeID,
        OrderDate,
        RequiredDate,
        ShippedDate,
        ShipVia,
        Freight,
        ShipName,
        ShipAddress,
        ShipCity,
        ShipRegion,
        ShipPostalCode,
        ShipCountry,
        updated_dt
    from [$(QVDFile)](qvd);
    t:load Max(updated_dt) as updated_dt Resident [NW.Orders];
    updated_dt=Timestamp(Peek('updated_dt'),'YYYY-MM-DD hh:mm:ss.fff'); // Retrieves the last udpate
    Drop Table t;
else 
	updated_dt = '2000-01-01';
    [NW.Orders]:load null() as OrderID AutoGenerate 0; // fake table
endif 
trace $(updated_dt);

Merge(updated_dt) on OrderID Concatenate([NW.Orders])
Load If(Exists(OrderID),'U','I') as Operation, *; // New record? based on OrderID
SQL SELECT OrderID,
	CustomerID,
	EmployeeID,
	OrderDate,
	RequiredDate,
	ShippedDate,
	ShipVia,
	Freight,
	ShipName,
	ShipAddress,
	ShipCity,
	ShipRegion,
	ShipPostalCode,
	ShipCountry,
    updated_dt
FROM northwind.orders
Where updated_dt &amp;gt; '$(updated_dt)';

//Keeping only records which OrderID is still in database
Inner Keep([NW.Orders])
SQL SELECT 
	DISTINCT OrderID
FROM northwind.orders;    

Store [NW.Orders] into [$(QVDFile)](qvd);
&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Wed, 27 Apr 2022 16:12:23 GMT</pubDate>
    <dc:creator>Clever_Anjos</dc:creator>
    <dc:date>2022-04-27T16:12:23Z</dc:date>
    <item>
      <title>Load Incremental com Merge</title>
      <link>https://community.qlik.com/t5/Brasil/Load-Incremental-com-Merge/m-p/1923068#M60395</link>
      <description>&lt;P&gt;Desde o surgimento do novo prefixo MERGE (&lt;A href="https://help.qlik.com/en-US/sense/February2022/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/Merge.htm" target="_blank" rel="noopener"&gt;https://help.qlik.com/en-US/sense/February2022/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/Merge.htm&lt;/A&gt;) ficou bem mais fácil criar uma carga incremental.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Esse comando recebe uma tabela com operações de insert,update e delete e é capaz de alterar um tabela já carregada em memória&lt;/P&gt;
&lt;P&gt;Agora nossa cargas incrementais de QVD ficam com um código bem mais limpo e performático.&lt;/P&gt;
&lt;P&gt;Para os exemplos abaixo temos duas premissas:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;OrderID é a chave primária da tabela (se for uma chave composta, só ajustar)&lt;/LI&gt;
&lt;LI&gt;update_dt armazena a data/hora da ultima inserção/alteração do registro&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Vejamos os exemplos:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;"Insert Only"&lt;LI-CODE lang="markup"&gt;QVDFile='lib://DataFiles/NW.Orders_InsertOnly.qvd';
if FileSize('$(QVDFile)') &amp;gt; 0 then //If there is already extracted data
	[NW.Orders]:
    Load	
        OrderID,
        CustomerID,
        EmployeeID,
        OrderDate,
        RequiredDate,
        ShippedDate,
        ShipVia,
        Freight,
        ShipName,
        ShipAddress,
        ShipCity,
        ShipRegion,
        ShipPostalCode,
        ShipCountry
    from [$(QVDFile)](qvd);
    t:load Max(OrderID) as MaxOrderID Resident [NW.Orders];
    LastOrderID=Peek('MaxOrderID'); // Retrieves the last OrderID
    Drop Table t;
else 
	LastOrderID = '0';
    [NW.Orders]:load null() as OrderID AutoGenerate 0; // fake table
endif 

Merge(updated_dt) on OrderID Concatenate([NW.Orders])
Load If(Exists(OrderID),'U','I') as Operation, *; // New record? based on OrderID
SELECT OrderID,
	CustomerID,
	EmployeeID,
	OrderDate,
	RequiredDate,
	ShippedDate,
	ShipVia,
	Freight,
	ShipName,
	ShipAddress,
	ShipCity,
	ShipRegion,
	ShipPostalCode,
	ShipCountry,
        updated_dt
FROM northwind.orders
Where OrderID &amp;gt; '$(LastOrderID)';

Store [NW.Orders] into [$(QVDFile)](qvd);
​&lt;/LI-CODE&gt;&lt;/LI&gt;
&lt;LI&gt;Carga de "Insert" e "Update"&amp;nbsp;&lt;LI-CODE lang="javascript"&gt;QVDFile='lib://DataFiles/NW.Orders_InsertUpdate.qvd';
if FileSize('$(QVDFile)') &amp;gt; 0 then //If there is already extracted data
	[NW.Orders]:
    Load	
        OrderID,
        CustomerID,
        EmployeeID,
        OrderDate,
        RequiredDate,
        ShippedDate,
        ShipVia,
        Freight,
        ShipName,
        ShipAddress,
        ShipCity,
        ShipRegion,
        ShipPostalCode,
        ShipCountry,
        updated_dt
    from [$(QVDFile)](qvd);
    t:load Max(updated_dt) as updated_dt Resident [NW.Orders];
    updated_dt=Timestamp(Peek('updated_dt'),'YYYY-MM-DD hh:mm:ss.fff'); // Retrieves the last udpate
    Drop Table t;
else 
	updated_dt = '2000-01-01';
    [NW.Orders]:load null() as OrderID AutoGenerate 0; // fake table
endif 

Merge(updated_dt) on OrderID Concatenate([NW.Orders])
Load If(Exists(OrderID),'U','I') as Operation, *; // New record? based on OrderID
SELECT OrderID,
	CustomerID,
	EmployeeID,
	OrderDate,
	RequiredDate,
	ShippedDate,
	ShipVia,
	Freight,
	ShipName,
	ShipAddress,
	ShipCity,
	ShipRegion,
	ShipPostalCode,
	ShipCountry,
    updated_dt
FROM northwind.orders
Where updated_dt &amp;gt; '$(updated_dt)';

Store [NW.Orders] into [$(QVDFile)](qvd);
​&lt;/LI-CODE&gt;&lt;/LI&gt;
&lt;LI&gt;Carga de "Insert" e "Update" e "Delete"&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang="javascript"&gt;QVDFile='lib://DataFiles/NW.Orders_InsertUpdateDelete.qvd';
if FileSize('$(QVDFile)') &amp;gt; 0 then //If there is already extracted data
	[NW.Orders]:
    Load	
        OrderID,
        CustomerID,
        EmployeeID,
        OrderDate,
        RequiredDate,
        ShippedDate,
        ShipVia,
        Freight,
        ShipName,
        ShipAddress,
        ShipCity,
        ShipRegion,
        ShipPostalCode,
        ShipCountry,
        updated_dt
    from [$(QVDFile)](qvd);
    t:load Max(updated_dt) as updated_dt Resident [NW.Orders];
    updated_dt=Timestamp(Peek('updated_dt'),'YYYY-MM-DD hh:mm:ss.fff'); // Retrieves the last udpate
    Drop Table t;
else 
	updated_dt = '2000-01-01';
    [NW.Orders]:load null() as OrderID AutoGenerate 0; // fake table
endif 
trace $(updated_dt);

Merge(updated_dt) on OrderID Concatenate([NW.Orders])
Load If(Exists(OrderID),'U','I') as Operation, *; // New record? based on OrderID
SQL SELECT OrderID,
	CustomerID,
	EmployeeID,
	OrderDate,
	RequiredDate,
	ShippedDate,
	ShipVia,
	Freight,
	ShipName,
	ShipAddress,
	ShipCity,
	ShipRegion,
	ShipPostalCode,
	ShipCountry,
    updated_dt
FROM northwind.orders
Where updated_dt &amp;gt; '$(updated_dt)';

//Keeping only records which OrderID is still in database
Inner Keep([NW.Orders])
SQL SELECT 
	DISTINCT OrderID
FROM northwind.orders;    

Store [NW.Orders] into [$(QVDFile)](qvd);
&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 27 Apr 2022 16:12:23 GMT</pubDate>
      <guid>https://community.qlik.com/t5/Brasil/Load-Incremental-com-Merge/m-p/1923068#M60395</guid>
      <dc:creator>Clever_Anjos</dc:creator>
      <dc:date>2022-04-27T16:12:23Z</dc:date>
    </item>
  </channel>
</rss>

