{"id":87609,"date":"2020-07-09T01:42:11","date_gmt":"2020-07-08T23:42:11","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/kogda-u-vas-sberovskie-masshtaby-ispolzovanie-ab-initio-pri-rabote-s-hive-i-greenplum"},"modified":"2020-07-09T01:42:11","modified_gmt":"2020-07-08T23:42:11","slug":"kogda-u-vas-sberovskie-masshtaby-ispolzovanie-ab-initio-pri-rabote-s-hive-i-greenplum","status":"publish","type":"post","link":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/kogda-u-vas-sberovskie-masshtaby-ispolzovanie-ab-initio-pri-rabote-s-hive-i-greenplum","title":{"rendered":"When you have the scale of Sberbank. Using Ab Initio with Hive and GreenPlum","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Some time ago, we faced the question of choosing an ETL tool for working with Big Data. The previously used solution, Informatica BDM, did not meet our needs due to its limited functionality. Its use boiled down to a framework for launching spark-submit commands. There weren't many alternatives on the market that could handle the volume of data we deal with every day. Ultimately, we chose Ab Initio. During pilot demonstrations, the product showed very high data processing speeds. There is almost no information about Ab Initio in Russian, so we decided to share our experience on Habr.<\/p>\n<p>Ab Initio has many classical and unique transformations, the code for which can be extended using its own PDL language. For small businesses, such a powerful tool may be excessive, and many of its features might prove costly and unnecessary. However, if your scale approaches that of a large enterprise, Ab Initio could be of interest to you. <\/p>\n<p>It helps businesses globally accumulate knowledge and develop ecosystems, while allowing developers to enhance their ETL skills, improve their shell knowledge, master the PDL language, provide a visual representation of loading processes, and simplify development through a wealth of functional components.<\/p>\n<p>In this post, I will discuss the capabilities of Ab Initio and provide comparative characteristics of its performance with Hive and GreenPlum.<\/p>\n<ul>\n<li>Description of the MDW framework and work on its fine-tuning for GreenPlum.<\/li>\n<li>Comparative performance characteristics of Ab Initio working with Hive and GreenPlum.<\/li>\n<li>Ab Initio's operation with GreenPlum in Near Real Time mode.<\/li>\n<\/ul>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nThe functionalities of this product are extensive and require considerable time to study. However, with the right skills and proper performance settings, the results of data processing can be quite impressive. Using Ab Initio can provide developers with a valuable experience. It offers a fresh perspective on ETL development, blending visual environments with script-like language loading.<\/p>\n<p>Businesses are developing their ecosystems, and this tool is more relevant than ever. With Ab Initio, one can accumulate knowledge about the current business and utilize that knowledge to expand existing operations and open new ones. Alternatives to Ab Initio include visual development environments like Informatica BDM and non-visual environments like Apache Spark.<\/p>\n<h3>Ab Initio Description<\/h3>\n<p>\nAb Initio, like other ETL tools, is a suite of products.<\/p>\n<p><img decoding=\"async\" alt=\"When you have the scale of Sberbank. Using Ab Initio with Hive and GreenPlum\" src=\"\/wp-content\/uploads\/2020\/07\/c467fe1e8455805075856967b577f8b7.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAb Initio GDE (Graphical Development Environment) is a developer environment where transformations are configured and connected through data streams represented as arrows. Such a collection of transformations is referred to as a graph:<\/p>\n<p><img decoding=\"async\" alt=\"When you have the scale of Sberbank. Using Ab Initio with Hive and GreenPlum\" src=\"\/wp-content\/uploads\/2020\/07\/7b0c19a82ae8b461a9bd85117555e106.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nInput and output connections of functional components are ports and contain fields computed within transformations. Several graphs connected by streams in sequential order are called a plan.<\/p>\n<p>There are several hundred functional components, which is a substantial number. Many of them are highly specialized. The capabilities of classic transformations in Ab Initio are broader than in other ETL tools. For example, Join has multiple outputs. In addition to the result of joining datasets, it is possible to output records from the input datasets that could not be joined by keys. It is also possible to obtain rejects, errors, and the log of the transformation, which can be read as a text file and processed by other transformations within the same graph:<\/p>\n<p><img decoding=\"async\" alt=\"When you have the scale of Sberbank. Using Ab Initio with Hive and GreenPlum\" src=\"\/wp-content\/uploads\/2020\/07\/c7d70879daad364a3d4aa41a0a1b738d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nOr, for instance, one can materialize a data sink as a table and read data from it in the same graph.<\/p>\n<p>There are original transformations as well. For example, the Scan transformation functions similarly to analytic functions. There are transformations with descriptive names: Create Data, Read Excel, Normalize, Sort within Groups, Run Program, Run SQL, Join with DB, and others. Graphs can use runtime parameters, including the ability to pass parameters from the operating system or to the operating system. Files containing a prepared set of parameters for the graph are called parameter sets (psets).<\/p>\n<p>As expected, Ab Initio GDE has its own repository, known as EME (Enterprise Meta Environment). Developers have the option to work with local versions of the code and check in their developments to the central repository.<\/p>\n<p>You can click on any transformation connection in the graph during or after execution to view the data that has passed between these transformations.<\/p>\n<p><img decoding=\"async\" alt=\"When you have the scale of Sberbank. Using Ab Initio with Hive and GreenPlum\" src=\"\/wp-content\/uploads\/2020\/07\/a674507b2cd25b980cb862bda2e10cbe.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nYou can also click on any stream to see tracking details \u2014 including how many parallel instances the transformation operated in, how many rows and bytes were loaded in each of the parallels.<\/p>\n<p><img decoding=\"async\" alt=\"When you have the scale of Sberbank. Using Ab Initio with Hive and GreenPlum\" src=\"\/wp-content\/uploads\/2020\/07\/6188d17bebe756ee59e6956f9a40ec43.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIt is possible to break the execution of the graph into phases and mark which transformations need to be executed first (in phase zero), followed by others in the first phase, then in the second phase, and so on.<\/p>\n<p>For each transformation, you can select what is known as a layout (where it will run): either without parallels or in parallel streams, the number of which can be specified. Temporary files that Ab Initio creates during the operation of transformations can be placed in both the file system <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/en\/server\/dts-los-angeles\/\"   title=\"server\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"3635\">server<\/a>, and in HDFS.<\/p>\n<p>In each transformation based on the default template, you can create your own script in the PDL language, which resembles shell scripting. <\/p>\n<p>With the PDL language, you can extend the functionality of transformations and, in particular, you can dynamically (at runtime) generate arbitrary code fragments depending on runtime parameters.<\/p>\n<p>Ab Initio also has well-developed integration with the OS via shell. Specifically, Linux ksh is used at Sberbank. You can exchange variables with the shell and use them as graph parameters. You can invoke the execution of Ab Initio graphs from the shell and administer Ab Initio.<\/p>\n<p>In addition to Ab Initio GDE, many other products are included in the delivery. There is a Co&gt;Operation System that claims to be an operating system. There is a Control&gt;Center, where you can schedule and monitor data loading streams. There are products for development at a more primitive level than what Ab Initio GDE allows.<\/p>\n<h3>Description of the MDW framework and work on its fine-tuning for GreenPlum.<\/h3>\n<p>\nAlong with its products, the vendor provides the MDW (Metadata Driven Warehouse) product, which is a graph configurator designed to assist with typical tasks related to populating data warehouses or data vaults.<\/p>\n<p>It contains user-specific (project-specific) metadata parsers and ready-made code generators 'out of the box.'<\/p>\n<p><img decoding=\"async\" alt=\"When you have the scale of Sberbank. Using Ab Initio with Hive and GreenPlum\" src=\"\/wp-content\/uploads\/2020\/07\/0842ecb9550f369875103ccb23cdf121.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nAt the input, MDW receives a data model, a configuration file for database connection settings (Oracle, Teradata, or Hive), and some other settings. The project-specific part, for example, deploys the model in the database. The out-of-the-box part of the product generates graphs and configuration files for them based on loading data into the model tables. In this process, graphs (and psets) are created for several modes of initializing and incrementally updating entities.<\/p>\n<p>In the cases of Hive and RDBMS, different graphs are generated for initializing and incrementally updating data.<\/p>\n<p>In the case of Hive, the incoming delta data is joined using Ab Initio Join with the data that was in the table before the update. The data loaders in MDW (both in Hive and RDBMS) not only insert new data from the delta but also close the validity periods of the data by the primary keys for which the delta was received. Additionally, it may be necessary to rewrite the unchanged part of the data. However, this is necessary because Hive does not support delete or update operations.<\/p>\n<p><img decoding=\"async\" alt=\"When you have the scale of Sberbank. Using Ab Initio with Hive and GreenPlum\" src=\"\/wp-content\/uploads\/2020\/07\/36b6dd7c4d45727ad7d7aa1183fdd5fd.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIn the case of RDBMS, graphs for incremental data updates appear more optimal, as RDBMS have real update capabilities.<\/p>\n<p><img decoding=\"async\" alt=\"When you have the scale of Sberbank. Using Ab Initio with Hive and GreenPlum\" src=\"\/wp-content\/uploads\/2020\/07\/b62ac222bed575a60b632b13e012f603.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nThe incoming delta is loaded into a temporary table in the database. After that, the delta is joined with the data that was in the table before the update. This is done using SQL via a generated SQL query. Then, with SQL commands delete+insert, new data from the delta is inserted into the target table, and the validity periods of the data whose primary keys received the delta are closed. <br \/>\nThere is no need to rewrite unchanged data.<\/p>\n<p>Thus, we conclude that in the case of Hive, MDW must resort to rewriting the entire table because Hive lacks update functionality. There is no better solution for data updates than complete rewriting. In contrast, for RDBMS, the product creators deemed it necessary to delegate the joining and updating of tables to SQL usage.<\/p>\n<p>For a project at Sberbank, we created a new reusable database loader implementation for GreenPlum. This was based on the version generated by MDW for Teradata. Teradata, rather than Oracle, was the best fit since it is also an MPP system. The working methods and syntax of Teradata and GreenPlum turned out to be similar.<\/p>\n<p>Examples of critical differences for MDW between various RDBMS are as follows. In GreenPlum, unlike Teradata, when creating tables, you need to write the clause<\/p>\n<pre><code class=\"sql\">distributed by<\/code><\/pre>\n<p>\nIn Teradata, you write<\/p>\n<pre><code class=\"sql\">delete &lt;table&gt; all<\/code><\/pre>\n<p>\n, while in GreenPlum you write<\/p>\n<pre><code class=\"sql\">delete from &lt;table&gt;<\/code><\/pre>\n<p>\nIn Oracle, for optimization purposes, you write<\/p>\n<pre><code class=\"sql\">delete from t where rowid in ()<\/code><\/pre>\n<p>\n, whereas in Teradata and GreenPlum you write<\/p>\n<pre><code class=\"sql\">delete from t where exists (select * from delta where delta.pk=t.pk)<\/code><\/pre>\n<p>\nIt should also be noted that for Ab Initio to work with GreenPlum, it was necessary to install the GreenPlum client on all nodes of the Ab Initio cluster. This is because we connected to GreenPlum from all nodes of our cluster simultaneously. To ensure that reading from GreenPlum was parallel and each parallel Ab Initio thread read its batch of data from GreenPlum, it was necessary to place an understood by Ab Initio construct in the SQL query's 'where' section.<\/p>\n<pre><code class=\"sql\">where ABLOCAL()<\/code><\/pre>\n<p>\nand define the value of this construct by specifying a parameter for the transformation reading from the database<\/p>\n<pre><code class=\"sql\">ablocal_expr=\"string_concat(\"mod(t.\", string_filter_out(\"{$TABLE_KEY}\",\"{}\"), \",\", (decimal(3))(number_of_partitions()),\"=\", (decimal(3))(this_partition()))\"<\/code><\/pre>\n<p>\n, which compiles to something like<\/p>\n<pre><code class=\"sql\">mod(sk,10)=3<\/code><\/pre>\n<p>\n, meaning it is necessary to inform GreenPlum of the explicit filter for each partition. For other databases (Teradata, Oracle), Ab Initio can perform this parallelization automatically.<\/p>\n<h3>Comparative performance characteristics of Ab Initio working with Hive and GreenPlum.<\/h3>\n<p>\nAn experiment was conducted at Sberbank to compare the performance of the generated MDW graphs for Hive and GreenPlum. In the experiment, Hive had 5 nodes on the same cluster as Ab Initio, while GreenPlum had 4 nodes on a separate cluster. Hence, Hive had a slight advantage over GreenPlum in terms of hardware.<\/p>\n<p>Two pairs of graphs were examined, performing the same task of data updating in Hive and GreenPlum. The graphs generated by the MDW configurator were run:<\/p>\n<ul>\n<li>initial load + incremental load of randomly generated data into a Hive table<\/li>\n<li>initial load + incremental load of randomly generated data into the same GreenPlum table<\/li>\n<\/ul>\n<p>\nIn both cases (Hive and GreenPlum), we executed loads in 10 parallel streams on the same Ab Initio cluster. Intermediate data for Ab Initio calculations was stored in HDFS (in terms of Ab Initio, an MFS layout using HDFS was used). One line of randomly generated data occupied 200 bytes in both cases.<\/p>\n<p>The result was as follows:<\/p>\n<p><b>Hive:<\/b><\/p>\n<p><b>Initial load in Hive<\/b><\/p>\n<p>Inserted rows<br \/>\n6 000 000<br \/>\n60 000 000<br \/>\n600 000 000<\/p>\n<p>Duration of initial load<br \/>\nin seconds<br \/>\n41<br \/>\n203<br \/>\n1 601<\/p>\n<p><b>Incremental load in Hive<\/b><\/p>\n<p>Number of rows that were in<br \/>\nthe target table at the beginning of the experiment<br \/>\n6 000 000<br \/>\n60 000 000<br \/>\n600 000 000<\/p>\n<p>Number of delta rows applied to<br \/>\nthe target table during the experiment<br \/>\n6 000 000<br \/>\n6 000 000<br \/>\n6 000 000<\/p>\n<p>Duration of incremental<br \/>\nin seconds<br \/>\n88<br \/>\n299<br \/>\n<b>2 541<\/b><\/p>\n<p>\n<b>GreenPlum:<\/b><\/p>\n<p><b>Initial load in GreenPlum<\/b><\/p>\n<p>Inserted rows<br \/>\n6 000 000<br \/>\n60 000 000<br \/>\n600 000 000<\/p>\n<p>Duration of initial load<br \/>\nin seconds<br \/>\n72<br \/>\n360<br \/>\n3 631<\/p>\n<p><b>Incremental load in GreenPlum<\/b><\/p>\n<p>Number of rows that were in<br \/>\nthe target table at the beginning of the experiment<br \/>\n6 000 000<br \/>\n60 000 000<br \/>\n600 000 000<\/p>\n<p>Number of delta rows applied to<br \/>\nthe target table during the experiment<br \/>\n6 000 000<br \/>\n6 000 000<br \/>\n6 000 000<\/p>\n<p>Duration of incremental<br \/>\nin seconds<br \/>\n159<br \/>\n199<br \/>\n<b>321<\/b><\/p>\n<p>\nWe see that the speed of the initial load in both Hive and GreenPlum is linearly dependent on the volume of data, and due to better hardware, it is somewhat faster for Hive than for GreenPlum.<\/p>\n<p>The incremental load in Hive also depends linearly on the volume of previously loaded data in the target table and occurs quite slowly as the volume increases. This is due to the need to completely rewrite the target table. This means that applying small changes to large tables is not a very good use case for Hive.<\/p>\n<p>In contrast, the incremental load in GreenPlum is weakly dependent on the volume of previously loaded data in the target table and occurs quite quickly. This is thanks to SQL Joins and the architecture of GreenPlum, which allows for delete operations.<\/p>\n<p>Thus, GreenPlum applies the delta using delete+insert, while Hive does not have delete or update operations, so the entire data array had to be rewritten completely during incremental updates. It's most illustrative to compare the highlighted cells, as they correspond to the most common use case for resource-intensive loads. We see that GreenPlum outperformed Hive in this test by 8 times.<\/p>\n<h3>Ab Initio's operation with GreenPlum in Near Real Time mode.<\/h3>\n<p>\nIn this experiment, we will test the ability of Ab Initio to update the GreenPlum table with randomly generated batches of data in a mode close to real-time. We will consider the GreenPlum table dev42_1_db_usl.TESTING_SUBJ_org_finval, which will be worked on.<\/p>\n<p>We will use three Ab Initio graphs to work with it:<\/p>\n<p>1) Graph Create_test_data.mp \u2013 creates data files in HDFS with 6,000,000 rows in 10 parallel streams. The data is random, structured for insertion into our table.<\/p>\n<p><img decoding=\"async\" alt=\"When you have the scale of Sberbank. Using Ab Initio with Hive and GreenPlum\" src=\"\/wp-content\/uploads\/2020\/07\/8cac605c1c5931313bd016a48fb6384e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"When you have the scale of Sberbank. Using Ab Initio with Hive and GreenPlum\" src=\"\/wp-content\/uploads\/2020\/07\/b86988bf1722329bde60013ba025d600.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n2) Graph mdw_load.day_one.current.dev42_1_db_usl_testing_subj_org_finval.pset \u2013 generated MDW graph for the initializing data insertion into our table in 10 parallel streams (test data generated by graph (1) is used).<\/p>\n<p><img decoding=\"async\" alt=\"When you have the scale of Sberbank. Using Ab Initio with Hive and GreenPlum\" src=\"\/wp-content\/uploads\/2020\/07\/b4228a13c088c6b96abba35e9e58fe8e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n3) Graph mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset \u2013 generated MDW graph for incremental updates of our table in 10 parallel streams using a batch of newly arrived data (deltas) generated by graph (1).<\/p>\n<p><img decoding=\"async\" alt=\"When you have the scale of Sberbank. Using Ab Initio with Hive and GreenPlum\" src=\"\/wp-content\/uploads\/2020\/07\/714a901616cf84e5a1fd7a764373e30f.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nWe will execute the following scenario in NRT mode:<\/p>\n<ul>\n<li>generate 6,000,000 test rows<\/li>\n<li>perform an initializing load by inserting 6,000,000 test rows into an empty table<\/li>\n<li>repeat the incremental load 5 times\n<ul>\n<li>generate 6,000,000 test rows<\/li>\n<li>perform the incremental insertion of 6,000,000 test rows into the table (marking old data with a valid_to_ts expiration time and inserting fresher data with the same primary key).<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>\nThis scenario emulates the real operation mode of a business system \u2013 a sufficiently large batch of new data appears in real-time and is immediately fed into GreenPlum.<\/p>\n<p>Now let's look at the log of the scenario's execution:<\/p>\n<p><i>Start Create_test_data.input.pset at 2020-06-04 11:49:11<br \/>\nFinish Create_test_data.input.pset at 2020-06-04 11:49:37<br \/>\nStart mdw_load.day_one.current.dev42_1_db_usl_testing_subj_org_finval.pset at 2020-06-04 11:49:37<br \/>\nFinish mdw_load.day_one.current.dev42_1_db_usl_testing_subj_org_finval.pset at 2020-06-04 11:50:42<br \/>\nStart Create_test_data.input.pset at 2020-06-04 11:50:42<br \/>\nFinish Create_test_data.input.pset at 2020-06-04 11:51:06<br \/>\nStart mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset at 2020-06-04 11:51:06<br \/>\nFinish mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset at 2020-06-04 11:53:41<br \/>\nStart Create_test_data.input.pset at 2020-06-04 11:53:41<br \/>\nFinish Create_test_data.input.pset at 2020-06-04 11:54:04<br \/>\nStart mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset at 2020-06-04 11:54:04<br \/>\nFinish mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset at 2020-06-04 11:56:51<br \/>\nStart Create_test_data.input.pset at 2020-06-04 11:56:51<br \/>\nFinish Create_test_data.input.pset at 2020-06-04 11:57:14<br \/>\nStart mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset at 2020-06-04 11:57:14<br \/>\nFinish mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset at 2020-06-04 11:59:55<br \/>\nStart Create_test_data.input.pset at 2020-06-04 11:59:55<br \/>\nFinish Create_test_data.input.pset at 2020-06-04 12:00:23<br \/>\nStart mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset at 2020-06-04 12:00:23<br \/>\nFinish mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset at 2020-06-04 12:03:23<br \/>\nStart Create_test_data.input.pset at 2020-06-04 12:03:23<br \/>\nFinish Create_test_data.input.pset at 2020-06-04 12:03:49<br \/>\nStart mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset at 2020-06-04 12:03:49<br \/>\nFinish mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset at 2020-06-04 12:06:46<\/i><\/p>\n<p>Here is the picture:<\/p>\n<p>Graph<br \/>\nStart time<br \/>\nFinish time<br \/>\nLength<\/p>\n<p>Create_test_data.input.pset<br \/>\n04.06.2020 11:49:11<br \/>\n04.06.2020 11:49:37<br \/>\n00:00:26<\/p>\n<p>mdw_load.day_one.current.<br \/>\ndev42_1_db_usl_testing_subj_org_finval.pset<br \/>\n04.06.2020 11:49:37<br \/>\n04.06.2020 11:50:42<br \/>\n00:01:05<\/p>\n<p>Create_test_data.input.pset<br \/>\n04.06.2020 11:50:42<br \/>\n04.06.2020 11:51:06<br \/>\n00:00:24<\/p>\n<p>mdw_load.regular.current.<br \/>\ndev42_1_db_usl_testing_subj_org_finval.pset<br \/>\n04.06.2020 11:51:06<br \/>\n04.06.2020 11:53:41<br \/>\n00:02:35<\/p>\n<p>Create_test_data.input.pset<br \/>\n04.06.2020 11:53:41<br \/>\n04.06.2020 11:54:04<br \/>\n00:00:23<\/p>\n<p>mdw_load.regular.current.<br \/>\ndev42_1_db_usl_testing_subj_org_finval.pset<br \/>\n04.06.2020 11:54:04<br \/>\n04.06.2020 11:56:51<br \/>\n00:02:47<\/p>\n<p>Create_test_data.input.pset<br \/>\n04.06.2020 11:56:51<br \/>\n04.06.2020 11:57:14<br \/>\n00:00:23<\/p>\n<p>mdw_load.regular.current.<br \/>\ndev42_1_db_usl_testing_subj_org_finval.pset<br \/>\n04.06.2020 11:57:14<br \/>\n04.06.2020 11:59:55<br \/>\n00:02:41<\/p>\n<p>Create_test_data.input.pset<br \/>\n04.06.2020 11:59:55<br \/>\n04.06.2020 12:00:23<br \/>\n00:00:28<\/p>\n<p>mdw_load.regular.current.<br \/>\ndev42_1_db_usl_testing_subj_org_finval.pset<br \/>\n04.06.2020 12:00:23<br \/>\n04.06.2020 12:03:23<br \/>\n00:03:00<\/p>\n<p>Create_test_data.input.pset<br \/>\n04.06.2020 12:03:23<br \/>\n04.06.2020 12:03:49<br \/>\n00:00:26<\/p>\n<p>mdw_load.regular.current.<br \/>\ndev42_1_db_usl_testing_subj_org_finval.pset<br \/>\n04.06.2020 12:03:49<br \/>\n04.06.2020 12:06:46<br \/>\n00:02:57<\/p>\n<p>\nWe can see that 6,000,000 incremental rows are processed in 3 minutes, which is quite fast.<br \/>\nThe data in the target table is distributed as follows:<\/p>\n<pre><code class=\"sql\">select valid_from_ts, valid_to_ts, count(1), min(sk), max(sk) from dev42_1_db_usl.TESTING_SUBJ_org_finval group by valid_from_ts, valid_to_ts order by 1,2;<\/code><\/pre>\n<p>\n<img decoding=\"async\" alt=\"When you have the scale of Sberbank. Using Ab Initio with Hive and GreenPlum\" src=\"\/wp-content\/uploads\/2020\/07\/baefcfd8142f4ad6275333e3dcfccf94.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nYou can see the correlation of the inserted data with the moments of graph launches.<br \/>\nThis means we can run incremental data loading in GreenPlum using Ab Initio very frequently and observe a high insertion speed of this data into GreenPlum. Of course, running it once a second isn't feasible, as Ab Initio, like any ETL tool, requires a startup time.<\/p>\n<h2>Conclusion<\/h2>\n<p>\nCurrently, Ab Initio is used in Sberbank to build a Unified Semantic Data Layer (USDL). This project entails creating a unified version of the states of various banking business entities. Information comes from various sources, which are prepared as replicas in Hadoop. Based on business needs, a data model is created, and data transformations are described. Ab Initio loads information into the USDL, and the loaded data not only holds intrinsic value for the business but also serves as a source for building data marts. The product's functionality allows various systems (Hive, Greenplum, Teradata, Oracle) to be used as recipients, enabling easy preparation of data for the business in various required formats.<\/p>\n<p>Ab Initio's capabilities are vast; for example, the accompanying MDW framework allows for building technical and business data lineage 'out of the box.' For developers, Ab Initio provides the opportunity not to 'reinvent the wheel' but to utilize a multitude of existing functional components, which essentially act as libraries needed for data handling.<\/p>\n<blockquote><p>Author \u2014 an expert of the Sberbank professional community SberProfi DWH\/BigData. The SberProfi DWH\/BigData professional community is responsible for developing competencies in areas such as the Hadoop ecosystem, Teradata, Oracle DB, GreenPlum, as well as BI tools Qlik, SAP BO, Tableau, and others.<\/p><\/blockquote>\n<p>Source: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/sberbank\/blog\/509936\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u0437\u0430\u0434 \u043f\u0435\u0440\u0435\u0434 \u043d\u0430\u043c\u0438 \u0432\u0441\u0442\u0430\u043b \u0432\u043e\u043f\u0440\u043e\u0441 \u0432\u044b\u0431\u043e\u0440\u0430 ETL-\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 BigData. \u0420\u0430\u043d\u0435\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0432\u0448\u0435\u0435\u0441\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u0435 Informatica BDM \u043d\u0435 \u0443\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u043b\u043e \u043d\u0430\u0441 \u0438\u0437-\u0437\u0430 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438. \u0415\u0451 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0432\u0435\u043b\u043e\u0441\u044c \u043a \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0443 \u043f\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0443 \u043a\u043e\u043c\u0430\u043d\u0434 spark-submit. \u041d\u0430 \u0440\u044b\u043d\u043a\u0435 \u0438\u043c\u0435\u043b\u043e\u0441\u044c \u043d\u0435 \u0442\u0430\u043a \u043c\u043d\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u043e\u0432, \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435 \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u044b\u0445 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0442\u0435\u043c \u043e\u0431\u044a\u0451\u043c\u043e\u043c \u0434\u0430\u043d\u043d\u044b\u0445, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043c\u044b \u0438\u043c\u0435\u0435\u043c \u0434\u0435\u043b\u043e \u043a\u0430\u0436\u0434\u044b\u0439 \u0434\u0435\u043d\u044c. [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":87610,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-87609","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u0437\u0430\u0434 \u043f\u0435\u0440\u0435\u0434 \u043d\u0430\u043c\u0438 \u0432\u0441\u0442\u0430\u043b \u0432\u043e\u043f\u0440\u043e\u0441 \u0432\u044b\u0431\u043e\u0440\u0430 ETL-\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 BigData. \u0420\u0430\u043d\u0435\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0432\u0448\u0435\u0435\u0441\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u0435 Informatica BDM \u043d\u0435 \u0443\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u043b\u043e \u043d\u0430\u0441 \u0438\u0437-\u0437\u0430 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/kogda-u-vas-sberovskie-masshtaby-ispolzovanie-ab-initio-pri-rabote-s-hive-i-greenplum\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041a\u043e\u0433\u0434\u0430 \u0443 \u0432\u0430\u0441 \u0441\u0431\u0435\u0440\u043e\u0432\u0441\u043a\u0438\u0435 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u044b. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 Ab Initio \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 Hive \u0438 GreenPlum | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u0437\u0430\u0434 \u043f\u0435\u0440\u0435\u0434 \u043d\u0430\u043c\u0438 \u0432\u0441\u0442\u0430\u043b \u0432\u043e\u043f\u0440\u043e\u0441 \u0432\u044b\u0431\u043e\u0440\u0430 ETL-\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 BigData. \u0420\u0430\u043d\u0435\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0432\u0448\u0435\u0435\u0441\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u0435 Informatica BDM \u043d\u0435 \u0443\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u043b\u043e \u043d\u0430\u0441 \u0438\u0437-\u0437\u0430 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/kogda-u-vas-sberovskie-masshtaby-ispolzovanie-ab-initio-pri-rabote-s-hive-i-greenplum\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-07-08T23:42:11+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-07-08T23:42:11+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47When you have savings at scale. Using Ab Initio for working with Hive and GreenPlum | ProHoster","description":"Some time ago, we faced the challenge of choosing an ETL tool for working with Big Data. The previously used solution, Informatica BDM, did not meet our needs due to its limited functionality.","canonical_url":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/kogda-u-vas-sberovskie-masshtaby-ispolzovanie-ab-initio-pri-rabote-s-hive-i-greenplum","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"en_US","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041a\u043e\u0433\u0434\u0430 \u0443 \u0432\u0430\u0441 \u0441\u0431\u0435\u0440\u043e\u0432\u0441\u043a\u0438\u0435 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u044b. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 Ab Initio \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 Hive \u0438 GreenPlum | ProHoster","og:description":"\u041d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u0437\u0430\u0434 \u043f\u0435\u0440\u0435\u0434 \u043d\u0430\u043c\u0438 \u0432\u0441\u0442\u0430\u043b \u0432\u043e\u043f\u0440\u043e\u0441 \u0432\u044b\u0431\u043e\u0440\u0430 ETL-\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 BigData. \u0420\u0430\u043d\u0435\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0432\u0448\u0435\u0435\u0441\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u0435 Informatica BDM \u043d\u0435 \u0443\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u043b\u043e \u043d\u0430\u0441 \u0438\u0437-\u0437\u0430 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438.","og:url":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/kogda-u-vas-sberovskie-masshtaby-ispolzovanie-ab-initio-pri-rabote-s-hive-i-greenplum","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-07-08T23:42:11+00:00","article:modified_time":"2020-07-08T23:42:11+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"87609","title":null,"description":null,"keywords":null,"keyphrases":null,"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":null,"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":"","isEnabled":true},"graphs":[]},"schema_type":null,"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":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 13:47:29","updated":"2026-02-22 15:29:30","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts\/87609","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/comments?post=87609"}],"version-history":[{"count":1,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts\/87609\/revisions"}],"predecessor-version":[{"id":162163,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts\/87609\/revisions\/162163"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/media\/87610"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/media?parent=87609"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/categories?post=87609"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/tags?post=87609"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}