{
  "description": "FeatureGroup is the Schema for the FeatureGroups API",
  "properties": {
    "apiVersion": {
      "description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
      "type": "string"
    },
    "kind": {
      "description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
      "type": "string"
    },
    "metadata": {
      "type": "object"
    },
    "spec": {
      "description": "FeatureGroupSpec defines the desired state of FeatureGroup.\n\nAmazon SageMaker Feature Store stores features in a collection called Feature\nGroup. A Feature Group can be visualized as a table which has rows, with\na unique identifier for each row where each column in the table is a feature.\nIn principle, a Feature Group is composed of features and values per features.",
      "properties": {
        "description": {
          "description": "A free-form description of a FeatureGroup.",
          "type": "string"
        },
        "eventTimeFeatureName": {
          "description": "The name of the feature that stores the EventTime of a Record in a FeatureGroup.\n\nAn EventTime is a point in time when a new event occurs that corresponds\nto the creation or update of a Record in a FeatureGroup. All Records in the\nFeatureGroup must have a corresponding EventTime.\n\nAn EventTime can be a String or Fractional.\n\n  - Fractional: EventTime feature values must be a Unix timestamp in seconds.\n\n  - String: EventTime feature values must be an ISO-8601 string in the format.\n    The following formats are supported yyyy-MM-dd'T'HH:mm:ssZ and yyyy-MM-dd'T'HH:mm:ss.SSSZ\n    where yyyy, MM, and dd represent the year, month, and day respectively\n    and HH, mm, ss, and if applicable, SSS represent the hour, month, second\n    and milliseconds respsectively. 'T' and Z are constants.\n\nRegex Pattern: `^[a-zA-Z0-9]([-_]*[a-zA-Z0-9]){0,63}$`",
          "type": "string"
        },
        "featureDefinitions": {
          "description": "A list of Feature names and types. Name and Type is compulsory per Feature.\n\nValid feature FeatureTypes are Integral, Fractional and String.\n\nFeatureNames cannot be any of the following: is_deleted, write_time, api_invocation_time\n\nYou can create up to 2,500 FeatureDefinitions per FeatureGroup.",
          "items": {
            "description": "A list of features. You must include FeatureName and FeatureType. Valid feature\nFeatureTypes are Integral, Fractional and String.",
            "properties": {
              "collectionConfig": {
                "description": "Configuration for your collection.",
                "properties": {
                  "vectorConfig": {
                    "description": "Configuration for your vector collection type.",
                    "properties": {
                      "dimension": {
                        "format": "int64",
                        "type": "integer"
                      }
                    },
                    "type": "object",
                    "additionalProperties": false
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "collectionType": {
                "type": "string"
              },
              "featureName": {
                "type": "string"
              },
              "featureType": {
                "type": "string"
              }
            },
            "type": "object",
            "additionalProperties": false
          },
          "type": "array"
        },
        "featureGroupName": {
          "description": "The name of the FeatureGroup. The name must be unique within an Amazon Web\nServices Region in an Amazon Web Services account.\n\nThe name:\n\n  - Must start with an alphanumeric character.\n\n  - Can only include alphanumeric characters, underscores, and hyphens.\n    Spaces are not allowed.\n\nRegex Pattern: `^[a-zA-Z0-9]([_-]*[a-zA-Z0-9]){0,63}$`",
          "type": "string"
        },
        "offlineStoreConfig": {
          "description": "Use this to configure an OfflineFeatureStore. This parameter allows you to\nspecify:\n\n  - The Amazon Simple Storage Service (Amazon S3) location of an OfflineStore.\n\n  - A configuration for an Amazon Web Services Glue or Amazon Web Services\n    Hive data catalog.\n\n  - An KMS encryption key to encrypt the Amazon S3 location used for OfflineStore.\n    If KMS encryption key is not specified, by default we encrypt all data\n    at rest using Amazon Web Services KMS key. By defining your bucket-level\n    key (https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-key.html)\n    for SSE, you can reduce Amazon Web Services KMS requests costs by up to\n    99 percent.\n\n  - Format for the offline store table. Supported formats are Glue (Default)\n    and Apache Iceberg (https://iceberg.apache.org/).\n\nTo learn more about this parameter, see OfflineStoreConfig (https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_OfflineStoreConfig.html).",
          "properties": {
            "dataCatalogConfig": {
              "description": "The meta data of the Glue table which serves as data catalog for the OfflineStore.",
              "properties": {
                "catalog": {
                  "type": "string"
                },
                "database": {
                  "type": "string"
                },
                "tableName": {
                  "type": "string"
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "disableGlueTableCreation": {
              "type": "boolean"
            },
            "s3StorageConfig": {
              "description": "The Amazon Simple Storage (Amazon S3) location and security configuration\nfor OfflineStore.",
              "properties": {
                "kmsKeyID": {
                  "type": "string"
                },
                "resolvedOutputS3URI": {
                  "type": "string"
                },
                "s3URI": {
                  "type": "string"
                }
              },
              "type": "object",
              "additionalProperties": false
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "onlineStoreConfig": {
          "description": "You can turn the OnlineStore on or off by specifying True for the EnableOnlineStore\nflag in OnlineStoreConfig.\n\nYou can also include an Amazon Web Services KMS key ID (KMSKeyId) for at-rest\nencryption of the OnlineStore.\n\nThe default value is False.",
          "properties": {
            "enableOnlineStore": {
              "type": "boolean"
            },
            "securityConfig": {
              "description": "The security configuration for OnlineStore.",
              "properties": {
                "kmsKeyID": {
                  "type": "string"
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "storageType": {
              "type": "string"
            },
            "ttlDuration": {
              "description": "Time to live duration, where the record is hard deleted after the expiration\ntime is reached; ExpiresAt = EventTime + TtlDuration. For information on\nHardDelete, see the DeleteRecord (https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_feature_store_DeleteRecord.html)\nAPI in the Amazon SageMaker API Reference guide.",
              "properties": {
                "unit": {
                  "type": "string"
                },
                "value": {
                  "format": "int64",
                  "type": "integer"
                }
              },
              "type": "object",
              "additionalProperties": false
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "recordIdentifierFeatureName": {
          "description": "The name of the Feature whose value uniquely identifies a Record defined\nin the FeatureStore. Only the latest record per identifier value will be\nstored in the OnlineStore. RecordIdentifierFeatureName must be one of feature\ndefinitions' names.\n\nYou use the RecordIdentifierFeatureName to access data in a FeatureStore.\n\nThis name:\n\n  - Must start with an alphanumeric character.\n\n  - Can only contains alphanumeric characters, hyphens, underscores. Spaces\n    are not allowed.\n\nRegex Pattern: `^[a-zA-Z0-9]([-_]*[a-zA-Z0-9]){0,63}$`",
          "type": "string"
        },
        "roleARN": {
          "description": "The Amazon Resource Name (ARN) of the IAM execution role used to persist\ndata into the OfflineStore if an OfflineStoreConfig is provided.\n\nRegex Pattern: `^arn:aws[a-z\\-]*:iam::\\d{12}:role/?[a-zA-Z_0-9+=,.@\\-_/]+$`",
          "type": "string"
        },
        "tags": {
          "description": "Tags used to identify Features in each FeatureGroup.",
          "items": {
            "description": "A tag object that consists of a key and an optional value, used to manage\nmetadata for SageMaker Amazon Web Services resources.\n\nYou can add tags to notebook instances, training jobs, hyperparameter tuning\njobs, batch transform jobs, models, labeling jobs, work teams, endpoint configurations,\nand endpoints. For more information on adding tags to SageMaker resources,\nsee AddTags (https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_AddTags.html).\n\nFor more information on adding metadata to your Amazon Web Services resources\nwith tagging, see Tagging Amazon Web Services resources (https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html).\nFor advice on best practices for managing Amazon Web Services resources with\ntagging, see Tagging Best Practices: Implement an Effective Amazon Web Services\nResource Tagging Strategy (https://d1.awsstatic.com/whitepapers/aws-tagging-best-practices.pdf).",
            "properties": {
              "key": {
                "type": "string"
              },
              "value": {
                "type": "string"
              }
            },
            "type": "object",
            "additionalProperties": false
          },
          "type": "array"
        },
        "throughputConfig": {
          "description": "Used to set feature group throughput configuration. There are two modes:\nON_DEMAND and PROVISIONED. With on-demand mode, you are charged for data\nreads and writes that your application performs on your feature group. You\ndo not need to specify read and write throughput because Feature Store accommodates\nyour workloads as they ramp up and down. You can switch a feature group to\non-demand only once in a 24 hour period. With provisioned throughput mode,\nyou specify the read and write capacity per second that you expect your application\nto require, and you are billed based on those limits. Exceeding provisioned\nthroughput will result in your requests being throttled.\n\nNote: PROVISIONED throughput mode is supported only for feature groups that\nare offline-only, or use the Standard (https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_OnlineStoreConfig.html#sagemaker-Type-OnlineStoreConfig-StorageType)\ntier online store.",
          "properties": {
            "provisionedReadCapacityUnits": {
              "format": "int64",
              "type": "integer"
            },
            "provisionedWriteCapacityUnits": {
              "format": "int64",
              "type": "integer"
            },
            "throughputMode": {
              "type": "string"
            }
          },
          "type": "object",
          "additionalProperties": false
        }
      },
      "required": [
        "eventTimeFeatureName",
        "featureDefinitions",
        "featureGroupName",
        "recordIdentifierFeatureName"
      ],
      "type": "object",
      "additionalProperties": false
    },
    "status": {
      "description": "FeatureGroupStatus defines the observed state of FeatureGroup",
      "properties": {
        "ackResourceMetadata": {
          "description": "All CRs managed by ACK have a common `Status.ACKResourceMetadata` member\nthat is used to contain resource sync state, account ownership,\nconstructed ARN for the resource",
          "properties": {
            "arn": {
              "description": "ARN is the Amazon Resource Name for the resource. This is a\nglobally-unique identifier and is set only by the ACK service controller\nonce the controller has orchestrated the creation of the resource OR\nwhen it has verified that an \"adopted\" resource (a resource where the\nARN annotation was set by the Kubernetes user on the CR) exists and\nmatches the supplied CR's Spec field values.\nhttps://github.com/aws/aws-controllers-k8s/issues/270",
              "type": "string"
            },
            "ownerAccountID": {
              "description": "OwnerAccountID is the AWS Account ID of the account that owns the\nbackend AWS service API resource.",
              "type": "string"
            },
            "region": {
              "description": "Region is the AWS region in which the resource exists or will exist.",
              "type": "string"
            }
          },
          "required": [
            "ownerAccountID",
            "region"
          ],
          "type": "object",
          "additionalProperties": false
        },
        "conditions": {
          "description": "All CRs managed by ACK have a common `Status.Conditions` member that\ncontains a collection of `ackv1alpha1.Condition` objects that describe\nthe various terminal states of the CR and its backend AWS service API\nresource",
          "items": {
            "description": "Condition is the common struct used by all CRDs managed by ACK service\ncontrollers to indicate terminal states  of the CR and its backend AWS\nservice API resource",
            "properties": {
              "lastTransitionTime": {
                "description": "Last time the condition transitioned from one status to another.",
                "format": "date-time",
                "type": "string"
              },
              "message": {
                "description": "A human readable message indicating details about the transition.",
                "type": "string"
              },
              "reason": {
                "description": "The reason for the condition's last transition.",
                "type": "string"
              },
              "status": {
                "description": "Status of the condition, one of True, False, Unknown.",
                "type": "string"
              },
              "type": {
                "description": "Type is the type of the Condition",
                "type": "string"
              }
            },
            "required": [
              "status",
              "type"
            ],
            "type": "object",
            "additionalProperties": false
          },
          "type": "array"
        },
        "failureReason": {
          "description": "The reason that the FeatureGroup failed to be replicated in the OfflineStore.\nThis is failure can occur because:\n\n   * The FeatureGroup could not be created in the OfflineStore.\n\n   * The FeatureGroup could not be deleted from the OfflineStore.",
          "type": "string"
        },
        "featureGroupStatus": {
          "description": "The status of the feature group.",
          "type": "string"
        }
      },
      "type": "object",
      "additionalProperties": false
    }
  },
  "type": "object"
}
