{"id":943,"date":"2017-01-17T00:22:47","date_gmt":"2017-01-17T00:22:47","guid":{"rendered":"http:\/\/zappysys.com\/blog\/?p=943"},"modified":"2025-03-18T13:43:15","modified_gmt":"2025-03-18T13:43:15","slug":"call-elasticsearch-api-using-ssis","status":"publish","type":"post","link":"https:\/\/zappysys.com\/blog\/call-elasticsearch-api-using-ssis\/","title":{"rendered":"How to call Elasticsearch API using SSIS"},"content":{"rendered":"<h2>Introduction<\/h2>\n<div class=\"su-note\"  style=\"border-color:#e5de9d;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;\"><div class=\"su-note-inner su-u-clearfix su-u-trim\" style=\"background-color:#FFF8B7;border-color:#ffffff;color:#333333;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;\"><strong>UPDATE:<\/strong>\u00a0ZappySys has released a brand new <a href=\"https:\/\/zappysys.com\/api\/integration-hub\/elasticsearch-connector\/\">API Connector for ElasticSearch<\/a> which makes it much simpler to\u00a0<strong>Read\/Write ElasticSearch Data in SSIS<\/strong> compared to the steps listed in this article. You can still use steps from this article but if you are new to API or want to avoid learning curve with API then use newer approach.<\/p>\n<p>Please visit <a href=\"https:\/\/zappysys.com\/api\/integration-hub\/\">this page to see all<\/a>\u00a0Pre-Configured ready to use API connectors which you can use in <a href=\"https:\/\/zappysys.com\/products\/ssis-powerpack\/ssis-api-source\/\">SSIS API Source<\/a> \/ <a href=\"https:\/\/zappysys.com\/products\/ssis-powerpack\/ssis-api-destination\/\">SSIS API Destination<\/a> OR\u00a0<a href=\"https:\/\/zappysys.com\/products\/odbc-powerpack\/odbc-api-driver\/\">API ODBC Driver<\/a> (for non-SSIS Apps such as Excel, Power BI, Informatica).<\/p>\n<\/div><\/div>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignleft wp-image-1406 size-full\" src=\"\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/06\/elasticsearch-logo-180x180.png\" alt=\"\" width=\"180\" height=\"180\" srcset=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/06\/elasticsearch-logo-180x180.png 180w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/06\/elasticsearch-logo-180x180-150x150.png 150w\" sizes=\"(max-width: 180px) 100vw, 180px\" \/><a href=\"https:\/\/www.elastic.co\/\" target=\"_blank\" rel=\"noopener\">Elasticsearch<\/a>\u00a0is a powerful engine that allows you to store, aggregate and, most importantly, search data in a very analytical way. In this tutorial, you will learn how to bulk load data from <em>SQL Server to Elasticsearch\u00a0<\/em>with\u00a0<a href=\"https:\/\/docs.microsoft.com\/en-us\/sql\/integration-services\/sql-server-integration-services\" target=\"_blank\" rel=\"noopener\"><acronym title=\"SQL Server Integration Services\">SSIS<\/acronym><\/a>\u00a0(part of SQL Server) and <a href=\"\/\/zappysys.com\/products\/ssis-powerpack\/\" target=\"_blank\" rel=\"noopener\">ZappySys PowerPack<\/a>.<\/p>\n<p>The scope of this article will be to show how to import records from SQL Server into Elasticsearch index as JSON documents using <a href=\"https:\/\/www.elastic.co\/guide\/en\/elasticsearch\/reference\/current\/docs-bulk.html\" target=\"_blank\" rel=\"noopener\">Elasticsearch Bulk API<\/a>. In a nutshell, we will retrieve IDs and names of the products from a SQL table, transform each row into a JSON and lastly, index each JSON in Elasticsearch under record&#8217;s corresponding ID. This tutorial is going to be your stepping stone to use\u00a0any\u00a0Elasticsearch API as a destination.<\/p>\n<p>We will be using these SSIS components of PowerPack to make things work:<\/p>\n<div class=\"su-table su-table-alternate\">\n<table width=\"276\">\n<tbody>\n<tr style=\"line-height: 0px\">\n<td width=\"50px\"><a href=\"\/\/zappysys.com\/products\/ssis-powerpack\/ssis-json-generator-transform\/\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-1382\" src=\"\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/06\/ssis-json-generator-transform.png\" alt=\"\" width=\"50\" height=\"50\" \/><\/a><\/td>\n<td style=\"vertical-align: middle\"><a href=\"\/\/zappysys.com\/products\/ssis-powerpack\/ssis-json-generator-transform\/\" target=\"_blank\" rel=\"noopener\">JSON Generator Transform<\/a><\/td>\n<\/tr>\n<tr style=\"line-height: 0px\">\n<td><a href=\"\/\/zappysys.com\/products\/ssis-powerpack\/ssis-web-api-destination-connector\/\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-1383\" src=\"\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/06\/ssis-web-api-destination.png\" alt=\"\" width=\"50\" height=\"50\" \/><\/a><\/td>\n<td style=\"vertical-align: middle\"><a href=\"\/\/zappysys.com\/products\/ssis-powerpack\/ssis-web-api-destination-connector\/\" target=\"_blank\" rel=\"noopener\">Web API Destination<\/a><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>Let&#8217;s begin?<\/p>\n<h2>Prerequisites<\/h2>\n<ol>\n<li>SSIS designer installed.\u00a0Sometimes it is referred as BIDS or SSDT (<a href=\"https:\/\/docs.microsoft.com\/en-us\/sql\/ssdt\/download-sql-server-data-tools-ssdt\" target=\"_blank\" rel=\"noopener\">download it from Microsoft site<\/a>).<\/li>\n<li>Basic knowledge of SSIS package\u00a0development using\u00a0<em>Microsoft SQL Server Integration Services<\/em>.<\/li>\n<li><em>Northwind<\/em> database deployed on your machine (we will use it to load data from; <a href=\"\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/06\/Northwind.zip\" target=\"_blank\" rel=\"noopener\">download it<\/a>).<\/li>\n<li><a href=\"https:\/\/www.elastic.co\/guide\/en\/elasticsearch\/reference\/current\/setup.html\" target=\"_blank\" rel=\"noopener\"><i>Elasticsearch\u00a0<\/i>instance up and running<\/a>.<\/li>\n<li><a href=\"\/\/zappysys.com\/products\/ssis-powerpack\/\" target=\"_blank\" rel=\"noopener\"><em>ZappySys SSIS PowerPack<\/em> installed<\/a>.<\/li>\n<\/ol>\n<div class=\"su-note\"  style=\"border-color:#e5de9d;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;\"><div class=\"su-note-inner su-u-clearfix su-u-trim\" style=\"background-color:#fff8b7;border-color:#ffffff;color:#333333;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;\"><strong>NOTE:<\/strong> If your ElasticSearch instance is hosted as <a href=\"https:\/\/aws.amazon.com\/elasticsearch-service\/\" target=\"_blank\" rel=\"noopener\">AWS Managed ElasticSearch Instance<\/a> then select\u00a0\u00a0<span class=\"lang:default highlight:0 decode:true crayon-inline\">&lt;New ZS-OAUTH Connection&gt;<\/span>. rather than ZS-HTTP (Explained later in this article). When OAuth UI launches select AWS v4 Provider. For more information on <a href=\"https:\/\/zappysys.com\/blog\/how-to-call-amazon-aws-api-using-ssis-ec2-lambda-api-gateway-sqs\/\" target=\"_blank\" rel=\"noopener\">calling REST API on AWS check this article<\/a>.\u00a0<\/div><\/div>\n<h2>Step-by-Step\u00a0\u2013 Bulk loading data from SQL Server\u00a0to Elasticsearch with SSIS<\/h2>\n<h3>Load data from SQL Server database first<\/h3>\n<p>In this section you will perform several basic steps to start the package:\u00a0load data from SQL Server and prepare it for further steps.<\/p>\n<ol>\n<li>Create a new SSIS package and drag a\u00a0<em>Data Flow Task<\/em>\u00a0into the <em>Control Flow<\/em>\u00a0from the SSIS Toolbox.\n<div id=\"attachment_8028\" style=\"width: 470px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-8028\" class=\"size-full wp-image-8028\" src=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2019\/02\/drag-and-drop-data-flow-task.png\" alt=\"\" width=\"460\" height=\"155\" srcset=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2019\/02\/drag-and-drop-data-flow-task.png 460w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2019\/02\/drag-and-drop-data-flow-task-300x101.png 300w\" sizes=\"(max-width: 460px) 100vw, 460px\" \/><p id=\"caption-attachment-8028\" class=\"wp-caption-text\">Dragging and dropping Data Flow Task into Control Flow<\/p><\/div><\/li>\n<li>Open <em>Data Flow Task<\/em> and then add <em>OLE DB Source.<\/em><\/li>\n<li>Configure OLE DB Source to take data from <em>Products <\/em>table<em>,\u00a0Northwind<\/em> database.<\/li>\n<li>Choose <em>ProductID<\/em> and <em>ProductName<\/em> as columns you will use.<\/li>\n<\/ol>\n<div id=\"attachment_2394\" style=\"width: 251px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/12\/ssis-post-data-to-elasticsearch-control-flow-3.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-2394\" class=\"wp-image-2394 size-full\" src=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/12\/ssis-post-data-to-elasticsearch-control-flow-3.png\" alt=\"Load data to Elasticsearch using SSIS and ZappySys Web API Destination component.\" width=\"241\" height=\"306\" srcset=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/12\/ssis-post-data-to-elasticsearch-control-flow-3.png 241w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/12\/ssis-post-data-to-elasticsearch-control-flow-3-236x300.png 236w\" sizes=\"(max-width: 241px) 100vw, 241px\" \/><\/a><p id=\"caption-attachment-2394\" class=\"wp-caption-text\">Load data to Elasticsearch using SSIS and ZappySys Web API Destination component.<\/p><\/div>\n<h3>Transform data into JSON documents<\/h3>\n<p>To add data into Elasticsearch firstly we need to prepare it with <em>JSON Generator Transform. <\/em>It will help us convert table rows into JSON documents.<\/p>\n<h4>JSON String to Create Index data for the Bulk API call<\/h4>\n<ol>\n<li>Close the window and then drag <em>Derived Column\u00a0<\/em>component from the SSIS Toolbox.<\/li>\n<li>Add two new columns and name them\u00a0<span class=\"lang:default decode:true crayon-inline\">RowHeader<\/span>\u00a0and\u00a0<span class=\"lang:default decode:true crayon-inline\">RowFooter<\/span>:\n<div id=\"attachment_2406\" style=\"width: 691px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/12\/ssis-sql-server-to-elasticsearch-derived-columns-2.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-2406\" class=\"wp-image-2406 size-full\" src=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/12\/ssis-sql-server-to-elasticsearch-derived-columns-2.png\" alt=\"Derived Column configuration to add prefix and header and footer to a JSON\" width=\"681\" height=\"443\" srcset=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/12\/ssis-sql-server-to-elasticsearch-derived-columns-2.png 681w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/12\/ssis-sql-server-to-elasticsearch-derived-columns-2-300x195.png 300w\" sizes=\"(max-width: 681px) 100vw, 681px\" \/><\/a><p id=\"caption-attachment-2406\" class=\"wp-caption-text\">Derived Column configuration to add prefix and header and footer to a JSON<\/p><\/div>\n<p>In the <em>Expression<\/em> column give them values:<\/p>\n<ul>\n<li><strong>RowHeader<\/strong>:\n<pre class=\"toolbar:2 wrap:true lang:default highlight:0 decode:true\">\"{ \\\"index\\\": { \\\"_index\\\": \\\"shop\\\", \\\"_type\\\": \\\"products\\\", \\\"_id\\\" : \\\"\" + (DT_WSTR,100)ProductID + \"\\\" } }\\n\"<\/pre>\n<\/li>\n<li><strong>RowFooter<\/strong>:\u00a0\u00a0<span class=\"lang:default highlight:0 decode:true crayon-inline \">&#8220;\\n&#8221;<\/span><\/li>\n<\/ul>\n<\/li>\n<li>Now drag <em>JSON Generator Transform<\/em> from the SSIS Toolbox and open it.<\/li>\n<li>Right mouse click on item <em>Mappings\u00a0<\/em>and select <span class=\"lang:default highlight:0 decode:true crayon-inline\">Add Element(s) (Below this node)<\/span>:\n<div id=\"attachment_1415\" style=\"width: 330px\" class=\"wp-caption alignnone\"><a href=\"\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/06\/ssis-post-data-to-elasticsearch-json-generator-transform-add-mapping.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-1415\" class=\"wp-image-1415 size-full\" src=\"\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/06\/ssis-post-data-to-elasticsearch-json-generator-transform-add-mapping.png\" alt=\"Convert SQL table rows into JSON using JSON Generator Transform\" width=\"320\" height=\"116\" srcset=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/06\/ssis-post-data-to-elasticsearch-json-generator-transform-add-mapping.png 320w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/06\/ssis-post-data-to-elasticsearch-json-generator-transform-add-mapping-300x109.png 300w\" sizes=\"(max-width: 320px) 100vw, 320px\" \/><\/a><p id=\"caption-attachment-1415\" class=\"wp-caption-text\">Convert SQL table rows into JSON using <em>JSON Generator Transform<\/em><\/p><\/div><\/li>\n<li>Once a dialog appears, select <span class=\"lang:default highlight:0 decode:true crayon-inline\">ProductName<\/span>\u00a0as <em>Source Column<\/em> and <span class=\"lang:default decode:true crayon-inline\">name<\/span>\u00a0as <em>Output Alias:<br \/>\n<\/em><\/p>\n<div id=\"attachment_1526\" style=\"width: 386px\" class=\"wp-caption alignnone\"><a href=\"\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/06\/ssis-post-data-to-elasticsearch-json-generator-transform-add-mapping-3.jpg\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-1526\" class=\"size-full wp-image-1526\" src=\"\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/06\/ssis-post-data-to-elasticsearch-json-generator-transform-add-mapping-3.jpg\" alt=\"Map table column to JSON property using JSON Generator Transform\" width=\"376\" height=\"438\" srcset=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/06\/ssis-post-data-to-elasticsearch-json-generator-transform-add-mapping-3.jpg 376w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/06\/ssis-post-data-to-elasticsearch-json-generator-transform-add-mapping-3-258x300.jpg 258w\" sizes=\"(max-width: 376px) 100vw, 376px\" \/><\/a><p id=\"caption-attachment-1526\" class=\"wp-caption-text\">Map table column to JSON property using <em>JSON Generator Transform<\/em><\/p><\/div><\/li>\n<li>You should get a similar view:\n<div id=\"attachment_2396\" style=\"width: 728px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/12\/ssis-sql-server-to-elasticsearch-convert-rows-into-json-using-json-generator-transform-2.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-2396\" class=\"wp-image-2396 size-full\" src=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/12\/ssis-sql-server-to-elasticsearch-convert-rows-into-json-using-json-generator-transform-2.png\" alt=\"JSON Generator Transform configuration to create JSON from a SQL table\" width=\"718\" height=\"320\" srcset=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/12\/ssis-sql-server-to-elasticsearch-convert-rows-into-json-using-json-generator-transform-2.png 718w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/12\/ssis-sql-server-to-elasticsearch-convert-rows-into-json-using-json-generator-transform-2-300x134.png 300w\" sizes=\"(max-width: 718px) 100vw, 718px\" \/><\/a><p id=\"caption-attachment-2396\" class=\"wp-caption-text\"><em>JSON Generator Transform<\/em> configuration to create JSON from a SQL table<\/p><\/div><\/li>\n<li>Then go to <em>Header \/ Footer<\/em> tab and:\n<ul>\n<li>Select <span class=\"lang:default highlight:0 decode:true crayon-inline\">Direct String<\/span>\u00a0option.<\/li>\n<li>Input <span class=\"lang:default highlight:0 decode:true crayon-inline\">&lt;%RowHeader%&gt;<\/span>\u00a0in <em>Header String<\/em> option.<\/li>\n<li>Input <span class=\"lang:default highlight:0 decode:true crayon-inline\">&lt;%RowFooter%&gt;<\/span>\u00a0in <em>Footer String<\/em> option.<\/li>\n<\/ul>\n<div id=\"attachment_2403\" style=\"width: 728px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/12\/ssis-sql-server-to-elasticsearch-convert-rows-into-json-using-json-generator-transform-3-1.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-2403\" class=\"wp-image-2403 size-full\" src=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/12\/ssis-sql-server-to-elasticsearch-convert-rows-into-json-using-json-generator-transform-3-1-e1513951668585.png\" alt=\"JSON Generator Transform configuration to convert rows into JSON suitable for Elasticsearch Bulk operation\" width=\"718\" height=\"400\" srcset=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/12\/ssis-sql-server-to-elasticsearch-convert-rows-into-json-using-json-generator-transform-3-1-e1513951668585.png 718w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/12\/ssis-sql-server-to-elasticsearch-convert-rows-into-json-using-json-generator-transform-3-1-e1513951668585-300x167.png 300w\" sizes=\"(max-width: 718px) 100vw, 718px\" \/><\/a><p id=\"caption-attachment-2403\" class=\"wp-caption-text\"><em>JSON Generator Transform<\/em> configuration to convert rows into JSON suitable for Elasticsearch Bulk operation<\/p><\/div><\/li>\n<li>Close the window.<\/li>\n<\/ol>\n<h4>JSON String to Update Index data for the Bulk API call<\/h4>\n<p>From the above section &#8220;<strong>JSON String to Create Index data for the Bulk API call&#8221;\u00a0<\/strong>follows all the steps From <strong>Step-1 to Step-8.<\/strong><\/p>\n<p>Just for (2nd step)\u00a0<strong>Step-2<\/strong> use below expression for\u00a0\u00a0<span class=\"lang:default decode:true crayon-inline\">RowHeader<\/span>\u00a0and\u00a0<span class=\"lang:default decode:true crayon-inline\">RowFooter<\/span><br \/>\n<a href=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/12\/ssis-sql-server-to-elasticsearch-derived-columns-2.png\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-2406 size-full\" src=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/12\/ssis-sql-server-to-elasticsearch-derived-columns-2.png\" alt=\"Derived Column configuration to add prefix and header and footer to a JSON\" width=\"681\" height=\"443\" srcset=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/12\/ssis-sql-server-to-elasticsearch-derived-columns-2.png 681w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/12\/ssis-sql-server-to-elasticsearch-derived-columns-2-300x195.png 300w\" sizes=\"(max-width: 681px) 100vw, 681px\" \/><\/a><\/p>\n<p>Derived Column configuration to add prefix and header and footer to a JSONIn the <em>Expression<\/em> column give them values:<\/p>\n<ul>\n<li><strong>RowHeader<\/strong>:\n<pre class=\"toolbar:2 wrap:true lang:default highlight:0 decode:true\">\"{ \\\"update\\\": { \\\"_index\\\": \\\"shop\\\", \\\"_id\\\" : \\\"\" + (DT_WSTR,100)ProductID + \"\\\" } }\\n{ \\\"doc\\\" : \"<\/pre>\n<\/li>\n<li><strong>RowFooter<\/strong>:\u00a0\u00a0<span class=\"lang:default highlight:0 decode:true crayon-inline\">&#8220;}\\n&#8221;<\/span><\/li>\n<\/ul>\n<div class=\"su-note\"  style=\"border-color:#e5dd9d;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;\"><div class=\"su-note-inner su-u-clearfix su-u-trim\" style=\"background-color:#fff7b7;border-color:#ffffff;color:#333333;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;\"><strong>NOTE<\/strong>: To learn how to make more complicated transforms visit these links:<\/p>\n<ul>\n<li><a href=\"https:\/\/zappysys.com\/products\/ssis-powerpack\/ssis-json-generator-transform\/\" target=\"_blank\" rel=\"noopener\">https:\/\/zappysys.com\/products\/ssis-powerpack\/ssis-json-generator-transform\/<\/a> (check the video)<\/li>\n<li><a href=\"https:\/\/zappysys.com\/blog\/tag\/ssis-json-generator-transform\/\" target=\"_blank\" rel=\"noopener\">https:\/\/zappysys.com\/blog\/tag\/ssis-json-generator-transform\/<\/a><\/li>\n<\/ul>\n<\/div><\/div>\n<h4>JSON String to Delete Index data for the Bulk API call<\/h4>\n<p>From the above section &#8220;<strong>JSON String to Create Index data for the Bulk API call&#8221;\u00a0<\/strong>follows steps <strong>Step-1 and Step-2.<\/strong><\/p>\n<div class=\"su-note\"  style=\"border-color:#e5dd9d;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;\"><div class=\"su-note-inner su-u-clearfix su-u-trim\" style=\"background-color:#fff7b7;border-color:#ffffff;color:#333333;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;\"><strong>NOTE<\/strong>: No need to use JSON Generator Transform (From Step-3).<\/div><\/div>\n<p>Just for (2nd step)\u00a0<strong>Step-2<\/strong> use below expression for\u00a0\u00a0<span class=\"lang:default decode:true crayon-inline\">RowHeader<\/span><br \/>\n<a href=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/12\/ssis-sql-server-to-elasticsearch-derived-columns-2.png\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-2406 size-full\" src=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/12\/ssis-sql-server-to-elasticsearch-derived-columns-2.png\" alt=\"Derived Column configuration to add prefix and header and footer to a JSON\" width=\"681\" height=\"443\" srcset=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/12\/ssis-sql-server-to-elasticsearch-derived-columns-2.png 681w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/12\/ssis-sql-server-to-elasticsearch-derived-columns-2-300x195.png 300w\" sizes=\"(max-width: 681px) 100vw, 681px\" \/><\/a><\/p>\n<p>Derived Column configuration to add prefix and header and footer to a JSON<\/p>\n<p>In the <em>Expression<\/em> column give them values:<\/p>\n<ul>\n<li><strong>RowHeader<\/strong>:\n<pre class=\"toolbar:2 wrap:true lang:default highlight:0 decode:true\">\"{ \\\"delete\\\": { \\\"_index\\\": \\\"shop\\\", \\\"_id\\\" : \\\"\" + (DT_WSTR,100)ProductID + \"\\\" } }\\n\"<\/pre>\n<\/li>\n<\/ul>\n<h3>Finally, Elasticsearch &amp; SQL\u00a0Server integration<\/h3>\n<ol>\n<li>Now drag <em>Web API Destination<\/em> SSIS component into the Data Flow and open it for editing.<\/li>\n<li>In <em>Select Connection<\/em> section press <span class=\"lang:default highlight:0 decode:true crayon-inline\">&lt;New ZS-HTTP Connection&gt;<\/span>.<\/li>\n<li>Once <em>HTTP Connection Manager<\/em> window opens configure connection to your Elasticsearch instance:\n<ul>\n<li>Set <em>Web Url<\/em>, which points to your Elasticsearch instance.<\/li>\n<li>Set <em>Credentials Type<\/em> to <span class=\"lang:default decode:true crayon-inline\">Basic &#8211; UserID\/Password<\/span>\u00a0(or other appropriate authentication method).<\/li>\n<li>Finally, set <em>User Name<\/em> and <em>Password:<br \/>\n<\/em><\/p>\n<div id=\"attachment_1419\" style=\"width: 330px\" class=\"wp-caption alignnone\"><a href=\"\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/06\/ssis-post-data-to-elasticsearch-configure-http-connection.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-1419\" class=\"wp-image-1419 size-full\" src=\"\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/06\/ssis-post-data-to-elasticsearch-configure-http-connection.png\" alt=\"Configure SSIS HTTP Connection to connect to Elasticsearch\" width=\"320\" height=\"207\" srcset=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/06\/ssis-post-data-to-elasticsearch-configure-http-connection.png 320w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/06\/ssis-post-data-to-elasticsearch-configure-http-connection-300x194.png 300w\" sizes=\"(max-width: 320px) 100vw, 320px\" \/><\/a><p id=\"caption-attachment-1419\" class=\"wp-caption-text\">Configure SSIS <em>HTTP Connection<\/em> to connect to Elasticsearch<\/p><\/div><\/li>\n<\/ul>\n<\/li>\n<li>Close configuration window. Now it&#8217;s time to configure <em>Web API Destination<\/em>.<\/li>\n<li>All that is separating you from getting those rows into Elasticsearch:\n<ul>\n<li>Setting <em>Input Column<\/em> <em>for Body<\/em> to <span class=\"lang:default highlight:0 decode:true crayon-inline\">ZS_JSON_OUT<\/span>\u00a0for <strong>Create and Update<\/strong> Index Data and for <strong>Delete<\/strong> Index Data <em>Input Column for Body<\/em> to <span class=\"lang:default decode:true crayon-inline\">RowHeader [Derived Column]<\/span>.<\/li>\n<li>Setting <em>URL<\/em> to <span class=\"lang:default highlight:0 decode:true crayon-inline\">http:\/\/localhost:9200\/_bulk<\/span>.<\/li>\n<li>Setting <em>HTTP Request<\/em> Method to <span class=\"lang:default highlight:0 decode:true crayon-inline\">POST<\/span>.<\/li>\n<li>Setting <em>Body content type<\/em> Method to <span class=\"lang:default highlight:0 decode:true crayon-inline\">JSON(application\/json)<\/span><\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<div id=\"attachment_10042\" style=\"width: 733px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/01\/web-destination-elastic-1.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-10042\" class=\"size-full wp-image-10042\" src=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/01\/web-destination-elastic-1.png\" alt=\"\" width=\"723\" height=\"775\" srcset=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/01\/web-destination-elastic-1.png 723w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/01\/web-destination-elastic-1-280x300.png 280w\" sizes=\"(max-width: 723px) 100vw, 723px\" \/><\/a><p id=\"caption-attachment-10042\" class=\"wp-caption-text\">Index SQL Server Database data in Elasticsearch using SSIS component Web API Destination<\/p><\/div>\n<ol>\n<li>Then open <em>Batch Settings (For Body)<\/em> tab:\n<ul>\n<li>Enable batch submission.<\/li>\n<li>Set <em>Body Batch Size, <\/em>e.g. 1000<em>.\u00a0<\/em>Make sure this number is even, otherwise you may get into problems (Elasticsearch Bulk request has special JSON request body format, as you perhaps noticed).<\/li>\n<\/ul>\n<div id=\"attachment_2415\" style=\"width: 711px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/12\/ssis-post-data-to-elasticsearch-web-api-destination-3.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-2415\" class=\"wp-image-2415 size-full\" src=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/12\/ssis-post-data-to-elasticsearch-web-api-destination-3.png\" alt=\"Web API Destination batch settings configuration\" width=\"701\" height=\"623\" srcset=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/12\/ssis-post-data-to-elasticsearch-web-api-destination-3.png 701w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/12\/ssis-post-data-to-elasticsearch-web-api-destination-3-300x267.png 300w\" sizes=\"(max-width: 701px) 100vw, 701px\" \/><\/a><p id=\"caption-attachment-2415\" class=\"wp-caption-text\"><em>Web API Destination<\/em> batch settings configuration<\/p><\/div><\/li>\n<li>Close the window and run the package! You should see green lights, telling you everything is OK:\n<div id=\"attachment_2398\" style=\"width: 302px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/12\/ssis-sql-server-to-elasticsearch-load-success-2.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-2398\" class=\"wp-image-2398 size-full\" src=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/12\/ssis-sql-server-to-elasticsearch-load-success-2.png\" alt=\"Successful data load from SQL Server to Elasticsearch\" width=\"292\" height=\"391\" srcset=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/12\/ssis-sql-server-to-elasticsearch-load-success-2.png 292w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/12\/ssis-sql-server-to-elasticsearch-load-success-2-224x300.png 224w\" sizes=\"(max-width: 292px) 100vw, 292px\" \/><\/a><p id=\"caption-attachment-2398\" class=\"wp-caption-text\">Successful data load from SQL Server to Elasticsearch<\/p><\/div><\/li>\n<li>We can also query Elasticsearch by using one of its <a href=\"https:\/\/www.elastic.co\/guide\/en\/elasticsearch\/reference\/current\/search.html\" target=\"_blank\" rel=\"noopener\">Search APIs<\/a>\u00a0&#8211; <a href=\"https:\/\/www.elastic.co\/guide\/en\/elasticsearch\/reference\/current\/search-uri-request.html\" target=\"_blank\" rel=\"noopener\">URI Search<\/a> to see if we successfully indexed data:\n<div id=\"attachment_1470\" style=\"width: 363px\" class=\"wp-caption alignnone\"><a href=\"\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/06\/ssis-sql-server-to-elasticsearch-load-results.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-1470\" class=\"wp-image-1470\" src=\"\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/06\/ssis-sql-server-to-elasticsearch-load-results.png\" alt=\"SQL Server data index in Elasticsearch\" width=\"353\" height=\"450\" srcset=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/06\/ssis-sql-server-to-elasticsearch-load-results.png 429w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/06\/ssis-sql-server-to-elasticsearch-load-results-235x300.png 235w\" sizes=\"(max-width: 353px) 100vw, 353px\" \/><\/a><p id=\"caption-attachment-1470\" class=\"wp-caption-text\">SQL Server data index in Elasticsearch<\/p><\/div><\/li>\n<li>Rows number match in SSIS and in search results, thus everything is good. You are done.<\/li>\n<\/ol>\n<h3>What if I want more? After upserting data use\u00a0<em>Web API Destination<\/em>\u00a0further<\/h3>\n<p>Let&#8217;s say you have a requirement to do something with rows that were freshly indexed in Elasticsearch. Then you will need somehow to distinguish between created and updated records in Elasticsearch. And that won&#8217;t be difficult because <em>Web API Destination<\/em> acts not only as <span style=\"text-decoration: underline;\">Destination<\/span> but as <span style=\"text-decoration: underline;\">Transformation<\/span> as well. So one thing you have to do is connect\u00a0<em><a href=\"\/\/zappysys.com\/products\/ssis-powerpack\/ssis-json-parser-transform\/\" target=\"_blank\" rel=\"noopener\">JSON Parser Transform<\/a><\/em>\u00a0downstream to <em>Web API Destination<\/em>. It will parse Elasticsearch HTTP JSON response \u2013 which is returned by <em>Web API Destination \u2013<\/em>\u00a0into columns, which you can later easily redirect using\u00a0<em>Conditional Split:<\/em><\/p>\n<ol>\n<li>Add <em>JSON Parser Transform<\/em> and connect it to <em>Web API Destination<\/em>:\n<div id=\"attachment_1476\" style=\"width: 415px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-1476\" class=\"size-full wp-image-1476\" src=\"\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/06\/ssis-sql-server-to-elasticsearch-http-response-parsing.png\" alt=\"Add JSON Parser Transform to get Elasticsearch HTTP JSON response when integrating SQL Server &amp; Elasticsearch\" width=\"405\" height=\"394\" srcset=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/06\/ssis-sql-server-to-elasticsearch-http-response-parsing.png 405w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/06\/ssis-sql-server-to-elasticsearch-http-response-parsing-300x292.png 300w\" sizes=\"(max-width: 405px) 100vw, 405px\" \/><p id=\"caption-attachment-1476\" class=\"wp-caption-text\">Use\u00a0<em>JSON Parser Transform<\/em> to get Elasticsearch HTTP JSON response when integrating SQL Server &amp; Elasticsearch<\/p><\/div><\/li>\n<li>Make sure you have selected <span class=\"lang:default decode:true crayon-inline \">ResponseText<\/span>\u00a0as <em>Select Input JSON Column.<\/em><\/li>\n<li>Then go to <a href=\"https:\/\/www.elastic.co\/guide\/en\/elasticsearch\/reference\/current\/docs-bulk.html\" target=\"_blank\" rel=\"noopener\">Bulk API<\/a> and copy\/paste\u00a0&#8220;the result of this bulk operation&#8221; JSON response:\n<div id=\"attachment_2399\" style=\"width: 714px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/12\/ssis-sql-server-to-elasticsearch-json-parser-transform-configuration.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-2399\" class=\"wp-image-2399 size-full\" src=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/12\/ssis-sql-server-to-elasticsearch-json-parser-transform-configuration.png\" alt=\"Using JSON Parser Transform to parse JSON response from REST HTTP request\" width=\"704\" height=\"622\" srcset=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/12\/ssis-sql-server-to-elasticsearch-json-parser-transform-configuration.png 704w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/12\/ssis-sql-server-to-elasticsearch-json-parser-transform-configuration-300x265.png 300w\" sizes=\"(max-width: 704px) 100vw, 704px\" \/><\/a><p id=\"caption-attachment-2399\" class=\"wp-caption-text\">Using <em>JSON Parser Transform<\/em> to parse JSON response from REST HTTP request<\/p><\/div><\/li>\n<li>Set <span class=\"lang:default highlight:0 decode:true crayon-inline \">$.items[*]<\/span>\u00a0as the filter.<\/li>\n<li><strong>Optional step<\/strong>. You won&#8217;t find a response sample for every Elasticsearch API call. In that case, you may want to use <a href=\"http:\/\/www.getpostman.com\" target=\"_blank\" rel=\"noopener\">Postman<\/a>\u00a0to make an HTTP request to Elasticsearch and get a sample response:\n<div id=\"attachment_1513\" style=\"width: 589px\" class=\"wp-caption alignnone\"><a href=\"\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/06\/ssis-sql-server-to-elasticsearch-using-postman-to-troubleshoot.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-1513\" class=\"wp-image-1513 size-full\" src=\"\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/06\/ssis-sql-server-to-elasticsearch-using-postman-to-troubleshoot.png\" alt=\"Use Postman to make a request to Elasticsearch and get a sample response to be used in JSON Parser Transform\" width=\"579\" height=\"587\" srcset=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/06\/ssis-sql-server-to-elasticsearch-using-postman-to-troubleshoot.png 579w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/06\/ssis-sql-server-to-elasticsearch-using-postman-to-troubleshoot-296x300.png 296w\" sizes=\"(max-width: 579px) 100vw, 579px\" \/><\/a><p id=\"caption-attachment-1513\" class=\"wp-caption-text\">Use <em>Postman<\/em> to make a request to Elasticsearch and get a sample response to be used in <em>JSON Parser Transform<\/em><\/p><\/div>\n<div class=\"su-note\"  style=\"border-color:#e5dd9d;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;\"><div class=\"su-note-inner su-u-clearfix su-u-trim\" style=\"background-color:#fff7b7;border-color:#ffffff;color:#333333;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;\"><strong>NOTE<\/strong>: Don&#8217;t forget to set the username and password in <em>Authorization<\/em> section!<\/div><\/div><\/li>\n<li>Then use a <em>Conditional Split <\/em>and <a href=\"\/\/zappysys.com\/onlinehelp\/ssis-powerpack\/index.htm#page=trash-destination.htm\" target=\"_blank\" rel=\"noopener\">Trash Destination<\/a> to redirect the rows:<br \/>\n<a href=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/12\/ssis-sql-server-to-elasticsearch-conditional-split.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2410\" src=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/12\/ssis-sql-server-to-elasticsearch-conditional-split.png\" alt=\"\" width=\"893\" height=\"394\" srcset=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/12\/ssis-sql-server-to-elasticsearch-conditional-split.png 893w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/12\/ssis-sql-server-to-elasticsearch-conditional-split-300x132.png 300w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/12\/ssis-sql-server-to-elasticsearch-conditional-split-768x339.png 768w\" sizes=\"(max-width: 893px) 100vw, 893px\" \/><\/a><br \/>\nInput these clauses:<\/p>\n<ul>\n<li><strong>Inserted<\/strong>:\n<pre class=\"toolbar:2 wrap:true lang:default highlight:0 decode:true\">REPLACENULL([index.result],\"\") == \"created\" || REPLACENULL([create.result],\"\") == \"created\"<\/pre>\n<\/li>\n<li><strong>Updated<\/strong>:\n<pre class=\"toolbar:2 wrap:true lang:default highlight:0 decode:true\">REPLACENULL([index.result],\"\") == \"updated\" || REPLACENULL([create.result],\"\") == \"updated\"<\/pre>\n<\/li>\n<\/ul>\n<\/li>\n<li>As a result, new index records will be redirected to one destination, while updated records &#8211; to the other:<br \/>\n<a href=\"\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/06\/ssis-sql-server-to-elasticsearch-integration-results.png\"><img loading=\"lazy\" decoding=\"async\" width=\"423\" height=\"388\" class=\"wp-image-1478 size-full\" src=\"\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/06\/ssis-sql-server-to-elasticsearch-integration-results.png\" alt=\"&quot;Result\" srcset=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/06\/ssis-sql-server-to-elasticsearch-integration-results.png 423w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/06\/ssis-sql-server-to-elasticsearch-integration-results-300x275.png 300w\" sizes=\"(max-width: 423px) 100vw, 423px\" \/><\/a><\/li>\n<\/ol>\n<div class=\"su-note\"  style=\"border-color:#e5dd9d;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;\"><div class=\"su-note-inner su-u-clearfix su-u-trim\" style=\"background-color:#fff7b7;border-color:#ffffff;color:#333333;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;\"><strong>NOTE<\/strong>: <em>Trash Destination<\/em> is a handy component of <em>ZappySys PowerPack<\/em> which can be used as dummy destination when we don&#8217;t care about the destination (and we don&#8217;t care in this tutorial) \ud83d\ude42<\/div><\/div>\n<p>Overall you can use <em>Web API Destination<\/em> HTTP JSON response for other useful things as well, e.g. determine on how many <a href=\"https:\/\/www.elastic.co\/guide\/en\/elasticsearch\/reference\/current\/_basic_concepts.html#getting-started-shards-and-replicas\" target=\"_blank\" rel=\"noopener\">replica shards<\/a> record was indexed. JSON response will depend on which Elasticsearch API and which method you use.<\/p>\n<h3>Delete Index by making an API call.<\/h3>\n<p>If you want to delete the index by making <a href=\"https:\/\/www.elastic.co\/guide\/en\/elasticsearch\/reference\/current\/indices-delete-index.html\" target=\"_blank\" rel=\"noopener\">Delete API<\/a> call you can. Let&#8217;s make that call using the Rest API Task. Configure it like below screen and click on the Test Request button.<\/p>\n<div id=\"attachment_8605\" style=\"width: 730px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/06\/ssis-rest-api-task-delete-method.png\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-8605\" class=\"wp-image-8605 size-medium_large\" src=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/06\/ssis-rest-api-task-delete-method-768x523.png\" alt=\"Rest API Delete Method\" width=\"720\" height=\"490\" srcset=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/06\/ssis-rest-api-task-delete-method-768x523.png 768w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/06\/ssis-rest-api-task-delete-method-300x204.png 300w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/06\/ssis-rest-api-task-delete-method.png 901w\" sizes=\"(max-width: 720px) 100vw, 720px\" \/><\/a><p id=\"caption-attachment-8605\" class=\"wp-caption-text\">Rest API Delete Method<\/p><\/div>\n<h3>Things gone bad: Error handling &amp; debugging<\/h3>\n<p>Incidentally, you may incorrectly construct JSON\u00a0for <em>Web API Destination<\/em>\u00a0body<i>.\u00a0<\/i>Elasticsearch nodes may go offline or go out of memory. In any case you may want to know when that happens and take actions accordingly. For that purpose you have to redirect failed requests from <em>Web API Destination<\/em> to some other destination:<\/p>\n<ol>\n<li>Add a <em>Derived Column<\/em>\u00a0above <em>Web API Destination<\/em> with expression <span class=\"lang:default decode:true crayon-inline\">(DT_WSTR,4000)ZS_JSON_OUT<\/span>\u00a0and name it <span class=\"lang:default decode:true crayon-inline\">JsonAsString<\/span>. This will let you see what JSON you are actually passing.<\/li>\n<li>Then add database or file destination or use another\u00a0<em>Trash Destination<\/em>\u00a0for debugging purposes and redirect the bad rows (<span style=\"color: #d66565;\">red arrow<\/span>) from <em>Web API Destination <\/em>into it<em>. <\/em>Don&#8217;t forget to set <span class=\"lang:default decode:true crayon-inline \">Redirect row<\/span>\u00a0option for both, <em>Error<\/em> and <em>Truncation<\/em> columns:<em><br \/>\n<\/em><a href=\"\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/06\/ssis-sql-server-to-elasticsearch-error-handling-redirecting-bad-rows.png\"><img loading=\"lazy\" decoding=\"async\" width=\"739\" height=\"267\" class=\"wp-image-1487 size-full\" src=\"\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/06\/ssis-sql-server-to-elasticsearch-error-handling-redirecting-bad-rows.png\" alt=\"&quot;Redirect\" srcset=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/06\/ssis-sql-server-to-elasticsearch-error-handling-redirecting-bad-rows.png 739w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/06\/ssis-sql-server-to-elasticsearch-error-handling-redirecting-bad-rows-300x108.png 300w\" sizes=\"(max-width: 739px) 100vw, 739px\" \/><\/a><\/li>\n<li>Finally, add a\u00a0<a href=\"https:\/\/technet.microsoft.com\/en-us\/library\/ms140318%28v=sql.90%29.aspx?f=255&amp;MSPPError=-2147217396\" target=\"_blank\" rel=\"noopener\"><em>Data Viewer<\/em><\/a> for the red path, if you want to debug the flow. You will be able to see URL, JSON and the error message for each record. You may want to copy-paste <em>ErrorMessage<\/em>\u00a0to <em>Notepad <\/em>if you want it to be more readable:\n<div id=\"attachment_1494\" style=\"width: 762px\" class=\"wp-caption alignnone\"><a href=\"\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/06\/ssis-sql-server-to-elasticsearch-error-handling.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-1494\" class=\"wp-image-1494 size-full\" src=\"\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/06\/ssis-sql-server-to-elasticsearch-error-handling.png\" alt=\"Use Data Viewer to view HTTP requests that failed to be fulfilled in Elasticsearch\" width=\"752\" height=\"280\" srcset=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/06\/ssis-sql-server-to-elasticsearch-error-handling.png 752w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/06\/ssis-sql-server-to-elasticsearch-error-handling-300x112.png 300w\" sizes=\"(max-width: 752px) 100vw, 752px\" \/><\/a><p id=\"caption-attachment-1494\" class=\"wp-caption-text\">Use<em> Data Viewer<\/em> to view HTTP requests that failed to be fulfilled in Elasticsearch<\/p><\/div><\/li>\n<\/ol>\n<div class=\"su-note\"  style=\"border-color:#e5dd9d;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;\"><div class=\"su-note-inner su-u-clearfix su-u-trim\" style=\"background-color:#fff7b7;border-color:#ffffff;color:#333333;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;\"><strong>NOTE<\/strong>: You can read more about redirecting rows in <a href=\"\/\/zappysys.com\/blog\/ssis-error-handling-in-data-flow-redirect-bad-rows\/\" target=\"_blank\" rel=\"noopener\">SSIS Error Handling (Redirect bad rows)<\/a> article.<\/div><\/div>\n<h2>Call ElasticSearch API hosted on AWS<\/h2>\n<p>If your ElasticSearch instance is hosted as <a href=\"https:\/\/aws.amazon.com\/elasticsearch-service\/\" target=\"_blank\" rel=\"noopener\">AWS Managed ElasticSearch Instance<\/a> then select\u00a0\u00a0<span class=\"lang:default highlight:0 decode:true crayon-inline\">&lt;New ZS-OAUTH Connection&gt;<\/span>. rather than ZS-HTTP (Explained later in this article). When OAuth UI launches select AWS v4 Provider. For more information on <a href=\"https:\/\/zappysys.com\/blog\/how-to-call-amazon-aws-api-using-ssis-ec2-lambda-api-gateway-sqs\/\" target=\"_blank\" rel=\"noopener\">calling REST API on AWS check this article<\/a>.<\/p>\n<div id=\"attachment_2258\" style=\"width: 720px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/11\/ssis-oauth-connection-amazon-aws-api-provider-use-signature-v4.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-2258\" class=\"size-full wp-image-2258\" src=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/11\/ssis-oauth-connection-amazon-aws-api-provider-use-signature-v4.png\" alt=\"Configure SSIS OAuth Connection - Use Amazon AWS API Provider, Enter Access Key, Secret Key\" width=\"710\" height=\"535\" srcset=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/11\/ssis-oauth-connection-amazon-aws-api-provider-use-signature-v4.png 710w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/11\/ssis-oauth-connection-amazon-aws-api-provider-use-signature-v4-300x226.png 300w\" sizes=\"(max-width: 710px) 100vw, 710px\" \/><\/a><p id=\"caption-attachment-2258\" class=\"wp-caption-text\">Configure SSIS OAuth Connection &#8211; Use Amazon AWS API Provider, Enter Access Key, Secret Key<\/p><\/div>\n<p>&nbsp;<\/p>\n<div id=\"attachment_6277\" style=\"width: 836px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/11\/ssis-call-aws-elasticsearch-rest-api-sign-v4.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-6277\" class=\"size-full wp-image-6277\" src=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/11\/ssis-call-aws-elasticsearch-rest-api-sign-v4.png\" alt=\"Call AWS Hosted ElasticSearch REST API in SSIS (V4 Request Signing)\" width=\"826\" height=\"730\" srcset=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/11\/ssis-call-aws-elasticsearch-rest-api-sign-v4.png 826w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/11\/ssis-call-aws-elasticsearch-rest-api-sign-v4-300x265.png 300w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/11\/ssis-call-aws-elasticsearch-rest-api-sign-v4-768x679.png 768w\" sizes=\"(max-width: 826px) 100vw, 826px\" \/><\/a><p id=\"caption-attachment-6277\" class=\"wp-caption-text\">Call AWS Hosted ElasticSearch REST API in SSIS (V4 Request Signing)<\/p><\/div>\n<h2>Common Errors<\/h2>\n<div class=\"content_block\" id=\"custom_post_widget-1887\"><h3>Truncation related error<\/h3>\r\n<p style=\"text-align: justify;\">The most common error you may face when you run an SSIS package is truncation error. During the design time only 300 rows are scanned from a source (a file or a REST API call response) to detect datatypes but at runtime, it is likely you will retrieve far more records. So it is possible that you will get longer strings than initially expected.\u00a0For detailed instructions on how to fix common metadata related errors read an article \"<a href=\"\/\/zappysys.com\/blog\/handling-ssis-component-metadata-issues\/\" target=\"_blank\" rel=\"noopener\">How to handle SSIS errors (truncation, metadata issues)<\/a>\".<\/p>\r\n\r\n<h3>Authentication related error<\/h3>\r\nAnother frequent error you may get is an authentication error, which happens when you deploy\/copy a package to another machine and run it there. Check <a href=\"#Deployment_to_Production\">the paragraph below<\/a>\u00a0to see why it happens and how to solve this problem.<\/div>\n<h2>Deployment to Production<\/h2>\n<div class=\"content_block\" id=\"custom_post_widget-1932\"><p style=\"text-align: justify;\">In SSIS package <a href=\"https:\/\/docs.microsoft.com\/en-us\/sql\/integration-services\/security\/access-control-for-sensitive-data-in-packages\" target=\"_blank\" rel=\"noopener\">sensitive data such as tokens and passwords are by default encrypted by SSIS<\/a> with your Windows account which you use to create a package.\u00a0So SSIS will fail to decrypt tokens\/passwords when you run it from another machine using another Windows account. To circumvent this when you are creating an SSIS package which uses authentication components (e.g. an <a href=\"https:\/\/zappysys.com\/onlinehelp\/ssis-powerpack\/scr\/ssis-oauth-connection-manager.htm\" target=\"_blank\" rel=\"noopener\">OAuth Connection Manager<\/a>\u00a0or an <a href=\"https:\/\/zappysys.com\/onlinehelp\/ssis-powerpack\/scr\/ssis-http-connection-manager.htm\" target=\"_blank\" rel=\"noopener\">HTTP Connection Manager<\/a> with credentials, etc.), consider using parameters\/variables to pass tokens\/passwords. In this way, you won\u2019t face authentication related errors when a package is deployed to a production server.<\/p>\r\n<p style=\"text-align: justify;\">Check our article on <a href=\"https:\/\/zappysys.com\/blog\/how-to-run-an-ssis-package-with-sensitive-data-on-sql-server\/\" target=\"_blank\" rel=\"noopener\">how to configure packages with sensitive data on your production or development server<\/a>.<\/p><\/div>\n<h2>Download a sample package<\/h2>\n<p>Be sure to download a <a href=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/06\/Bulk-load-data-from-SQL-Server-to-Elasticsearch-using-SSIS.zip\">sample SQL Server 2008 SSIS package<\/a>, in case you want to try it right away (you can upgrade it to a higher version).<br \/>\n<div class=\"su-note\"  style=\"border-color:#e5dd9d;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;\"><div class=\"su-note-inner su-u-clearfix su-u-trim\" style=\"background-color:#FFF7B7;border-color:#ffffff;color:#333333;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;\"><strong>NOTE<\/strong>: Once you open the package, you won\u2019t be able to run it immediately, but don\u2019t panic. Just configure OLE DB Source to point to your Northwind database and set URLs to point to your Elasticsearch instance.<\/div><\/div>\n<h2>Conclusion.\u00a0What&#8217;s next?<\/h2>\n<p>In this article we have learned how to bulk load data from SQL Server and upsert it in Elasticsearch index.\u00a0We used <a href=\"\/\/zappysys.com\/products\/ssis-powerpack\/ssis-json-generator-transform\/\" target=\"_blank\" rel=\"noopener\">JSON Generator Transform<\/a> to help us convert database table rows into JSON documents. In addition,\u00a0<a href=\"\/\/zappysys.com\/products\/ssis-powerpack\/ssis-web-api-destination-connector\/\" target=\"_blank\" rel=\"noopener\">Web API Destination<\/a>\u00a0was very helpful in automatically creating and making HTTP requests to Elasticsearch instance and indexing our data as a result. This tutorial was quite simple and straightforward, yet it is a good starter to use other Elasticsearch APIs and their features. From now on\u00a0<a href=\"https:\/\/www.elastic.co\/guide\/en\/elasticsearch\/reference\/current\/index.html\" target=\"_blank\" rel=\"noopener\">Elasticsearch reference<\/a> is your best friend in learning what APIs exist, what are their methods and how HTTP requests should look like.<\/p>\n<p><strong>Keywords<\/strong><\/p>\n<p>How to import data from SQL Server\u00a0to Elasticsearch | How to load data into Elasticsearch | Using Elasticsearch to index SQL\u00a0Server |\u00a0Elasticsearch and SQL Server integration | How to use Elasticsearch together with SQL\u00a0Server | Upsert SQL Server data into Elasticsearch<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Introduction Elasticsearch\u00a0is a powerful engine that allows you to store, aggregate and, most importantly, search data in a very analytical way. In this tutorial, you will learn how to bulk load data from SQL Server to Elasticsearch\u00a0with\u00a0SSIS\u00a0(part of SQL Server) and ZappySys PowerPack. The scope of this article will be to show how to import [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1406,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[225,136,17,10],"tags":[172,6,3,12,148,4,144],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v22.3 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\r\n<title>How to call Elasticsearch API using SSIS | ZappySys Blog<\/title>\r\n<meta name=\"description\" content=\"Learn how to call Elasticsearch API using SSIS. Use drag and drop approach without coding to call REST API and parse JSON response and load into SQL Server\" \/>\r\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\r\n<link rel=\"canonical\" href=\"https:\/\/zappysys.com\/blog\/call-elasticsearch-api-using-ssis\/\" \/>\r\n<meta property=\"og:locale\" content=\"en_US\" \/>\r\n<meta property=\"og:type\" content=\"article\" \/>\r\n<meta property=\"og:title\" content=\"How to call Elasticsearch API using SSIS | ZappySys Blog\" \/>\r\n<meta property=\"og:description\" content=\"Learn how to call Elasticsearch API using SSIS. Use drag and drop approach without coding to call REST API and parse JSON response and load into SQL Server\" \/>\r\n<meta property=\"og:url\" content=\"https:\/\/zappysys.com\/blog\/call-elasticsearch-api-using-ssis\/\" \/>\r\n<meta property=\"og:site_name\" content=\"ZappySys Blog\" \/>\r\n<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/ZappySys\/\" \/>\r\n<meta property=\"article:published_time\" content=\"2017-01-17T00:22:47+00:00\" \/>\r\n<meta property=\"article:modified_time\" content=\"2025-03-18T13:43:15+00:00\" \/>\r\n<meta property=\"og:image\" content=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/06\/elasticsearch-logo-180x180.png\" \/>\r\n\t<meta property=\"og:image:width\" content=\"180\" \/>\r\n\t<meta property=\"og:image:height\" content=\"180\" \/>\r\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\r\n<meta name=\"author\" content=\"ZappySys\" \/>\r\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\r\n<meta name=\"twitter:creator\" content=\"@https:\/\/twitter.com\/zappysys\/\" \/>\r\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"ZappySys\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"15 minutes\" \/>\r\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/zappysys.com\/blog\/call-elasticsearch-api-using-ssis\/\",\"url\":\"https:\/\/zappysys.com\/blog\/call-elasticsearch-api-using-ssis\/\",\"name\":\"How to call Elasticsearch API using SSIS | ZappySys Blog\",\"isPartOf\":{\"@id\":\"https:\/\/zappysys.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/zappysys.com\/blog\/call-elasticsearch-api-using-ssis\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/zappysys.com\/blog\/call-elasticsearch-api-using-ssis\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/06\/elasticsearch-logo-180x180.png\",\"datePublished\":\"2017-01-17T00:22:47+00:00\",\"dateModified\":\"2025-03-18T13:43:15+00:00\",\"author\":{\"@id\":\"https:\/\/zappysys.com\/blog\/#\/schema\/person\/2756c237457fbc95d82cb38962f81f82\"},\"description\":\"Learn how to call Elasticsearch API using SSIS. Use drag and drop approach without coding to call REST API and parse JSON response and load into SQL Server\",\"breadcrumb\":{\"@id\":\"https:\/\/zappysys.com\/blog\/call-elasticsearch-api-using-ssis\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/zappysys.com\/blog\/call-elasticsearch-api-using-ssis\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/zappysys.com\/blog\/call-elasticsearch-api-using-ssis\/#primaryimage\",\"url\":\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/06\/elasticsearch-logo-180x180.png\",\"contentUrl\":\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/06\/elasticsearch-logo-180x180.png\",\"width\":180,\"height\":180},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/zappysys.com\/blog\/call-elasticsearch-api-using-ssis\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/zappysys.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How to call Elasticsearch API using SSIS\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/zappysys.com\/blog\/#website\",\"url\":\"https:\/\/zappysys.com\/blog\/\",\"name\":\"ZappySys Blog\",\"description\":\"SSIS \/ ODBC Drivers \/ API Connectors for JSON, XML, Azure, Amazon AWS, Salesforce, MongoDB and more\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/zappysys.com\/blog\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/zappysys.com\/blog\/#\/schema\/person\/2756c237457fbc95d82cb38962f81f82\",\"name\":\"ZappySys\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/zappysys.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/5c9be148088ba9b8af8e955c5f7c22b5?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/5c9be148088ba9b8af8e955c5f7c22b5?s=96&d=mm&r=g\",\"caption\":\"ZappySys\"},\"sameAs\":[\"http:\/\/www.zappysys.com\/\",\"https:\/\/www.facebook.com\/ZappySys\/\",\"https:\/\/twitter.com\/https:\/\/twitter.com\/zappysys\/\"],\"url\":\"https:\/\/zappysys.com\/blog\/author\/admin\/\"}]}<\/script>\r\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"How to call Elasticsearch API using SSIS | ZappySys Blog","description":"Learn how to call Elasticsearch API using SSIS. Use drag and drop approach without coding to call REST API and parse JSON response and load into SQL Server","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:\/\/zappysys.com\/blog\/call-elasticsearch-api-using-ssis\/","og_locale":"en_US","og_type":"article","og_title":"How to call Elasticsearch API using SSIS | ZappySys Blog","og_description":"Learn how to call Elasticsearch API using SSIS. Use drag and drop approach without coding to call REST API and parse JSON response and load into SQL Server","og_url":"https:\/\/zappysys.com\/blog\/call-elasticsearch-api-using-ssis\/","og_site_name":"ZappySys Blog","article_author":"https:\/\/www.facebook.com\/ZappySys\/","article_published_time":"2017-01-17T00:22:47+00:00","article_modified_time":"2025-03-18T13:43:15+00:00","og_image":[{"width":180,"height":180,"url":"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/06\/elasticsearch-logo-180x180.png","type":"image\/png"}],"author":"ZappySys","twitter_card":"summary_large_image","twitter_creator":"@https:\/\/twitter.com\/zappysys\/","twitter_misc":{"Written by":"ZappySys","Est. reading time":"15 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/zappysys.com\/blog\/call-elasticsearch-api-using-ssis\/","url":"https:\/\/zappysys.com\/blog\/call-elasticsearch-api-using-ssis\/","name":"How to call Elasticsearch API using SSIS | ZappySys Blog","isPartOf":{"@id":"https:\/\/zappysys.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/zappysys.com\/blog\/call-elasticsearch-api-using-ssis\/#primaryimage"},"image":{"@id":"https:\/\/zappysys.com\/blog\/call-elasticsearch-api-using-ssis\/#primaryimage"},"thumbnailUrl":"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/06\/elasticsearch-logo-180x180.png","datePublished":"2017-01-17T00:22:47+00:00","dateModified":"2025-03-18T13:43:15+00:00","author":{"@id":"https:\/\/zappysys.com\/blog\/#\/schema\/person\/2756c237457fbc95d82cb38962f81f82"},"description":"Learn how to call Elasticsearch API using SSIS. Use drag and drop approach without coding to call REST API and parse JSON response and load into SQL Server","breadcrumb":{"@id":"https:\/\/zappysys.com\/blog\/call-elasticsearch-api-using-ssis\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/zappysys.com\/blog\/call-elasticsearch-api-using-ssis\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/zappysys.com\/blog\/call-elasticsearch-api-using-ssis\/#primaryimage","url":"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/06\/elasticsearch-logo-180x180.png","contentUrl":"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/06\/elasticsearch-logo-180x180.png","width":180,"height":180},{"@type":"BreadcrumbList","@id":"https:\/\/zappysys.com\/blog\/call-elasticsearch-api-using-ssis\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/zappysys.com\/blog\/"},{"@type":"ListItem","position":2,"name":"How to call Elasticsearch API using SSIS"}]},{"@type":"WebSite","@id":"https:\/\/zappysys.com\/blog\/#website","url":"https:\/\/zappysys.com\/blog\/","name":"ZappySys Blog","description":"SSIS \/ ODBC Drivers \/ API Connectors for JSON, XML, Azure, Amazon AWS, Salesforce, MongoDB and more","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/zappysys.com\/blog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/zappysys.com\/blog\/#\/schema\/person\/2756c237457fbc95d82cb38962f81f82","name":"ZappySys","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/zappysys.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/5c9be148088ba9b8af8e955c5f7c22b5?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/5c9be148088ba9b8af8e955c5f7c22b5?s=96&d=mm&r=g","caption":"ZappySys"},"sameAs":["http:\/\/www.zappysys.com\/","https:\/\/www.facebook.com\/ZappySys\/","https:\/\/twitter.com\/https:\/\/twitter.com\/zappysys\/"],"url":"https:\/\/zappysys.com\/blog\/author\/admin\/"}]}},"_links":{"self":[{"href":"https:\/\/zappysys.com\/blog\/wp-json\/wp\/v2\/posts\/943"}],"collection":[{"href":"https:\/\/zappysys.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/zappysys.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/zappysys.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/zappysys.com\/blog\/wp-json\/wp\/v2\/comments?post=943"}],"version-history":[{"count":26,"href":"https:\/\/zappysys.com\/blog\/wp-json\/wp\/v2\/posts\/943\/revisions"}],"predecessor-version":[{"id":11235,"href":"https:\/\/zappysys.com\/blog\/wp-json\/wp\/v2\/posts\/943\/revisions\/11235"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/zappysys.com\/blog\/wp-json\/wp\/v2\/media\/1406"}],"wp:attachment":[{"href":"https:\/\/zappysys.com\/blog\/wp-json\/wp\/v2\/media?parent=943"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/zappysys.com\/blog\/wp-json\/wp\/v2\/categories?post=943"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/zappysys.com\/blog\/wp-json\/wp\/v2\/tags?post=943"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}