{"id":15866,"date":"2022-05-26T11:10:18","date_gmt":"2022-05-26T15:10:18","guid":{"rendered":"https:\/\/www.iri.com\/blog\/?p=15866"},"modified":"2025-11-12T06:31:22","modified_gmt":"2025-11-12T11:31:22","slug":"synthesizing-realistic-data-in-rowgen-with-set-files","status":"publish","type":"post","link":"https:\/\/www.iri.com\/blog\/test-data\/synthesizing-realistic-data-in-rowgen-with-set-files\/","title":{"rendered":"Synthesize Realistic DB Test Data with Set Files"},"content":{"rendered":"<p><b><i>Abstract<\/i><\/b><i><span style=\"font-weight: 400;\">: This article demonstrates how to synthesize realistic data to populate a full database schema with referential integrity in one operation via the <\/span><\/i><a href=\"https:\/\/docs.google.com\/document\/d\/15EF9ls0VMt7ZVMQpED4PIZHcpg51HHme\/edit#heading=h.gjdgxs\"><b><i>IRI RowGen<\/i><\/b><\/a> <i><span style=\"font-weight: 400;\">New Set File and<\/span><\/i> <i><span style=\"font-weight: 400;\">New Database Test Data Job wizards in the <\/span><\/i><a href=\"https:\/\/www.iri.com\/products\/workbench\/rowgen-gui\"><b><i>IRI Workbench<\/i><\/b><\/a> <i><span style=\"font-weight: 400;\">GUI for RowGen, built on Eclipse<\/span><\/i><\/p>\n<p><span style=\"font-weight: 400;\">RowGen builds rows of data in flat files, database tables, and reports, through either random <strong>generation<\/strong> of column values in specified data types, ranges, and distributions,<\/span><i><span style=\"font-weight: 400;\"> or<\/span><\/i><span style=\"font-weight: 400;\"> random <strong>selection<\/strong> of data from lookup tables or external \u201cset files.\u201d The choice of either method can be specified ad hoc, or as cross-table rules, on a column-by-column basis. As the title of this article implies however, we are covering just the latter method herein.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Set files provide greater realism for synthesized columns that contain names, places, addresses, and other proper nouns or non-numeric values. IRI ships several canned set files with the product, but they are otherwise very easy to obtain or create. See <a href=\"https:\/\/www.iri.com\/blog\/test-data\/all-about-iri-set-files-a-primer\/\">this article<\/a> for more details.<\/span><\/p>\n<h5><b>Set File Creation<\/b><\/h5>\n<p><span style=\"font-weight: 400;\">Set files are text files composed of one or more tab-separated columns of values or ranges.\u00a0 In the latter case, the set file would just contain a specially formatted range of values like dates between 01-01-1976 and 12-31-2001.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Set files work to facilitate test data generation by serving as the source of lookup values from which data is randomly selected and inserted into target fields. Set files must contain ASCII or EBCDIC readable characters and by convention, are given the filename extension \u201c.set\u201d.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">There are many ways in which set files can be created including with a text editor, extracting fields from data files, through the <\/span><b>IRI RowGen<\/b> <i><span style=\"font-weight: 400;\">New Set File<\/span><\/i><span style=\"font-weight: 400;\"> wizard on the <\/span><b>IRI Workbench<\/b><span style=\"font-weight: 400;\">, and more. In this demonstration, I will show you how to create set files using the RowGen <\/span><i><span style=\"font-weight: 400;\">New Set File <\/span><\/i><span style=\"font-weight: 400;\">wizard. These set files will be used later to populate our database.<\/span><\/p>\n<p style=\"text-align: center;\"><strong>Follow along with our YouTube video!<\/strong><\/p>\n<p><iframe loading=\"lazy\" title=\"Populating DB with Realistic Test Data from Scratch Using IRI RowGen\" width=\"1140\" height=\"641\" src=\"https:\/\/www.youtube.com\/embed\/fOvwDSmFIL0?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/p>\n<h5><b>Creating Set Files Using Wizards<\/b><\/h5>\n<p><span style=\"font-weight: 400;\">From the top toolbar menu, select the <\/span><i><span style=\"font-weight: 400;\">New Set File <\/span><\/i><span style=\"font-weight: 400;\">wizard from the RowGen dropdown menu, shown in the screenshot below outlined in red.<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-15872 aligncenter\" src=\"\/blog\/wp-content\/uploads\/2022\/05\/new-set-file-wizard-300x56.png\" alt=\"\" width=\"766\" height=\"143\" srcset=\"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2022\/05\/new-set-file-wizard-300x56.png 300w, https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2022\/05\/new-set-file-wizard-768x144.png 768w, https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2022\/05\/new-set-file-wizard.png 966w\" sizes=\"(max-width: 766px) 100vw, 766px\" \/><\/p>\n<p><span style=\"font-weight: 400;\">Once selected, the \u201cNew Set File Wizard Selection\u201d window will appear. In this window, the user is prompted to \u201cSelect a new set file wizard\u201d from the list of wizards that create different types of set files. These include:<\/span><\/p>\n<ol>\n<li style=\"list-style-type: none;\">\n<ol>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Bucketing Values<\/b><span style=\"font-weight: 400;\"> &#8211; Create a set file from creating discrete items by grouping the values of these items into categories that are defined by named ranges or named groups called buckets.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Compound Data Values &#8211; <\/b><span style=\"font-weight: 400;\">Create a set file by combining generated components and literal values. Here data values are created to have a specific structure and are generated in pieces.\u00a0<\/span><\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<ul>\n<li aria-level=\"1\"><b>Date Range Generator &#8211; <\/b><span style=\"font-weight: 400;\">Create a set file consisting of a random date, time, or timestamp range.<\/span><\/li>\n<\/ul>\n<ul>\n<li aria-level=\"1\"><b>Email Generator &#8211;<\/b><span style=\"font-weight: 400;\"> Create a set file of random email addresses.<\/span><\/li>\n<\/ul>\n<ul>\n<li aria-level=\"1\"><b>Pseudo Set &#8211; <\/b><span style=\"font-weight: 400;\">Create a pseudo set file by using values from database tables or flat files in both columns.<\/span><\/li>\n<\/ul>\n<ul>\n<li aria-level=\"1\"><b>Pseudo Set from Column &#8211; <\/b><span style=\"font-weight: 400;\">Create a pseudo set file by extracting values from database tables and scrambling data.<\/span><\/li>\n<\/ul>\n<ul>\n<li aria-level=\"1\"><b>Range or Literal Values &#8211; <\/b><span style=\"font-weight: 400;\">Create a set file from individual literal entries or from ranges that are added to the set file.<\/span><\/li>\n<\/ul>\n<ul>\n<li aria-level=\"1\"><b>Set from Column &#8211;<\/b><span style=\"font-weight: 400;\"> Create a set file by extracting values from a database table.<\/span><\/li>\n<\/ul>\n<p>Select the wizard based on the type of set file needed then click the \u201c<i>Next &gt;<\/i>\u201d button. Then follow the screens after in order to create your desired set files. <a href=\"https:\/\/www.iri.com\/blog\/iri\/iri-workbench\/creating-set-files-in-iri-workbench\/\">This article<\/a> covers set files and how to use these wizards in detail.<br \/>\n<b><\/b><\/p>\n<h5><b>New Database Test Data Job<\/b><\/h5>\n<p><span style=\"font-weight: 400;\">Now that we have our set files created for our database, we can use the <a href=\"https:\/\/www.iri.com\/blog\/vldb-operations\/how-to-generate-db-test-data-2\/\">New Database Test Data Job wizard<\/a> in the RowGen menu to import them into our database. The screenshots below show how this process is done.<\/span><\/p>\n<p><span style=\"font-weight: 400;\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-15873 aligncenter\" src=\"\/blog\/wp-content\/uploads\/2022\/05\/New-Database-Test-Data-Job-wizard-300x60.png\" alt=\"\" width=\"805\" height=\"161\" srcset=\"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2022\/05\/New-Database-Test-Data-Job-wizard-300x60.png 300w, https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2022\/05\/New-Database-Test-Data-Job-wizard-1024x206.png 1024w, https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2022\/05\/New-Database-Test-Data-Job-wizard-768x155.png 768w, https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2022\/05\/New-Database-Test-Data-Job-wizard.png 1043w\" sizes=\"(max-width: 805px) 100vw, 805px\" \/>\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Once the New Database Test Data Job wizard is launched, the first screen displayed is the Define Destination screen. The screen allows you to specify the location, name, and options for the job.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">In this example, I specified the folder name Retail and named the job new_batch, as seen below. After this screen is filled in with the correct information for the job click the \u201cNext\u201d button at the bottom of the Define Destination screen.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-15875 aligncenter\" src=\"\/blog\/wp-content\/uploads\/2022\/05\/New-DB-Test-Data-Job-300x122.png\" alt=\"\" width=\"765\" height=\"311\" srcset=\"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2022\/05\/New-DB-Test-Data-Job-300x122.png 300w, https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2022\/05\/New-DB-Test-Data-Job.png 725w\" sizes=\"(max-width: 765px) 100vw, 765px\" \/><\/span><\/p>\n<p><span style=\"font-weight: 400;\">After the \u201cNext\u201d button is selected on the Define Destination screen the Database Object Selection screen will appear. In this screen, the connection profile and the tables that are to be used in the job are selected.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">After all the tables needed for the job are selected, click \u201cNext\u201d at the bottom of the Database Object Selection widow. In this example, I selected 6 tables within the SQL Server Connection Profile, as seen below.<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-15876 aligncenter\" src=\"\/blog\/wp-content\/uploads\/2022\/05\/Database-Object-Selection-300x245.png\" alt=\"\" width=\"649\" height=\"530\" srcset=\"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2022\/05\/Database-Object-Selection-300x245.png 300w, https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2022\/05\/Database-Object-Selection.png 732w\" sizes=\"(max-width: 649px) 100vw, 649px\" \/><\/p>\n<p><span style=\"font-weight: 400;\">The next screen in the wizard is the Options window, where the parameters for generating test data will be entered. In the \u201cDefault Rows to Generate\u201d box, enter the number of rows that each table will have if the \u201cuse default\u201d column is marked as true.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">If the number of rows for a certain table needs to be different from the default shown, uncheck the \u201cuse default\u201d column and specify the desired number of rows in the \u201cRows to generate column\u201d.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Next, select the Loader to use for the job in the \u201cLoader\u201d drop-down box. Then check \u201cTruncate tables before insert\u201d and \u201cTemporarily disable foreign keys of tables before insert\u201d at the bottom of the window. Click <\/span><i><span style=\"font-weight: 400;\">Next &gt; <\/span><\/i><span style=\"font-weight: 400;\">to move on:<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-15877 aligncenter\" src=\"\/blog\/wp-content\/uploads\/2022\/05\/Option-New-Dbase-Test-data-300x240.png\" alt=\"\" width=\"655\" height=\"524\" srcset=\"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2022\/05\/Option-New-Dbase-Test-data-300x240.png 300w, https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2022\/05\/Option-New-Dbase-Test-data.png 733w\" sizes=\"(max-width: 655px) 100vw, 655px\" \/><\/p>\n<p><span style=\"font-weight: 400;\">The next window to appear in this wizard covers Field Modification Rules. This is where matchers for <\/span><a href=\"https:\/\/www.iri.com\/blog\/iri\/iri-workbench\/data-generation-rules-workbench\/\"><span style=\"font-weight: 400;\">field generation rules<\/span><\/a><span style=\"font-weight: 400;\"> can be added or removed.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">You can <\/span><i><span style=\"font-weight: 400;\">Browse \u2026 <\/span><\/i><span style=\"font-weight: 400;\">to select a previously created rule or <\/span><i><span style=\"font-weight: 400;\">Create \u2026<\/span><\/i><span style=\"font-weight: 400;\"> a new rule for each field. If you do not want to apply a common rule to like columns in your targets, you can just leave those out, as shown here:\u00a0<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-15878 aligncenter\" src=\"\/blog\/wp-content\/uploads\/2022\/05\/field-modification-rules-300x245.png\" alt=\"\" width=\"653\" height=\"533\" srcset=\"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2022\/05\/field-modification-rules-300x245.png 300w, https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2022\/05\/field-modification-rules.png 731w\" sizes=\"(max-width: 653px) 100vw, 653px\" \/><\/p>\n<p><span style=\"font-weight: 400;\">Click <\/span><i><span style=\"font-weight: 400;\">Create \u2026<\/span><\/i><span style=\"font-weight: 400;\"> in the \u201cField Modification Rules\u201d window to display the \u201cRule Matcher\u201d window where you can name and associate a matcher for a generation rule with a specific column (or pattern for the column name) in your target table(s).<\/span><\/p>\n<p><span style=\"font-weight: 400;\">In this case, we want all tables with the string ADDRESS_ID in the column name to be populated with randomly selected values from a set file containing street addresses:<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-15879 aligncenter\" src=\"\/blog\/wp-content\/uploads\/2022\/05\/Pattern-address-id-rule-matcher-300x243.png\" alt=\"\" width=\"619\" height=\"502\" srcset=\"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2022\/05\/Pattern-address-id-rule-matcher-300x243.png 300w, https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2022\/05\/Pattern-address-id-rule-matcher.png 693w\" sizes=\"(max-width: 619px) 100vw, 619px\" \/><\/p>\n<p><span style=\"font-weight: 400;\">Specify the rule name in the <\/span><i><span style=\"font-weight: 400;\">Rule Name: <\/span><\/i><span style=\"font-weight: 400;\">box and provide the <\/span><i><span style=\"font-weight: 400;\">Details<\/span><\/i><span style=\"font-weight: 400;\"> for the rule by either selecting one already created via <\/span><i><span style=\"font-weight: 400;\">Browse \u2026 <\/span><\/i><span style=\"font-weight: 400;\">or <\/span><i><span style=\"font-weight: 400;\">Create \u2026 <\/span><\/i><span style=\"font-weight: 400;\">a new rule via the <\/span><i><span style=\"font-weight: 400;\">N<\/span><\/i><span style=\"font-weight: 400;\">ew Field Rule Wizard Selection dialog.\u00a0<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-15880 aligncenter\" src=\"\/blog\/wp-content\/uploads\/2022\/05\/set-file-selection-new-field-rule-293x300.png\" alt=\"\" width=\"557\" height=\"570\" srcset=\"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2022\/05\/set-file-selection-new-field-rule-293x300.png 293w, https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2022\/05\/set-file-selection-new-field-rule.png 686w\" sizes=\"(max-width: 557px) 100vw, 557px\" \/><\/p>\n<p><span style=\"font-weight: 400;\">The Set File selection window example below shows a typical file specification:<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-15881 aligncenter\" src=\"\/blog\/wp-content\/uploads\/2022\/05\/typical-file-specification-300x105.png\" alt=\"\" width=\"654\" height=\"229\" srcset=\"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2022\/05\/typical-file-specification-300x105.png 300w, https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2022\/05\/typical-file-specification.png 680w\" sizes=\"(max-width: 654px) 100vw, 654px\" \/><\/p>\n<p><span style=\"font-weight: 400;\">Click \u201cFinish\u201d to exit this wizard and insert the rule details into the Rule Matcher window.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">To add the appropriate matcher to the column, click <\/span><i><span style=\"font-weight: 400;\">Add<\/span><\/i><span style=\"font-weight: 400;\"> in the Rule Matchers window. This will open the Rule Matcher Details dialog where you can add the rule matcher details and then click \u201cOK\u201d.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\"> <img loading=\"lazy\" decoding=\"async\" class=\" wp-image-15882 aligncenter\" src=\"\/blog\/wp-content\/uploads\/2022\/05\/Pattern-address-id-rule-matcher-and-300x195.png\" alt=\"\" width=\"588\" height=\"382\" srcset=\"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2022\/05\/Pattern-address-id-rule-matcher-and-300x195.png 300w, https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2022\/05\/Pattern-address-id-rule-matcher-and.png 678w\" sizes=\"(max-width: 588px) 100vw, 588px\" \/><\/span><\/p>\n<p><span style=\"font-weight: 400;\">Once all the appropriate rules have been added to the \u201cField Modification Rules\u201d window click <\/span><i><span style=\"font-weight: 400;\">Next &gt;<\/span><\/i><span style=\"font-weight: 400;\">. A summary window like this will display all the rules that will be applied to the target DB:<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-15883 aligncenter\" src=\"\/blog\/wp-content\/uploads\/2022\/05\/summary-new-db-239x300.png\" alt=\"\" width=\"668\" height=\"839\" srcset=\"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2022\/05\/summary-new-db-239x300.png 239w, https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2022\/05\/summary-new-db-768x964.png 768w, https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2022\/05\/summary-new-db.png 806w\" sizes=\"(max-width: 668px) 100vw, 668px\" \/><\/p>\n<p><span style=\"font-weight: 400;\">If everything in the summary looks good, click \u201cFinish\u201d at the bottom of the window to build the test data generation job. A multi-table task workflow dialog representing all the RowGen job scripts built is created:\u00a0<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-15884 aligncenter\" src=\"\/blog\/wp-content\/uploads\/2022\/05\/multi-table-woekflow-300x55.png\" alt=\"\" width=\"1115\" height=\"204\" srcset=\"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2022\/05\/multi-table-woekflow-300x55.png 300w, https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2022\/05\/multi-table-woekflow-1024x187.png 1024w, https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2022\/05\/multi-table-woekflow-768x140.png 768w, https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2022\/05\/multi-table-woekflow-1536x281.png 1536w, https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2022\/05\/multi-table-woekflow.png 1110w\" sizes=\"(max-width: 1115px) 100vw, 1115px\" \/><\/p>\n<p><span style=\"font-weight: 400;\">You can also double click on any of these task blocks to see a table-specific \u201ctransform mapping diagram\u201d reflecting the flow of columns from the generation to the output phase. The underlying job scripts will appear in the <\/span><i><span style=\"font-weight: 400;\">new_batch<\/span><\/i><span style=\"font-weight: 400;\"> folder in the project explorer.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">You are now ready to run the batch job by executing the .bat or .sh file that was built in that folder, either from Workbench or the command line, or from any CI\/CD pipeline, job scheduler, or <\/span><a href=\"https:\/\/www.iri.com\/blog\/vldb-operations\/test-data-management-test-data-generation-provisioning\/\"><span style=\"font-weight: 400;\">third-party test data provisioning application<\/span><\/a><span style=\"font-weight: 400;\">.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">To run your job, right-click on the batch file and click <\/span><i><span style=\"font-weight: 400;\">Run As<\/span><\/i><span style=\"font-weight: 400;\"> a <\/span><i><span style=\"font-weight: 400;\">Batch Program<\/span><\/i><span style=\"font-weight: 400;\"> as shown here:\u00a0<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-15885 aligncenter\" src=\"\/blog\/wp-content\/uploads\/2022\/05\/run-as-a-batch-program-284x300.png\" alt=\"\" width=\"786\" height=\"830\" srcset=\"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2022\/05\/run-as-a-batch-program-284x300.png 284w, https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2022\/05\/run-as-a-batch-program-768x812.png 768w, https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2022\/05\/run-as-a-batch-program.png 882w\" sizes=\"(max-width: 786px) 100vw, 786px\" \/><\/p>\n<p><span style=\"font-weight: 400;\">This actually runs the entire multi-table generation process where all the set file and otherwise generated data is automatically inserted into the corresponding tables and columns. By having the rule applied to like columns, referential integrity can also be preserved.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">An example of one of the target test tables is shown here:<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-15886 aligncenter\" src=\"\/blog\/wp-content\/uploads\/2022\/05\/endResultRowGen-300x200.jpg\" alt=\"\" width=\"983\" height=\"655\" srcset=\"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2022\/05\/endResultRowGen-300x200.jpg 300w, https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2022\/05\/endResultRowGen-768x513.jpg 768w\" sizes=\"(max-width: 983px) 100vw, 983px\" \/><\/p>\n<p><span style=\"font-weight: 400;\">If you have any questions about this process or would like more information, please email <\/span><a href=\"mailto:rowgen@iri.com\"><span style=\"font-weight: 400;\">rowgen@iri.com<\/span><\/a><span style=\"font-weight: 400;\"> or leave a comment below.\u00a0<\/span><\/p>\n<section>\n<div class=\"container plain-width\">\n<div class=\"faq-section\">\n<h3>Frequently Asked Questions (FAQs)<\/h3>\n<div class=\"faq-item\">\n<div class=\"faq-question\">1. What are set files in IRI RowGen and why are they useful? <i class=\"faq-icon fa fa-plus\"><\/i><i class=\"faq-icon fa fa-minus\"><\/i><\/div>\n<div class=\"faq-answer\">Set files are text files that contain lists or ranges of values used as lookup sources for generating realistic test data. They are useful because they allow users of the <a href=\"https:\/\/www.iri.com\/products\/rowgen\">IRI RowGen<\/a> test data generation tool to populate columns with meaningful, contextually correct values such as names, addresses, or dates, making the generated data more realistic.<\/div>\n<\/div>\n<div class=\"faq-item\">\n<div class=\"faq-question\">2. How can I create set files in IRI Workbench? <i class=\"faq-icon fa fa-plus\"><\/i><i class=\"faq-icon fa fa-minus\"><\/i><\/div>\n<div class=\"faq-answer\">You can create set files using the RowGen New Set File wizard in the IRI Workbench <a href=\"https:\/\/www.iri.com\/products\/workbench\/rowgen-gui\">GUI for RowGen<\/a>. The wizard supports multiple creation methods including bucketing values, combining data into compound formats, generating random dates or emails, or extracting and scrambling data from existing tables or files.<\/div>\n<\/div>\n<div class=\"faq-item\">\n<div class=\"faq-question\">3. What is the New Database Test Data Job wizard used for? <i class=\"faq-icon fa fa-plus\"><\/i><i class=\"faq-icon fa fa-minus\"><\/i><\/div>\n<div class=\"faq-answer\">The <a href=\"https:\/\/www.iri.com\/blog\/test-data\/synthesizing-realistic-data-in-rowgen-with-set-files\/\">New Database Test Data Job<\/a> wizard allows you to use set files and generation rules to populate an entire database schema with synthetic data in one operation. It automates row generation, ensures referential integrity, and provides options to truncate tables and temporarily disable foreign keys before loading data.<\/div>\n<\/div>\n<div class=\"faq-item\">\n<div class=\"faq-question\">4. How does RowGen preserve referential integrity across tables? <i class=\"faq-icon fa fa-plus\"><\/i><i class=\"faq-icon fa fa-minus\"><\/i><\/div>\n<div class=\"faq-answer\">RowGen applies common rules and set files consistently across related columns, such as primary and foreign key fields, to ensure that relationships between tables remain valid in the generated test database. It knows how to set that up by parsing the DDL create and alter tables statements for the selected database instance <a href=\"https:\/\/www.iri.com\/services\/training\/courseware#db-connections\">connected in IRI Workbench<\/a>.<\/div>\n<\/div>\n<div class=\"faq-item\">\n<div class=\"faq-question\">5. Can I control the number of rows generated for each table? <i class=\"faq-icon fa fa-plus\"><\/i><i class=\"faq-icon fa fa-minus\"><\/i><\/div>\n<div class=\"faq-answer\">Yes. During the job setup, you can specify a default row count for all tables and override the number of rows for individual tables. This gives you control over the volume of data generated for different parts of your schema.<\/div>\n<\/div>\n<div class=\"faq-item\">\n<div class=\"faq-question\">6. What kinds of rules can I apply when generating test data? <i class=\"faq-icon fa fa-plus\"><\/i><i class=\"faq-icon fa fa-minus\"><\/i><\/div>\n<div class=\"faq-answer\">You can apply rules for random selection from set files, value scrambling, range-based generation, and more. These rules can be mapped to specific columns or column name patterns so that like fields are populated consistently.<\/div>\n<\/div>\n<div class=\"faq-item\">\n<div class=\"faq-question\">7. Can RowGen integrate with CI\/CD pipelines for automated testing? <i class=\"faq-icon fa fa-plus\"><\/i><i class=\"faq-icon fa fa-minus\"><\/i><\/div>\n<div class=\"faq-answer\">Yes. Once the test data generation jobs are created, you can run or schedule them from IRI Workbench, the command line, or integrate them into CI\/CD pipelines or other scheduled jobs for automated, repeatable data provisioning.<\/div>\n<\/div>\n<div class=\"faq-item\">\n<div class=\"faq-question\">8. How does RowGen ensure data realism in the generated test database? <i class=\"faq-icon fa fa-plus\"><\/i><i class=\"faq-icon fa fa-minus\"><\/i><\/div>\n<div class=\"faq-answer\">By using set files with real or curated values, along with generation functions for distributions, formats, and relationships, RowGen produces test data that mimics production data while avoiding the exposure of sensitive information.<\/div>\n<\/div>\n<div class=\"faq-item\">\n<div class=\"faq-question\">9. Can I mix synthetic data with masked data from production sources? <i class=\"faq-icon fa fa-plus\"><\/i><i class=\"faq-icon fa fa-minus\"><\/i><\/div>\n<div class=\"faq-answer\">Yes. RowGen supports hybrid approaches where some columns use masked production data and others are populated with synthetic values from set files. This approach balances realism with data privacy.<\/div>\n<\/div>\n<div class=\"faq-item\">\n<div class=\"faq-question\">10. What are the benefits of using RowGen over manual test data creation? <i class=\"faq-icon fa fa-plus\"><\/i><i class=\"faq-icon fa fa-minus\"><\/i><\/div>\n<div class=\"faq-answer\">Using RowGen saves time, reduces human error, ensures referential integrity, and provides realistic, privacy-compliant data at scale. It also allows repeatable, automated test data provisioning, which is essential for continuous testing workflows.<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n","protected":false},"excerpt":{"rendered":"<p>Abstract: This article demonstrates how to synthesize realistic data to populate a full database schema with referential integrity in one operation via the IRI RowGen New Set File and New Database Test Data Job wizards in the IRI Workbench GUI for RowGen, built on Eclipse RowGen builds rows of data in flat files, database tables,<\/p>\n<div><a class=\"btn-filled btn\" href=\"https:\/\/www.iri.com\/blog\/test-data\/synthesizing-realistic-data-in-rowgen-with-set-files\/\" title=\"Synthesize Realistic DB Test Data with Set Files\">Read More<\/a><\/div>\n","protected":false},"author":184,"featured_media":15871,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_exactmetrics_skip_tracking":false,"_exactmetrics_sitenote_active":false,"_exactmetrics_sitenote_note":"","_exactmetrics_sitenote_category":0,"footnotes":""},"categories":[29],"tags":[201,1837,89,173,526,1690,49,785,1639,191],"class_list":["post-15866","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-test-data","tag-automate-database-test-data-generation","tag-data-synthesis","tag-database-test-data","tag-database-testing","tag-iri-rowgen","tag-realistic-data","tag-rowgen","tag-set-files","tag-synthetic-data","tag-test-data-generation"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v23.4 (Yoast SEO v23.4) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Synthesize Realistic DB Test Data with Set Files - IRI<\/title>\n<meta name=\"description\" content=\"Learn to synthesize and populate realistic database test data while preserving realism and referential integrity using IRI RowGen.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.iri.com\/blog\/test-data\/synthesizing-realistic-data-in-rowgen-with-set-files\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Synthesize Realistic DB Test Data with Set Files\" \/>\n<meta property=\"og:description\" content=\"Learn to synthesize and populate realistic database test data while preserving realism and referential integrity using IRI RowGen.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.iri.com\/blog\/test-data\/synthesizing-realistic-data-in-rowgen-with-set-files\/\" \/>\n<meta property=\"og:site_name\" content=\"IRI\" \/>\n<meta property=\"article:published_time\" content=\"2022-05-26T15:10:18+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-11-12T11:31:22+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2022\/05\/Article-image.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1213\" \/>\n\t<meta property=\"og:image:height\" content=\"280\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Brooke VanDerLinden\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Brooke VanDerLinden\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"12 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.iri.com\/blog\/test-data\/synthesizing-realistic-data-in-rowgen-with-set-files\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.iri.com\/blog\/test-data\/synthesizing-realistic-data-in-rowgen-with-set-files\/\"},\"author\":{\"name\":\"Brooke VanDerLinden\",\"@id\":\"https:\/\/www.iri.com\/blog\/#\/schema\/person\/5edef6756b720f4d41536362cab7494a\"},\"headline\":\"Synthesize Realistic DB Test Data with Set Files\",\"datePublished\":\"2022-05-26T15:10:18+00:00\",\"dateModified\":\"2025-11-12T11:31:22+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.iri.com\/blog\/test-data\/synthesizing-realistic-data-in-rowgen-with-set-files\/\"},\"wordCount\":1945,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.iri.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.iri.com\/blog\/test-data\/synthesizing-realistic-data-in-rowgen-with-set-files\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2022\/05\/Article-image.png\",\"keywords\":[\"automate database test data generation\",\"Data Synthesis\",\"database test data\",\"database testing\",\"IRI RowGen\",\"realistic data\",\"RowGen\",\"set files\",\"synthetic data\",\"test data generation\"],\"articleSection\":[\"Test Data\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.iri.com\/blog\/test-data\/synthesizing-realistic-data-in-rowgen-with-set-files\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.iri.com\/blog\/test-data\/synthesizing-realistic-data-in-rowgen-with-set-files\/\",\"url\":\"https:\/\/www.iri.com\/blog\/test-data\/synthesizing-realistic-data-in-rowgen-with-set-files\/\",\"name\":\"Synthesize Realistic DB Test Data with Set Files - IRI\",\"isPartOf\":{\"@id\":\"https:\/\/www.iri.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.iri.com\/blog\/test-data\/synthesizing-realistic-data-in-rowgen-with-set-files\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.iri.com\/blog\/test-data\/synthesizing-realistic-data-in-rowgen-with-set-files\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2022\/05\/Article-image.png\",\"datePublished\":\"2022-05-26T15:10:18+00:00\",\"dateModified\":\"2025-11-12T11:31:22+00:00\",\"description\":\"Learn to synthesize and populate realistic database test data while preserving realism and referential integrity using IRI RowGen.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.iri.com\/blog\/test-data\/synthesizing-realistic-data-in-rowgen-with-set-files\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.iri.com\/blog\/test-data\/synthesizing-realistic-data-in-rowgen-with-set-files\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.iri.com\/blog\/test-data\/synthesizing-realistic-data-in-rowgen-with-set-files\/#primaryimage\",\"url\":\"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2022\/05\/Article-image.png\",\"contentUrl\":\"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2022\/05\/Article-image.png\",\"width\":1213,\"height\":280},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.iri.com\/blog\/test-data\/synthesizing-realistic-data-in-rowgen-with-set-files\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.iri.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Synthesize Realistic DB Test Data with Set Files\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.iri.com\/blog\/#website\",\"url\":\"https:\/\/www.iri.com\/blog\/\",\"name\":\"IRI\",\"description\":\"Total Data Management Blog\",\"publisher\":{\"@id\":\"https:\/\/www.iri.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.iri.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.iri.com\/blog\/#organization\",\"name\":\"IRI\",\"url\":\"https:\/\/www.iri.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.iri.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2019\/02\/iri-logo-total-data-management-small-1.png\",\"contentUrl\":\"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2019\/02\/iri-logo-total-data-management-small-1.png\",\"width\":750,\"height\":206,\"caption\":\"IRI\"},\"image\":{\"@id\":\"https:\/\/www.iri.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.iri.com\/blog\/#\/schema\/person\/5edef6756b720f4d41536362cab7494a\",\"name\":\"Brooke VanDerLinden\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.iri.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/72a64e82e69524f7c3a95467303d5a5d?s=96&d=blank&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/72a64e82e69524f7c3a95467303d5a5d?s=96&d=blank&r=g\",\"caption\":\"Brooke VanDerLinden\"},\"url\":\"https:\/\/www.iri.com\/blog\/author\/vanderlinden-brooketitans-easternflorida-edu\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Synthesize Realistic DB Test Data with Set Files - IRI","description":"Learn to synthesize and populate realistic database test data while preserving realism and referential integrity using IRI RowGen.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.iri.com\/blog\/test-data\/synthesizing-realistic-data-in-rowgen-with-set-files\/","og_locale":"en_US","og_type":"article","og_title":"Synthesize Realistic DB Test Data with Set Files","og_description":"Learn to synthesize and populate realistic database test data while preserving realism and referential integrity using IRI RowGen.","og_url":"https:\/\/www.iri.com\/blog\/test-data\/synthesizing-realistic-data-in-rowgen-with-set-files\/","og_site_name":"IRI","article_published_time":"2022-05-26T15:10:18+00:00","article_modified_time":"2025-11-12T11:31:22+00:00","og_image":[{"width":1213,"height":280,"url":"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2022\/05\/Article-image.png","type":"image\/png"}],"author":"Brooke VanDerLinden","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Brooke VanDerLinden","Est. reading time":"12 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.iri.com\/blog\/test-data\/synthesizing-realistic-data-in-rowgen-with-set-files\/#article","isPartOf":{"@id":"https:\/\/www.iri.com\/blog\/test-data\/synthesizing-realistic-data-in-rowgen-with-set-files\/"},"author":{"name":"Brooke VanDerLinden","@id":"https:\/\/www.iri.com\/blog\/#\/schema\/person\/5edef6756b720f4d41536362cab7494a"},"headline":"Synthesize Realistic DB Test Data with Set Files","datePublished":"2022-05-26T15:10:18+00:00","dateModified":"2025-11-12T11:31:22+00:00","mainEntityOfPage":{"@id":"https:\/\/www.iri.com\/blog\/test-data\/synthesizing-realistic-data-in-rowgen-with-set-files\/"},"wordCount":1945,"commentCount":0,"publisher":{"@id":"https:\/\/www.iri.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.iri.com\/blog\/test-data\/synthesizing-realistic-data-in-rowgen-with-set-files\/#primaryimage"},"thumbnailUrl":"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2022\/05\/Article-image.png","keywords":["automate database test data generation","Data Synthesis","database test data","database testing","IRI RowGen","realistic data","RowGen","set files","synthetic data","test data generation"],"articleSection":["Test Data"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.iri.com\/blog\/test-data\/synthesizing-realistic-data-in-rowgen-with-set-files\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.iri.com\/blog\/test-data\/synthesizing-realistic-data-in-rowgen-with-set-files\/","url":"https:\/\/www.iri.com\/blog\/test-data\/synthesizing-realistic-data-in-rowgen-with-set-files\/","name":"Synthesize Realistic DB Test Data with Set Files - IRI","isPartOf":{"@id":"https:\/\/www.iri.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.iri.com\/blog\/test-data\/synthesizing-realistic-data-in-rowgen-with-set-files\/#primaryimage"},"image":{"@id":"https:\/\/www.iri.com\/blog\/test-data\/synthesizing-realistic-data-in-rowgen-with-set-files\/#primaryimage"},"thumbnailUrl":"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2022\/05\/Article-image.png","datePublished":"2022-05-26T15:10:18+00:00","dateModified":"2025-11-12T11:31:22+00:00","description":"Learn to synthesize and populate realistic database test data while preserving realism and referential integrity using IRI RowGen.","breadcrumb":{"@id":"https:\/\/www.iri.com\/blog\/test-data\/synthesizing-realistic-data-in-rowgen-with-set-files\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.iri.com\/blog\/test-data\/synthesizing-realistic-data-in-rowgen-with-set-files\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.iri.com\/blog\/test-data\/synthesizing-realistic-data-in-rowgen-with-set-files\/#primaryimage","url":"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2022\/05\/Article-image.png","contentUrl":"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2022\/05\/Article-image.png","width":1213,"height":280},{"@type":"BreadcrumbList","@id":"https:\/\/www.iri.com\/blog\/test-data\/synthesizing-realistic-data-in-rowgen-with-set-files\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.iri.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Synthesize Realistic DB Test Data with Set Files"}]},{"@type":"WebSite","@id":"https:\/\/www.iri.com\/blog\/#website","url":"https:\/\/www.iri.com\/blog\/","name":"IRI","description":"Total Data Management Blog","publisher":{"@id":"https:\/\/www.iri.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.iri.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.iri.com\/blog\/#organization","name":"IRI","url":"https:\/\/www.iri.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.iri.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2019\/02\/iri-logo-total-data-management-small-1.png","contentUrl":"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2019\/02\/iri-logo-total-data-management-small-1.png","width":750,"height":206,"caption":"IRI"},"image":{"@id":"https:\/\/www.iri.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.iri.com\/blog\/#\/schema\/person\/5edef6756b720f4d41536362cab7494a","name":"Brooke VanDerLinden","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.iri.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/72a64e82e69524f7c3a95467303d5a5d?s=96&d=blank&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/72a64e82e69524f7c3a95467303d5a5d?s=96&d=blank&r=g","caption":"Brooke VanDerLinden"},"url":"https:\/\/www.iri.com\/blog\/author\/vanderlinden-brooketitans-easternflorida-edu\/"}]}},"jetpack_featured_media_url":"https:\/\/www.iri.com\/blog\/wp-content\/uploads\/2022\/05\/Article-image.png","_links":{"self":[{"href":"https:\/\/www.iri.com\/blog\/wp-json\/wp\/v2\/posts\/15866"}],"collection":[{"href":"https:\/\/www.iri.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.iri.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.iri.com\/blog\/wp-json\/wp\/v2\/users\/184"}],"replies":[{"embeddable":true,"href":"https:\/\/www.iri.com\/blog\/wp-json\/wp\/v2\/comments?post=15866"}],"version-history":[{"count":16,"href":"https:\/\/www.iri.com\/blog\/wp-json\/wp\/v2\/posts\/15866\/revisions"}],"predecessor-version":[{"id":18764,"href":"https:\/\/www.iri.com\/blog\/wp-json\/wp\/v2\/posts\/15866\/revisions\/18764"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.iri.com\/blog\/wp-json\/wp\/v2\/media\/15871"}],"wp:attachment":[{"href":"https:\/\/www.iri.com\/blog\/wp-json\/wp\/v2\/media?parent=15866"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.iri.com\/blog\/wp-json\/wp\/v2\/categories?post=15866"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.iri.com\/blog\/wp-json\/wp\/v2\/tags?post=15866"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}