> ## 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.

# /get/records/bycolumn

```
URL: http://<db.host>:<db.port>/get/records/bycolumn
```

For a given table, retrieves the values from the requested column(s). Maps of
column name to the array of values as well as the column data type are
returned. This endpoint supports pagination with the input parameter *offset*
and input parameter *limit* parameters.

[Window functions](../../concepts/window/), which can perform operations
like moving averages, are available through this endpoint as well as
[/create/projection](/content/api/rest/create_projection_rest).

When using pagination, if the table (or the underlying table in the case of a
view) is modified (records are inserted, updated, or deleted) during a call to
the endpoint, the records or values retrieved may differ between calls based on
the type of the update, e.g., the contiguity across pages cannot be relied
upon.

If input parameter *table\_name* is empty, selection is performed against a
single-row virtual table.  This can be useful in executing temporal
([NOW()](../../concepts/expressions/#date-time-functions)), identity
([USER()](../../concepts/expressions/#user-security-functions)), or
constant-based functions
([GEODIST(-77.11, 38.88, -71.06, 42.36)](../../concepts/expressions/#scalar-functions)).

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

## Input Parameter Description

<ParamField body="table_name" type="string">
  Name of the table or view on which this operation will be performed, in \[schema\_name.]table\_name format, using standard [name resolution rules](../../concepts/tables/#table-name-resolution). An empty table name retrieves one record from a single-row virtual table, where columns specified should be constants or constant expressions.
</ParamField>

<ParamField body="column_names" type="array of strings">
  The list of column values to retrieve.
</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; either *binary* or *json*.

  The default value is `binary`.

  The supported values are:

  * binary
  * json
</ParamField>

<ParamField body="options" type="map of string to strings">
  The default value is an empty map ( \{} ).

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

    <ParamField body="sort_by">
      Column that the data should be sorted by. Used in conjunction with *sort\_order*. The *order\_by* option can be used in lieu of *sort\_by* / *sort\_order*.

      The default value is ''.
    </ParamField>

    <ParamField body="sort_order">
      String indicating how the returned values should be sorted - *ascending* or *descending*. If *sort\_order* is provided, *sort\_by* has to be provided.

      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="convert_wkts_to_wkbs">
      If *true*, then WKT string columns will be returned as WKB bytes.

      The default value is `false`.

      The supported values are:

      * true
      * false
    </ParamField>

    <ParamField body="route_to_tom">
      For multihead record retrieval without shard key expression - specifies from which tom to retrieve data.
    </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">
  'get\_records\_by\_column\_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 /get/records/bycolumn 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="total_number_of_records" type="long">
      Total/Filtered number of records.
    </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.
    </ResponseField>
  </Expandable>

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