> ## Documentation Index
> Fetch the complete documentation index at: https://docs.kinetica.com/llms.txt
> Use this file to discover all available pages before exploring further.

# /aggregate/unique

```
URL: http://<db.host>:<db.port>/aggregate/unique
```

Returns all the unique values from a particular column (specified by input
parameter *column\_name*) of a particular table or view (specified by input
parameter *table\_name*). If input parameter *column\_name* is a numeric column,
the values will be in output parameter *binary\_encoded\_response*. Otherwise if
input parameter *column\_name* is a string column, the values will be in output
parameter *json\_encoded\_response*.  The results can be paged via input
parameter *offset* and input parameter *limit* parameters.

\{"limit":"10","sort\_order":"descending"}

The response is returned as a dynamic schema. For details see:
[dynamic schemas documentation](../../api/concepts/#dynamic-schemas).

If a *result\_table* name is specified in the input parameter *options*, the
results are stored in a new table with that name--no results are returned in
the response.  Both the table name and resulting column name must adhere to
[standard naming conventions](../../concepts/tables/#table); any column
expression will need to be aliased.  If the source table's
[shard key](../../concepts/tables/#shard-keys) is used as the input
parameter *column\_name*, the result table will be sharded, in all other cases
it will be replicated.  Sorting will properly function only if the result table
is replicated or if there is only one processing node and should not be relied
upon in other cases.  Not available if the value of input parameter
*column\_name* is an unrestricted-length string.

## Input Parameter Description

<ParamField body="table_name" type="string">
  Name of an existing table or view on which the operation will be performed, in \[schema\_name.]table\_name format, using standard [name resolution rules](../../concepts/tables/#table-name-resolution).
</ParamField>

<ParamField body="column_name" type="string">
  Name of the column or an expression containing one or more column names on which the unique function would be applied.
</ParamField>

<ParamField body="offset" type="long">
  A positive integer indicating the number of initial results to skip (this can be useful for paging through the results).

  The default value is 0. The minimum allowed value is 0. The maximum allowed value is MAX\_INT.
</ParamField>

<ParamField body="limit" type="long">
  A positive integer indicating the maximum number of results to be returned, or END\_OF\_SET (-9999) to indicate that the maximum number of results allowed by the server should be returned.  The number of records returned will never exceed the server's own limit, defined by the [max\_get\_records\_size](../../config/#config-main-general) parameter in the server configuration. Use output parameter *has\_more\_records* to see if more records exist in the result to be fetched, and input parameter *offset* and input parameter *limit* to request subsequent pages of results.

  The default value is -9999.
</ParamField>

<ParamField body="encoding" type="string">
  Specifies the encoding for returned records.

  The default value is `binary`.

  * **binary**: Indicates that the returned records should be binary encoded.
  * **json**: Indicates that the returned records should be JSON-encoded.
</ParamField>

<ParamField body="options" type="map of string to strings">
  Optional parameters.

  The default value is an empty map ( \{} ).

  <Expandable title="options">
    <ParamField body="create_temp_table">
      If *true*, a unique temporary table name will be generated in the sys\_temp schema and used in place of *result\_table*. If *result\_table\_persist* is *false* (or unspecified), then this is always allowed even if the caller does not have permission to create tables. The generated name is returned in *qualified\_result\_table\_name*.

      The default value is `false`.

      The supported values are:

      * true
      * false
    </ParamField>

    <ParamField body="collection_name">
      \[DEPRECATED--please specify the containing schema as part of *result\_table* and use [/create/schema](/content/api/rest/create_schema_rest) to create the schema if non-existent]  Name of a schema which is to contain the table specified in *result\_table*. If the schema provided is non-existent, it will be automatically created.
    </ParamField>

    <ParamField body="expression">
      Filter expression to apply to the table.
    </ParamField>

    <ParamField body="sort_order">
      String indicating how the returned values should be sorted.

      The default value is `ascending`.

      The supported values are:

      * ascending
      * descending
    </ParamField>

    <ParamField body="order_by">
      Comma-separated list of the columns to be sorted by as well as the sort direction, e.g., 'timestamp asc, x desc'.

      The default value is ''.
    </ParamField>

    <ParamField body="result_table">
      The name of the table used to store the results, in \[schema\_name.]table\_name format, using standard [name resolution rules](../../concepts/tables/#table-name-resolution) and meeting [table naming criteria](../../concepts/tables/#table-naming-criteria). If present, no results are returned in the response.  Not available if input parameter *column\_name* is an unrestricted-length string.
    </ParamField>

    <ParamField body="result_table_persist">
      If *true*, then the result table specified in *result\_table* will be persisted and will not expire unless a *ttl* is specified.   If *false*, then the result table will be an in-memory table and will expire unless a *ttl* is specified otherwise.

      The default value is `false`.

      The supported values are:

      * true
      * false
    </ParamField>

    <ParamField body="result_table_force_replicated">
      Force the result table to be replicated (ignores any sharding). Must be used in combination with the *result\_table* option.

      The default value is `false`.

      The supported values are:

      * true
      * false
    </ParamField>

    <ParamField body="result_table_generate_pk">
      If *true* then set a primary key for the result table. Must be used in combination with the *result\_table* option.

      The default value is `false`.

      The supported values are:

      * true
      * false
    </ParamField>

    <ParamField body="ttl">
      Sets the [TTL](../../concepts/ttl/) of the table specified in *result\_table*.
    </ParamField>

    <ParamField body="chunk_size">
      Indicates the number of records per chunk to be used for the result table. Must be used in combination with the *result\_table* option.
    </ParamField>

    <ParamField body="chunk_column_max_memory">
      Indicates the target maximum data size for each column in a chunk to be used for the result table. Must be used in combination with the *result\_table* option.
    </ParamField>

    <ParamField body="chunk_max_memory">
      Indicates the target maximum data size for all columns in a chunk to be used for the result table. Must be used in combination with the *result\_table* option.
    </ParamField>

    <ParamField body="compression_codec">
      The default [compression codec](../../concepts/column_compression/) for the result table's columns.
    </ParamField>

    <ParamField body="view_id">
      ID of view of which the result table will be a member.

      The default value is ''.
    </ParamField>
  </Expandable>
</ParamField>

## Output Parameter Description

The Kinetica server embeds the endpoint response inside a standard response structure which contains status information and the actual response to the query.  Here is a description of the various fields of the wrapper:

<ResponseField name="status" type="String">
  'OK' or 'ERROR'
</ResponseField>

<ResponseField name="message" type="String">
  Empty if success or an error message
</ResponseField>

<ResponseField name="data_type" type="String">
  'aggregate\_unique\_response' or 'none' in case of an error
</ResponseField>

<ResponseField name="data" type="String">
  Empty string
</ResponseField>

<ResponseField name="data_str" type="JSON or String">
  This embedded JSON represents the result of the /aggregate/unique endpoint:

  <Expandable title="data_str">
    <ResponseField name="table_name" type="string">
      The same table name as was passed in the parameter list.
    </ResponseField>

    <ResponseField name="response_schema_str" type="string">
      Avro schema of output parameter *binary\_encoded\_response* or output parameter *json\_encoded\_response*.
    </ResponseField>

    <ResponseField name="binary_encoded_response" type="bytes">
      Avro binary encoded response.
    </ResponseField>

    <ResponseField name="json_encoded_response" type="string">
      Avro JSON encoded response.
    </ResponseField>

    <ResponseField name="has_more_records" type="boolean">
      Too many records. Returned a partial set.
    </ResponseField>

    <ResponseField name="info" type="map of string to strings">
      Additional information.

      The default value is an empty map ( \{} ).

      <Expandable title="info">
        <ResponseField name="qualified_result_table_name">
          The fully qualified name of the table (i.e. including the schema) used to store the results.
        </ResponseField>
      </Expandable>
    </ResponseField>
  </Expandable>

  Empty string in case of an error.
</ResponseField>
