{"id":48863,"date":"2023-10-30T14:08:53","date_gmt":"2023-10-30T13:08:53","guid":{"rendered":"https:\/\/www.inovex.de\/?p=48863"},"modified":"2023-10-30T14:08:53","modified_gmt":"2023-10-30T13:08:53","slug":"datenverarbeitung-mit-snowflake-was-bieten-dynamic-tables","status":"publish","type":"post","link":"https:\/\/www.inovex.de\/de\/blog\/datenverarbeitung-mit-snowflake-was-bieten-dynamic-tables\/","title":{"rendered":"Datenverarbeitung mit Snowflake \u2013 Was bieten Dynamic Tables?"},"content":{"rendered":"<p>Nachdem wir uns in den bisherigen Artikeln unserer Blogpost-Serie zur Snowflake Data Cloud bereits <a href=\"https:\/\/www.inovex.de\/de\/blog\/kontinuierlicher-import-von-daten-mit-snowpipe\/\">Snowpipe<\/a> und <a href=\"https:\/\/www.inovex.de\/de\/blog\/datenpipeline-mit-streams-und-tasks-in-snowflake\/\">Streams &amp; Tasks<\/a> angesehen haben, wollen wir uns nun mit Dynamic Tables eine weitere M\u00f6glichkeit anschauen, Prozesse zur Datenverarbeitung zu implementieren. Mit den Dynamic Tables bietet Snowflake eine einfache und flexible M\u00f6glichkeit, komplexe SQL-basierte Transformationen zu erstellen.<!--more--><\/p>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_82_2 counter-hierarchy ez-toc-counter ez-toc-custom ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\"><p class=\"ez-toc-title\" style=\"cursor:inherit\"><\/p>\n<\/div><nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/www.inovex.de\/de\/blog\/datenverarbeitung-mit-snowflake-was-bieten-dynamic-tables\/#Was-macht-Dynamic-Tables-besonders\" >Was macht Dynamic Tables besonders?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/www.inovex.de\/de\/blog\/datenverarbeitung-mit-snowflake-was-bieten-dynamic-tables\/#Verwendung\" >Verwendung<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/www.inovex.de\/de\/blog\/datenverarbeitung-mit-snowflake-was-bieten-dynamic-tables\/#Szenario-1-Tabellen-mit-eigenem-Target-Lag\" >Szenario 1: Tabellen mit eigenem Target Lag<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/www.inovex.de\/de\/blog\/datenverarbeitung-mit-snowflake-was-bieten-dynamic-tables\/#Szenario-2-Tabellen-mit-Downstream-Abhaengigkeit\" >Szenario 2: Tabellen mit Downstream-Abh\u00e4ngigkeit<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/www.inovex.de\/de\/blog\/datenverarbeitung-mit-snowflake-was-bieten-dynamic-tables\/#Error-Handling\" >Error Handling<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/www.inovex.de\/de\/blog\/datenverarbeitung-mit-snowflake-was-bieten-dynamic-tables\/#Betrachtung-der-Kosten\" >Betrachtung der Kosten<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/www.inovex.de\/de\/blog\/datenverarbeitung-mit-snowflake-was-bieten-dynamic-tables\/#Dynamic-Tables-vs-Streams-and-Tasks\" >Dynamic Tables vs. Streams and Tasks<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/www.inovex.de\/de\/blog\/datenverarbeitung-mit-snowflake-was-bieten-dynamic-tables\/#Fazit\" >Fazit<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/www.inovex.de\/de\/blog\/datenverarbeitung-mit-snowflake-was-bieten-dynamic-tables\/#Links\" >Links<\/a><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"Was-macht-Dynamic-Tables-besonders\"><\/span><b>Was macht Dynamic Tables besonders?<\/b><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Entgegen einer normalen Tabelle, die mit einem CREATE-Statement erstellt und DML-Befehlen inhaltlich definiert wird, werden Dynamic Tables wie Views als Ergebnis einer SQL-Abfrage definiert. Zus\u00e4tzlich m\u00fcssen lediglich das zu verwendende Warehouse und das sogenannte Target Lag angegeben werden. Letzteres definiert die Zeitspanne, die zwischen Aktualisierungsl\u00e4ufen verstreichen darf, und legt somit die maximale Zeit fest, die eine dynamische Tabelle hinter ihren zugrundeliegenden Basistabellen zur\u00fcckbleiben darf.<\/p>\n<p>Die resultierende Tabelle muss also weder explizit erstellt, noch m\u00fcssen manuelle Datenprozesse implementiert werden, die Datens\u00e4tze hinzuf\u00fcgen, \u00e4ndern oder l\u00f6schen. Diese Eigenschaft macht die Erstellung von Daten-Pipelines unter Verwendung dynamischer Tabellen besonders einfach. In den SQL-basierten Definitionen k\u00f6nnen auch bereits bestehende Dynamic Tables verwendet werden. Hierdurch lassen sich mit vergleichsweise geringem Aufwand umfangreiche Verarbeitungsstrecken erstellen, in denen die einzelnen Schritte aufeinander aufbauen k\u00f6nnen (beispielsweise das Laden von Dimensionen vor den Fakten eines Data Warehouse).<\/p>\n<p>Die regelm\u00e4\u00dfige Aktualisierung der Daten unter Wahrung dieser Abh\u00e4ngigkeiten \u00fcbernimmt Snowflake: Ein automatisierter Prozess \u00fcberpr\u00fcft anhand des Target Lag, wann die Tabelle aktualisiert werden muss. Neue oder ge\u00e4nderte Datens\u00e4tze werden nach M\u00f6glichkeit inkrementell geladen, vorausgesetzt der automatisierte Prozess kann anhand der der Tabelle zugrundeliegenden Abfrage ein Inkrement bestimmen (abh\u00e4ngig von den in der Abfrage verwendeten SQL-Ausdr\u00fccken).<\/p>\n<p>Diese Eigenschaften erm\u00f6glichen nicht nur Einsparungen von Zeit und Kosten. Da Entwicklungsteams weniger Ressourcen f\u00fcr manuelle Datenprozesse, Abh\u00e4ngigkeiten und Scheduling ben\u00f6tigen, bleibt mehr Raum f\u00fcr die Entwicklung zus\u00e4tzlicher Features und anderer wichtiger Aspekte.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Verwendung\"><\/span><b>Verwendung<\/b><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Wir demonstrieren die Verwendung von dynamischen Tabellen, indem wir 4 davon erstellen. Von diesen stehen jeweils 2 in Abh\u00e4ngigkeit zueinander. W\u00e4hrend eine Abh\u00e4ngigkeit zwischen 2 der erstellten Tabellen mit eigenem Target Lag besteht, veranschaulichen die anderen beiden die Verwendung der Downstream-Abh\u00e4ngigkeit:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-49392 size-full\" src=\"https:\/\/www.inovex.de\/wp-content\/uploads\/snowflake_dynamic_tables_0.png\" alt=\"Abbildung der 2 Szenarien\" width=\"441\" height=\"161\" srcset=\"https:\/\/www.inovex.de\/wp-content\/uploads\/snowflake_dynamic_tables_0.png 441w, https:\/\/www.inovex.de\/wp-content\/uploads\/snowflake_dynamic_tables_0-300x110.png 300w, https:\/\/www.inovex.de\/wp-content\/uploads\/snowflake_dynamic_tables_0-400x146.png 400w, https:\/\/www.inovex.de\/wp-content\/uploads\/snowflake_dynamic_tables_0-360x131.png 360w\" sizes=\"auto, (max-width: 441px) 100vw, 441px\" \/><\/p>\n<p>Damit dieser Aufbau besser nachvollziehbar ist und problemlos nachgebaut werden kann, verwenden wir den Snowflake Beispieldatensatz TPC-DS (siehe <em>Links<\/em>).<\/p>\n<p>Konkret f\u00fchren wir die folgenden Schritte aus:<\/p>\n<ul>\n<li>Erstellen der 4 Tabellen<\/li>\n<li>Abfragen der Metainformationen<\/li>\n<li>Monitoring der Ausf\u00fchrung<\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"Szenario-1-Tabellen-mit-eigenem-Target-Lag\"><\/span><b>Szenario 1: Tabellen mit eigenem Target Lag<br \/>\n<\/b><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Auf Basis der Tabelle STORE_SALES definieren wir 2 Tabellen, die die Daten in unterschiedlichen Aggregationsstufen zur Verf\u00fcgung stellen.<\/p>\n<p>Die erste Tabelle verkn\u00fcpft die Ladenverk\u00e4ufe mit Datum, Produkt und Filialnamen:<\/p>\n<pre class=\"show-lang:2 lang:tsql decode:true \">CREATE OR REPLACE DYNAMIC TABLE DT_STORE_SALES\r\nTARGET_LAG = '10 MINUTES'\r\nWAREHOUSE = MY_DEMO_WH\r\nAS SELECT\r\n    DATE(D.D_DATE) AS D_DATE,\r\n    CONCAT(T.T_HOUR, ':', LPAD(T.T_MINUTE, 2, 0), ':', LPAD(T.T_SECOND, 2, 0)) AS D_TIME,\r\n    SS.SS_QUANTITY,\r\n    SS.SS_WHOLESALE_COST,\r\n    SS.SS_LIST_PRICE,\r\n    SS.SS_SALES_PRICE,\r\n    I.I_CURRENT_PRICE,\r\n    I.I_WHOLESALE_COST,\r\n    I.I_PRODUCT_NAME,\r\n    S.S_STORE_NAME,\r\n    S.S_CITY,\r\n    S.S_STATE\r\nFROM STORE_SALES SS\r\nJOIN DATE_DIM D\r\n    ON D.D_DATE_SK = SS.SS_SOLD_DATE_SK\r\nJOIN TIME_DIM T\r\n    ON T.T_TIME_SK = SS.SS_SOLD_TIME_SK\r\nJOIN ITEM I\r\n    ON I.I_ITEM_SK = SS.SS_ITEM_SK\r\nJOIN STORE S\r\n  ON S.S_STORE_SK = SS.SS_STORE_SK;<\/pre>\n<p>Die zweite Tabelle soll diese Informationen aggregieren und die Gesamtmenge sowie die durchschnittlichen Gro\u00dfh\u00e4ndler-, Listen- und Verkaufspreise pro Monat und Produkt angeben:<\/p>\n<pre class=\"show-lang:2 lang:tsql decode:true \">CREATE OR REPLACE DYNAMIC TABLE DT_STORE_SALES_MONTH\r\nTARGET_LAG = '10 MINUTES'\r\nWAREHOUSE = MY_DEMO_WH\r\nAS SELECT\r\n    YEAR(D_DATE) AS D_YEAR,\r\n    MONTH(D_DATE) AS D_MONTH,\r\n    I_PRODUCT_NAME,\r\n    SUM(SS_QUANTITY) AS SS_QUANTITY,\r\n    AVG(SS_WHOLESALE_COST) AS AVG_SS_WHOLESALE_COST,\r\n    AVG(SS_LIST_PRICE) AS AVG_SS_LIST_PRICE,\r\n    AVG(SS_SALES_PRICE) AS AVG_SS_SALES_PRICE\r\nFROM DT_STORE_SALES\r\nGROUP BY\r\n    YEAR(D_DATE),\r\n    MONTH(D_DATE),\r\n    I_PRODUCT_NAME;<\/pre>\n<p>Beide Tabellen wurden mit einem Target Lag von 10 Minuten erstellt. Durch diese Konfiguration ist also sichergestellt, dass die Daten in beiden Tabellen maximal 10 Minuten hinter den zugrundeliegenden Basistabellen zur\u00fcckbleiben, ehe sie automatisiert durch Snowflake auf den Stand der Quelldaten gebracht werden.<br \/>\nWenn wir uns die dynamischen Tabellen in unserem Schema anzeigen lassen, k\u00f6nnen wir anhand des SCHEDULING_STATE erkennen, dass beide aktiv sind:<\/p>\n<pre class=\"show-lang:2 lang:tsql decode:true \">SHOW DYNAMIC TABLES IN SCHEMA TPC_DS.MY_SCHEMA;<\/pre>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-48877 size-full\" src=\"https:\/\/www.inovex.de\/wp-content\/uploads\/snowflake_dynamic_tables_1.png\" alt=\"Output von SHOW DYNAMIC TABLES\" width=\"724\" height=\"94\" srcset=\"https:\/\/www.inovex.de\/wp-content\/uploads\/snowflake_dynamic_tables_1.png 724w, https:\/\/www.inovex.de\/wp-content\/uploads\/snowflake_dynamic_tables_1-300x39.png 300w, https:\/\/www.inovex.de\/wp-content\/uploads\/snowflake_dynamic_tables_1-400x52.png 400w, https:\/\/www.inovex.de\/wp-content\/uploads\/snowflake_dynamic_tables_1-720x94.png 720w, https:\/\/www.inovex.de\/wp-content\/uploads\/snowflake_dynamic_tables_1-360x47.png 360w\" sizes=\"auto, (max-width: 724px) 100vw, 724px\" \/><\/p>\n<p>Wir warten ein paar Minuten ab, und sehen uns dann die Historie der Aktualisierungen an:<\/p>\n<pre class=\"show-lang:2 lang:tsql decode:true \">SELECT NAME, STATE, STATE_CODE, STATE_MESSAGE, DATA_TIMESTAMP, REFRESH_START_TIME, REFRESH_END_TIME\r\nFROM TABLE (INFORMATION_SCHEMA.DYNAMIC_TABLE_REFRESH_HISTORY(NAME_PREFIX =&gt; 'TPC_DS.MY_SCHEMA.'))\r\nORDER BY data_timestamp DESC;<\/pre>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-48879 size-large\" src=\"https:\/\/www.inovex.de\/wp-content\/uploads\/snowflake_dynamic_tables_2-1024x247.png\" alt=\"Ausf\u00fchrungshistorie der beiden Dynamic Tables\" width=\"640\" height=\"154\" srcset=\"https:\/\/www.inovex.de\/wp-content\/uploads\/snowflake_dynamic_tables_2-1024x247.png 1024w, https:\/\/www.inovex.de\/wp-content\/uploads\/snowflake_dynamic_tables_2-300x72.png 300w, https:\/\/www.inovex.de\/wp-content\/uploads\/snowflake_dynamic_tables_2-768x186.png 768w, https:\/\/www.inovex.de\/wp-content\/uploads\/snowflake_dynamic_tables_2-400x97.png 400w, https:\/\/www.inovex.de\/wp-content\/uploads\/snowflake_dynamic_tables_2-360x87.png 360w, https:\/\/www.inovex.de\/wp-content\/uploads\/snowflake_dynamic_tables_2.png 1362w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/p>\n<p>Anhand der Start- und Endzeitpunkte erkennt man, dass DT_STORE_SALES_MONTH immer dann aktualisiert wird, wenn DT_STORE_SALES erfolgreich aktualisiert wurde. Snowflake erkennt also die Abh\u00e4ngigkeit zwischen den beiden Tabellen und legt die Aktualisierungszeitpunkte zusammen (auch erkennbar anhand des DATA_TIMESTAMP). Diese Optimierung seitens Snowflake w\u00fcrde auch dann erfolgen, wenn die beiden Tabellen ein unterschiedliches Target Lag h\u00e4tten.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Szenario-2-Tabellen-mit-Downstream-Abhaengigkeit\"><\/span><b>Szenario 2: Tabellen mit Downstream-Abh\u00e4ngigkeit<br \/>\n<\/b><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Alternativ zu einer Zeitangabe kann das Target Lag auch als Downstream konfiguriert werden. Diese Tabellen werden nur dann aktualisiert, wenn Abh\u00e4ngigkeiten zu anderen dynamischen Tabellen dies erforderlich machen.<\/p>\n<p>Auf Basis der Tabelle WEB_SALES definieren wir 2 weitere Tabellen.<\/p>\n<p>Die erste Tabelle verkn\u00fcpft die Onlineverk\u00e4ufe mit Datum, Produkt und Versandart:<\/p>\n<pre class=\"show-lang:2 lang:tsql decode:true \">CREATE OR REPLACE DYNAMIC TABLE DT_WEB_SALES\r\nTARGET_LAG = 'DOWNSTREAM'\r\nWAREHOUSE = MY_DEMO_WH\r\nAS SELECT\r\n    DATE(D.D_DATE) AS D_DATE,\r\n    CONCAT(T.T_HOUR, ':', LPAD(T.T_MINUTE, 2, 0), ':', LPAD(T.T_SECOND, 2, 0)) AS D_TIME,\r\n    WS.WS_QUANTITY,\r\n    WS.WS_WHOLESALE_COST,\r\n    WS.WS_LIST_PRICE,\r\n    WS.WS_SALES_PRICE,\r\n    I.I_PRODUCT_NAME,\r\n    SM.SM_TYPE,\r\n    SM.SM_CODE\r\nFROM WEB_SALES WS\r\nJOIN DATE_DIM D\r\n    ON D.D_DATE_SK = WS.WS_SOLD_DATE_SK\r\nJOIN TIME_DIM T\r\n    ON T.T_TIME_SK = WS.WS_SOLD_TIME_SK\r\nJOIN ITEM I\r\n    ON I.I_ITEM_SK = WS.WS_ITEM_SK\r\nJOIN SHIP_MODE SM\r\n    ON SM.SM_SHIP_MODE_SK = WS.WS_SHIP_MODE_SK;<\/pre>\n<p>Die zweite Tabelle soll diese Informationen wieder aggregieren und die Gesamtmenge sowie die durchschnittlichen Gro\u00dfh\u00e4ndler-, Listen- und Verkaufspreise pro Monat und Produkt angeben:<\/p>\n<pre class=\"show-lang:2 lang:tsql decode:true \">CREATE OR REPLACE DYNAMIC TABLE DT_WEB_SALES_MONTH\r\nTARGET_LAG = '2 MINUTES'\r\nWAREHOUSE = MY_DEMO_WH\r\nAS SELECT\r\n    YEAR(D_DATE) AS D_YEAR,\r\n    MONTH(D_DATE) AS D_MONTH,\r\n    I_PRODUCT_NAME,\r\n    SUM(WS_QUANTITY) AS WS_QUANTITY,\r\n    AVG(WS_WHOLESALE_COST) AS AVG_WS_WHOLESALE_COST,\r\n    AVG(WS_LIST_PRICE) AS AVG_WS_LIST_PRICE,\r\n    AVG(WS_SALES_PRICE) AS AVG_WS_SALES_PRICE\r\nFROM DT_WEB_SALES\r\nGROUP BY\r\n    YEAR(D_DATE),\r\n    MONTH(D_DATE),\r\n    I_PRODUCT_NAME;<\/pre>\n<p>Wir warten wieder ein paar Minuten ab, und sehen uns erneut die Historie der Aktualisierungen an:<\/p>\n<pre class=\"show-lang:2 lang:tsql decode:true \">SELECT NAME, STATE, STATE_CODE, STATE_MESSAGE, DATA_TIMESTAMP, REFRESH_START_TIME, REFRESH_END_TIME\r\nFROM TABLE (INFORMATION_SCHEMA.DYNAMIC_TABLE_REFRESH_HISTORY(NAME_PREFIX =&gt; 'TPC_DS.MY_SCHEMA.'))\r\nORDER BY data_timestamp DESC;<\/pre>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-48875 size-large\" src=\"https:\/\/www.inovex.de\/wp-content\/uploads\/snowflake_dynamic_tables_3-1024x163.png\" alt=\"Ausf\u00fchrungshistorie der beiden Dynamic Tables\" width=\"640\" height=\"102\" srcset=\"https:\/\/www.inovex.de\/wp-content\/uploads\/snowflake_dynamic_tables_3-1024x163.png 1024w, https:\/\/www.inovex.de\/wp-content\/uploads\/snowflake_dynamic_tables_3-300x48.png 300w, https:\/\/www.inovex.de\/wp-content\/uploads\/snowflake_dynamic_tables_3-768x122.png 768w, https:\/\/www.inovex.de\/wp-content\/uploads\/snowflake_dynamic_tables_3-400x64.png 400w, https:\/\/www.inovex.de\/wp-content\/uploads\/snowflake_dynamic_tables_3-360x57.png 360w, https:\/\/www.inovex.de\/wp-content\/uploads\/snowflake_dynamic_tables_3.png 1335w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/p>\n<p>Wie in der obigen SQL-Definition festgelegt, wird die Tabelle DT_WEB_SALES_MONTH in Abst\u00e4nden von ca. 2 Minuten aktualisiert. Da hierf\u00fcr die Tabelle DT_WEB_SALES verwendet wird, l\u00e4uft deren Aktualisierung unmittelbar vorher.<\/p>\n<p>Wichtig: Um keine unn\u00f6tigen Kosten zu verursachen, sollte abschlie\u00dfend die automatische Ausf\u00fchrung der Aktualisierungen f\u00fcr alle Tabellen ausgesetzt werden:<\/p>\n<pre class=\"show-lang:2 lang:tsql decode:true \">ALTER DYNAMIC TABLE DT_STORE_SALES SUSPEND;\r\nALTER DYNAMIC TABLE DT_STORE_SALES_MONTH SUSPEND;\r\nALTER DYNAMIC TABLE DT_WEB_SALES SUSPEND;\r\nALTER DYNAMIC TABLE DT_WEB_SALES_MONTH SUSPEND;<\/pre>\n<h2><span class=\"ez-toc-section\" id=\"Error-Handling\"><\/span><b>Error Handling<\/b><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Wenn das der dynamischen Tabelle zugrundeliegende Statement fehlschl\u00e4gt, wird dies in der Historie der Aktualisierungen entsprechend markiert:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-48871 size-full\" src=\"https:\/\/www.inovex.de\/wp-content\/uploads\/snowflake_dynamic_tables_4.png\" alt=\"5 fehlgeschlagene Ausf\u00fchrungen\" width=\"970\" height=\"273\" srcset=\"https:\/\/www.inovex.de\/wp-content\/uploads\/snowflake_dynamic_tables_4.png 970w, https:\/\/www.inovex.de\/wp-content\/uploads\/snowflake_dynamic_tables_4-300x84.png 300w, https:\/\/www.inovex.de\/wp-content\/uploads\/snowflake_dynamic_tables_4-768x216.png 768w, https:\/\/www.inovex.de\/wp-content\/uploads\/snowflake_dynamic_tables_4-400x113.png 400w, https:\/\/www.inovex.de\/wp-content\/uploads\/snowflake_dynamic_tables_4-360x101.png 360w\" sizes=\"auto, (max-width: 970px) 100vw, 970px\" \/><\/p>\n<p>Geschieht es 5 mal in Folge, wird die regelm\u00e4\u00dfige Aktualisierung der Daten f\u00fcr diese Tabelle automatisch deaktiviert:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-48873 size-large\" src=\"https:\/\/www.inovex.de\/wp-content\/uploads\/snowflake_dynamic_tables_5-1024x128.png\" alt=\"Auto-suspend der Aktualisierung\" width=\"640\" height=\"80\" srcset=\"https:\/\/www.inovex.de\/wp-content\/uploads\/snowflake_dynamic_tables_5-1024x128.png 1024w, https:\/\/www.inovex.de\/wp-content\/uploads\/snowflake_dynamic_tables_5-300x38.png 300w, https:\/\/www.inovex.de\/wp-content\/uploads\/snowflake_dynamic_tables_5-768x96.png 768w, https:\/\/www.inovex.de\/wp-content\/uploads\/snowflake_dynamic_tables_5-400x50.png 400w, https:\/\/www.inovex.de\/wp-content\/uploads\/snowflake_dynamic_tables_5-360x45.png 360w, https:\/\/www.inovex.de\/wp-content\/uploads\/snowflake_dynamic_tables_5.png 1270w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/p>\n<p>Dynamische Tabellen die aufgrund einer Abh\u00e4ngigkeit von dieser Deaktivierung betroffen sind, werden ebenfalls automatisch deaktiviert.<\/p>\n<p>Eine Aktualisierung der Daten w\u00fcrde dann erst wieder erfolgen, wenn wir den Fehler beheben und die Aktualisierungen reaktivieren.<\/p>\n<p>Benachrichtigungen \u00fcber fehlgeschlagene Aktualisierungen und deaktivierte dynamische Tabellen lie\u00dfen sich beispielsweise mit der integrierten Snowflake-Prozedur SYSTEM$SEND_EMAIL() versenden.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Betrachtung-der-Kosten\"><\/span><b>Betrachtung der Kosten<\/b><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Die Kosten einer dynamischen Tabelle setzen sich aus 3 Komponenten zusammen:<\/p>\n<ol>\n<li><strong>Storage<\/strong> umfasst den f\u00fcr eine Tabelle ben\u00f6tigten Speicherplatz pro TB.<\/li>\n<li><strong>Cloud Services Compute<\/strong> wird verwendet, um zu \u00fcberpr\u00fcfen, ob die zugrundeliegenden Daten einer Tabelle sich ge\u00e4ndert haben. Nur wenn dies der Fall ist, wird eine Aktualisierung angesto\u00dfen. Diese Kosten werden nur in Rechnung gestellt, wenn sie \u00fcber 10 % der gesamten Warehouse-Kosten eines Tages betragen.<\/li>\n<li><strong>Virtual Warehouse Compute<\/strong> wird verwendet, um im Rahmen von Aktualisierungen die Quelldaten zu lesen, sie zu transformieren und das Resultat in die Zieltabelle zu schreiben.<\/li>\n<\/ol>\n<h2><span class=\"ez-toc-section\" id=\"Dynamic-Tables-vs-Streams-and-Tasks\"><\/span><b>Dynamic Tables vs. Streams and Tasks<\/b><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Im vergangenen zweiten Teil unserer Blogpost-Serie zur Snowflake Data Cloud haben wir uns <a href=\"https:\/\/www.inovex.de\/de\/blog\/datenpipeline-mit-streams-und-tasks-in-snowflake\/\">Streams und Tasks<\/a> angesehen. Da sich beide Artikel mit Wegen besch\u00e4ftigen, Daten in Snowflake zu transformieren, m\u00f6chten wir noch kurz auf Gemeinsamkeiten und Unterschiede dieser beiden M\u00f6glichkeiten eingehen:<\/p>\n<table>\n<tbody>\n<tr>\n<th><\/th>\n<th>Dynamic Tables<\/th>\n<th>Streams und Tasks<\/th>\n<\/tr>\n<tr>\n<td>Ansatz<\/td>\n<td>Deklarativ: Zieltabelle wird als Ergebnis einer Abfrage definiert<\/td>\n<td>Imperativ: Zieltabelle muss explizit erstellt und mit DML-Befehlen bewirtschaftet werden<\/td>\n<\/tr>\n<tr>\n<td>Umfang<\/td>\n<td>Nur SQL-basierte Transformationen<\/td>\n<td>Tasks k\u00f6nnen neben SQL-Abfragen auch Prozeduren sowie benutzerdefinierte und externe Funktionen verwenden<\/td>\n<\/tr>\n<tr>\n<td>Scheduling<\/td>\n<td>Automatische Aktualisierung unter Ber\u00fccksichtigung der Abh\u00e4ngigkeiten, Aktualit\u00e4t der Daten nur innerhalb des Target Lag<\/td>\n<td>Task-basierte Aktualisierung muss manuell eingeplant werden, Ber\u00fccksichtigen der Abh\u00e4ngigkeiten ist Teil der Entwicklungsarbeit, Aktualit\u00e4t der Daten kann dabei genauer definiert werden<\/td>\n<\/tr>\n<tr>\n<td>Inkrement<\/td>\n<td>Der automatische Aktualisierungsprozess l\u00e4dt neue oder ge\u00e4nderte Datens\u00e4tze nach M\u00f6glichkeit inkrementell<\/td>\n<td>Task-basierte inkrementelle Verarbeitung auf Basis von Streams muss explizit umgesetzt werden<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Ob nun dynamische Tabellen oder Streams und Tasks das geeignetere Werkzeug zur Datentransformation sind, kommt also in der Praxis auf die konkreten Anforderungen an die Verarbeitungsstrecke an.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Fazit\"><\/span><b>Fazit<\/b><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Mit Dynamic Tables bietet Snowflake ein einfaches und sehr vielseitig einsetzbares Werkzeug, mit welchem unterschiedlichste Transformationen auf Basis komplexer SQL-Abfragen erstellt werden k\u00f6nnen. Auch gr\u00f6\u00dfere Datenpipelines lassen sich mit geringem Aufwand erstellen, da die hinter den Tabellen stehenden automatisierten Aktualisierungsprozesse das Scheduling, die Einhaltung von Abh\u00e4ngigkeiten sowie das inkrementelle Laden der Daten \u00fcbernehmen.<\/p>\n<p>F\u00fcr diese Reduzierung in der Entwicklungskomplexit\u00e4t nimmt man allerdings einige Einschr\u00e4nkungen in Kauf. So gibt man beispielsweise die vollst\u00e4ndige Kontrolle \u00fcber den exakten Zeitpunkt der Datenaktualisierung ab. Auch externe Tabellen, Clustering und Search Optimization sowie externe und nicht deterministische Funktionen werden aktuell noch nicht von Dynamic Tables unterst\u00fctzt.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Links\"><\/span><b>Links<\/b><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><a href=\"https:\/\/docs.snowflake.com\/en\/user-guide\/dynamic-tables-about\" target=\"_blank\" rel=\"noopener\">https:\/\/docs.snowflake.com\/en\/user-guide\/dynamic-tables-about<\/a><br \/>\n<a href=\"https:\/\/docs.snowflake.com\/en\/user-guide\/sample-data-tpcds\" target=\"_blank\" rel=\"noopener\">https:\/\/docs.snowflake.com\/en\/user-guide\/sample-data-tpcds<\/a><br \/>\n<a href=\"https:\/\/docs.snowflake.com\/en\/user-guide\/email-stored-procedures\" target=\"_blank\" rel=\"noopener\">https:\/\/docs.snowflake.com\/en\/user-guide\/email-stored-procedures<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Nachdem wir uns in den bisherigen Artikeln unserer Blogpost-Serie zur Snowflake Data Cloud bereits Snowpipe und Streams &amp; Tasks angesehen haben, wollen wir uns nun mit Dynamic Tables eine weitere M\u00f6glichkeit anschauen, Prozesse zur Datenverarbeitung zu implementieren. Mit den Dynamic Tables bietet Snowflake eine einfache und flexible M\u00f6glichkeit, komplexe SQL-basierte Transformationen zu erstellen.<\/p>\n","protected":false},"author":395,"featured_media":49235,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"ep_exclude_from_search":false,"footnotes":""},"tags":[181,385,1108],"service":[446,411],"coauthors":[{"id":395,"display_name":"Tobias Hoffmann","user_nicename":"thoffmann"}],"class_list":["post-48863","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","tag-business-intelligence","tag-data-engineering","tag-snowflake","service-business-intelligence","service-data-engineering"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Datenverarbeitung mit Snowflake \u2013 Was bieten Dynamic Tables? - inovex GmbH<\/title>\n<meta name=\"description\" content=\"Mit Dynamic Tables bietet Snowflake eine einfache und flexible M\u00f6glichkeit, komplexe SQL-basierte Transformationen zu erstellen.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.inovex.de\/de\/blog\/datenverarbeitung-mit-snowflake-was-bieten-dynamic-tables\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Datenverarbeitung mit Snowflake \u2013 Was bieten Dynamic Tables? - inovex GmbH\" \/>\n<meta property=\"og:description\" content=\"Mit Dynamic Tables bietet Snowflake eine einfache und flexible M\u00f6glichkeit, komplexe SQL-basierte Transformationen zu erstellen.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.inovex.de\/de\/blog\/datenverarbeitung-mit-snowflake-was-bieten-dynamic-tables\/\" \/>\n<meta property=\"og:site_name\" content=\"inovex GmbH\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/inovexde\" \/>\n<meta property=\"article:published_time\" content=\"2023-10-30T13:08:53+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.inovex.de\/wp-content\/uploads\/Kontinuierliche-Datenpipeline-in-Snowflake-2.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1500\" \/>\n\t<meta property=\"og:image:height\" content=\"880\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Tobias Hoffmann\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/www.inovex.de\/wp-content\/uploads\/Kontinuierliche-Datenpipeline-in-Snowflake-2-1024x601.png\" \/>\n<meta name=\"twitter:creator\" content=\"@inovexgmbh\" \/>\n<meta name=\"twitter:site\" content=\"@inovexgmbh\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Tobias Hoffmann\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"9\u00a0Minuten\" \/>\n\t<meta name=\"twitter:label3\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data3\" content=\"Tobias Hoffmann\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/datenverarbeitung-mit-snowflake-was-bieten-dynamic-tables\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/datenverarbeitung-mit-snowflake-was-bieten-dynamic-tables\\\/\"},\"author\":{\"name\":\"Tobias Hoffmann\",\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/#\\\/schema\\\/person\\\/93608d81688ba211c131a709fb43c5a2\"},\"headline\":\"Datenverarbeitung mit Snowflake \u2013 Was bieten Dynamic Tables?\",\"datePublished\":\"2023-10-30T13:08:53+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/datenverarbeitung-mit-snowflake-was-bieten-dynamic-tables\\\/\"},\"wordCount\":1268,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/datenverarbeitung-mit-snowflake-was-bieten-dynamic-tables\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.inovex.de\\\/wp-content\\\/uploads\\\/Kontinuierliche-Datenpipeline-in-Snowflake-2.png\",\"keywords\":[\"Business Intelligence\",\"Data Engineering\",\"Snowflake\"],\"articleSection\":[\"Analytics\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/datenverarbeitung-mit-snowflake-was-bieten-dynamic-tables\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/datenverarbeitung-mit-snowflake-was-bieten-dynamic-tables\\\/\",\"url\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/datenverarbeitung-mit-snowflake-was-bieten-dynamic-tables\\\/\",\"name\":\"Datenverarbeitung mit Snowflake \u2013 Was bieten Dynamic Tables? - inovex GmbH\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/datenverarbeitung-mit-snowflake-was-bieten-dynamic-tables\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/datenverarbeitung-mit-snowflake-was-bieten-dynamic-tables\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.inovex.de\\\/wp-content\\\/uploads\\\/Kontinuierliche-Datenpipeline-in-Snowflake-2.png\",\"datePublished\":\"2023-10-30T13:08:53+00:00\",\"description\":\"Mit Dynamic Tables bietet Snowflake eine einfache und flexible M\u00f6glichkeit, komplexe SQL-basierte Transformationen zu erstellen.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/datenverarbeitung-mit-snowflake-was-bieten-dynamic-tables\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/datenverarbeitung-mit-snowflake-was-bieten-dynamic-tables\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/datenverarbeitung-mit-snowflake-was-bieten-dynamic-tables\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.inovex.de\\\/wp-content\\\/uploads\\\/Kontinuierliche-Datenpipeline-in-Snowflake-2.png\",\"contentUrl\":\"https:\\\/\\\/www.inovex.de\\\/wp-content\\\/uploads\\\/Kontinuierliche-Datenpipeline-in-Snowflake-2.png\",\"width\":1500,\"height\":880,\"caption\":\"Kontinuierliche Datenpipeline in Snowflake\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/datenverarbeitung-mit-snowflake-was-bieten-dynamic-tables\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Datenverarbeitung mit Snowflake \u2013 Was bieten Dynamic Tables?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/#website\",\"url\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/\",\"name\":\"inovex GmbH\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/#organization\",\"name\":\"inovex GmbH\",\"url\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.inovex.de\\\/wp-content\\\/uploads\\\/2021\\\/03\\\/inovex-logo-16-9-1.png\",\"contentUrl\":\"https:\\\/\\\/www.inovex.de\\\/wp-content\\\/uploads\\\/2021\\\/03\\\/inovex-logo-16-9-1.png\",\"width\":1921,\"height\":1081,\"caption\":\"inovex GmbH\"},\"image\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/inovexde\",\"https:\\\/\\\/x.com\\\/inovexgmbh\",\"https:\\\/\\\/www.instagram.com\\\/inovexlife\\\/\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/inovex\",\"https:\\\/\\\/www.youtube.com\\\/channel\\\/UC7r66GT14hROB_RQsQBAQUQ\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/#\\\/schema\\\/person\\\/93608d81688ba211c131a709fb43c5a2\",\"name\":\"Tobias Hoffmann\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2255108172951bd335d0bc3d61cf3f88ac581e031dab8c4e1dd201b7651bb20f?s=96&d=retro&r=gcaab24a3323d29e79ed626f5449d1851\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2255108172951bd335d0bc3d61cf3f88ac581e031dab8c4e1dd201b7651bb20f?s=96&d=retro&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2255108172951bd335d0bc3d61cf3f88ac581e031dab8c4e1dd201b7651bb20f?s=96&d=retro&r=g\",\"caption\":\"Tobias Hoffmann\"},\"url\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/author\\\/thoffmann\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Datenverarbeitung mit Snowflake \u2013 Was bieten Dynamic Tables? - inovex GmbH","description":"Mit Dynamic Tables bietet Snowflake eine einfache und flexible M\u00f6glichkeit, komplexe SQL-basierte Transformationen zu erstellen.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.inovex.de\/de\/blog\/datenverarbeitung-mit-snowflake-was-bieten-dynamic-tables\/","og_locale":"de_DE","og_type":"article","og_title":"Datenverarbeitung mit Snowflake \u2013 Was bieten Dynamic Tables? - inovex GmbH","og_description":"Mit Dynamic Tables bietet Snowflake eine einfache und flexible M\u00f6glichkeit, komplexe SQL-basierte Transformationen zu erstellen.","og_url":"https:\/\/www.inovex.de\/de\/blog\/datenverarbeitung-mit-snowflake-was-bieten-dynamic-tables\/","og_site_name":"inovex GmbH","article_publisher":"https:\/\/www.facebook.com\/inovexde","article_published_time":"2023-10-30T13:08:53+00:00","og_image":[{"width":1500,"height":880,"url":"https:\/\/www.inovex.de\/wp-content\/uploads\/Kontinuierliche-Datenpipeline-in-Snowflake-2.png","type":"image\/png"}],"author":"Tobias Hoffmann","twitter_card":"summary_large_image","twitter_image":"https:\/\/www.inovex.de\/wp-content\/uploads\/Kontinuierliche-Datenpipeline-in-Snowflake-2-1024x601.png","twitter_creator":"@inovexgmbh","twitter_site":"@inovexgmbh","twitter_misc":{"Verfasst von":"Tobias Hoffmann","Gesch\u00e4tzte Lesezeit":"9\u00a0Minuten","Written by":"Tobias Hoffmann"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.inovex.de\/de\/blog\/datenverarbeitung-mit-snowflake-was-bieten-dynamic-tables\/#article","isPartOf":{"@id":"https:\/\/www.inovex.de\/de\/blog\/datenverarbeitung-mit-snowflake-was-bieten-dynamic-tables\/"},"author":{"name":"Tobias Hoffmann","@id":"https:\/\/www.inovex.de\/de\/#\/schema\/person\/93608d81688ba211c131a709fb43c5a2"},"headline":"Datenverarbeitung mit Snowflake \u2013 Was bieten Dynamic Tables?","datePublished":"2023-10-30T13:08:53+00:00","mainEntityOfPage":{"@id":"https:\/\/www.inovex.de\/de\/blog\/datenverarbeitung-mit-snowflake-was-bieten-dynamic-tables\/"},"wordCount":1268,"commentCount":0,"publisher":{"@id":"https:\/\/www.inovex.de\/de\/#organization"},"image":{"@id":"https:\/\/www.inovex.de\/de\/blog\/datenverarbeitung-mit-snowflake-was-bieten-dynamic-tables\/#primaryimage"},"thumbnailUrl":"https:\/\/www.inovex.de\/wp-content\/uploads\/Kontinuierliche-Datenpipeline-in-Snowflake-2.png","keywords":["Business Intelligence","Data Engineering","Snowflake"],"articleSection":["Analytics"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.inovex.de\/de\/blog\/datenverarbeitung-mit-snowflake-was-bieten-dynamic-tables\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.inovex.de\/de\/blog\/datenverarbeitung-mit-snowflake-was-bieten-dynamic-tables\/","url":"https:\/\/www.inovex.de\/de\/blog\/datenverarbeitung-mit-snowflake-was-bieten-dynamic-tables\/","name":"Datenverarbeitung mit Snowflake \u2013 Was bieten Dynamic Tables? - inovex GmbH","isPartOf":{"@id":"https:\/\/www.inovex.de\/de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.inovex.de\/de\/blog\/datenverarbeitung-mit-snowflake-was-bieten-dynamic-tables\/#primaryimage"},"image":{"@id":"https:\/\/www.inovex.de\/de\/blog\/datenverarbeitung-mit-snowflake-was-bieten-dynamic-tables\/#primaryimage"},"thumbnailUrl":"https:\/\/www.inovex.de\/wp-content\/uploads\/Kontinuierliche-Datenpipeline-in-Snowflake-2.png","datePublished":"2023-10-30T13:08:53+00:00","description":"Mit Dynamic Tables bietet Snowflake eine einfache und flexible M\u00f6glichkeit, komplexe SQL-basierte Transformationen zu erstellen.","breadcrumb":{"@id":"https:\/\/www.inovex.de\/de\/blog\/datenverarbeitung-mit-snowflake-was-bieten-dynamic-tables\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.inovex.de\/de\/blog\/datenverarbeitung-mit-snowflake-was-bieten-dynamic-tables\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/www.inovex.de\/de\/blog\/datenverarbeitung-mit-snowflake-was-bieten-dynamic-tables\/#primaryimage","url":"https:\/\/www.inovex.de\/wp-content\/uploads\/Kontinuierliche-Datenpipeline-in-Snowflake-2.png","contentUrl":"https:\/\/www.inovex.de\/wp-content\/uploads\/Kontinuierliche-Datenpipeline-in-Snowflake-2.png","width":1500,"height":880,"caption":"Kontinuierliche Datenpipeline in Snowflake"},{"@type":"BreadcrumbList","@id":"https:\/\/www.inovex.de\/de\/blog\/datenverarbeitung-mit-snowflake-was-bieten-dynamic-tables\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.inovex.de\/de\/"},{"@type":"ListItem","position":2,"name":"Datenverarbeitung mit Snowflake \u2013 Was bieten Dynamic Tables?"}]},{"@type":"WebSite","@id":"https:\/\/www.inovex.de\/de\/#website","url":"https:\/\/www.inovex.de\/de\/","name":"inovex GmbH","description":"","publisher":{"@id":"https:\/\/www.inovex.de\/de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.inovex.de\/de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/www.inovex.de\/de\/#organization","name":"inovex GmbH","url":"https:\/\/www.inovex.de\/de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/www.inovex.de\/de\/#\/schema\/logo\/image\/","url":"https:\/\/www.inovex.de\/wp-content\/uploads\/2021\/03\/inovex-logo-16-9-1.png","contentUrl":"https:\/\/www.inovex.de\/wp-content\/uploads\/2021\/03\/inovex-logo-16-9-1.png","width":1921,"height":1081,"caption":"inovex GmbH"},"image":{"@id":"https:\/\/www.inovex.de\/de\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/inovexde","https:\/\/x.com\/inovexgmbh","https:\/\/www.instagram.com\/inovexlife\/","https:\/\/www.linkedin.com\/company\/inovex","https:\/\/www.youtube.com\/channel\/UC7r66GT14hROB_RQsQBAQUQ"]},{"@type":"Person","@id":"https:\/\/www.inovex.de\/de\/#\/schema\/person\/93608d81688ba211c131a709fb43c5a2","name":"Tobias Hoffmann","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/secure.gravatar.com\/avatar\/2255108172951bd335d0bc3d61cf3f88ac581e031dab8c4e1dd201b7651bb20f?s=96&d=retro&r=gcaab24a3323d29e79ed626f5449d1851","url":"https:\/\/secure.gravatar.com\/avatar\/2255108172951bd335d0bc3d61cf3f88ac581e031dab8c4e1dd201b7651bb20f?s=96&d=retro&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/2255108172951bd335d0bc3d61cf3f88ac581e031dab8c4e1dd201b7651bb20f?s=96&d=retro&r=g","caption":"Tobias Hoffmann"},"url":"https:\/\/www.inovex.de\/de\/blog\/author\/thoffmann\/"}]}},"_links":{"self":[{"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/posts\/48863","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/users\/395"}],"replies":[{"embeddable":true,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/comments?post=48863"}],"version-history":[{"count":4,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/posts\/48863\/revisions"}],"predecessor-version":[{"id":49530,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/posts\/48863\/revisions\/49530"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/media\/49235"}],"wp:attachment":[{"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/media?parent=48863"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/tags?post=48863"},{"taxonomy":"service","embeddable":true,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/service?post=48863"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/coauthors?post=48863"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}