{"id":9345,"date":"2016-03-28T14:41:06","date_gmt":"2016-03-28T18:41:06","guid":{"rendered":"http:\/\/www.iri.com\/blog\/?p=9345"},"modified":"2018-02-12T10:39:20","modified_gmt":"2018-02-12T15:39:20","slug":"generating-test-client-data","status":"publish","type":"post","link":"https:\/\/beta.iri.com\/blog\/test-data\/generating-test-client-data\/","title":{"rendered":"Generating Test Client Data"},"content":{"rendered":"<p><a style=\"color: #1155cc; text-decoration: underline;\" href=\"http:\/\/www.iri.com\/products\/rowgen\">IRI RowGen<\/a> software creates test data you can customize to meet specific needs. It supports the formats and techniques that make your test sets as <a style=\"color: #1155cc; text-decoration: underline;\" href=\"http:\/\/www.iri.com\/blog\/test-data\/making-realistic-test-data-production\/\">realistic<\/a> as you want them to be. In this article, I am using RowGen to generate realistic master, or dimensional, data in a flat file that can be used in other set files or database tables.<\/p>\n<p>The base test set I\u2019m creating contains client records that could represent a patient, borrower, or any account with a primary and secondary name. These test names would be inter-dependent, and would not, in reality, change often; e.g., where the second name is the co-signer on a loan the first name opened. I\u2019m also generating dynamic numbers to represent realistic transaction values within the file.<\/p>\n<p style=\"font-weight: bold;\"><span style=\"font-weight: bold;\"><span style=\"font-weight: bold;\">How RowGen Works<\/span><\/span><\/p>\n<p>RowGen synthesizes data according to the values and structures specified in 4GL job scripts. These scripts are either handwritten or auto generated in the <a style=\"color: #1155cc; text-decoration: underline;\" href=\"http:\/\/www.iri.com\/products\/workbench\/rowgen-gui\">GUI for RowGen<\/a> (or for <a style=\"color: #1155cc; text-decoration: underline;\" href=\"http:\/\/www.iri.com\/products\/workbench\/voracity-gui\">Voracity<\/a>) called IRI Workbench, built on Eclipse\u2122.<\/p>\n<p>For any given column of data, RowGen can:<\/p>\n<ul>\n<li style=\"margin: 5px 0;\">randomly generate data according to the data type and width you specify<\/li>\n<li style=\"margin: 5px 0;\">randomly select data from a set file of new values and formats you define on the fly<\/li>\n<li style=\"margin: 5px 0;\">randomly select values from a pre-existing set of real values.<\/li>\n<\/ul>\n<p>The best way to produce the most realistic test data is by using set files in the job scripts. RowGen\u2019s forte is helping you create data sets that can be used to create bigger and better data sets. In fact, in the RowGen GUI, the New Test DB Job creation wizard uses this core capability to build entire <a style=\"color: #1155cc; text-decoration: underline;\" href=\"http:\/\/www.iri.com\/solutions\/test-data\/database-test-data\">RDB and EDW prototypes<\/a> with referential integrity by creating and loading interdependent sets automatically. RowGen even allows you to choose from among several random selection methods and customize the distribution of values.<\/p>\n<p>Set files consist of one or more columns of data separated by tabs. IRI provides set files for things such as names, cities, states, etc. You can also create set files from existing files or columns in a database. When only a few values are needed, such as <span style=\"font-style: italic;\">yes<\/span> and <span style=\"font-style: italic;\">no<\/span>, inline set files can be used. The inline set values are contained within the field statement of the job script.<\/p>\n<p style=\"font-weight: bold;\"><span style=\"font-weight: bold;\"><span style=\"font-weight: bold;\">Planning the Customer Set<\/span><\/span><\/p>\n<p>Suppose you want to create test data for a customer-related application that will support referential integrity in an application or test database. The customer information is the data that remains relatively constant, and will be linked to more transient information such as dated transactions. To accomplish this, we simultaneously generate, in one record, all the information about the client that needs to remain consistent throughout any processing that might occur elsewhere. This master test set can be put in one table or file, and it can be used to build other tables or files.<\/p>\n<p>The first step is to decide which pieces of information are necessary and what set files are to be used in the job script. Then create any set files that do not already exist. Next, where applicable, decide on the minimum and maximum size of each numeric field or column. For these test records, I will create:<\/p>\n<ul>\n<li style=\"margin: 5px 0;\">Account Number: The value will consist of 2 fields. The first, called Acct_Code has an A, B, C, D, or E, will be obtained from an inline set. The second field, called Acct_Digits, consists of 15 digits.<\/li>\n<li style=\"margin: 5px 0;\">Transaction Limit: This number represents how many thousands of dollars can be in one transaction; the maximum amount is 50. We will use a numeric set file called <span style=\"font-weight: bold;\">limit.set<\/span> that contains:<\/li>\n<pre>[50,20]\r\n[19,10]\r\n[19,10]\r\n[9,7]\r\n6\r\n5\r\n4\r\n3\r\n2\r\n1\r\n1<\/pre>\n<li style=\"list-style-type: none; margin: 5px 0;\">The lines with brackets indicate a range. A square bracket indicates that the number next to the bracket should be included in the range. A<span> round bracket <\/span>would exclude a <span>number <\/span>from<span> the range. <\/span>When RowGen runs, it will populate a value <span>randomly picked from any given line in the set file. If the line is a bracketed range, then a value from within that range <\/span>is randomly <span>selected<\/span>\/produced<span>. Any lines repeated in the set file will be included in the random line selection as <\/span>often as the line<span> appears<\/span>. This is a (one) way of defining <a style=\"color: #1155cc; text-decoration: underline;\" href=\"http:\/\/www.iri.com\/blog\/test-data\/distribution-test-data-values-rowgen\/\">frequency distribution<\/a> in RowGen.<\/li>\n<li style=\"margin: 5px 0;\"><span>Primary First Name: This will use the IRI-provided <\/span><span style=\"font-weight: bold;\">names_first.set <\/span>file<\/li>\n<li style=\"margin: 5px 0;\"><span><span>Primary Last Name: This will use the IRI-provided <\/span><span style=\"font-weight: bold;\">names_last.set <\/span><span>file<br \/>\n                <\/span><\/span><\/li>\n<li style=\"margin: 5px 0;\"><span>Primary Birth Date: This will use the ISO date format with a lower limit of Jan 1, 1910, and an upper limit of Dec 31, 1997. We will use a date set file called <\/span><span style=\"font-weight: bold;\">P_Bday.set<\/span><span> that<\/span> contains<span>:<br \/>\n                <\/span><\/li>\n<pre>[1910-01-01,1949-12-31]\r\n[1950-01-01,1980-12-31]\r\n[1950-01-01,1980-12-31]\r\n[1981-01-01,1990-12-31]\r\n[1981-01-01,1990-12-31]\r\n[1991-01-01,1997-12-31]\r\n<\/pre>\n<li style=\"list-style-type: none; margin: 5px 0;\"><span>The rules <\/span>are the same<span><span> for date set files and numeric set files.<\/span><\/span><\/li>\n<li style=\"margin: 5px 0;\"><span><span><span>Secondary First Name: This will use the IRI-provided <\/span><span style=\"font-weight: bold;\">names_first.set <\/span><span>file<\/span><\/span><\/span><\/li>\n<li style=\"margin: 5px 0;\"><span>Secondary Last Name: Very often the secondary Last Name is the same as the primary Last Name. Therefore, we will make that true 75% of the time by creating a field called code <\/span>containing an<span> inline set file <\/span>of<span> [0,0,0,1]. Whenever the code field has a 0 value, the Secondary Last Name will be the same as the Primary Last Name. If the code is 1, then the name will be selected from the<\/span> <span style=\"font-weight: bold;\">names_last.set <\/span><span>file.<\/span><span style=\"font-weight: bold;\"><br \/>\n                <\/span><\/li>\n<li style=\"margin: 5px 0;\"><span style=\"font-size: 11pt;\"><span style=\"font-size: 11pt;\"><span>Secondary Birth Date: This will use the ISO date format with a lower limit of Jan 1, 1910, and an upper limit of Dec 31, 2015. We will use a date set file called <\/span><span style=\"font-weight: bold;\">S_Bday.set<\/span><span> that is as follows:<br \/>\n                <\/span><\/span><\/span><\/p>\n<pre>[1910-01-01,1949-12-31]\r\n[1950-01-01,1980-12-31]\r\n[1950-01-01,1980-12-31] \r\n[1981-01-01,1990-12-31]\r\n[1981-01-01,1990-12-31] \r\n[1991-01-01,1997-12-31] \r\n[1998-01-01,2015-12-31]<\/pre>\n<\/li>\n<\/ul>\n<ul>\n<li style=\"margin: 5px 0;\"><span>Street Address, consist<\/span>ing of three fields: <span>a street number with up to 5 digits, the actual street name, and a street type, such as Road or Avenue. The <\/span>STREET_NUM field values<span> will be <\/span>selected from <span>an inline NUMERIC se<\/span>t in the full range defined as <span>[1,99999]. The <\/span>STREET_NAME<span> will be randomly selected from the IRI-provided<\/span> <span style=\"font-weight: bold;\">street_names.set<\/span> file. STREET_TYPE<span> will be <\/span>randomly s<span>elected from the IRI<\/span>&#8211;<span>provided <\/span><span style=\"font-weight: bold;\">street_types.set<\/span><span> f<\/span>ile<span><span>.<\/span><\/span><\/li>\n<li style=\"margin: 5px 0;\"><span>City: The city should be <\/span>one <span>that actually exists in the indicated state. It will be selected from the second column of the <\/span>\u2018joined pairs\u2019 <span>set file <\/span><span style=\"font-weight: bold;\">state_2char_city.set<\/span><span><span>.<\/span><\/span><\/li>\n<li style=\"margin: 5px 0;\"><span>State: The state will have two characters selected from the first column of the<\/span> same set file.<\/li>\n<\/ul>\n<p>The two composite fields will be concatenated with the use of a feature called TEMPLATES. A TEMPLATE is defined with a \/TEMPLATE statement, and then it is referenced in the \/FIELD statement with the STRUCTURE parameter.<\/p>\n<p>Note that we could add more items to the client information records, but this will suffice to demonstrate several techniques that can be used in the generation process.<\/p>\n<p>Next, we need to decide how many client records must be generated. For this example, we will only generate 15 records, but we could just as easily generate 500, 1,000,000, or billions of rows. We want unique records with pipe-delimited fields for easier reading and database loading. We could also save them in tab-delimited format, with one or more fields for use in other RowGen test sets, like this one. Or we could do both at once. In fact, there is no limit to the number or format of RowGen target files or tables defined in the same generation script and job.<\/p>\n<p><span style=\"font-weight: bold;\"><span style=\"font-weight: bold;\">Specifying the Job<\/span><\/span><\/p>\n<p>Every RowGen job script has at least three sections:<\/p>\n<ul>\n<li style=\"margin: 5px 0;\">Input, <span>where the initial fields are generated. <\/span>Either specify a <span>data type<\/span> for random value<span> generation<\/span>, or a set file (and lookup method) for random value selection<span>. <\/span>The number of rows to generate is also defined here.<\/li>\n<li style=\"margin: 5px 0;\">Action,<span> where keys are defined if <\/span>the test data <span>is being sorted<\/span>.<span> We will sort on the account number, <\/span>and specify \/<span>NODUPLICATES so that every client has a unique account number. <\/span>As a result, however, it <span>is possible the final number of records will be less than the number<\/span> we chose to<span> generate.<\/span><\/li>\n<li style=\"margin: 5px 0;\">O<span>utput, <\/span>which consists<span> one or more <\/span>target files, tables, and\/or custom reports<span>.<\/span><\/li>\n<\/ul>\n<p>Below is the RowGen job script for creating the test customer data. \/FIELD statements are in parentheses. There will be a field name, data TYPE, field number designated by POS, and delimiter designated by SEP. Other parameters are defined after that, such as set files. PRECISION indicates the number of decimal places for a NUMERIC TYPE.<\/p>\n<pre>\/INFILE=random_file_placeholder\r\n\/PROCESS=RANDOM\r\n\/INCOLLECT=15 # generate 15 fields\r\n\/FIELD=(Acct_CODE, TYPE=ALPHA, POSITION=1, SEPARATOR=\"|\", SET={ A,B,C,D,E })\r\n\/FIELD=(Acct_Digits, TYPE=DIGIT, POS=2, SEP=\"|\", SIZE=15)\r\n\/FIELD=(Trans_Limit, TYPE=NUMERIC, POS=3, SEP=\"|\", PRECISION=0, SET=\u201dlimit.set\u201d SELECT=ANY)\r\n\/FIELD=(LNAME1, TYPE=ASCII, POS=4, SEP=\"|\", SET=\"names_last.set\")\r\n\/FIELD=(FNAME1, TYPE=ASCII, POS=5, SEP=\"|\", SET=\"names_first.set\")\r\n\/FIELD=(PBDAY, TYPE=ISO_DATE, POS=6, SEP=\"|\", SET=\u201d P_Bday.set\u201d SELECT=ANY)\r\n\/FIELD=(NAME_CODE, TYPE=DIGIT, POS=7, SEP=\"|\",SET={ 0,0,0,1 })\r\n\/FIELD=(FNAME2, TYPE=ALPHA, POS=8, SEP=\"|\", SET=\"names_first.set\")\r\n\/FIELD=(SBDAY, TYPE=ISO_DATE, POS=9, SEP=\"|\", SET= \u201cS_Bday.set\u201d SELECT=ANY)\r\n\/FIELD=(STREET_NUM, TYPE=NUMERIC, POS=10, SEP=\"|\", PRECISION=0, SET={ [1,99999] })\r\n\/FIELD=(STREET_NAME, TYPE=ASCII, POS=11, SEP=\"|\", SET=\"street_names.set\" SELECT=ANY)\r\n\/FIELD=(STREET_TYPE, TYPE=ASCII, POS=12, SEP=\"|\", SET=\".street_types.set\" SELECT=ANY)\r\n\/FIELD=(CITY, TYPE=ASCII, POS=13, SEP=\"|\", SET=\"state_2char_city.set\" SELECT=ROW[2])\r\n\/FIELD=(STATE, TYPE=ALPHA_DIGIT, POS=14, SEP=\"|\", SET=\"state_2char_city.set\" SELECT=ROW[1])\r\n\r\n\/NODUPLICATES # Make sure each record is unique with respect to the Account Number\r\n\/KEY= Acct_CODE\r\n\/KEY= Acct_Digits\r\n\r\n\/OUTFILE=client.dat\r\n\/PROCESS=RECORD\r\n\/TEMPLATE=(AcctNum=\"%s%s\") # Concatenates 2 string fields\r\n\/TEMPLATE=(Address=\"%s %s %s\") # Concatenates 3 string fields with a space between each\r\n\/FIELD=(AcctNumber, TYPE=ASCII, POS=1, SEP=\"|\", STRUCTURE=AcctNum(Acct_CODE,Acct_Digits))\r\n\/FIELD=(Trans_Limit, TYPE=NUMERIC, POS=2, SEP=\"|\", PRECISION=0)\r\n\/FIELD=(LNAME1, TYPE=ASCII, POS=3, SEP=\"|\")\r\n\/FIELD=(FNAME1, TYPE=ASCII, POS=4, SEP=\"|\")\r\n\/FIELD=(PBDAY, TYPE=ISO_DATE, POS=5, SEP=\"|\")\r\n\/FIELD=(LNAME2, TYPE=ASCII, POS=6, SEP=\"|\", IF NAME_CODE EQ 0 THEN LNAME1 ELSE SET=\"names_last.set\")\r\n\/FIELD=(FNAME2, TYPE=ALPHA, POS=7, SEP=\"|\")\r\n\/FIELD=(SBDAY, TYPE=ISO_DATE, POS=8, SEP=\"|\")\r\n\/FIELD=(StreetAddress, TYPE=ASCII, POS=9, SEP=\"|\", STRUCTURE=Address(STREET_NUM,STREET_NAME,STREET_TYPE))\r\n\/FIELD=(CITY, TYPE=ASCII, POS=10, SEP=\"|\")\r\n\/FIELD=(STATE, TYPE=ALPHA_DIGIT, POS=11, SEP=\"|\")\r\n<\/pre>\n<p>You can run this script in the IRI Workbench or on the command line with:<\/p>\n<p style=\"font-family: Courier New;\"><span style=\"font-family: Courier New;\"><span style=\"font-family: Courier New;\">rowgen \/specification=genclient.rcl<\/span><\/span><\/p>\n<p><span style=\"font-weight: bold;\"><span style=\"font-weight: bold;\"><br \/>\n    Using the Results<\/span><\/span><\/p>\n<p>This will generate output similar to the following:<\/p>\n<pre>A041228567690798|15|Huddleston|Jarrod|1921-04-04|Beltz|Rudolf|1982-08-06|23484 Hilda Heights|Owensville|MO\r\nA284391085036017|19|Rubinstein|Romona|1995-03-27|Rubinstein|Phyliss|1984-12-16|91115 Red Bird Trace|Lakeport|CA\r\nA554707733795739|1|Wagnon|Von|1944-05-26|Wagnon|Rona|1997-03-18|79903 Blue Ridge Street|San Jose|CA\r\nA940444121953751|13|Borum|Elvira|1993-01-11|Burney|Shelby|1940-01-09|53835 Adams Artery|Fredonia|NY\r\nB498416663279606|13|Galvin|Sanjuanita|1980-08-03|Galvin|Alvin|1989-02-07|37182 Outlaw Boulevard|Ponca City|OK\r\nB665089089214940|10|Brinker|Lucie|1962-04-27|Brinker|Kelley|1985-10-28|41512 Rosemary Trace|Bellmawr|NJ\r\nC092836176730933|16|Guillotte|Von|1984-03-14|Guillotte|Peggie|1988-12-17|50676 Whitley Avenue|Marlborough|MA\r\nC346991978386191|13|Manjarrez|Harriet|1996-06-08|Manjarrez|Karrie|1999-03-28|88221 North Chase Corridor|Plainview|TX\r\nC744423272297425|2|Olsson|Claudia|1975-01-07|Olsson|Lavern|1994-10-21|47048 Michael Trace|Salmon|ID\r\nC847549307203805|4|Spradley|Concepcion|1917-10-21|Spradley|Ahmad|1972-11-09|7045 Sanderson Loop|Wallace|NC\r\nC865940707690079|1|Jonson|Alonso|1990-04-03|Jonson|Jared|1965-07-16|62832 Baker Chapel Corridor|Lake Stevens|WA\r\nD552053977641891|18|Murdock|Wanda|1960-10-22|Murdock|Ann|1915-04-04|48010 Gracie Grove|Moultrie|GA\r\nD889743001706813|5|Shuey|Jeff|1978-06-28|Shuey|Monty|1953-10-08|6358 Elkin Avenue|Streamwood|IL\r\nE229826294718256|1|Shuford|Freida|1955-04-06|Shuford|Von|1920-10-02|96925 Leslie Village|Nashville|AR\r\nE864261095027054|2|Hocking|Nicola|1976-05-12|Henrickson|Josh|1967-06-20|34785 Squire Course|Palm Desert|CA\r\n<\/pre>\n<p>From this initial set file, I now have the basis of a transaction system or database. I can load the data in this set file into a table where the RowGen GUI can be used to build more sets from columns. With values the same in the other tables, referential integrity is established. So if you need to test a database performing joins, IRI CoSort (<a style=\"color: #1155cc; text-decoration: underline;\" href=\"http:\/\/www.iri.com\/products\/cosort\/sortcl\">SortCL<\/a>) scripts to capture changes in files, or something else, you can use RowGen to prototype a relational application.<\/p>\n<p>For example, my system might use the account numbers in this file in a billing system. For test purposes, we can generate a master product file in a similar manner to the client information file above. A third transaction file (or table) may contain a product SKU (or medical billing code or bank fee) from the second dimensional file, along with the account number from the first file. When a purchase is made by a person with an account number in my base file, the billing application can invoice the address associated with that person.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>IRI RowGen software creates test data you can customize to meet specific needs. It supports the formats and techniques that make your test sets as realistic as you want them to be. In this article, I am using RowGen to generate realistic master, or dimensional, data in a flat file that can be used in<\/p>\n<div><a class=\"btn-filled btn\" href=\"https:\/\/beta.iri.com\/blog\/test-data\/generating-test-client-data\/\" title=\"Generating Test Client Data\">Read More<\/a><\/div>\n","protected":false},"author":10,"featured_media":11863,"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":[1016,927,71,1018,907,92,546,526,789,537,324,1017,316,240,750,1015],"class_list":["post-9345","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-test-data","tag-database-table","tag-dimensional-data","tag-eclipse","tag-edw","tag-flat-file","tag-gui","tag-iri-cosort","tag-iri-rowgen","tag-iri-voracity","tag-job-script","tag-master-data","tag-rdb","tag-realistic","tag-referential-integrity","tag-set-file","tag-sortcl-generate-test-data"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v23.3 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Generating Test Client Data - IRI<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/beta.iri.com\/blog\/test-data\/generating-test-client-data\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Generating Test Client Data - IRI\" \/>\n<meta property=\"og:description\" content=\"IRI RowGen software creates test data you can customize to meet specific needs. It supports the formats and techniques that make your test sets as realistic as you want them to be. In this article, I am using RowGen to generate realistic master, or dimensional, data in a flat file that can be used inRead More\" \/>\n<meta property=\"og:url\" content=\"https:\/\/beta.iri.com\/blog\/test-data\/generating-test-client-data\/\" \/>\n<meta property=\"og:site_name\" content=\"IRI\" \/>\n<meta property=\"article:published_time\" content=\"2016-03-28T18:41:06+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2018-02-12T15:39:20+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/beta.iri.com\/blog\/wp-content\/uploads\/2016\/03\/wind-turbines.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"744\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Susan Gegner\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Susan Gegner\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"11 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/beta.iri.com\/blog\/test-data\/generating-test-client-data\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/beta.iri.com\/blog\/test-data\/generating-test-client-data\/\"},\"author\":{\"name\":\"Susan Gegner\",\"@id\":\"https:\/\/beta.iri.com\/blog\/#\/schema\/person\/87be5da567628ab9396ca81170f36d63\"},\"headline\":\"Generating Test Client Data\",\"datePublished\":\"2016-03-28T18:41:06+00:00\",\"dateModified\":\"2018-02-12T15:39:20+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/beta.iri.com\/blog\/test-data\/generating-test-client-data\/\"},\"wordCount\":1564,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/beta.iri.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/beta.iri.com\/blog\/test-data\/generating-test-client-data\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/beta.iri.com\/blog\/wp-content\/uploads\/2016\/03\/wind-turbines.jpg\",\"keywords\":[\"database table\",\"dimensional data\",\"Eclipse\",\"EDW\",\"flat file\",\"GUI\",\"IRI CoSort\",\"IRI RowGen\",\"IRI Voracity\",\"job script\",\"Master Data\",\"RDB\",\"realistic\",\"referential integrity\",\"set file\",\"SortCL generate test data\"],\"articleSection\":[\"Test Data\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/beta.iri.com\/blog\/test-data\/generating-test-client-data\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/beta.iri.com\/blog\/test-data\/generating-test-client-data\/\",\"url\":\"https:\/\/beta.iri.com\/blog\/test-data\/generating-test-client-data\/\",\"name\":\"Generating Test Client Data - IRI\",\"isPartOf\":{\"@id\":\"https:\/\/beta.iri.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/beta.iri.com\/blog\/test-data\/generating-test-client-data\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/beta.iri.com\/blog\/test-data\/generating-test-client-data\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/beta.iri.com\/blog\/wp-content\/uploads\/2016\/03\/wind-turbines.jpg\",\"datePublished\":\"2016-03-28T18:41:06+00:00\",\"dateModified\":\"2018-02-12T15:39:20+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/beta.iri.com\/blog\/test-data\/generating-test-client-data\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/beta.iri.com\/blog\/test-data\/generating-test-client-data\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/beta.iri.com\/blog\/test-data\/generating-test-client-data\/#primaryimage\",\"url\":\"https:\/\/beta.iri.com\/blog\/wp-content\/uploads\/2016\/03\/wind-turbines.jpg\",\"contentUrl\":\"https:\/\/beta.iri.com\/blog\/wp-content\/uploads\/2016\/03\/wind-turbines.jpg\",\"width\":1024,\"height\":744,\"caption\":\"wind turbines on sea\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/beta.iri.com\/blog\/test-data\/generating-test-client-data\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/beta.iri.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Generating Test Client Data\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/beta.iri.com\/blog\/#website\",\"url\":\"https:\/\/beta.iri.com\/blog\/\",\"name\":\"IRI\",\"description\":\"Total Data Management Blog\",\"publisher\":{\"@id\":\"https:\/\/beta.iri.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/beta.iri.com\/blog\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/beta.iri.com\/blog\/#organization\",\"name\":\"IRI\",\"url\":\"https:\/\/beta.iri.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/beta.iri.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/beta.iri.com\/blog\/wp-content\/uploads\/2019\/02\/iri-logo-total-data-management-small-1.png\",\"contentUrl\":\"https:\/\/beta.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:\/\/beta.iri.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/beta.iri.com\/blog\/#\/schema\/person\/87be5da567628ab9396ca81170f36d63\",\"name\":\"Susan Gegner\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/beta.iri.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/2b1ca5592a65d44483351292cf1ae00a?s=96&d=blank&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/2b1ca5592a65d44483351292cf1ae00a?s=96&d=blank&r=g\",\"caption\":\"Susan Gegner\"},\"url\":\"https:\/\/beta.iri.com\/blog\/author\/susang\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Generating Test Client Data - IRI","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:\/\/beta.iri.com\/blog\/test-data\/generating-test-client-data\/","og_locale":"en_US","og_type":"article","og_title":"Generating Test Client Data - IRI","og_description":"IRI RowGen software creates test data you can customize to meet specific needs. It supports the formats and techniques that make your test sets as realistic as you want them to be. In this article, I am using RowGen to generate realistic master, or dimensional, data in a flat file that can be used inRead More","og_url":"https:\/\/beta.iri.com\/blog\/test-data\/generating-test-client-data\/","og_site_name":"IRI","article_published_time":"2016-03-28T18:41:06+00:00","article_modified_time":"2018-02-12T15:39:20+00:00","og_image":[{"width":1024,"height":744,"url":"https:\/\/beta.iri.com\/blog\/wp-content\/uploads\/2016\/03\/wind-turbines.jpg","type":"image\/jpeg"}],"author":"Susan Gegner","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Susan Gegner","Est. reading time":"11 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/beta.iri.com\/blog\/test-data\/generating-test-client-data\/#article","isPartOf":{"@id":"https:\/\/beta.iri.com\/blog\/test-data\/generating-test-client-data\/"},"author":{"name":"Susan Gegner","@id":"https:\/\/beta.iri.com\/blog\/#\/schema\/person\/87be5da567628ab9396ca81170f36d63"},"headline":"Generating Test Client Data","datePublished":"2016-03-28T18:41:06+00:00","dateModified":"2018-02-12T15:39:20+00:00","mainEntityOfPage":{"@id":"https:\/\/beta.iri.com\/blog\/test-data\/generating-test-client-data\/"},"wordCount":1564,"commentCount":0,"publisher":{"@id":"https:\/\/beta.iri.com\/blog\/#organization"},"image":{"@id":"https:\/\/beta.iri.com\/blog\/test-data\/generating-test-client-data\/#primaryimage"},"thumbnailUrl":"https:\/\/beta.iri.com\/blog\/wp-content\/uploads\/2016\/03\/wind-turbines.jpg","keywords":["database table","dimensional data","Eclipse","EDW","flat file","GUI","IRI CoSort","IRI RowGen","IRI Voracity","job script","Master Data","RDB","realistic","referential integrity","set file","SortCL generate test data"],"articleSection":["Test Data"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/beta.iri.com\/blog\/test-data\/generating-test-client-data\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/beta.iri.com\/blog\/test-data\/generating-test-client-data\/","url":"https:\/\/beta.iri.com\/blog\/test-data\/generating-test-client-data\/","name":"Generating Test Client Data - IRI","isPartOf":{"@id":"https:\/\/beta.iri.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/beta.iri.com\/blog\/test-data\/generating-test-client-data\/#primaryimage"},"image":{"@id":"https:\/\/beta.iri.com\/blog\/test-data\/generating-test-client-data\/#primaryimage"},"thumbnailUrl":"https:\/\/beta.iri.com\/blog\/wp-content\/uploads\/2016\/03\/wind-turbines.jpg","datePublished":"2016-03-28T18:41:06+00:00","dateModified":"2018-02-12T15:39:20+00:00","breadcrumb":{"@id":"https:\/\/beta.iri.com\/blog\/test-data\/generating-test-client-data\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/beta.iri.com\/blog\/test-data\/generating-test-client-data\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/beta.iri.com\/blog\/test-data\/generating-test-client-data\/#primaryimage","url":"https:\/\/beta.iri.com\/blog\/wp-content\/uploads\/2016\/03\/wind-turbines.jpg","contentUrl":"https:\/\/beta.iri.com\/blog\/wp-content\/uploads\/2016\/03\/wind-turbines.jpg","width":1024,"height":744,"caption":"wind turbines on sea"},{"@type":"BreadcrumbList","@id":"https:\/\/beta.iri.com\/blog\/test-data\/generating-test-client-data\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/beta.iri.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Generating Test Client Data"}]},{"@type":"WebSite","@id":"https:\/\/beta.iri.com\/blog\/#website","url":"https:\/\/beta.iri.com\/blog\/","name":"IRI","description":"Total Data Management Blog","publisher":{"@id":"https:\/\/beta.iri.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/beta.iri.com\/blog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/beta.iri.com\/blog\/#organization","name":"IRI","url":"https:\/\/beta.iri.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/beta.iri.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/beta.iri.com\/blog\/wp-content\/uploads\/2019\/02\/iri-logo-total-data-management-small-1.png","contentUrl":"https:\/\/beta.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:\/\/beta.iri.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/beta.iri.com\/blog\/#\/schema\/person\/87be5da567628ab9396ca81170f36d63","name":"Susan Gegner","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/beta.iri.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/2b1ca5592a65d44483351292cf1ae00a?s=96&d=blank&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/2b1ca5592a65d44483351292cf1ae00a?s=96&d=blank&r=g","caption":"Susan Gegner"},"url":"https:\/\/beta.iri.com\/blog\/author\/susang\/"}]}},"jetpack_featured_media_url":"https:\/\/beta.iri.com\/blog\/wp-content\/uploads\/2016\/03\/wind-turbines.jpg","_links":{"self":[{"href":"https:\/\/beta.iri.com\/blog\/wp-json\/wp\/v2\/posts\/9345"}],"collection":[{"href":"https:\/\/beta.iri.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/beta.iri.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/beta.iri.com\/blog\/wp-json\/wp\/v2\/users\/10"}],"replies":[{"embeddable":true,"href":"https:\/\/beta.iri.com\/blog\/wp-json\/wp\/v2\/comments?post=9345"}],"version-history":[{"count":24,"href":"https:\/\/beta.iri.com\/blog\/wp-json\/wp\/v2\/posts\/9345\/revisions"}],"predecessor-version":[{"id":12019,"href":"https:\/\/beta.iri.com\/blog\/wp-json\/wp\/v2\/posts\/9345\/revisions\/12019"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/beta.iri.com\/blog\/wp-json\/wp\/v2\/media\/11863"}],"wp:attachment":[{"href":"https:\/\/beta.iri.com\/blog\/wp-json\/wp\/v2\/media?parent=9345"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/beta.iri.com\/blog\/wp-json\/wp\/v2\/categories?post=9345"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/beta.iri.com\/blog\/wp-json\/wp\/v2\/tags?post=9345"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}