# The Feature object

## Attributes

- `full_name` (string, Beta, Immutable)
  The full three-part name (catalog, schema, name) of the feature. This is the
   feature's resource identifier; the catalog_name, schema_name, and name fields
   below are OUTPUT_ONLY decomposed views of this value.
- `source` (object, Beta, Immutable)
  The data source of the feature.
  - `delta_table_source` (object, Beta)
    A Delta table data source.
    - `full_name` (string, Beta)
      The full three-part (catalog, schema, table) name of the Delta table.
    - `filter_condition` (string, Beta)
      Single WHERE clause to filter delta table before applying transformations. Will be row-wise evaluated, so should only include conditionals and projections.
    - `transformation_sql` (string, Beta)
      A single SQL SELECT expression applied after filter_condition.
       Should contains all the columns needed (eg. "SELECT *, col_a + col_b AS col_c FROM x.y.z WHERE col_a > 0" would have `transformation_sql` "*, col_a + col_b AS col_c")
       If transformation_sql is not provided, all columns of the delta table are present in the DataSource dataframe.
      Default: `*`
    - `dataframe_schema` (string, Beta)
      Schema of the resulting dataframe after transformations, in Spark StructType JSON format (from df.schema.json()).
       Required if transformation_sql is specified.
       Example: {"type":"struct","fields":[{"name":"col_a","type":"integer","nullable":true,"metadata":{}},{"name":"col_c","type":"integer","nullable":true,"metadata":{}}]}
  - `kafka_source` (object, Beta)
    A Kafka stream data source.
    - `name` (string, Beta)
      Name of the Kafka source, used to identify it. This is used to look up the corresponding KafkaConfig object. Can be distinct from topic name.
    - `filter_condition` (string, Beta)
      The filter condition applied to the source data before aggregation.
  - `request_source` (object, Beta)
    A request-time data source.
    - `flat_schema` (object, Beta)
      A flat schema with scalar-typed fields only.
      - `fields` (array of object, Beta)
        The list of fields in this schema.
        - `name` (string, Beta)
          The name of the field.
        - `data_type` (string, Beta)
          The scalar data type of the field.
          Possible values:
          - `SCALAR_DATA_TYPE_UNSPECIFIED`
          - `INTEGER`
          - `FLOAT`
          - `BOOLEAN`
          - `STRING`
          - `DOUBLE`
          - `LONG`
          - `TIMESTAMP`
          - `DATE`
          - `SHORT`
          - `BINARY`
          - `DECIMAL`
  - `stream_source` (object, Beta)
    A Stream data source.
    - `full_name` (string, Beta)
      Three-part full name of the Stream (catalog.schema.stream).
    - `filter_condition` (string, Beta)
      The filter condition applied to the source data before aggregation.
