{"id":1560,"date":"2024-11-25T22:09:34","date_gmt":"2024-11-25T22:09:34","guid":{"rendered":"https:\/\/craftcookcode.com\/?p=1560"},"modified":"2024-11-25T22:09:35","modified_gmt":"2024-11-25T22:09:35","slug":"qlik-replicate-oh-oracle-youre-a-fussy-beast","status":"publish","type":"post","link":"https:\/\/craftcookcode.com\/?p=1560","title":{"rendered":"Qlik Replicate: Oh Oracle &#8211; you&#8217;re a fussy beast"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">It&#8217;s all fun and games &#8211; until Qlik Replicate must copy 6 billion rows from a very wide Oracle table to GCS\u2026<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u2026in a small time window<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u2026with the project not wanting to perform Stress and Volume testing<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Oh boy.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Our Dev environment had 108 milling rows to play with, which ran \u201cquick\u201d in relationship the amount of data it had to copy.&nbsp; But being 33 times smaller; even if it takes an hour in Dev \u2013 extrapolating the time out will relate to over 30 hours of run time.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The project forged ahead in the implementation and QR only processed 2% of the changes before we ran out of the time window.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;The QR servers didn\u2019t seem stressed performance wise; had plenty of CPU and RAM.&nbsp; I suspect the bottle neck was in the bandwidth going out to GCS; but there was no way to monitor how much of the connection has been used.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">When in doubt &#8211; change the file type<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">After the failed implementation, we tried to work out how we can improve the throughput to GCS in our dev environment.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I thought changing the destination\u2019s file type might be a way.\u00a0 JSON is a chunky file format, and my hypothesis was if the JSON was compressed it would transfer to GCS quicker.\u00a0 We tested out a NULL connector, raw JSON, GZIP JSON and Parquet.\u00a0 As a test using Dev \u2013 we let a test task run for 20min to see how much data is copied across.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Full Load Tuning:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Transaction consistency timeout (seconds): 600<\/li>\n\n\n\n<li>Commit rate during full load: 100000<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Endpoint settings:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Maximum file size(KB): 1000000 KB (1GB)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Results<\/h3>\n\n\n\n<figure class=\"wp-block-image size-large\"><img fetchpriority=\"high\" decoding=\"async\" width=\"1024\" height=\"622\" src=\"http:\/\/craftcookcode.com\/wp-content\/uploads\/2024\/11\/code_qr_vs_oracle_2-1024x622.png\" alt=\"\" class=\"wp-image-1564\" srcset=\"https:\/\/craftcookcode.com\/wp-content\/uploads\/2024\/11\/code_qr_vs_oracle_2-1024x622.png 1024w, https:\/\/craftcookcode.com\/wp-content\/uploads\/2024\/11\/code_qr_vs_oracle_2-300x182.png 300w, https:\/\/craftcookcode.com\/wp-content\/uploads\/2024\/11\/code_qr_vs_oracle_2-768x466.png 768w, https:\/\/craftcookcode.com\/wp-content\/uploads\/2024\/11\/code_qr_vs_oracle_2-1536x932.png 1536w, https:\/\/craftcookcode.com\/wp-content\/uploads\/2024\/11\/code_qr_vs_oracle_2.png 1939w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Unfortunately, my hypothesis on compressed JSON was incorrect.\u00a0 We speculated that compressing the JSON might have been taking up as much time as transferring it.\u00a0 I would have like to test this theory on a quieter QR server, but time is of the essence.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Parquet seemed to be the winner with the limited testing offering a nice little throughput boost over the JSON formats.\u00a0 But it wasn\u2019t the silver bullet to our throughput problems.  Added onto this; the downstream users would need to spend time modifying their ingestion pipelines.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Divide and conquer \u2013 until Oracle says no.<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The next stage was to look if we could divide the table up into batches and transfer across section at a time.&nbsp; Looking at the primary key; it was an identity column that had little meaningful relation to easily divide up into batches.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">There was another indexed column called RUN_DATE; which is a date relation to when the record was entered.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">OK \u2013 let\u2019s turn on <a href=\"https:\/\/community.qlik.com\/t5\/Official-Support-Articles\/Filter-for-last-90-days-of-data-in-Qlik-Replicate\/ta-p\/1880761\" target=\"_blank\" rel=\"noopener\" title=\"\">Passthrough filtering<\/a> and test it out.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">First of all to test the syntax out in <a href=\"https:\/\/www.oracle.com\/au\/database\/sqldeveloper\/\" target=\"_blank\" rel=\"noopener\" title=\"\">SQL Developer<\/a><\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; title: ; notranslate\" title=\"\">\nSELECT COUNT(*)\nFROM xxxxx.TRANSACTIONS\nWHERE\n    RUN_DATE &gt;= &#039;01\/Jan\/2023&#039; AND\n    RUN_DATE &lt; &#039;01\/Jan\/2024&#039;;\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">The query ran fine meaning that the date syntax was right.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Looking good &#8211; let&#8217;s add the filter to the <em>Full Load Passthru Filter<\/em><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1024\" height=\"563\" src=\"https:\/\/craftcookcode.com\/wp-content\/uploads\/2024\/11\/code_qr_vs_oracle_3-1024x563.png\" alt=\"\" class=\"wp-image-1567\" srcset=\"https:\/\/craftcookcode.com\/wp-content\/uploads\/2024\/11\/code_qr_vs_oracle_3-1024x563.png 1024w, https:\/\/craftcookcode.com\/wp-content\/uploads\/2024\/11\/code_qr_vs_oracle_3-300x165.png 300w, https:\/\/craftcookcode.com\/wp-content\/uploads\/2024\/11\/code_qr_vs_oracle_3-768x422.png 768w, https:\/\/craftcookcode.com\/wp-content\/uploads\/2024\/11\/code_qr_vs_oracle_3-1536x845.png 1536w, https:\/\/craftcookcode.com\/wp-content\/uploads\/2024\/11\/code_qr_vs_oracle_3.png 1626w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">But when running the task; it goes into &#8220;recoverable error&#8221; mode.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Looking into the logs:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n00014204: 2024-11-26T08:38:26:184700 &#x5B;SOURCE_UNLOAD   ]T:  Select statement for UNLOAD is &#039;SELECT &quot;PK_ID&quot;,&quot;RUN_DATE&quot;, &quot;LOTS&quot;, &quot;OF&quot;, &quot;OTHER, &quot;COLUMNS&quot;  FROM &quot;xxxxx&quot;.&quot;TRANSACTIONS&quot; WHERE (RUN_DATE &gt;= &#039;01\/Jan\/2023&#039; AND RUN_DATE &amp;lt; &#039;01\/Jan\/2024&#039;)&#039;  (oracle_endpoint_utils.c:1941)\n00014204: 2024-11-26T08:38:26:215961 &#x5B;SOURCE_UNLOAD   ]T:  ORA-01858: a non-numeric character was found where a numeric was expected  &#x5B;1020417]  (oracle_endpoint_unload.c:175)\n00014204: 2024-11-26T08:38:26:215961 &#x5B;SOURCE_UNLOAD   ]T:  Failed to init unloading table &#039;xxxxx&#039;.&#039;TRANSACTIONS&#039; &#x5B;1020417]  (oracle_endpoint_unload.c:385)\n00014204: 2024-11-26T08:38:26:215961 &#x5B;SOURCE_UNLOAD   ]E:  ORA-01858: a non-numeric character was found where a numeric was expected  &#x5B;1020417]  (oracle_endpoint_unload.c:175)\n00014204: 2024-11-26T08:38:26:215961 &#x5B;SOURCE_UNLOAD   ]E:  Failed to init unloading table &#039;xxxxx&#039;.&#039;TRANSACTIONS&#039; &#x5B;1020417]  (oracle_endpoint_unload.c:385)\n00014204: 2024-11-26T08:38:26:215961 &#x5B;SOURCE_UNLOAD   ]T:  Error executing source loop &#x5B;1020417]  (streamcomponent.c:1942)\n00014204: 2024-11-26T08:38:26:215961 &#x5B;SOURCE_UNLOAD   ]T:  Stream component &#039;st_1_SRC_DEV_B1_xxxxx&#039; terminated &#x5B;1020417]  (subtask.c:1643)\n00014204: 2024-11-26T08:38:26:215961 &#x5B;SOURCE_UNLOAD   ]T:  Free component st_1_SRC_DEV_B1_xxxxx  (oracle_endpoint.c:51)\n00011868: 2024-11-26T08:38:26:215961 &#x5B;TASK_MANAGER    ]I:  Task error notification received from subtask 1, thread 0, status 1020417  (replicationtask.c:3603)\n00014204: 2024-11-26T08:38:26:215961 &#x5B;SOURCE_UNLOAD   ]E:  Error executing source loop &#x5B;1020417]  (streamcomponent.c:1942)\n00014204: 2024-11-26T08:38:26:215961 &#x5B;TASK_MANAGER    ]E:  Stream component failed at subtask 1, component st_1_SRC_DEV_B1_xxxxx  &#x5B;1020417]  (subtask.c:1474)\n00014204: 2024-11-26T08:38:26:215961 &#x5B;SOURCE_UNLOAD   ]E:  Stream component &#039;st_1_SRC_DEV_B1_xxxxx&#039; terminated &#x5B;1020417]  (subtask.c:1643)\n00011868: 2024-11-26T08:38:26:231570 &#x5B;TASK_MANAGER    ]W:  Task &#039;TEST_xxxxx&#039; encountered a recoverable error  (repository.c:6200)\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Error code <strong>ORA-01858<\/strong> seems to be the key to the problem.  As an experiment I copied out the select code and ran it into SQL Developer.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Works fine \ud83d\ude41<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">OK &#8211; maybe it is a quirk of SQL Developer?  <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Using sqlplus I ran the same code from the command line.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Again works fine \ud83d\ude41<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Resorting to good old Google &#8211; I searched ORA-01858.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The top hit was this article from <a href=\"https:\/\/stackoverflow.com\/questions\/29852389\/getting-error-ora-01858-a-non-numeric-character-was-found-where-a-numeric-was\" target=\"_blank\" rel=\"noopener\" title=\"\">Stack Overflow<\/a> that recommended confirming the format of the date with the TO_DATE function.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">OK Oracle; if you want to be fussy with your dates &#8211; let&#8217;s explicitly define the date format with TO_DATE in the <em>Full Load Passthru Filter<\/em>.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; title: ; notranslate\" title=\"\">\nRUN_DATE &gt;= TO_DATE(&#039;01\/Jan\/2023&#039;,&#039;DD\/Mon\/YYYY&#039;) AND RUN_DATE &lt; TO_DATE(&#039;01\/Jan\/2024&#039;,&#039;DD\/Mon\/YYYY&#039;)\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Ahhhh &#8211; that works better and Qlik Replicate now runs successfully with the passthrough filter.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">I tried a different set of date formats; including an ISO date format and Oracle spat them all out.  So using TO_DATE is the simplest way to avoid the <strong>ORA-01858<\/strong> error.  I can understand Oracle refusing to run on a date like 03\/02\/2024; I mean is it the 3rd of Feb 2024; or for Americans the 2nd of Mar 2024? But surprised something very clear like an ISO date format; or 03\/Feb\/2024 did not work.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Maybe how SQL Developer and SQLplus interacts with the database is different than QR that leads to the different in behaviour of how filters on dates work.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>It&#8217;s all fun and games &#8211; until Qlik Replicate must copy 6 billion rows from a very wide Oracle table to GCS\u2026 \u2026in a small time&#46;&#46;&#46;<\/p>\n","protected":false},"author":1,"featured_media":1561,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[73,16],"tags":[74,27,36],"class_list":["post-1560","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-oracle","category-qlik-replicate","tag-ora-01858","tag-oracle","tag-qlikreplicate"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.8 - aioseo.com -->\n\t<meta name=\"description\" content=\"It&#039;s all fun and games - until Qlik Replicate must copy 6 billion rows from a very wide Oracle table to GCS\u2026 \u2026in a small time window \u2026with the project not wanting to perform Stress and Volume testing Oh boy. Our Dev environment had 108 milling rows to play with, which ran \u201cquick\u201d in relationship\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"jonny.donker@gmail.com\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/craftcookcode.com\/?p=1560\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.8\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"Craft Cook Code - c^3?\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"Qlik Replicate: Oh Oracle \u2013 you\u2019re a fussy beast - Craft Cook Code\" \/>\n\t\t<meta property=\"og:description\" content=\"It&#039;s all fun and games - until Qlik Replicate must copy 6 billion rows from a very wide Oracle table to GCS\u2026 \u2026in a small time window \u2026with the project not wanting to perform Stress and Volume testing Oh boy. Our Dev environment had 108 milling rows to play with, which ran \u201cquick\u201d in relationship\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/craftcookcode.com\/?p=1560\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2024-11-25T22:09:34+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2024-11-25T22:09:35+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n\t\t<meta name=\"twitter:title\" content=\"Qlik Replicate: Oh Oracle \u2013 you\u2019re a fussy beast - Craft Cook Code\" \/>\n\t\t<meta name=\"twitter:description\" content=\"It&#039;s all fun and games - until Qlik Replicate must copy 6 billion rows from a very wide Oracle table to GCS\u2026 \u2026in a small time window \u2026with the project not wanting to perform Stress and Volume testing Oh boy. Our Dev environment had 108 milling rows to play with, which ran \u201cquick\u201d in relationship\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"BlogPosting\",\"@id\":\"https:\\\/\\\/craftcookcode.com\\\/?p=1560#blogposting\",\"name\":\"Qlik Replicate: Oh Oracle \\u2013 you\\u2019re a fussy beast - Craft Cook Code\",\"headline\":\"Qlik Replicate: Oh Oracle &#8211; you&#8217;re a fussy beast\",\"author\":{\"@id\":\"https:\\\/\\\/craftcookcode.com\\\/?author=1#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/craftcookcode.com\\\/#person\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/craftcookcode.com\\\/wp-content\\\/uploads\\\/2024\\\/11\\\/code_qr_vs_oracle_1.jpg\",\"width\":680,\"height\":383},\"datePublished\":\"2024-11-25T22:09:34+00:00\",\"dateModified\":\"2024-11-25T22:09:35+00:00\",\"inLanguage\":\"en-US\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/craftcookcode.com\\\/?p=1560#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/craftcookcode.com\\\/?p=1560#webpage\"},\"articleSection\":\"Oracle, Qlik Replicate, ORA-01858, oracle, qlikreplicate\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/craftcookcode.com\\\/?p=1560#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/craftcookcode.com#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/craftcookcode.com\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/craftcookcode.com\\\/?cat=13#listItem\",\"name\":\"Code\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/craftcookcode.com\\\/?cat=13#listItem\",\"position\":2,\"name\":\"Code\",\"item\":\"https:\\\/\\\/craftcookcode.com\\\/?cat=13\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/craftcookcode.com\\\/?cat=16#listItem\",\"name\":\"Qlik Replicate\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/craftcookcode.com#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/craftcookcode.com\\\/?cat=16#listItem\",\"position\":3,\"name\":\"Qlik Replicate\",\"item\":\"https:\\\/\\\/craftcookcode.com\\\/?cat=16\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/craftcookcode.com\\\/?p=1560#listItem\",\"name\":\"Qlik Replicate: Oh Oracle &#8211; you&#8217;re a fussy beast\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/craftcookcode.com\\\/?cat=13#listItem\",\"name\":\"Code\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/craftcookcode.com\\\/?p=1560#listItem\",\"position\":4,\"name\":\"Qlik Replicate: Oh Oracle &#8211; you&#8217;re a fussy beast\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/craftcookcode.com\\\/?cat=16#listItem\",\"name\":\"Qlik Replicate\"}}]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/craftcookcode.com\\\/#person\",\"name\":\"jonny.donker@gmail.com\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/craftcookcode.com\\\/?p=1560#personImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/12ea7810156e378894993fa29611c905482263dd05898a50ae5ece294bb6aff0?s=96&d=mm&r=g\",\"width\":96,\"height\":96,\"caption\":\"jonny.donker@gmail.com\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/craftcookcode.com\\\/?author=1#author\",\"url\":\"https:\\\/\\\/craftcookcode.com\\\/?author=1\",\"name\":\"jonny.donker@gmail.com\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/craftcookcode.com\\\/?p=1560#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/12ea7810156e378894993fa29611c905482263dd05898a50ae5ece294bb6aff0?s=96&d=mm&r=g\",\"width\":96,\"height\":96,\"caption\":\"jonny.donker@gmail.com\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/craftcookcode.com\\\/?p=1560#webpage\",\"url\":\"https:\\\/\\\/craftcookcode.com\\\/?p=1560\",\"name\":\"Qlik Replicate: Oh Oracle \\u2013 you\\u2019re a fussy beast - Craft Cook Code\",\"description\":\"It's all fun and games - until Qlik Replicate must copy 6 billion rows from a very wide Oracle table to GCS\\u2026 \\u2026in a small time window \\u2026with the project not wanting to perform Stress and Volume testing Oh boy. Our Dev environment had 108 milling rows to play with, which ran \\u201cquick\\u201d in relationship\",\"inLanguage\":\"en-US\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/craftcookcode.com\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/craftcookcode.com\\\/?p=1560#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/craftcookcode.com\\\/?author=1#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/craftcookcode.com\\\/?author=1#author\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/craftcookcode.com\\\/wp-content\\\/uploads\\\/2024\\\/11\\\/code_qr_vs_oracle_1.jpg\",\"@id\":\"https:\\\/\\\/craftcookcode.com\\\/?p=1560\\\/#mainImage\",\"width\":680,\"height\":383},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/craftcookcode.com\\\/?p=1560#mainImage\"},\"datePublished\":\"2024-11-25T22:09:34+00:00\",\"dateModified\":\"2024-11-25T22:09:35+00:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/craftcookcode.com\\\/#website\",\"url\":\"https:\\\/\\\/craftcookcode.com\\\/\",\"name\":\"Craft Cook Code\",\"description\":\"c^3?\",\"inLanguage\":\"en-US\",\"publisher\":{\"@id\":\"https:\\\/\\\/craftcookcode.com\\\/#person\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"Qlik Replicate: Oh Oracle \u2013 you\u2019re a fussy beast - Craft Cook Code","description":"It's all fun and games - until Qlik Replicate must copy 6 billion rows from a very wide Oracle table to GCS\u2026 \u2026in a small time window \u2026with the project not wanting to perform Stress and Volume testing Oh boy. Our Dev environment had 108 milling rows to play with, which ran \u201cquick\u201d in relationship","canonical_url":"https:\/\/craftcookcode.com\/?p=1560","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"BlogPosting","@id":"https:\/\/craftcookcode.com\/?p=1560#blogposting","name":"Qlik Replicate: Oh Oracle \u2013 you\u2019re a fussy beast - Craft Cook Code","headline":"Qlik Replicate: Oh Oracle &#8211; you&#8217;re a fussy beast","author":{"@id":"https:\/\/craftcookcode.com\/?author=1#author"},"publisher":{"@id":"https:\/\/craftcookcode.com\/#person"},"image":{"@type":"ImageObject","url":"https:\/\/craftcookcode.com\/wp-content\/uploads\/2024\/11\/code_qr_vs_oracle_1.jpg","width":680,"height":383},"datePublished":"2024-11-25T22:09:34+00:00","dateModified":"2024-11-25T22:09:35+00:00","inLanguage":"en-US","mainEntityOfPage":{"@id":"https:\/\/craftcookcode.com\/?p=1560#webpage"},"isPartOf":{"@id":"https:\/\/craftcookcode.com\/?p=1560#webpage"},"articleSection":"Oracle, Qlik Replicate, ORA-01858, oracle, qlikreplicate"},{"@type":"BreadcrumbList","@id":"https:\/\/craftcookcode.com\/?p=1560#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/craftcookcode.com#listItem","position":1,"name":"Home","item":"https:\/\/craftcookcode.com","nextItem":{"@type":"ListItem","@id":"https:\/\/craftcookcode.com\/?cat=13#listItem","name":"Code"}},{"@type":"ListItem","@id":"https:\/\/craftcookcode.com\/?cat=13#listItem","position":2,"name":"Code","item":"https:\/\/craftcookcode.com\/?cat=13","nextItem":{"@type":"ListItem","@id":"https:\/\/craftcookcode.com\/?cat=16#listItem","name":"Qlik Replicate"},"previousItem":{"@type":"ListItem","@id":"https:\/\/craftcookcode.com#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/craftcookcode.com\/?cat=16#listItem","position":3,"name":"Qlik Replicate","item":"https:\/\/craftcookcode.com\/?cat=16","nextItem":{"@type":"ListItem","@id":"https:\/\/craftcookcode.com\/?p=1560#listItem","name":"Qlik Replicate: Oh Oracle &#8211; you&#8217;re a fussy beast"},"previousItem":{"@type":"ListItem","@id":"https:\/\/craftcookcode.com\/?cat=13#listItem","name":"Code"}},{"@type":"ListItem","@id":"https:\/\/craftcookcode.com\/?p=1560#listItem","position":4,"name":"Qlik Replicate: Oh Oracle &#8211; you&#8217;re a fussy beast","previousItem":{"@type":"ListItem","@id":"https:\/\/craftcookcode.com\/?cat=16#listItem","name":"Qlik Replicate"}}]},{"@type":"Person","@id":"https:\/\/craftcookcode.com\/#person","name":"jonny.donker@gmail.com","image":{"@type":"ImageObject","@id":"https:\/\/craftcookcode.com\/?p=1560#personImage","url":"https:\/\/secure.gravatar.com\/avatar\/12ea7810156e378894993fa29611c905482263dd05898a50ae5ece294bb6aff0?s=96&d=mm&r=g","width":96,"height":96,"caption":"jonny.donker@gmail.com"}},{"@type":"Person","@id":"https:\/\/craftcookcode.com\/?author=1#author","url":"https:\/\/craftcookcode.com\/?author=1","name":"jonny.donker@gmail.com","image":{"@type":"ImageObject","@id":"https:\/\/craftcookcode.com\/?p=1560#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/12ea7810156e378894993fa29611c905482263dd05898a50ae5ece294bb6aff0?s=96&d=mm&r=g","width":96,"height":96,"caption":"jonny.donker@gmail.com"}},{"@type":"WebPage","@id":"https:\/\/craftcookcode.com\/?p=1560#webpage","url":"https:\/\/craftcookcode.com\/?p=1560","name":"Qlik Replicate: Oh Oracle \u2013 you\u2019re a fussy beast - Craft Cook Code","description":"It's all fun and games - until Qlik Replicate must copy 6 billion rows from a very wide Oracle table to GCS\u2026 \u2026in a small time window \u2026with the project not wanting to perform Stress and Volume testing Oh boy. Our Dev environment had 108 milling rows to play with, which ran \u201cquick\u201d in relationship","inLanguage":"en-US","isPartOf":{"@id":"https:\/\/craftcookcode.com\/#website"},"breadcrumb":{"@id":"https:\/\/craftcookcode.com\/?p=1560#breadcrumblist"},"author":{"@id":"https:\/\/craftcookcode.com\/?author=1#author"},"creator":{"@id":"https:\/\/craftcookcode.com\/?author=1#author"},"image":{"@type":"ImageObject","url":"https:\/\/craftcookcode.com\/wp-content\/uploads\/2024\/11\/code_qr_vs_oracle_1.jpg","@id":"https:\/\/craftcookcode.com\/?p=1560\/#mainImage","width":680,"height":383},"primaryImageOfPage":{"@id":"https:\/\/craftcookcode.com\/?p=1560#mainImage"},"datePublished":"2024-11-25T22:09:34+00:00","dateModified":"2024-11-25T22:09:35+00:00"},{"@type":"WebSite","@id":"https:\/\/craftcookcode.com\/#website","url":"https:\/\/craftcookcode.com\/","name":"Craft Cook Code","description":"c^3?","inLanguage":"en-US","publisher":{"@id":"https:\/\/craftcookcode.com\/#person"}}]},"og:locale":"en_US","og:site_name":"Craft Cook Code - c^3?","og:type":"article","og:title":"Qlik Replicate: Oh Oracle \u2013 you\u2019re a fussy beast - Craft Cook Code","og:description":"It's all fun and games - until Qlik Replicate must copy 6 billion rows from a very wide Oracle table to GCS\u2026 \u2026in a small time window \u2026with the project not wanting to perform Stress and Volume testing Oh boy. Our Dev environment had 108 milling rows to play with, which ran \u201cquick\u201d in relationship","og:url":"https:\/\/craftcookcode.com\/?p=1560","article:published_time":"2024-11-25T22:09:34+00:00","article:modified_time":"2024-11-25T22:09:35+00:00","twitter:card":"summary_large_image","twitter:title":"Qlik Replicate: Oh Oracle \u2013 you\u2019re a fussy beast - Craft Cook Code","twitter:description":"It's all fun and games - until Qlik Replicate must copy 6 billion rows from a very wide Oracle table to GCS\u2026 \u2026in a small time window \u2026with the project not wanting to perform Stress and Volume testing Oh boy. Our Dev environment had 108 milling rows to play with, which ran \u201cquick\u201d in relationship"},"aioseo_meta_data":{"post_id":"1560","title":null,"description":null,"keywords":null,"keyphrases":{"focus":{"keyphrase":"","score":0,"analysis":{"keyphraseInTitle":{"score":0,"maxScore":9,"error":1}}},"additional":[]},"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":"","og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"BlogPosting","isEnabled":true},"graphs":[]},"schema_type":"default","schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":"-1","robots_max_videopreview":"-1","robots_max_imagepreview":"large","priority":null,"frequency":"default","local_seo":null,"breadcrumb_settings":null,"limit_modified_date":false,"ai":null,"created":"2024-11-25 04:37:39","updated":"2025-06-04 13:28:32","seo_analyzer_scan_date":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/craftcookcode.com\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/craftcookcode.com\/?cat=13\" title=\"Code\">Code<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/craftcookcode.com\/?cat=16\" title=\"Qlik Replicate\">Qlik Replicate<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tQlik Replicate: Oh Oracle \u2013 you\u2019re a fussy beast\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/craftcookcode.com"},{"label":"Code","link":"https:\/\/craftcookcode.com\/?cat=13"},{"label":"Qlik Replicate","link":"https:\/\/craftcookcode.com\/?cat=16"},{"label":"Qlik Replicate: Oh Oracle &#8211; you&#8217;re a fussy beast","link":"https:\/\/craftcookcode.com\/?p=1560"}],"_links":{"self":[{"href":"https:\/\/craftcookcode.com\/index.php?rest_route=\/wp\/v2\/posts\/1560","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/craftcookcode.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/craftcookcode.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/craftcookcode.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/craftcookcode.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1560"}],"version-history":[{"count":5,"href":"https:\/\/craftcookcode.com\/index.php?rest_route=\/wp\/v2\/posts\/1560\/revisions"}],"predecessor-version":[{"id":1569,"href":"https:\/\/craftcookcode.com\/index.php?rest_route=\/wp\/v2\/posts\/1560\/revisions\/1569"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/craftcookcode.com\/index.php?rest_route=\/wp\/v2\/media\/1561"}],"wp:attachment":[{"href":"https:\/\/craftcookcode.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1560"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/craftcookcode.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1560"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/craftcookcode.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1560"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}