Contents:
In the Join page, you can join your current dataset with another dataset or recipe based upon information that is common to both datasets. For example, you could join together two sets of regional sales data based upon the product identifiers that they both use to track sales. In the Search panel, enter join datasets
.
- A join is a standard operation for merging the data from two different datasets. Some information on joins is provided below.
- You cannot perform joins on columns of Object or Array data type.
- A join operation is different from a union operation. In a union operation, data from one or more datasets is appended to the current dataset, assuming that the columns are identical or very similar. For more information, see Union Page.
Tip: You should perform your join operation as late as possible in your recipe steps. If your joined dataset has not been completely transformed, subsequent steps might impact the data in the dataset to which it was joined. If needed, you can modify your join after its creation. Details are below.
NOTE: Unnest, union, or join transforms may significantly increase the number of rows or columns in your dataset. To prevent overloading the browser's memory, the application may apply a limit function to the results to artificially limit the number of rows displayed in your sample. You can generate a new sample if desired. This limitation is not applied during the job execution.
Before You Begin
- Review your record counts. Before you specify the join, you should review your record counts and the uniqueness of your keys, which should provide an idea of the number of records you may see in the output. Note that the number of output records depends on the type of join and the matches between join keys.
- Review your join key values. If there are variations in the values in your join keys, you may end up with duplicate records in your joined dataset. Look for mismatched or missing values in your join keys, and correct if possible.
- Review the granularity of your data. If you bring together data at a lower fidelity than the source, you can end up with record matches that are not actually matching data. For example, if your timestamps are down-sampled from milliseconds to seconds as part of the join, you may have "matching" timestamps in seconds that were not matches at the millisecond level in the source data.
Step 1 - Select Objects to Join
For the current recipe loaded in the Transformer page, you can select any imported dataset, reference dataset, or recipe to join with the currently loaded data.
Join Object Type | Description |
---|---|
imported dataset | Join is performed on the stored version of the data for any imported dataset to which you have access. If this data is overwritten, the data in the join is changed. |
reference dataset | Join is performed on a reference to a recipe in another flow. If the recipe changes the schema of the data, then the join is affected by those changes. NOTE: You must explicitly create references in the source flow from the source recipe. The reference dataset is then available for inclusion in other flows. |
recipe | You can join to any recipe in your current flow. Tip: Where possible, join to a recipe instead of an imported dataset. With a recipe, you can switch to a random sample and then to use that in the join. |
In the following image, the columns of the current dataset (Point of sale data from region 1) are displayed in the left column. On the right side, you can select the imported dataset, reference dataset, or recipe that you'd like to join with the current dataset. In this case, the REF_PROD.txt
file has been selected, meaning that the join is performed on this imported dataset:
Figure: Join Page
- Select the object to join in. To select the columns (keys) to base on the join and the type of join, click Preview.
Step 2 - Specify Join Parameters
In the preview of the new dataset, you can see how the two datasets have been joined. By default, Designer Cloud Educational attempts to specify the keys to use for the join and the type of join to perform.
- In a join operation, a key corresponds to a column that can be used for matching records between datasets. For example, in a list of products or sales data, the key column is likely to be some form of internal system identifier, which is consistently used across all related datasets.
- Before you accept the join, you should review the selected join keys and the type of join.
- You may also need to specify the columns to include in the joined dataset.
- As needed, you can change the object with which you are joining the first dataset. Click the Data tab, and then click Change Data.
Specify Join Keys
To review and modify the columns used as the keys for the join, click the Join Keys tab.
The following image displays the preview of the currently configured join. It has determined that the item number (Item_Nbr
) field of Region 1 data and the item number (ITEM_NBR
) field from REF_PROD
should be used as the keys for performing the join.
Figure: Review join keys and join type
Specify Other Join Parameters
- From the drop-down, you can select the type of join to apply. For more information, see Join Types below.
- Join keys:
- To make changes to the two join keys, click the Pencil icon.
- In the left part of the panel, select the field from source 1 to use as its key. In the right, select the field from source 2.
- For more information on the other options, see Fuzzy Joins below.
To save changes, click OK.
To remove the two columns as join keys, click the Trash icon.
To add more join keys, click Add.
NOTE: Be careful applying multiple join keys. Depending on the join type, this type of join can greatly expand the size of the generated data.
- To make changes to the two join keys, click the Pencil icon.
- Review the list of available columns, which are displayed for both sources.
- After the currently selected keys, fields from the source 1 are listed, followed by the fields of source 2.
- To modify the settings for these columns, click Edit Settings. For more information, see Join Column Settings below.
- Use the checkboxes to select the columns to include in the joined dataset.
- To add the specified join to your dataset, click Add to Recipe. The joined dataset is displayed in the Transformer page.
Cross Joins
A cross join combines each row of the first data set with each row of the second dataset, where every combination is represented in the output. As a result, the number of total rows in the join are:
Rows(DatasetA) * Rows(DatasetB)
NOTE: Depending on the size of your datasets, a cross join can greatly expand the size of the output, which may increase costs in some environments.
To specify a cross join, delete all join keys.
Fuzzy Joins
By default, matches between join keys are performed on a strict, case-sensitive matching between key values in the selected columns. In some cases, it may be useful to loosen the conditions under which matches are found.
You can select from the following options to perform more fuzzy joins. These options are applied to the join key columns in both sources to attempt to find matches. After the join is executed, no data in either column is changed based on these selections.
Option | Description |
---|---|
Ignore Case | Ignore case differences between the join key values for matching purposes. |
Ignore Special Characters | Ignore all characters that are not alphanumeric, accented Latin characters, or whitespace, prior to testing for a match. |
Ignore Whitespace | Ignore all whitespace characters, including spaces, tabs, carriage returns, and newlines. |
Auto-updating Joins
After you have joined in another set of data, subsequent changes to that data are automatically reflected in the output of the join.
NOTE: After you add your join to the recipe, if the data grid is empty, then the keys that you specified in the join may not have a match in the currently selected sample. You should revisit the keys used in your join. If the join still generates an empty grid on the new sample, you should collect a new sample. See Samples Panel.
Tip: If you must freeze the data in the dataset that you are joining in, you should create a copy of the dataset as a snapshot and join in the copy. See Dataset Details Page.
To join in the copy, edit the join and change the source that is being joined. See Fix Dependency Issues.
Join Column Settings
In the Join Column Settings dialog, you can apply prefixes to column names in the joined dataset, which can be helpful for tracking the source of a column in complex datasets. For example, you may wish to prepend each column from a dataset called, salesRegion01
with the prefix: sR01
.
- Click the checkbox to dynamically update your selected columns in the Join page to always include all columns from the dataset.
- To save your changes, click OK.
Join Types
The following types of joins are supported. For example, the following tables contains information about employees and departments.
Employee table:
Name | DepartmentID | Role |
---|---|---|
Dave Smith | 001 | Product Marketing Manager |
Julie Jones | 002 | Software Engineer |
Scott Tanner | 001 | Director of Demand Gen |
Ted Connors | 002 | Software Engineer |
Margaret Lane | 001 | VP of Marketing |
Mary Martin | 004 | Receptionist |
Department table:
Name | DepartmentID |
---|---|
Marketing | 001 |
Engineering | 002 |
Accounting | 003 |
In the above example, DepartmentID
is the key to use in both tables for any joins.
Inner Join
An inner join requires that key values exist in both tables for the records to appear in the results table. Records appear in the merge only if there are matches in both tables for the key values.
- If you want to include rows containing non-matching values, you must use some form of an outer join. See below.
For the preceding example tables, an inner join on the DepartmentID
table produces the following result table:
Employee.Name | Employee.DepartmentID | Employee.Role | Department.Name | Department.DepartmentID |
---|---|---|---|---|
Dave Smith | 001 | Product Marketing Manager | Marketing | 001 |
Julie Jones | 002 | Software Engineer | Engineering | 002 |
Scott Tanner | 001 | Director of Demand Gen | Marketing | 001 |
Ted Connors | 002 | Software Engineer | Engineering | 002 |
Margaret Lane | 001 | VP of Marketing | Marketing | 001 |
Notes:
- All fields are included in the merged result set. Fields from the first dataset are listed first.
- The row for Mary Martin is excluded, since there is no reference in the Department table for her department identifier. The row for Accounting is excluded, since there is no reference in the Employee table for the department identifier.
- To include these rows, you either need to augment the data or perform a form of an outer join.
A null value in one table does not match a null value in another table. So, rows with null values in a join key are never included in an inner join. These values should be fixed.
Tip: An inner join can be used to eliminate rows with null values in their key fields.
Left Outer Join
A left outer join (or left join) does not require that there be matching records for each value in the key value of the source (left) table. Each row in the left table appears in the results, regardless of whether there are matches in the right table.
For the preceding example tables, a left join on the DepartmentID
table produces the following result table:
Employee.Name | Employee.DepartmentID | Employee.Role | Department.Name | Department.DepartmentID |
---|---|---|---|---|
Dave Smith | 001 | Product Marketing Manager | Marketing | 001 |
Julie Jones | 002 | Software Engineer | Engineering | 002 |
Scott Tanner | 001 | Director of Demand Gen | Marketing | 001 |
Ted Connors | 002 | Software Engineer | Engineering | 002 |
Margaret Lane | 001 | VP of Marketing | Marketing | 001 |
Mary Martin | 004 | Receptionist | NULL | NULL |
Notes:
- In this left join, the Mary Martin row has been added to the result, since her record in the Employee table does contain an entry for the
DepartmentID
. However, since there are no corresponding values in the Department table, the corresponding fields in the result table areNULL
values.
Right Outer Join
A right outer join (or right join) is the reverse of a left join. A right join does not require that there be matching records for each value in the key value of the secondary (right) table. Each row in the right table appears in the results, regardless of whether there are matches in the left table.
For the preceding example tables, a right join on the DepartmentID
table produces the following result table:
Employee.Name | Employee.DepartmentID | Employee.Role | Department.Name | Department.DepartmentID |
---|---|---|---|---|
Dave Smith | 001 | Product Marketing Manager | Marketing | 001 |
Julie Jones | 002 | Software Engineer | Engineering | 002 |
Scott Tanner | 001 | Director of Demand Gen | Marketing | 001 |
Ted Connors | 002 | Software Engineer | Engineering | 002 |
Margaret Lane | 001 | VP of Marketing | Marketing | 001 |
NULL | NULL | NULL | Accounting | 003 |
Notes:
- In this right join, the Accounting entry is added. However, since there is no entry in the Employee table for the
DepartmentID
value, those fields areNULL
values in the result set.
Full Outer Join
A full outer join combines the effects of a left join and a right join. If there is a match between the key values, a row is written in the result.
- If there is no match for a key value that appears in either table, a single record is written to the result, with
NULL
values inserted for the fields from the other table.
Employee.Name | Employee.DepartmentID | Employee.Role | Department.Name | Department.DepartmentID |
---|---|---|---|---|
Dave Smith | 001 | Product Marketing Manager | Marketing | 001 |
Julie Jones | 002 | Software Engineer | Engineering | 002 |
Scott Tanner | 001 | Director of Demand Gen | Marketing | 001 |
Ted Connors | 002 | Software Engineer | Engineering | 002 |
Margaret Lane | 001 | VP of Marketing | Marketing | 001 |
Mary Martin | 004 | Receptionist | NULL | NULL |
NULL | NULL | NULL | Accounting | 003 |
Notes:
- Any duplicated rows between joining from left-to-right and from right-to-left are removed from the results.
Joins Together
The following diagram summarizes the relationships between the types of supported joins. In each venn diagram, the area of intersection is the set of records that contain shared key values.
Figure: Join Types
After you have created a join, you can modify it through the Recipe panel. For more information, see Edit a Join.
This page has no comments.