- `function` (object, Beta, Immutable)
  The function by which the feature is computed.
  - `aggregation_function` (object, Beta)
    An aggregation function applied over a time window.
    - `avg` (object, Beta)
      - `input` (string, Beta)
        The input column from which the average is computed. For Kafka sources, use dot-prefixed path
         notation (e.g., "value.amount"). For nested fields, the leaf node name is used.
          Colon-prefixed notation (e.g., "value:amount") is supported for backwards
         compatibility but is deprecated; migrate to dot notation.
    - `count_function` (object, Beta)
      - `input` (string, Beta)
        The input column from which the count is computed. For Kafka sources, use dot-prefixed path
         notation (e.g., "value.amount"). For nested fields, the leaf node name is used.
          Colon-prefixed notation (e.g., "value:amount") is supported for backwards
         compatibility but is deprecated; migrate to dot notation.
    - `sum` (object, Beta)
      - `input` (string, Beta)
        The input column from which the sum is computed. For Kafka sources, use dot-prefixed path
         notation (e.g., "value.amount"). For nested fields, the leaf node name is used.
          Colon-prefixed notation (e.g., "value:amount") is supported for backwards
         compatibility but is deprecated; migrate to dot notation.
    - `min` (object, Beta)
      - `input` (string, Beta)
        The input column from which the minimum is computed.
    - `max` (object, Beta)
      - `input` (string, Beta)
        The input column from which the maximum is computed.
    - `first` (object, Beta)
      - `input` (string, Beta)
        The input column from which the first value is returned.
    - `last` (object, Beta)
      - `input` (string, Beta)
        The input column from which the last value is returned.
    - `approx_count_distinct` (object, Beta)
      - `input` (string, Beta)
        The input column from which the approximate count of distinct values is computed.
      - `relative_sd` (double, Beta)
        The maximum relative standard deviation allowed (default defined by Spark).
    - `approx_percentile` (object, Beta)
      - `input` (string, Beta)
        The input column from which the approximate percentile is computed.
      - `percentile` (double, Beta)
        The percentile value to compute (between 0 and 1).
      - `accuracy` (int64, Beta)
        The accuracy parameter (higher is more accurate but slower).
    - `stddev_pop` (object, Beta)
      - `input` (string, Beta)
        The input column from which the population standard deviation is computed. For Kafka sources,
         use dot-prefixed path notation (e.g., "value.amount"). For nested fields, the leaf node name is used.
          Colon-prefixed notation (e.g., "value:amount") is supported for backwards
         compatibility but is deprecated; migrate to dot notation.
    - `stddev_samp` (object, Beta)
      - `input` (string, Beta)
        The input column from which the sample standard deviation is computed.
    - `var_pop` (object, Beta)
      - `input` (string, Beta)
        The input column from which the population variance is computed.
    - `var_samp` (object, Beta)
      - `input` (string, Beta)
        The input column from which the sample variance is computed.
    - `time_window` (object, Beta)
      The time window over which the aggregation is computed.
      - `tumbling` (object, Beta)
        - `window_duration` (string, Beta)
          The duration of each tumbling window (non-overlapping, fixed-duration windows).
      - `sliding` (object, Beta)
        - `window_duration` (string, Beta)
          The duration of the sliding window. Must be positive when set; absent means lifetime
           (aggregate over the entity's entire history).
        - `slide_duration` (string, Beta)
          The slide duration (interval by which windows advance, must be positive and less than duration).
      - `rolling` (object, Beta)
        - `window_duration` (string, Beta)
          The duration of the rolling window. Must be positive when set; absent means lifetime
           (aggregate over the entity's entire history).
        - `delay` (string, Beta)
          Non-negative analytic lag that evaluates the window this far in the past. Use this for timing
           variations unrelated to source lateness, such as a 30-day count as of one week ago. If unset,
           the analytic lag is zero. It composes with source.lateness when both are set.
  - `column_selection` (object, Beta)
    Selects the latest value of a single column in a data source
    - `column` (string, Beta)
      Column name from source to select as the feature value.
- `description` (string, Beta)
  The description of the feature.
- `entities` (array of object, Beta)
  The entity columns for the feature, used as aggregation keys and for query-time lookup.
   Optional since entities are not set for RequestSource features or on-demand calculated features.
  - `name` (string, Beta)
    The name of the entity column. For Kafka sources, use dot-prefixed path notation to reference
     fields within the key or value schema (e.g., "value.user_id", "key.partition_key"). For nested
     fields, the leaf node name (e.g., "user_id" from "value.trip_details.user_id") is what will
     be present in materialized tables and expected to match at query time.
      Colon-prefixed notation (e.g., "value:user_id") is supported for backwards
     compatibility but is deprecated; migrate to dot notation.
- `timeseries_column` (object, Beta)
  Column recording time, used for point-in-time joins, backfills, and aggregations.
   Optional since a timeseries column is not set for RequestSource features or on-demand
   calculated features.
  - `name` (string, Beta)
    The name of the timeseries column. For Kafka sources, use dot-prefixed path notation to
     reference fields within the key or value schema (e.g., "value.event_timestamp"). For nested
     fields, the leaf node name (e.g., "event_timestamp" from "value.event_details.event_timestamp")
     is what will be present in materialized tables and expected to match at query time.
      Colon-prefixed notation (e.g., "value:event_timestamp") is supported for
     backwards compatibility but is deprecated; migrate to dot notation.
- `catalog_name` (string, Beta, Output only)
  Name of parent catalog.
- `schema_name` (string, Beta, Output only)
  Name of parent schema relative to its parent catalog.
- `name` (string, Beta, Output only)
  Name of the feature, extracted from the full three-part name (catalog.schema.name).
- `created_at` (string, Beta, Output only)
  Time at which this feature was created.
- `created_by` (string, Beta, Output only)
  Username of the feature creator.

## Example

```json
{
  "full_name": "string",
  "source": {
    "delta_table_source": {},
    "kafka_source": {},
    "request_source": {},
    "stream_source": {}
  },
  "function": {
    "aggregation_function": {},
    "column_selection": {}
  },
  "description": "string",
  "entities": [
    {
      "name": "string"
    }
  ],
  "timeseries_column": {
    "name": "string"
  },
  "catalog_name": "string",
  "schema_name": "string",
  "name": "string",
  "created_at": "string",
  "created_by": "string"
}
```


