Repository: odpi/egeria-connector-ibm-information-server
Issue: Investigate alternative retrieval mechanisms for DataStage adapter

A number of minor versions of Information Server seem to have issues with one of the queries used to retrieve information about DataStage job details, specifically the ability to retrieve all `ds_stage_column`s by searching based on either their `link.job_or_container` property or even the `link` property directly (using an `in` semantic`).

Versions that appear not to work:

- 11.5.0.2sp6
- 11.7.1.0sp2

Versions that appear to work:

- 11.5.0.2sp5

May require either deeper investigation of the non-working releases, or consider alternative mechanism for retrieving the stage column details that works more reliably across all releases.

Changed files:
datastage-adapter/src/main/java/org/odpi/egeria/connectors/ibm/datastage/dataengineconnector/mapping/AttributeMapping.java
igc-clientlibrary/src/main/java/org/odpi/egeria/connectors/ibm/igc/clientlibrary/model/base/DsStageColumn.java
igc-clientlibrary/src/main/java/org/odpi/egeria/connectors/ibm/igc/clientlibrary/IGCRestConstants.java
igc-clientlibrary/src/main/java/org/odpi/egeria/connectors/ibm/igc/clientlibrary/model/base/InformationAsset.java
igc-clientlibrary/src/main/java/org/odpi/egeria/connectors/ibm/igc/clientlibrary/model/base/StageColumn.java
datastage-adapter/src/main/java/org/odpi/egeria/connectors/ibm/datastage/dataengineconnector/mapping/LineageMappingMapping.java
datastage-adapter/src/main/java/org/odpi/egeria/connectors/ibm/datastage/dataengineconnector/model/DataStageJob.java
igc-clientlibrary/src/main/java/org/odpi/egeria/connectors/ibm/igc/clientlibrary/model/base/DataItem.java
datastage-adapter/src/main/java/org/odpi/egeria/connectors/ibm/datastage/dataengineconnector/mapping/PortAliasMapping.java
datastage-adapter/src/main/java/org/odpi/egeria/connectors/ibm/datastage/dataengineconnector/mapping/ProcessMapping.java

diff --git a/datastage-adapter/src/main/java/org/odpi/egeria/connectors/ibm/datastage/dataengineconnector/mapping/AttributeMapping.java b/datastage-adapter/src/main/java/org/odpi/egeria/connectors/ibm/datastage/dataengineconnector/mapping/AttributeMapping.java
index 953dc826..b8a7266e 100644
--- a/datastage-adapter/src/main/java/org/odpi/egeria/connectors/ibm/datastage/dataengineconnector/mapping/AttributeMapping.java
+++ b/datastage-adapter/src/main/java/org/odpi/egeria/connectors/ibm/datastage/dataengineconnector/mapping/AttributeMapping.java
@@ -6,6 +6,7 @@ import org.odpi.egeria.connectors.ibm.datastage.dataengineconnector.model.DataSt
 import org.odpi.egeria.connectors.ibm.igc.clientlibrary.model.base.Classificationenabledgroup;
 import org.odpi.egeria.connectors.ibm.igc.clientlibrary.model.base.DataItem;
 import org.odpi.egeria.connectors.ibm.igc.clientlibrary.model.base.Link;
+import org.odpi.egeria.connectors.ibm.igc.clientlibrary.model.base.StageColumn;
 import org.odpi.egeria.connectors.ibm.igc.clientlibrary.model.common.ItemList;
 import org.odpi.openmetadata.accessservices.dataengine.model.Attribute;
 import org.slf4j.Logger;
@@ -40,7 +41,7 @@ class AttributeMapping extends BaseMapping {
             int index = 0;
             for (DataItem stageColumn : stageColumns.getItems()) {
                 String colId = stageColumn.getId();
-                DataItem stageColumnObj = job.getStageColumnByRid(colId);
+                StageColumn stageColumnObj = job.getStageColumnByRid(colId);
                 Attribute attribute = new Attribute();
                 attribute.setQualifiedName(stageColumnObj.getIdentity(igcRestClient).toString() + stageNameSuffix);
                 attribute.setDisplayName(stageColumnObj.getName());
diff --git a/datastage-adapter/src/main/java/org/odpi/egeria/connectors/ibm/datastage/dataengineconnector/mapping/LineageMappingMapping.java b/datastage-adapter/src/main/java/org/odpi/egeria/connectors/ibm/datastage/dataengineconnector/mapping/LineageMappingMapping.java
index f53862d5..75b40867 100644
--- a/datastage-adapter/src/main/java/org/odpi/egeria/connectors/ibm/datastage/dataengineconnector/mapping/LineageMappingMapping.java
+++ b/datastage-adapter/src/main/java/org/odpi/egeria/connectors/ibm/datastage/dataengineconnector/mapping/LineageMappingMapping.java
@@ -42,14 +42,14 @@ class LineageMappingMapping extends BaseMapping {
         // For each stage column defined on the link...
         for (DataItem stageColumnRef : stageColumns.getItems()) {
             String colId = stageColumnRef.getId();
-            DsStageColumn stageColumnFull = job.getStageColumnByRid(colId);
+            StageColumn stageColumnFull = job.getStageColumnByRid(colId);
             String thisColumnName = getFullyQualifiedName(stageColumnFull) + stageNameSuffix;
             if (!bSource) {
                 // Create a LineageMapping from each previous stage column to this stage column
                 ItemList<DataItem> previousColumns = stageColumnFull.getPreviousStageColumns();
                 previousColumns.getAllPages(igcRestClient);
                 for (DataItem previousColumnRef : previousColumns.getItems()) {
-                    DsStageColumn previousColumnFull = job.getStageColumnByRid(previousColumnRef.getId());
+                    StageColumn previousColumnFull = job.getStageColumnByRid(previousColumnRef.getId());
                     LineageMapping lineageMapping = getLineageMapping(getFullyQualifiedName(previousColumnFull) + stageNameSuffix, thisColumnName);
                     lineageMappingsSet.add(lineageMapping);
                 }
@@ -58,7 +58,7 @@ class LineageMappingMapping extends BaseMapping {
                 ItemList<DataItem> nextColumns = stageColumnFull.getNextStageColumns();
                 nextColumns.getAllPages(igcRestClient);
                 for (DataItem nextColumnRef : nextColumns.getItems()) {
-                    DsStageColumn nextColumnFull = job.getStageColumnByRid(nextColumnRef.getId());
+                    StageColumn nextColumnFull = job.getStageColumnByRid(nextColumnRef.getId());
                     LineageMapping lineageMapping = getLineageMapping(thisColumnName, getFullyQualifiedName(nextColumnFull) + stageNameSuffix);
                     lineageMappingsSet.add(lineageMapping);
                 }
@@ -88,7 +88,7 @@ class LineageMappingMapping extends BaseMapping {
         String userId = link.getModifiedBy();
         // For each stage column defined on the link...
         for (DataItem stageColRef : stageColumns.getItems()) {
-            DsStageColumn stageColFull = job.getStageColumnByRid(stageColRef.getId());
+            StageColumn stageColFull = job.getStageColumnByRid(stageColRef.getId());
             String stageColName = getFullyQualifiedName(stageColFull);
             // Create a single mapping between the input stage and the output stage that use this link
             LineageMapping lineageMapping = getLineageMapping(stageColName + "_" + inputStage.getName(), stageColName + "_" + outputStage.getName());
@@ -108,23 +108,27 @@ class LineageMappingMapping extends BaseMapping {
      *
      * @param job the job for which to create the LineageMappings
      * @param fields list of IGC field objects (data_file_field or database_column)
-     * @param relationshipProperty one of 'read_by_(design)' or 'written_by_(design)'
      * @param bSource true if processing a source link, false if a target link
      * @param fullyQualifiedStageName the fully qualifiedName of the stage itself
      * @param stageNameSuffix the stage name for which to create the LineageMappings
      */
-    LineageMappingMapping(DataStageJob job, List<Classificationenabledgroup> fields, String relationshipProperty, boolean bSource, String fullyQualifiedStageName, String stageNameSuffix) {
+    LineageMappingMapping(DataStageJob job, List<Classificationenabledgroup> fields, boolean bSource, String fullyQualifiedStageName, String stageNameSuffix) {
         super(job.getIgcRestClient());
         Set<LineageMapping> lineageMappingsSet = new HashSet<>();
         String userId = job.getJobObject().getModifiedBy();
         // For each field in the data store...
         for (Classificationenabledgroup fieldObj : fields) {
             String field1QN = getFullyQualifiedName(fieldObj);
-            ItemList<InformationAsset> relatedStageCols = (ItemList<InformationAsset>) igcRestClient.getPropertyByName(fieldObj, relationshipProperty);
+            ItemList<InformationAsset> relatedStageCols;
+            if (bSource) {
+                relatedStageCols = fieldObj.getReadByDesign();
+            } else {
+                relatedStageCols = fieldObj.getWrittenByDesign();
+            }
             relatedStageCols.getAllPages(igcRestClient);
             // For each object that reads / writes to that field...
             for (InformationAsset stageColRef : relatedStageCols.getItems()) {
-                DsStageColumn stageColFull = job.getStageColumnByRid(stageColRef.getId());
+                StageColumn stageColFull = job.getStageColumnByRid(stageColRef.getId());
                 if (stageColFull != null) {
                     String field2QN = getFullyQualifiedName(stageColFull);
                     if (bSource) {
diff --git a/datastage-adapter/src/main/java/org/odpi/egeria/connectors/ibm/datastage/dataengineconnector/mapping/PortAliasMapping.java b/datastage-adapter/src/main/java/org/odpi/egeria/connectors/ibm/datastage/dataengineconnector/mapping/PortAliasMapping.java
index a5a27428..9714b543 100644
--- a/datastage-adapter/src/main/java/org/odpi/egeria/connectors/ibm/datastage/dataengineconnector/mapping/PortAliasMapping.java
+++ b/datastage-adapter/src/main/java/org/odpi/egeria/connectors/ibm/datastage/dataengineconnector/mapping/PortAliasMapping.java
@@ -9,8 +9,6 @@ import org.odpi.egeria.connectors.ibm.igc.clientlibrary.model.base.Stage;
 import org.odpi.egeria.connectors.ibm.igc.clientlibrary.model.common.ItemList;
 import org.odpi.openmetadata.accessservices.dataengine.model.PortAlias;
 import org.odpi.openmetadata.accessservices.dataengine.model.PortType;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -20,8 +18,6 @@ import java.util.List;
  */
 class PortAliasMapping extends BaseMapping {
 
-    private static final Logger log = LoggerFactory.getLogger(PortAliasMapping.class);
-
     private List<PortAlias> portAliases;
 
     private PortAliasMapping(IGCRestClient igcRestClient) {
@@ -34,30 +30,17 @@ class PortAliasMapping extends BaseMapping {
      *
      * @param job the job for which to create PortAliases
      * @param stages the stages from which to create PortAliases
-     * @param relationshipProperty the relationship property on each stage from which to draw PortAlias details
+     * @param portType the type of port to map (input or output)
      */
-    PortAliasMapping(DataStageJob job, List<Stage> stages, String relationshipProperty) {
+    PortAliasMapping(DataStageJob job, List<Stage> stages, PortType portType) {
 
         this(job.getIgcRestClient());
 
         for (Stage stage : stages) {
-            ItemList<InformationAsset> relations = (ItemList<InformationAsset>) igcRestClient.getPropertyByName(stage, relationshipProperty);
-            relations.getAllPages(igcRestClient);
-            for (InformationAsset relation : relations.getItems()) {
-                String fullyQualifiedStoreName = job.getQualifiedNameFromStoreRid(relation.getId());
-                String fullyQualifiedStageName = getFullyQualifiedName(stage);
-                PortAlias portAlias = new PortAlias();
-                portAlias.setQualifiedName(fullyQualifiedStageName);
-                portAlias.setDisplayName(stage.getName());
-                if (relationshipProperty.startsWith("reads")) {
-                    portAlias.setPortType(PortType.INPUT_PORT);
-                } else if (relationshipProperty.startsWith("writes")) {
-                    portAlias.setPortType(PortType.OUTPUT_PORT);
-                } else {
-                    log.warn("Unknown port type: {}", relationshipProperty);
-                }
-                portAlias.setDelegatesTo(fullyQualifiedStoreName + fullyQualifiedStageName);
-                portAliases.add(portAlias);
+            if (portType.equals(PortType.INPUT_PORT)) {
+                addInputPortAliases(job, stage);
+            } else if (portType.equals(PortType.OUTPUT_PORT)) {
+                addOutputPortAliases(job, stage);
             }
         }
 
@@ -70,4 +53,26 @@ class PortAliasMapping extends BaseMapping {
      */
     List<PortAlias> getPortAliases() { return portAliases; }
 
+    private void addInputPortAliases(DataStageJob job, Stage stage) {
+        addPortAliases(job, stage, stage.getReadsFromDesign(), PortType.INPUT_PORT);
+    }
+
+    private void addOutputPortAliases(DataStageJob job, Stage stage) {
+        addPortAliases(job, stage, stage.getWritesToDesign(), PortType.OUTPUT_PORT);
+    }
+
+    private void addPortAliases(DataStageJob job, Stage stage, ItemList<InformationAsset> relations, PortType portType) {
+        relations.getAllPages(igcRestClient);
+        for (InformationAsset relation : relations.getItems()) {
+            String fullyQualifiedStoreName = job.getQualifiedNameFromStoreRid(relation.getId());
+            String fullyQualifiedStageName = getFullyQualifiedName(stage);
+            PortAlias portAlias = new PortAlias();
+            portAlias.setQualifiedName(fullyQualifiedStageName);
+            portAlias.setDisplayName(stage.getName());
+            portAlias.setPortType(portType);
+            portAlias.setDelegatesTo(fullyQualifiedStoreName + fullyQualifiedStageName);
+            portAliases.add(portAlias);
+        }
+    }
+
 }
diff --git a/datastage-adapter/src/main/java/org/odpi/egeria/connectors/ibm/datastage/dataengineconnector/mapping/ProcessMapping.java b/datastage-adapter/src/main/java/org/odpi/egeria/connectors/ibm/datastage/dataengineconnector/mapping/ProcessMapping.java
index de2812d1..1ee83b8a 100644
--- a/datastage-adapter/src/main/java/org/odpi/egeria/connectors/ibm/datastage/dataengineconnector/mapping/ProcessMapping.java
+++ b/datastage-adapter/src/main/java/org/odpi/egeria/connectors/ibm/datastage/dataengineconnector/mapping/ProcessMapping.java
@@ -37,8 +37,8 @@ public class ProcessMapping extends BaseMapping {
             Dsjob jobObj = job.getJobObject();
             process = getSkeletonProcess(jobObj);
             if (process != null) {
-                PortAliasMapping inputAliasMapping = new PortAliasMapping(job, job.getInputStages(), "reads_from_(design)");
-                PortAliasMapping outputAliasMapping = new PortAliasMapping(job, job.getOutputStages(), "writes_to_(design)");
+                PortAliasMapping inputAliasMapping = new PortAliasMapping(job, job.getInputStages(), PortType.INPUT_PORT);
+                PortAliasMapping outputAliasMapping = new PortAliasMapping(job, job.getOutputStages(), PortType.OUTPUT_PORT);
                 process.getProcess().setPortAliases(Stream.concat(inputAliasMapping.getPortAliases().stream(), outputAliasMapping.getPortAliases().stream()).collect(Collectors.toList()));
                 Set<LineageMapping> lineageMappings = new HashSet<>();
                 for (Link link : job.getAllLinks()) {
@@ -108,9 +108,9 @@ public class ProcessMapping extends BaseMapping {
             Set<PortImplementation> portImplementations = new HashSet<>();
             Set<LineageMapping> lineageMappings = new HashSet<>();
             addImplementationDetails(job, stage, stage.getInputLinks(), PortType.INPUT_PORT, portImplementations, lineageMappings);
-            addDataStoreDetails(job, stage, stage.getReadsFromDesign(), "read_by_(design)", PortType.INPUT_PORT, portImplementations, lineageMappings);
+            addDataStoreDetails(job, stage, stage.getReadsFromDesign(), PortType.INPUT_PORT, portImplementations, lineageMappings);
             addImplementationDetails(job, stage, stage.getOutputLinks(), PortType.OUTPUT_PORT, portImplementations, lineageMappings);
-            addDataStoreDetails(job, stage, stage.getWritesToDesign(), "written_by_(design)", PortType.OUTPUT_PORT, portImplementations, lineageMappings);
+            addDataStoreDetails(job, stage, stage.getWritesToDesign(), PortType.OUTPUT_PORT, portImplementations, lineageMappings);
             process.getProcess().setPortImplementations(new ArrayList<>(portImplementations));
             process.getProcess().setLineageMappings(new ArrayList<>(lineageMappings));
         }
@@ -139,6 +139,9 @@ public class ProcessMapping extends BaseMapping {
             process.setDescription(getDescription(igcObj));
             process.setOwner(igcObj.getCreatedBy());
             String modifiedBy = igcObj.getModifiedBy();
+            // TODO: this sets the userId for DE OMAS REST invocations to the 'modifiedBy' IIS user string (full user's
+            //  name, including spaces).  Do we need to instead translate this to a principal_id, or even a non-IIS user
+            //  entirely?
             deProcess = new DataEngineProcess(process, modifiedBy);
         }
         return deProcess;
@@ -179,7 +182,6 @@ public class ProcessMapping extends BaseMapping {
      * @param job the job within which the stage exists
      * @param stage the stage for which to add implementation details
      * @param stores the stores for which to create the implementation details
-     * @param dataStoreProperty the property of the stage for which to create the data store-relevant details
      * @param portType the type of port
      * @param portImplementations the list of PortImplementations to append to with implementation details
      * @param lineageMappings the list of LineageMappings to append to with implementation details
@@ -187,7 +189,6 @@ public class ProcessMapping extends BaseMapping {
     private void addDataStoreDetails(DataStageJob job,
                                      Stage stage,
                                      ItemList<InformationAsset> stores,
-                                     String dataStoreProperty,
                                      PortType portType,
                                      Set<PortImplementation> portImplementations,
                                      Set<LineageMapping> lineageMappings) {
@@ -199,7 +200,7 @@ public class ProcessMapping extends BaseMapping {
             List<Classificationenabledgroup> fieldsForStore = job.getFieldsForStore(storeRef.getId());
             PortImplementationMapping portImplementationMapping = new PortImplementationMapping(job, stage, portType, fieldsForStore, fullyQualifiedStageName);
             portImplementations.add(portImplementationMapping.getPortImplementation());
-            LineageMappingMapping lineageMappingMapping = new LineageMappingMapping(job, fieldsForStore, dataStoreProperty, portType == PortType.INPUT_PORT, fullyQualifiedStageName, stageNameSuffix);
+            LineageMappingMapping lineageMappingMapping = new LineageMappingMapping(job, fieldsForStore, portType == PortType.INPUT_PORT, fullyQualifiedStageName, stageNameSuffix);
             lineageMappings.addAll(lineageMappingMapping.getLineageMappings().getLineageMappings());
         }
     }
diff --git a/datastage-adapter/src/main/java/org/odpi/egeria/connectors/ibm/datastage/dataengineconnector/model/DataStageJob.java b/datastage-adapter/src/main/java/org/odpi/egeria/connectors/ibm/datastage/dataengineconnector/model/DataStageJob.java
index a5598949..fe251f22 100644
--- a/datastage-adapter/src/main/java/org/odpi/egeria/connectors/ibm/datastage/dataengineconnector/model/DataStageJob.java
+++ b/datastage-adapter/src/main/java/org/odpi/egeria/connectors/ibm/datastage/dataengineconnector/model/DataStageJob.java
@@ -29,7 +29,7 @@ public class DataStageJob {
     private JobType type;
     private Map<String, Stage> stageMap;
     private Map<String, Link> linkMap;
-    private Map<String, DsStageColumn> columnMap;
+    private Map<String, StageColumn> columnMap;
     private Map<String, Classificationenabledgroup> fieldMap;
     private Map<String, List<Classificationenabledgroup>> storeToFieldsMap;
     private Map<String, Identity> storeToIdentityMap;
@@ -180,12 +180,12 @@ public class DataStageJob {
     }
 
     /**
-     * Retrieve the complete 'ds_stage_column' object based on its RID.
+     * Retrieve the complete 'stage_column' object based on its RID.
      *
-     * @param rid the RID of the ds_stage_column object
-     * @return DsStageColumn
+     * @param rid the RID of the stage_column object
+     * @return StageColumn
      */
-    public DsStageColumn getStageColumnByRid(String rid) {
+    public StageColumn getStageColumnByRid(String rid) {
         if (log.isDebugEnabled()) { log.debug("Looking up cached stage column: {}", rid); }
         return columnMap.getOrDefault(rid, null);
     }
@@ -249,14 +249,37 @@ public class DataStageJob {
     private void getStageColumnDetailsForLinks() {
         String jobRid = job.getId();
         if (log.isDebugEnabled()) { log.debug("Retrieving stage column details for job: {}", jobRid); }
-        IGCSearch igcSearch = new IGCSearch("ds_stage_column");
+        ItemList<StageColumn> stageCols = getStageColumnDetailsForLinks("stage_column", jobRid);
+        if (stageCols == null) {
+            if (log.isInfoEnabled()) { log.info("Unable to identify stage columns for job by 'stage_column', reverting to 'ds_stage_column'."); }
+            stageCols = getStageColumnDetailsForLinks("ds_stage_column", jobRid);
+        }
+        if (stageCols != null) {
+            buildMap(columnMap, stageCols);
+        } else {
+            log.error("Unable to identify any stage columns for job: {}", jobRid);
+        }
+    }
+
+    /**
+     * Retrieve the details of stage columns within this particular DataStage job using the type provided: some IGC
+     * versions need to retrieve 'stage_column' and others must retrieve 'ds_stage_column'.
+     *
+     * @param usingType the type by which to search for the stage columns
+     * @param jobRid the RID of the job
+     */
+    private ItemList<StageColumn> getStageColumnDetailsForLinks(String usingType, String jobRid) {
+        IGCSearch igcSearch = new IGCSearch(usingType);
         igcSearch.addProperties(DataStageConstants.getStageColumnSearchProperties());
         IGCSearchCondition condition = new IGCSearchCondition("link.job_or_container", "=", jobRid);
         IGCSearchConditionSet conditionSet = new IGCSearchConditionSet(condition);
         igcSearch.addConditions(conditionSet);
-        ItemList<DsStageColumn> stageCols = igcRestClient.search(igcSearch);
-        stageCols.getAllPages(igcRestClient);
-        buildMap(columnMap, stageCols);
+        ItemList<StageColumn> stageCols = igcRestClient.search(igcSearch);
+        if (stageCols.getPaging().getNumTotal() > 0) {
+            stageCols.getAllPages(igcRestClient);
+            return stageCols;
+        }
+        return null;
     }
 
     /**
diff --git a/igc-clientlibrary/src/main/java/org/odpi/egeria/connectors/ibm/igc/clientlibrary/IGCRestConstants.java b/igc-clientlibrary/src/main/java/org/odpi/egeria/connectors/ibm/igc/clientlibrary/IGCRestConstants.java
index 0d0f7601..f63547a5 100644
--- a/igc-clientlibrary/src/main/java/org/odpi/egeria/connectors/ibm/igc/clientlibrary/IGCRestConstants.java
+++ b/igc-clientlibrary/src/main/java/org/odpi/egeria/connectors/ibm/igc/clientlibrary/IGCRestConstants.java
@@ -156,6 +156,7 @@ public class IGCRestConstants {
         list.add("group");
         list.add("data_rule_definition");
         list.add("data_rule_set_definition");
+        list.add("stage_column");
         return list;
     }
 
@@ -187,7 +188,8 @@ public class IGCRestConstants {
         map.put("stored_procedure", "datagroup");
         map.put("design_stored_procedure", "datagroup");
         map.put("datagroup", "information_asset");
-        map.put("ds_stage_column", "data_item");
+        map.put("stage_column", "data_item");
+        map.put("ds_stage_column", "stage_column");
         map.put("parameter", "data_item");
         map.put("routine_argument", "data_item");
         map.put("stage_type_detail", "data_item");
diff --git a/igc-clientlibrary/src/main/java/org/odpi/egeria/connectors/ibm/igc/clientlibrary/model/base/DataItem.java b/igc-clientlibrary/src/main/java/org/odpi/egeria/connectors/ibm/igc/clientlibrary/model/base/DataItem.java
index 5c344e47..56a4a158 100644
--- a/igc-clientlibrary/src/main/java/org/odpi/egeria/connectors/ibm/igc/clientlibrary/model/base/DataItem.java
+++ b/igc-clientlibrary/src/main/java/org/odpi/egeria/connectors/ibm/igc/clientlibrary/model/base/DataItem.java
@@ -13,8 +13,6 @@ import static com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility.PUBLIC_
 import com.fasterxml.jackson.annotation.JsonProperty;
 import org.odpi.egeria.connectors.ibm.igc.clientlibrary.model.common.ItemList;
 
-import java.util.List;
-
 /**
  * POJO for the {@code data_item} asset type in IGC, displayed as '{@literal Data Item}' in the IGC UI.
  * <br><br>
@@ -27,9 +25,9 @@ import java.util.List;
 @JsonSubTypes({
         @JsonSubTypes.Type(value = DataField.class, name = "data_field"),
         @JsonSubTypes.Type(value = DataItemDefinition.class, name = "data_item_definition"),
-        @JsonSubTypes.Type(value = DsStageColumn.class, name = "ds_stage_column"),
         @JsonSubTypes.Type(value = Parameter.class, name = "parameter"),
         @JsonSubTypes.Type(value = RoutineArgument.class, name = "routine_argument"),
+        @JsonSubTypes.Type(value = StageColumn.class, name = "stage_column"),
         @JsonSubTypes.Type(value = StageTypeDetail.class, name = "stage_type_detail"),
         @JsonSubTypes.Type(value = TransformArgument.class, name = "transform_argument"),
 })
@@ -108,7 +106,7 @@ public class DataItem extends InformationAsset {
     protected String itemKind;
 
     @JsonProperty("length")
-    protected List<Number> length;
+    protected Number length;
 
     @JsonProperty("level")
     protected Number level;
@@ -361,17 +359,17 @@ public class DataItem extends InformationAsset {
 
     /**
      * Retrieve the {@code length} property (displayed as '{@literal Maximum Length}') of the object.
-     * @return {@code List<Number>}
+     * @return {@code Number}
      */
     @JsonProperty("length")
-    public List<Number> getLength() { return this.length; }
+    public Number getLength() { return this.length; }
 
     /**
      * Set the {@code length} property (displayed as {@code Maximum Length}) of the object.
      * @param length the value to set
      */
     @JsonProperty("length")
-    public void setLength(List<Number> length) { this.length = length; }
+    public void setLength(Number length) { this.length = length; }
 
     /**
      * Retrieve the {@code level} property (displayed as '{@literal Level Number}') of the object.
diff --git a/igc-clientlibrary/src/main/java/org/odpi/egeria/connectors/ibm/igc/clientlibrary/model/base/DsStageColumn.java b/igc-clientlibrary/src/main/java/org/odpi/egeria/connectors/ibm/igc/clientlibrary/model/base/DsStageColumn.java
index 3597e4ad..6c0af35d 100644
--- a/igc-clientlibrary/src/main/java/org/odpi/egeria/connectors/ibm/igc/clientlibrary/model/base/DsStageColumn.java
+++ b/igc-clientlibrary/src/main/java/org/odpi/egeria/connectors/ibm/igc/clientlibrary/model/base/DsStageColumn.java
@@ -9,9 +9,6 @@ import com.fasterxml.jackson.annotation.JsonInclude;
 import com.fasterxml.jackson.annotation.JsonTypeName;
 import static com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility.NONE;
 import static com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility.PUBLIC_ONLY;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import org.odpi.egeria.connectors.ibm.igc.clientlibrary.model.common.ItemList;
-import java.util.List;
 
 /**
  * POJO for the {@code ds_stage_column} asset type in IGC, displayed as '{@literal Stage Column}' in the IGC UI.
@@ -25,295 +22,6 @@ import java.util.List;
 @JsonInclude(JsonInclude.Include.NON_NULL)
 @JsonIgnoreProperties(ignoreUnknown=true)
 @JsonTypeName("ds_stage_column")
-public class DsStageColumn extends DataItem {
-
-    @JsonProperty("constraints")
-    protected ItemList<JobConstraint> constraints;
-
-    @JsonProperty("expression")
-    protected List<String> expression;
-
-    @JsonProperty("impacted_by")
-    protected ItemList<InformationAsset> impactedBy;
-
-    @JsonProperty("impacts_on")
-    protected ItemList<InformationAsset> impactsOn;
-
-    @JsonProperty("in_collections")
-    protected ItemList<Collection> inCollections;
-
-    @JsonProperty("key")
-    protected Boolean key;
-
-    @JsonProperty("link")
-    protected Link link;
-
-    @JsonProperty("next_stage_columns")
-    protected ItemList<DataItem> nextStageColumns;
-
-    @JsonProperty("previous_stage_columns")
-    protected ItemList<DataItem> previousStageColumns;
-
-    @JsonProperty("reads_from_(design)")
-    protected ItemList<InformationAsset> readsFromDesign;
-
-    @JsonProperty("reads_from_(operational)")
-    protected ItemList<InformationAsset> readsFromOperational;
-
-    @JsonProperty("reads_from_(static)")
-    protected ItemList<InformationAsset> readsFromStatic;
-
-    @JsonProperty("reads_from_(user_defined)")
-    protected ItemList<InformationAsset> readsFromUserDefined;
-
-    @JsonProperty("writes_to_(design)")
-    protected ItemList<InformationAsset> writesToDesign;
-
-    @JsonProperty("writes_to_(operational)")
-    protected ItemList<InformationAsset> writesToOperational;
-
-    @JsonProperty("writes_to_(static)")
-    protected ItemList<InformationAsset> writesToStatic;
-
-    @JsonProperty("writes_to_(user_defined)")
-    protected ItemList<InformationAsset> writesToUserDefined;
-
-    /**
-     * Retrieve the {@code constraints} property (displayed as '{@literal Constraints}') of the object.
-     * @return {@code ItemList<JobConstraint>}
-     */
-    @JsonProperty("constraints")
-    public ItemList<JobConstraint> getConstraints() { return this.constraints; }
-
-    /**
-     * Set the {@code constraints} property (displayed as {@code Constraints}) of the object.
-     * @param constraints the value to set
-     */
-    @JsonProperty("constraints")
-    public void setConstraints(ItemList<JobConstraint> constraints) { this.constraints = constraints; }
-
-    /**
-     * Retrieve the {@code expression} property (displayed as '{@literal Expression}') of the object.
-     * @return {@code List<String>}
-     */
-    @JsonProperty("expression")
-    public List<String> getExpression() { return this.expression; }
-
-    /**
-     * Set the {@code expression} property (displayed as {@code Expression}) of the object.
-     * @param expression the value to set
-     */
-    @JsonProperty("expression")
-    public void setExpression(List<String> expression) { this.expression = expression; }
-
-    /**
-     * Retrieve the {@code impacted_by} property (displayed as '{@literal Impacted by}') of the object.
-     * @return {@code ItemList<InformationAsset>}
-     */
-    @JsonProperty("impacted_by")
-    public ItemList<InformationAsset> getImpactedBy() { return this.impactedBy; }
-
-    /**
-     * Set the {@code impacted_by} property (displayed as {@code Impacted by}) of the object.
-     * @param impactedBy the value to set
-     */
-    @JsonProperty("impacted_by")
-    public void setImpactedBy(ItemList<InformationAsset> impactedBy) { this.impactedBy = impactedBy; }
-
-    /**
-     * Retrieve the {@code impacts_on} property (displayed as '{@literal Impacts on}') of the object.
-     * @return {@code ItemList<InformationAsset>}
-     */
-    @JsonProperty("impacts_on")
-    public ItemList<InformationAsset> getImpactsOn() { return this.impactsOn; }
-
-    /**
-     * Set the {@code impacts_on} property (displayed as {@code Impacts on}) of the object.
-     * @param impactsOn the value to set
-     */
-    @JsonProperty("impacts_on")
-    public void setImpactsOn(ItemList<InformationAsset> impactsOn) { this.impactsOn = impactsOn; }
-
-    /**
-     * Retrieve the {@code in_collections} property (displayed as '{@literal In Collections}') of the object.
-     * @return {@code ItemList<Collection>}
-     */
-    @JsonProperty("in_collections")
-    public ItemList<Collection> getInCollections() { return this.inCollections; }
-
-    /**
-     * Set the {@code in_collections} property (displayed as {@code In Collections}) of the object.
-     * @param inCollections the value to set
-     */
-    @JsonProperty("in_collections")
-    public void setInCollections(ItemList<Collection> inCollections) { this.inCollections = inCollections; }
-
-    /**
-     * Retrieve the {@code key} property (displayed as '{@literal Key}') of the object.
-     * @return {@code Boolean}
-     */
-    @JsonProperty("key")
-    public Boolean getKey() { return this.key; }
-
-    /**
-     * Set the {@code key} property (displayed as {@code Key}) of the object.
-     * @param key the value to set
-     */
-    @JsonProperty("key")
-    public void setKey(Boolean key) { this.key = key; }
-
-    /**
-     * Retrieve the {@code link} property (displayed as '{@literal Link}') of the object.
-     * @return {@code Link}
-     */
-    @JsonProperty("link")
-    public Link getLink() { return this.link; }
-
-    /**
-     * Set the {@code link} property (displayed as {@code Link}) of the object.
-     * @param link the value to set
-     */
-    @JsonProperty("link")
-    public void setLink(Link link) { this.link = link; }
-
-    /**
-     * Retrieve the {@code next_stage_columns} property (displayed as '{@literal Next Stage Columns or Variables}') of the object.
-     * @return {@code ItemList<DataItem>}
-     */
-    @JsonProperty("next_stage_columns")
-    public ItemList<DataItem> getNextStageColumns() { return this.nextStageColumns; }
-
-    /**
-     * Set the {@code next_stage_columns} property (displayed as {@code Next Stage Columns or Variables}) of the object.
-     * @param nextStageColumns the value to set
-     */
-    @JsonProperty("next_stage_columns")
-    public void setNextStageColumns(ItemList<DataItem> nextStageColumns) { this.nextStageColumns = nextStageColumns; }
-
-    /**
-     * Retrieve the {@code previous_stage_columns} property (displayed as '{@literal Previous Stage Columns or Variables}') of the object.
-     * @return {@code ItemList<DataItem>}
-     */
-    @JsonProperty("previous_stage_columns")
-    public ItemList<DataItem> getPreviousStageColumns() { return this.previousStageColumns; }
-
-    /**
-     * Set the {@code previous_stage_columns} property (displayed as {@code Previous Stage Columns or Variables}) of the object.
-     * @param previousStageColumns the value to set
-     */
-    @JsonProperty("previous_stage_columns")
-    public void setPreviousStageColumns(ItemList<DataItem> previousStageColumns) { this.previousStageColumns = previousStageColumns; }
-
-    /**
-     * Retrieve the {@code reads_from_(design)} property (displayed as '{@literal Reads from (Design)}') of the object.
-     * @return {@code ItemList<InformationAsset>}
-     */
-    @JsonProperty("reads_from_(design)")
-    public ItemList<InformationAsset> getReadsFromDesign() { return this.readsFromDesign; }
-
-    /**
-     * Set the {@code reads_from_(design)} property (displayed as {@code Reads from (Design)}) of the object.
-     * @param readsFromDesign the value to set
-     */
-    @JsonProperty("reads_from_(design)")
-    public void setReadsFromDesign(ItemList<InformationAsset> readsFromDesign) { this.readsFromDesign = readsFromDesign; }
-
-    /**
-     * Retrieve the {@code reads_from_(operational)} property (displayed as '{@literal Reads from (Operational)}') of the object.
-     * @return {@code ItemList<InformationAsset>}
-     */
-    @JsonProperty("reads_from_(operational)")
-    public ItemList<InformationAsset> getReadsFromOperational() { return this.readsFromOperational; }
-
-    /**
-     * Set the {@code reads_from_(operational)} property (displayed as {@code Reads from (Operational)}) of the object.
-     * @param readsFromOperational the value to set
-     */
-    @JsonProperty("reads_from_(operational)")
-    public void setReadsFromOperational(ItemList<InformationAsset> readsFromOperational) { this.readsFromOperational = readsFromOperational; }
-
-    /**
-     * Retrieve the {@code reads_from_(static)} property (displayed as '{@literal Reads from (Static)}') of the object.
-     * @return {@code ItemList<InformationAsset>}
-     */
-    @JsonProperty("reads_from_(static)")
-    public ItemList<InformationAsset> getReadsFromStatic() { return this.readsFromStatic; }
-
-    /**
-     * Set the {@code reads_from_(static)} property (displayed as {@code Reads from (Static)}) of the object.
-     * @param readsFromStatic the value to set
-     */
-    @JsonProperty("reads_from_(static)")
-    public void setReadsFromStatic(ItemList<InformationAsset> readsFromStatic) { this.readsFromStatic = readsFromStatic; }
-
-    /**
-     * Retrieve the {@code reads_from_(user_defined)} property (displayed as '{@literal Reads from (User-Defined)}') of the object.
-     * @return {@code ItemList<InformationAsset>}
-     */
-    @JsonProperty("reads_from_(user_defined)")
-    public ItemList<InformationAsset> getReadsFromUserDefined() { return this.readsFromUserDefined; }
-
-    /**
-     * Set the {@code reads_from_(user_defined)} property (displayed as {@code Reads from (User-Defined)}) of the object.
-     * @param readsFromUserDefined the value to set
-     */
-    @JsonProperty("reads_from_(user_defined)")
-    public void setReadsFromUserDefined(ItemList<InformationAsset> readsFromUserDefined) { this.readsFromUserDefined = readsFromUserDefined; }
-
-    /**
-     * Retrieve the {@code writes_to_(design)} property (displayed as '{@literal Writes to (Design)}') of the object.
-     * @return {@code ItemList<InformationAsset>}
-     */
-    @JsonProperty("writes_to_(design)")
-    public ItemList<InformationAsset> getWritesToDesign() { return this.writesToDesign; }
-
-    /**
-     * Set the {@code writes_to_(design)} property (displayed as {@code Writes to (Design)}) of the object.
-     * @param writesToDesign the value to set
-     */
-    @JsonProperty("writes_to_(design)")
-    public void setWritesToDesign(ItemList<InformationAsset> writesToDesign) { this.writesToDesign = writesToDesign; }
-
-    /**
-     * Retrieve the {@code writes_to_(operational)} property (displayed as '{@literal Writes to (Operational)}') of the object.
-     * @return {@code ItemList<InformationAsset>}
-     */
-    @JsonProperty("writes_to_(operational)")
-    public ItemList<InformationAsset> getWritesToOperational() { return this.writesToOperational; }
-
-    /**
-     * Set the {@code writes_to_(operational)} property (displayed as {@code Writes to (Operational)}) of the object.
-     * @param writesToOperational the value to set
-     */
-    @JsonProperty("writes_to_(operational)")
-    public void setWritesToOperational(ItemList<InformationAsset> writesToOperational) { this.writesToOperational = writesToOperational; }
-
-    /**
-     * Retrieve the {@code writes_to_(static)} property (displayed as '{@literal Writes to (Static)}') of the object.
-     * @return {@code ItemList<InformationAsset>}
-     */
-    @JsonProperty("writes_to_(static)")
-    public ItemList<InformationAsset> getWritesToStatic() { return this.writesToStatic; }
-
-    /**
-     * Set the {@code writes_to_(static)} property (displayed as {@code Writes to (Static)}) of the object.
-     * @param writesToStatic the value to set
-     */
-    @JsonProperty("writes_to_(static)")
-    public void setWritesToStatic(ItemList<InformationAsset> writesToStatic) { this.writesToStatic = writesToStatic; }
-
-    /**
-     * Retrieve the {@code writes_to_(user_defined)} property (displayed as '{@literal Writes to (User-Defined)}') of the object.
-     * @return {@code ItemList<InformationAsset>}
-     */
-    @JsonProperty("writes_to_(user_defined)")
-    public ItemList<InformationAsset> getWritesToUserDefined() { return this.writesToUserDefined; }
-
-    /**
-     * Set the {@code writes_to_(user_defined)} property (displayed as {@code Writes to (User-Defined)}) of the object.
-     * @param writesToUserDefined the value to set
-     */
-    @JsonProperty("writes_to_(user_defined)")
-    public void setWritesToUserDefined(ItemList<InformationAsset> writesToUserDefined) { this.writesToUserDefined = writesToUserDefined; }
+public class DsStageColumn extends StageColumn {
 
 }
diff --git a/igc-clientlibrary/src/main/java/org/odpi/egeria/connectors/ibm/igc/clientlibrary/model/base/InformationAsset.java b/igc-clientlibrary/src/main/java/org/odpi/egeria/connectors/ibm/igc/clientlibrary/model/base/InformationAsset.java
index da5407f7..dfb1cc26 100644
--- a/igc-clientlibrary/src/main/java/org/odpi/egeria/connectors/ibm/igc/clientlibrary/model/base/InformationAsset.java
+++ b/igc-clientlibrary/src/main/java/org/odpi/egeria/connectors/ibm/igc/clientlibrary/model/base/InformationAsset.java
@@ -116,7 +116,6 @@ import org.odpi.egeria.connectors.ibm.igc.clientlibrary.model.common.ItemList;
         @JsonSubTypes.Type(value = Routine.class, name = "routine"),
         @JsonSubTypes.Type(value = SharedContainer.class, name = "shared_container"),
         @JsonSubTypes.Type(value = Stage.class, name = "stage"),
-        @JsonSubTypes.Type(value = StageColumn.class, name = "stage_column"),
         @JsonSubTypes.Type(value = StageType.class, name = "stage_type"),
         @JsonSubTypes.Type(value = StageVariable.class, name = "stage_variable"),
         @JsonSubTypes.Type(value = StandardizationRuleSet.class, name = "standardization_rule_set"),
diff --git a/igc-clientlibrary/src/main/java/org/odpi/egeria/connectors/ibm/igc/clientlibrary/model/base/StageColumn.java b/igc-clientlibrary/src/main/java/org/odpi/egeria/connectors/ibm/igc/clientlibrary/model/base/StageColumn.java
index 52eb2a45..fa09118a 100644
--- a/igc-clientlibrary/src/main/java/org/odpi/egeria/connectors/ibm/igc/clientlibrary/model/base/StageColumn.java
+++ b/igc-clientlibrary/src/main/java/org/odpi/egeria/connectors/ibm/igc/clientlibrary/model/base/StageColumn.java
@@ -4,6 +4,7 @@ package org.odpi.egeria.connectors.ibm.igc.clientlibrary.model.base;
 
 import com.fasterxml.jackson.annotation.JsonTypeInfo;
 import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 import com.fasterxml.jackson.annotation.JsonInclude;
 import com.fasterxml.jackson.annotation.JsonTypeName;
@@ -22,13 +23,13 @@ import java.util.List;
  */
 @JsonTypeInfo(use=JsonTypeInfo.Id.NAME, include=JsonTypeInfo.As.EXISTING_PROPERTY, property="_type", visible=true, defaultImpl=StageColumn.class)
 @JsonAutoDetect(getterVisibility=PUBLIC_ONLY, setterVisibility=PUBLIC_ONLY, fieldVisibility=NONE)
+@JsonSubTypes({
+        @JsonSubTypes.Type(value = DsStageColumn.class, name = "ds_stage_column"),
+})
 @JsonInclude(JsonInclude.Include.NON_NULL)
 @JsonIgnoreProperties(ignoreUnknown=true)
 @JsonTypeName("stage_column")
-public class StageColumn extends InformationAsset {
-
-    @JsonProperty("allows_null_values")
-    protected Boolean allowsNullValues;
+public class StageColumn extends DataItem {
 
     @JsonProperty("constraints")
     protected ItemList<JobConstraint> constraints;
@@ -48,53 +49,12 @@ public class StageColumn extends InformationAsset {
     @JsonProperty("key")
     protected Boolean key;
 
-    @JsonProperty("length")
-    protected Number length;
-
     @JsonProperty("link")
     protected Link link;
 
-    @JsonProperty("minimum_length")
-    protected Number minimumLength;
-
-    @JsonProperty("native_id")
-    protected String nativeId;
-
     @JsonProperty("next_stage_columns")
     protected ItemList<DataItem> nextStageColumns;
 
-    /**
-     * Valid values are:
-     * <ul>
-     *   <li>CHAR (displayed in the UI as 'CHAR')</li>
-     *   <li>VARCHAR (displayed in the UI as 'VARCHAR')</li>
-     *   <li>LONGVARCHAR (displayed in the UI as 'LONGVARCHAR')</li>
-     *   <li>WCHAR (displayed in the UI as 'WCHAR')</li>
-     *   <li>WVARCHAR (displayed in the UI as 'WVARCHAR')</li>
-     *   <li>WLONGVARCHAR (displayed in the UI as 'WLONGVARCHAR')</li>
-     *   <li>DECIMAL (displayed in the UI as 'DECIMAL')</li>
-     *   <li>NUMERIC (displayed in the UI as 'NUMERIC')</li>
-     *   <li>SMALLINT (displayed in the UI as 'SMALLINT')</li>
-     *   <li>INTEGER (displayed in the UI as 'INTEGER')</li>
-     *   <li>REAL (displayed in the UI as 'REAL')</li>
-     *   <li>FLOAT (displayed in the UI as 'FLOAT')</li>
-     *   <li>DOUBLE (displayed in the UI as 'DOUBLE')</li>
-     *   <li>BIT (displayed in the UI as 'BIT')</li>
-     *   <li>TINYINT (displayed in the UI as 'TINYINT')</li>
-     *   <li>BIGINT (displayed in the UI as 'BIGINT')</li>
-     *   <li>BINARY (displayed in the UI as 'BINARY')</li>
-     *   <li>VARBINARY (displayed in the UI as 'VARBINARY')</li>
-     *   <li>LONGVARBINARY (displayed in the UI as 'LONGVARBINARY')</li>
-     *   <li>DATE (displayed in the UI as 'DATE')</li>
-     *   <li>TIME (displayed in the UI as 'TIME')</li>
-     *   <li>TIMESTAMP (displayed in the UI as 'TIMESTAMP')</li>
-     *   <li>GUID (displayed in the UI as 'GUID')</li>
-     *   <li>UNKNOWN (displayed in the UI as 'UNKNOWN')</li>
-     * </ul>
-     */
-    @JsonProperty("odbc_type")
-    protected String odbcType;
-
     @JsonProperty("previous_stage_columns")
     protected ItemList<DataItem> previousStageColumns;
 
@@ -122,20 +82,6 @@ public class StageColumn extends InformationAsset {
     @JsonProperty("writes_to_(user_defined)")
     protected ItemList<InformationAsset> writesToUserDefined;
 
-    /**
-     * Retrieve the {@code allows_null_values} property (displayed as '{@literal Allow Null Values}') of the object.
-     * @return {@code Boolean}
-     */
-    @JsonProperty("allows_null_values")
-    public Boolean getAllowsNullValues() { return this.allowsNullValues; }
-
-    /**
-     * Set the {@code allows_null_values} property (displayed as {@code Allow Null Values}) of the object.
-     * @param allowsNullValues the value to set
-     */
-    @JsonProperty("allows_null_values")
-    public void setAllowsNullValues(Boolean allowsNullValues) { this.allowsNullValues = allowsNullValues; }
-
     /**
      * Retrieve the {@code constraints} property (displayed as '{@literal Constraints}') of the object.
      * @return {@code ItemList<JobConstraint>}
@@ -220,20 +166,6 @@ public class StageColumn extends InformationAsset {
     @JsonProperty("key")
     public void setKey(Boolean key) { this.key = key; }
 
-    /**
-     * Retrieve the {@code length} property (displayed as '{@literal Length}') of the object.
-     * @return {@code Number}
-     */
-    @JsonProperty("length")
-    public Number getLength() { return this.length; }
-
-    /**
-     * Set the {@code length} property (displayed as {@code Length}) of the object.
-     * @param length the value to set
-     */
-    @JsonProperty("length")
-    public void setLength(Number length) { this.length = length; }
-
     /**
      * Retrieve the {@code link} property (displayed as '{@literal Link}') of the object.
      * @return {@code Link}
@@ -248,34 +180,6 @@ public class StageColumn extends InformationAsset {
     @JsonProperty("link")
     public void setLink(Link link) { this.link = link; }
 
-    /**
-     * Retrieve the {@code minimum_length} property (displayed as '{@literal Minimum Length}') of the object.
-     * @return {@code Number}
-     */
-    @JsonProperty("minimum_length")
-    public Number getMinimumLength() { return this.minimumLength; }
-
-    /**
-     * Set the {@code minimum_length} property (displayed as {@code Minimum Length}) of the object.
-     * @param minimumLength the value to set
-     */
-    @JsonProperty("minimum_length")
-    public void setMinimumLength(Number minimumLength) { this.minimumLength = minimumLength; }
-
-    /**
-     * Retrieve the {@code native_id} property (displayed as '{@literal Native ID}') of the object.
-     * @return {@code String}
-     */
-    @JsonProperty("native_id")
-    public String getNativeId() { return this.nativeId; }
-
-    /**
-     * Set the {@code native_id} property (displayed as {@code Native ID}) of the object.
-     * @param nativeId the value to set
-     */
-    @JsonProperty("native_id")
-    public void setNativeId(String nativeId) { this.nativeId = nativeId; }
-
     /**
      * Retrieve the {@code next_stage_columns} property (displayed as '{@literal Next Stage Columns}') of the object.
      * @return {@code ItemList<DataItem>}
@@ -290,20 +194,6 @@ public class StageColumn extends InformationAsset {
     @JsonProperty("next_stage_columns")
     public void setNextStageColumns(ItemList<DataItem> nextStageColumns) { this.nextStageColumns = nextStageColumns; }
 
-    /**
-     * Retrieve the {@code odbc_type} property (displayed as '{@literal SQL Type}') of the object.
-     * @return {@code String}
-     */
-    @JsonProperty("odbc_type")
-    public String getOdbcType() { return this.odbcType; }
-
-    /**
-     * Set the {@code odbc_type} property (displayed as {@code SQL Type}) of the object.
-     * @param odbcType the value to set
-     */
-    @JsonProperty("odbc_type")
-    public void setOdbcType(String odbcType) { this.odbcType = odbcType; }
-
     /**
      * Retrieve the {@code previous_stage_columns} property (displayed as '{@literal Previous Stage Columns}') of the object.
      * @return {@code ItemList<DataItem>}