Syntax FACTORY_DEF FeatureJoinerFactory [FACTORY_NAME ] [INPUT (LEFT|RIGHT) FEATURE_TYPE [ ]* []*]+ [GROUP_BY [ ]*] [JOIN_MODE (INNER|LEFT|FULL)] [JOIN_KEYS [ ]+] [ATTR_CONFLICT_RES (USE_LEFT|USE_RIGHT)] [PRESERVE_VALUES_FROM_UNJOINED_FEATURES (YES|NO)] [GEOMETRY_HANDLING (USE_LEFT|USE_RIGHT|AGGREGATE)] [OUTPUT (JOINED|UNJOINED_LEFT|UNJOINED_RIGHT|) FEATURE_TYPE [ ]* []*]* Overview Joins features from two input schemas based on common attribute values. Input Tags LEFT The left table for the join. RIGHT The right table for the join. Output Tags JOINED Features resulting from joining a feature from the left table and a feature from the right table. UNJOINED_LEFT Features from the left table that did not have a match in the right table. UNJOINED_RIGHT Features from the right table that did not have a match in the left table. Rejected features from any input. Features may be rejected if key values are missing or null. Parameters GROUP_BY If Group By attributes are selected, features with the same values in the Group By attributes are grouped together, and features will only be joined with other features in the same group. JOIN_MODE The type of join to perform. JOIN_KEYS A space-delimited list of triplets, which specifies: 1. The key attribute from the left table. 2. The key attribute from the right table. 3. The Comparison Mode for the pair of attributes. This may be one of AUTO, STRING, NUM. If either AUTO or NUM is specified, an attempt will be made to convert attribute values to numbers before comparing them (so for example "1" and "1.0" will be considered a match). ATTR_CONFLICT_RES When both the LEFT and RIGHT input tables share a common attribute, this specifies which value should be preferred for the JOINED output. PRESERVE_VALUES_FROM_UNJOINED_FEATURES When doing a full or left join, this specifies whether to preserve values from unjoined features. For example, consider the case of a full join with ATTR_CONFLICT_RES set to RIGHT, where a feature from the left table has no matches. When this is set to No, any attributes that exist in both the left and right table will be set to null. When this is set to Yes, the values from that feature will be preserved. GEOMETRY_HANDLING Specifies where geometry should be taken from for JOINED features. This may either be from the LEFT input, the RIGHT input, or an AGGREGATE of both. In the aggregate case, the geometries from the left and right will be combined into a multiple geometry, where each part has a unique name. To satisfy the requirement that output feature geometries have unique geometry names, a. Output geometries will retain their original names if already unique b. Unnamed geometries will be named based on their port and geometry position c. Otherwise all geometries from all input features will be preserved on joined output features by disambiguating the geometry names to avoid the conflict. i. Specifically, the Right input port name will be prepended to any conflicting geometry names. The Left input port geometry names will remain unchanged. ii. If there are multiple name conflicts on an input feature a geometry index will be appended to the geometry name starting at 2. iii. If no geometry name conflicts occur geometries will not have prefixes appended.