feat(graphql/ml): Add custom properties to ml entities (#12152)

This commit is contained in:
Andrew Sikowitz 2024-12-19 10:20:06 -08:00 committed by GitHub
parent 9031b49b23
commit b7bb5ca7ee
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
11 changed files with 108 additions and 52 deletions

View File

@ -0,0 +1,12 @@
package com.linkedin.datahub.graphql.types.mappers;
import com.linkedin.common.urn.Urn;
import com.linkedin.datahub.graphql.QueryContext;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
/** Made for models that are embedded in other models and thus do not encode their own URN. */
public interface EmbeddedModelMapper<I, O> {
O apply(
@Nullable final QueryContext context, @Nonnull final I input, @Nonnull final Urn entityUrn);
}

View File

@ -75,7 +75,8 @@ public class MLFeatureMapper implements ModelMapper<EntityResponse, MLFeature> {
mlFeature.setOwnership( mlFeature.setOwnership(
OwnershipMapper.map(context, new Ownership(dataMap), entityUrn))); OwnershipMapper.map(context, new Ownership(dataMap), entityUrn)));
mappingHelper.mapToResult( mappingHelper.mapToResult(
context, ML_FEATURE_PROPERTIES_ASPECT_NAME, MLFeatureMapper::mapMLFeatureProperties); ML_FEATURE_PROPERTIES_ASPECT_NAME,
(entity, dataMap) -> mapMLFeatureProperties(context, entity, dataMap, entityUrn));
mappingHelper.mapToResult( mappingHelper.mapToResult(
INSTITUTIONAL_MEMORY_ASPECT_NAME, INSTITUTIONAL_MEMORY_ASPECT_NAME,
(mlFeature, dataMap) -> (mlFeature, dataMap) ->
@ -138,10 +139,13 @@ public class MLFeatureMapper implements ModelMapper<EntityResponse, MLFeature> {
private static void mapMLFeatureProperties( private static void mapMLFeatureProperties(
@Nullable final QueryContext context, @Nullable final QueryContext context,
@Nonnull MLFeature mlFeature, @Nonnull MLFeature mlFeature,
@Nonnull DataMap dataMap) { @Nonnull DataMap dataMap,
@Nonnull Urn entityUrn) {
MLFeatureProperties featureProperties = new MLFeatureProperties(dataMap); MLFeatureProperties featureProperties = new MLFeatureProperties(dataMap);
mlFeature.setFeatureProperties(MLFeaturePropertiesMapper.map(context, featureProperties)); com.linkedin.datahub.graphql.generated.MLFeatureProperties graphqlProperties =
mlFeature.setProperties(MLFeaturePropertiesMapper.map(context, featureProperties)); MLFeaturePropertiesMapper.map(context, featureProperties, entityUrn);
mlFeature.setFeatureProperties(graphqlProperties);
mlFeature.setProperties(graphqlProperties);
mlFeature.setDescription(featureProperties.getDescription()); mlFeature.setDescription(featureProperties.getDescription());
if (featureProperties.getDataType() != null) { if (featureProperties.getDataType() != null) {
mlFeature.setDataType(MLFeatureDataType.valueOf(featureProperties.getDataType().toString())); mlFeature.setDataType(MLFeatureDataType.valueOf(featureProperties.getDataType().toString()));

View File

@ -1,29 +1,34 @@
package com.linkedin.datahub.graphql.types.mlmodel.mappers; package com.linkedin.datahub.graphql.types.mlmodel.mappers;
import com.linkedin.common.urn.Urn;
import com.linkedin.datahub.graphql.QueryContext; import com.linkedin.datahub.graphql.QueryContext;
import com.linkedin.datahub.graphql.generated.Dataset; import com.linkedin.datahub.graphql.generated.Dataset;
import com.linkedin.datahub.graphql.generated.MLFeatureDataType; import com.linkedin.datahub.graphql.generated.MLFeatureDataType;
import com.linkedin.datahub.graphql.generated.MLFeatureProperties; import com.linkedin.datahub.graphql.generated.MLFeatureProperties;
import com.linkedin.datahub.graphql.types.mappers.ModelMapper; import com.linkedin.datahub.graphql.types.common.mappers.CustomPropertiesMapper;
import com.linkedin.datahub.graphql.types.mappers.EmbeddedModelMapper;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import javax.annotation.Nonnull;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import lombok.NonNull;
public class MLFeaturePropertiesMapper public class MLFeaturePropertiesMapper
implements ModelMapper<com.linkedin.ml.metadata.MLFeatureProperties, MLFeatureProperties> { implements EmbeddedModelMapper<
com.linkedin.ml.metadata.MLFeatureProperties, MLFeatureProperties> {
public static final MLFeaturePropertiesMapper INSTANCE = new MLFeaturePropertiesMapper(); public static final MLFeaturePropertiesMapper INSTANCE = new MLFeaturePropertiesMapper();
public static MLFeatureProperties map( public static MLFeatureProperties map(
@Nullable QueryContext context, @Nullable QueryContext context,
@NonNull final com.linkedin.ml.metadata.MLFeatureProperties mlFeatureProperties) { @Nonnull final com.linkedin.ml.metadata.MLFeatureProperties mlFeatureProperties,
return INSTANCE.apply(context, mlFeatureProperties); @Nonnull Urn entityUrn) {
return INSTANCE.apply(context, mlFeatureProperties, entityUrn);
} }
@Override @Override
public MLFeatureProperties apply( public MLFeatureProperties apply(
@Nullable QueryContext context, @Nullable QueryContext context,
@NonNull final com.linkedin.ml.metadata.MLFeatureProperties mlFeatureProperties) { @Nonnull final com.linkedin.ml.metadata.MLFeatureProperties mlFeatureProperties,
@Nonnull Urn entityUrn) {
final MLFeatureProperties result = new MLFeatureProperties(); final MLFeatureProperties result = new MLFeatureProperties();
result.setDescription(mlFeatureProperties.getDescription()); result.setDescription(mlFeatureProperties.getDescription());
@ -45,6 +50,9 @@ public class MLFeaturePropertiesMapper
.collect(Collectors.toList())); .collect(Collectors.toList()));
} }
result.setCustomProperties(
CustomPropertiesMapper.map(mlFeatureProperties.getCustomProperties(), entityUrn));
return result; return result;
} }
} }

View File

@ -76,7 +76,7 @@ public class MLFeatureTableMapper implements ModelMapper<EntityResponse, MLFeatu
mappingHelper.mapToResult(ML_FEATURE_TABLE_KEY_ASPECT_NAME, this::mapMLFeatureTableKey); mappingHelper.mapToResult(ML_FEATURE_TABLE_KEY_ASPECT_NAME, this::mapMLFeatureTableKey);
mappingHelper.mapToResult( mappingHelper.mapToResult(
ML_FEATURE_TABLE_PROPERTIES_ASPECT_NAME, ML_FEATURE_TABLE_PROPERTIES_ASPECT_NAME,
(entity, dataMap) -> this.mapMLFeatureTableProperties(context, entity, dataMap, entityUrn)); (entity, dataMap) -> mapMLFeatureTableProperties(context, entity, dataMap, entityUrn));
mappingHelper.mapToResult( mappingHelper.mapToResult(
INSTITUTIONAL_MEMORY_ASPECT_NAME, INSTITUTIONAL_MEMORY_ASPECT_NAME,
(mlFeatureTable, dataMap) -> (mlFeatureTable, dataMap) ->
@ -146,10 +146,10 @@ public class MLFeatureTableMapper implements ModelMapper<EntityResponse, MLFeatu
@Nonnull DataMap dataMap, @Nonnull DataMap dataMap,
Urn entityUrn) { Urn entityUrn) {
MLFeatureTableProperties featureTableProperties = new MLFeatureTableProperties(dataMap); MLFeatureTableProperties featureTableProperties = new MLFeatureTableProperties(dataMap);
mlFeatureTable.setFeatureTableProperties( com.linkedin.datahub.graphql.generated.MLFeatureTableProperties graphqlProperties =
MLFeatureTablePropertiesMapper.map(context, featureTableProperties, entityUrn)); MLFeatureTablePropertiesMapper.map(context, featureTableProperties, entityUrn);
mlFeatureTable.setProperties( mlFeatureTable.setFeatureTableProperties(graphqlProperties);
MLFeatureTablePropertiesMapper.map(context, featureTableProperties, entityUrn)); mlFeatureTable.setProperties(graphqlProperties);
mlFeatureTable.setDescription(featureTableProperties.getDescription()); mlFeatureTable.setDescription(featureTableProperties.getDescription());
} }

View File

@ -8,26 +8,30 @@ import com.linkedin.datahub.graphql.generated.MLFeature;
import com.linkedin.datahub.graphql.generated.MLFeatureTableProperties; import com.linkedin.datahub.graphql.generated.MLFeatureTableProperties;
import com.linkedin.datahub.graphql.generated.MLPrimaryKey; import com.linkedin.datahub.graphql.generated.MLPrimaryKey;
import com.linkedin.datahub.graphql.types.common.mappers.CustomPropertiesMapper; import com.linkedin.datahub.graphql.types.common.mappers.CustomPropertiesMapper;
import com.linkedin.datahub.graphql.types.mappers.EmbeddedModelMapper;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import javax.annotation.Nonnull;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import lombok.NonNull;
public class MLFeatureTablePropertiesMapper { public class MLFeatureTablePropertiesMapper
implements EmbeddedModelMapper<
com.linkedin.ml.metadata.MLFeatureTableProperties, MLFeatureTableProperties> {
public static final MLFeatureTablePropertiesMapper INSTANCE = public static final MLFeatureTablePropertiesMapper INSTANCE =
new MLFeatureTablePropertiesMapper(); new MLFeatureTablePropertiesMapper();
public static MLFeatureTableProperties map( public static MLFeatureTableProperties map(
@Nullable final QueryContext context, @Nullable final QueryContext context,
@NonNull final com.linkedin.ml.metadata.MLFeatureTableProperties mlFeatureTableProperties, @Nonnull final com.linkedin.ml.metadata.MLFeatureTableProperties mlFeatureTableProperties,
Urn entityUrn) { @Nonnull Urn entityUrn) {
return INSTANCE.apply(context, mlFeatureTableProperties, entityUrn); return INSTANCE.apply(context, mlFeatureTableProperties, entityUrn);
} }
public static MLFeatureTableProperties apply( @Override
public MLFeatureTableProperties apply(
@Nullable final QueryContext context, @Nullable final QueryContext context,
@NonNull final com.linkedin.ml.metadata.MLFeatureTableProperties mlFeatureTableProperties, @Nonnull final com.linkedin.ml.metadata.MLFeatureTableProperties mlFeatureTableProperties,
Urn entityUrn) { @Nonnull Urn entityUrn) {
final MLFeatureTableProperties result = new MLFeatureTableProperties(); final MLFeatureTableProperties result = new MLFeatureTableProperties();
result.setDescription(mlFeatureTableProperties.getDescription()); result.setDescription(mlFeatureTableProperties.getDescription());

View File

@ -75,9 +75,8 @@ public class MLModelGroupMapper implements ModelMapper<EntityResponse, MLModelGr
mappingHelper.mapToResult( mappingHelper.mapToResult(
ML_MODEL_GROUP_KEY_ASPECT_NAME, MLModelGroupMapper::mapToMLModelGroupKey); ML_MODEL_GROUP_KEY_ASPECT_NAME, MLModelGroupMapper::mapToMLModelGroupKey);
mappingHelper.mapToResult( mappingHelper.mapToResult(
context,
ML_MODEL_GROUP_PROPERTIES_ASPECT_NAME, ML_MODEL_GROUP_PROPERTIES_ASPECT_NAME,
MLModelGroupMapper::mapToMLModelGroupProperties); (entity, dataMap) -> mapToMLModelGroupProperties(context, entity, dataMap, entityUrn));
mappingHelper.mapToResult( mappingHelper.mapToResult(
STATUS_ASPECT_NAME, STATUS_ASPECT_NAME,
(mlModelGroup, dataMap) -> (mlModelGroup, dataMap) ->
@ -136,9 +135,13 @@ public class MLModelGroupMapper implements ModelMapper<EntityResponse, MLModelGr
} }
private static void mapToMLModelGroupProperties( private static void mapToMLModelGroupProperties(
@Nullable final QueryContext context, MLModelGroup mlModelGroup, DataMap dataMap) { @Nullable final QueryContext context,
MLModelGroup mlModelGroup,
DataMap dataMap,
@Nonnull Urn entityUrn) {
MLModelGroupProperties modelGroupProperties = new MLModelGroupProperties(dataMap); MLModelGroupProperties modelGroupProperties = new MLModelGroupProperties(dataMap);
mlModelGroup.setProperties(MLModelGroupPropertiesMapper.map(context, modelGroupProperties)); mlModelGroup.setProperties(
MLModelGroupPropertiesMapper.map(context, modelGroupProperties, entityUrn));
if (modelGroupProperties.getDescription() != null) { if (modelGroupProperties.getDescription() != null) {
mlModelGroup.setDescription(modelGroupProperties.getDescription()); mlModelGroup.setDescription(modelGroupProperties.getDescription());
} }

View File

@ -1,27 +1,31 @@
package com.linkedin.datahub.graphql.types.mlmodel.mappers; package com.linkedin.datahub.graphql.types.mlmodel.mappers;
import com.linkedin.common.urn.Urn;
import com.linkedin.datahub.graphql.QueryContext; import com.linkedin.datahub.graphql.QueryContext;
import com.linkedin.datahub.graphql.generated.MLModelGroupProperties; import com.linkedin.datahub.graphql.generated.MLModelGroupProperties;
import com.linkedin.datahub.graphql.types.mappers.ModelMapper; import com.linkedin.datahub.graphql.types.common.mappers.CustomPropertiesMapper;
import com.linkedin.datahub.graphql.types.mappers.EmbeddedModelMapper;
import javax.annotation.Nonnull;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import lombok.NonNull;
public class MLModelGroupPropertiesMapper public class MLModelGroupPropertiesMapper
implements ModelMapper< implements EmbeddedModelMapper<
com.linkedin.ml.metadata.MLModelGroupProperties, MLModelGroupProperties> { com.linkedin.ml.metadata.MLModelGroupProperties, MLModelGroupProperties> {
public static final MLModelGroupPropertiesMapper INSTANCE = new MLModelGroupPropertiesMapper(); public static final MLModelGroupPropertiesMapper INSTANCE = new MLModelGroupPropertiesMapper();
public static MLModelGroupProperties map( public static MLModelGroupProperties map(
@Nullable QueryContext context, @Nullable QueryContext context,
@NonNull final com.linkedin.ml.metadata.MLModelGroupProperties mlModelGroupProperties) { @Nonnull final com.linkedin.ml.metadata.MLModelGroupProperties mlModelGroupProperties,
return INSTANCE.apply(context, mlModelGroupProperties); @Nonnull Urn entityUrn) {
return INSTANCE.apply(context, mlModelGroupProperties, entityUrn);
} }
@Override @Override
public MLModelGroupProperties apply( public MLModelGroupProperties apply(
@Nullable QueryContext context, @Nullable QueryContext context,
@NonNull final com.linkedin.ml.metadata.MLModelGroupProperties mlModelGroupProperties) { @Nonnull final com.linkedin.ml.metadata.MLModelGroupProperties mlModelGroupProperties,
@Nonnull Urn entityUrn) {
final MLModelGroupProperties result = new MLModelGroupProperties(); final MLModelGroupProperties result = new MLModelGroupProperties();
result.setDescription(mlModelGroupProperties.getDescription()); result.setDescription(mlModelGroupProperties.getDescription());
@ -30,6 +34,9 @@ public class MLModelGroupPropertiesMapper
} }
result.setCreatedAt(mlModelGroupProperties.getCreatedAt()); result.setCreatedAt(mlModelGroupProperties.getCreatedAt());
result.setCustomProperties(
CustomPropertiesMapper.map(mlModelGroupProperties.getCustomProperties(), entityUrn));
return result; return result;
} }
} }

View File

@ -7,25 +7,27 @@ import com.linkedin.datahub.graphql.QueryContext;
import com.linkedin.datahub.graphql.generated.MLModelGroup; import com.linkedin.datahub.graphql.generated.MLModelGroup;
import com.linkedin.datahub.graphql.generated.MLModelProperties; import com.linkedin.datahub.graphql.generated.MLModelProperties;
import com.linkedin.datahub.graphql.types.common.mappers.CustomPropertiesMapper; import com.linkedin.datahub.graphql.types.common.mappers.CustomPropertiesMapper;
import com.linkedin.datahub.graphql.types.mappers.EmbeddedModelMapper;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import javax.annotation.Nonnull;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import lombok.NonNull;
public class MLModelPropertiesMapper { public class MLModelPropertiesMapper
implements EmbeddedModelMapper<com.linkedin.ml.metadata.MLModelProperties, MLModelProperties> {
public static final MLModelPropertiesMapper INSTANCE = new MLModelPropertiesMapper(); public static final MLModelPropertiesMapper INSTANCE = new MLModelPropertiesMapper();
public static MLModelProperties map( public static MLModelProperties map(
@Nullable final QueryContext context, @Nullable final QueryContext context,
@NonNull final com.linkedin.ml.metadata.MLModelProperties mlModelProperties, @Nonnull final com.linkedin.ml.metadata.MLModelProperties mlModelProperties,
Urn entityUrn) { Urn entityUrn) {
return INSTANCE.apply(context, mlModelProperties, entityUrn); return INSTANCE.apply(context, mlModelProperties, entityUrn);
} }
public MLModelProperties apply( public MLModelProperties apply(
@Nullable final QueryContext context, @Nullable final QueryContext context,
@NonNull final com.linkedin.ml.metadata.MLModelProperties mlModelProperties, @Nonnull final com.linkedin.ml.metadata.MLModelProperties mlModelProperties,
Urn entityUrn) { @Nonnull Urn entityUrn) {
final MLModelProperties result = new MLModelProperties(); final MLModelProperties result = new MLModelProperties();
result.setDate(mlModelProperties.getDate()); result.setDate(mlModelProperties.getDate());

View File

@ -74,9 +74,8 @@ public class MLPrimaryKeyMapper implements ModelMapper<EntityResponse, MLPrimary
mappingHelper.mapToResult( mappingHelper.mapToResult(
ML_PRIMARY_KEY_KEY_ASPECT_NAME, MLPrimaryKeyMapper::mapMLPrimaryKeyKey); ML_PRIMARY_KEY_KEY_ASPECT_NAME, MLPrimaryKeyMapper::mapMLPrimaryKeyKey);
mappingHelper.mapToResult( mappingHelper.mapToResult(
context,
ML_PRIMARY_KEY_PROPERTIES_ASPECT_NAME, ML_PRIMARY_KEY_PROPERTIES_ASPECT_NAME,
MLPrimaryKeyMapper::mapMLPrimaryKeyProperties); (entity, dataMap) -> mapMLPrimaryKeyProperties(context, entity, dataMap, entityUrn));
mappingHelper.mapToResult( mappingHelper.mapToResult(
INSTITUTIONAL_MEMORY_ASPECT_NAME, INSTITUTIONAL_MEMORY_ASPECT_NAME,
(mlPrimaryKey, dataMap) -> (mlPrimaryKey, dataMap) ->
@ -132,11 +131,15 @@ public class MLPrimaryKeyMapper implements ModelMapper<EntityResponse, MLPrimary
} }
private static void mapMLPrimaryKeyProperties( private static void mapMLPrimaryKeyProperties(
@Nullable final QueryContext context, MLPrimaryKey mlPrimaryKey, DataMap dataMap) { @Nullable final QueryContext context,
MLPrimaryKey mlPrimaryKey,
DataMap dataMap,
@Nonnull Urn entityUrn) {
MLPrimaryKeyProperties primaryKeyProperties = new MLPrimaryKeyProperties(dataMap); MLPrimaryKeyProperties primaryKeyProperties = new MLPrimaryKeyProperties(dataMap);
mlPrimaryKey.setPrimaryKeyProperties( com.linkedin.datahub.graphql.generated.MLPrimaryKeyProperties graphqlProperties =
MLPrimaryKeyPropertiesMapper.map(context, primaryKeyProperties)); MLPrimaryKeyPropertiesMapper.map(context, primaryKeyProperties, entityUrn);
mlPrimaryKey.setProperties(MLPrimaryKeyPropertiesMapper.map(context, primaryKeyProperties)); mlPrimaryKey.setPrimaryKeyProperties(graphqlProperties);
mlPrimaryKey.setProperties(graphqlProperties);
mlPrimaryKey.setDescription(primaryKeyProperties.getDescription()); mlPrimaryKey.setDescription(primaryKeyProperties.getDescription());
if (primaryKeyProperties.getDataType() != null) { if (primaryKeyProperties.getDataType() != null) {
mlPrimaryKey.setDataType( mlPrimaryKey.setDataType(

View File

@ -1,30 +1,34 @@
package com.linkedin.datahub.graphql.types.mlmodel.mappers; package com.linkedin.datahub.graphql.types.mlmodel.mappers;
import com.linkedin.common.urn.Urn;
import com.linkedin.datahub.graphql.QueryContext; import com.linkedin.datahub.graphql.QueryContext;
import com.linkedin.datahub.graphql.generated.Dataset; import com.linkedin.datahub.graphql.generated.Dataset;
import com.linkedin.datahub.graphql.generated.MLFeatureDataType; import com.linkedin.datahub.graphql.generated.MLFeatureDataType;
import com.linkedin.datahub.graphql.generated.MLPrimaryKeyProperties; import com.linkedin.datahub.graphql.generated.MLPrimaryKeyProperties;
import com.linkedin.datahub.graphql.types.mappers.ModelMapper; import com.linkedin.datahub.graphql.types.common.mappers.CustomPropertiesMapper;
import com.linkedin.datahub.graphql.types.mappers.EmbeddedModelMapper;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import javax.annotation.Nonnull;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import lombok.NonNull;
public class MLPrimaryKeyPropertiesMapper public class MLPrimaryKeyPropertiesMapper
implements ModelMapper< implements EmbeddedModelMapper<
com.linkedin.ml.metadata.MLPrimaryKeyProperties, MLPrimaryKeyProperties> { com.linkedin.ml.metadata.MLPrimaryKeyProperties, MLPrimaryKeyProperties> {
public static final MLPrimaryKeyPropertiesMapper INSTANCE = new MLPrimaryKeyPropertiesMapper(); public static final MLPrimaryKeyPropertiesMapper INSTANCE = new MLPrimaryKeyPropertiesMapper();
public static MLPrimaryKeyProperties map( public static MLPrimaryKeyProperties map(
@Nullable QueryContext context, @Nullable QueryContext context,
@NonNull final com.linkedin.ml.metadata.MLPrimaryKeyProperties mlPrimaryKeyProperties) { @Nonnull final com.linkedin.ml.metadata.MLPrimaryKeyProperties mlPrimaryKeyProperties,
return INSTANCE.apply(context, mlPrimaryKeyProperties); @Nonnull Urn entityUrn) {
return INSTANCE.apply(context, mlPrimaryKeyProperties, entityUrn);
} }
@Override @Override
public MLPrimaryKeyProperties apply( public MLPrimaryKeyProperties apply(
@Nullable QueryContext context, @Nullable QueryContext context,
@NonNull final com.linkedin.ml.metadata.MLPrimaryKeyProperties mlPrimaryKeyProperties) { @Nonnull final com.linkedin.ml.metadata.MLPrimaryKeyProperties mlPrimaryKeyProperties,
@Nonnull Urn entityUrn) {
final MLPrimaryKeyProperties result = new MLPrimaryKeyProperties(); final MLPrimaryKeyProperties result = new MLPrimaryKeyProperties();
result.setDescription(mlPrimaryKeyProperties.getDescription()); result.setDescription(mlPrimaryKeyProperties.getDescription());
@ -45,6 +49,9 @@ public class MLPrimaryKeyPropertiesMapper
}) })
.collect(Collectors.toList())); .collect(Collectors.toList()));
result.setCustomProperties(
CustomPropertiesMapper.map(mlPrimaryKeyProperties.getCustomProperties(), entityUrn));
return result; return result;
} }
} }

View File

@ -9834,6 +9834,8 @@ description: String
createdAt: Long createdAt: Long
version: VersionTag version: VersionTag
customProperties: [CustomPropertiesEntry!]
} }
""" """
@ -10028,6 +10030,8 @@ type MLFeatureProperties {
version: VersionTag version: VersionTag
sources: [Dataset] sources: [Dataset]
customProperties: [CustomPropertiesEntry!]
} }
""" """
@ -10171,6 +10175,8 @@ description: String
version: VersionTag version: VersionTag
sources: [Dataset] sources: [Dataset]
customProperties: [CustomPropertiesEntry!]
} }
""" """