# Transformation Functions For transformation functions, it will be helpful to include `property` in the request to help associate the transformation function values, for example: ```json { "select": [ { "property": " [string]" }, { "function": "roundTimestamp", "alias": " [optional string]", "parameters": { "property": " [string]", "time_interval": "[second|minute|hour|day|month|year]" } } ] } ``` We omit `property` for brevity in the following examples. For an explanation of nested functions, see the guide {doc}`composing_functions`. ### Round Timestamp Rounds a timestamp property to the provided time interval. This function requires one property which must be an attribute of type datetime and one parameter, `time_interval`. Query Request: ```json { "select": [ { "function": "roundTimestamp", "alias": " [optional string]", "parameters": { "property": " [string or nested]", "time_interval": "[second|minute|hour|day|month|year]" } } ] } ``` Query Response: ```json { "query_result": [ { "": " [string]" } ] } ``` Sample Request: ```json { "select": [ { "function": "roundTimestamp", "parameters": { "property": "inference_timestamp", "time_interval": "day" } } ] } ``` Sample Response: ```json { "query_result": [ { "roundTimestamp": "2020-08-10T00:00:00.000Z" }, { "roundTimestamp": "2020-08-09T00:00:00.000Z" }, { "roundTimestamp": "2020-08-08T00:00:00.000Z" } ] } ``` [back to top](#transformation-functions) ### Label By Max Column Given a list of columns, returns a string column with the name of the column containing the max value for the row. For example, this function can be used to extract the max probability from a vector of probability properties. Query Request: ```json { "select": [ { "function": "labelByMaxColumn", "alias": " [optional string]", "parameters": { "properties": [ " [string]" ] } } ] } ``` Query Response: ```json { "query_result": [ { "": " [string]" } ] } ``` Sample Request: ```json { "select": [ { "function": "labelByMaxColumn", "alias": "classPrediction", "parameters": { "properties": [ "class_1", "class_2", "class_3" ] } } ] } ``` Sample Response: ```json { "classPrediction": [ { "classPrediction": "class_1" }, { "classPrediction": "class_1" }, { "classPrediction": "class_2" } ] } ``` [back to top](#transformation-functions) ### Bin Continuous This function bins a continuous value based on supplied thresholds. The bins will be formed as: `[< threshold_1, threshold_1 <= x < threshold_2, ... , threshold_(n-1) <= x < threshold_(n), threshold_(n) < x]`. The response bins will be labeled with an integer id corresponding to the ordered bin, starting at 1. If `n` thresholds are given, `n+1` bins will be returned. Query Request: ```json { "select": [ { "function": "binContinuous", "alias": " [optional string]", "parameters": { "property": " [string or nested]", "bin_thresholds": [ " [number]", " [number]", " [number]" ] } } ] } ``` Query Response: ```json { "query_result": [ { "": " [int]" } ] } ``` Sample Request: ```json { "select": [ { "property": "age" }, { "function": "binContinuous", "alias": "ageBin", "parameters": { "property": "age", "bin_thresholds": [ 18, 65, 95 ] } } ] } ``` Sample Response: ```json { "query_result": [ { "age": 10, "ageBin": 1 }, { "age": 20, "ageBin": 2 }, { "age": 70, "ageBin": 3 } ] } ``` [back to top](#transformation-functions) ### Bins To Quantiles Returns an array of values representing the quantiles based on the number of bins passed to the function. For example if you supply `"num_bins": "10"`, then this query will return the value in your data at the 10%, 20%, ... , 90%, 100% quantiles. Query Request: ```json { "select": [ { "function": "binsToQuantiles", "alias": " [optional string]", "parameters": { "property": " [string or nested]", "num_bins": " [int]" } } ] } ``` Query Response: ```json { "query_result": [ { "": [ "float" ] } ] } ``` Sample Request: ```json { "select": [ { "function": "binsToQuantiles", "alias": "quantiles", "parameters": { "property": "age", "num_bins": 10 } } ] } ``` Sample Response: ```json { "query_result": [ { "": [ 19, 28, 37, 46, 55, 64, 73, 82, 91 ] } ] } ``` [back to top](#transformation-functions) ### Date Diff Returns the difference of two timestamps in `unit`s. Valid units are: `second`, `minute`, `hour`, `day`, `week`, `month`, `quarter`, and `year`. Query Request: ```json { "select": [ { "function": "dateDiff", "alias": " [optional string]", "parameters": { "unit": "[second|minute|hour|day|week|month|quarter|year]", "start_date": " [string or nested]", "end_date": " [string or nested]" } } ] } ``` Query Response: ```json { "query_result": [ { "": "difference [int]" } ] } ``` Sample Request: ```json { "select": [ { "function": "dateDiff", "alias": "date_diff", "parameters": { "unit": "second", "start_date": "inference_timestamp", "end_date": "prev_timestamp" } } ] } ``` Sample Response: ```json { "query_result": [ { "date_diff": 100 } ] } ``` [back to top](#transformation-functions) ### Neighbor Returns the value of the column `offset` rows next to this row in the ordering. `default` is the value that is returned when the offset goes out of bounds on the row set. It is recommended to use this function in a subquery with an `order_by` clause to get consistent ordering. Query Request: ```json { "select": [ { "function": "neighbor", "alias": " [optional string]", "parameters": { "offset": " [int]", "property": " [string or nested]", "default": " [any]" } } ] } ``` Query Response: ```json { "query_result": [ { "": "neighbor_value [any]" } ] } ``` Sample Request: ```json { "select": [ { "function": "neighbor", "alias": "prev_timestamp", "parameters": { "property": "inference_timestamp", "offset": -1, "default": null } } ], "order_by": [ { "property": "inference_timestamp", "direction": "desc" } ] } ``` Sample Response: ```json { "query_result": [ { "prev_timestamp": "2021-06-15T00:00:00.000Z" } ] } ``` [back to top](#transformation-functions) ### Arithmetic `add`, `subtract`, `multiply`, and `divide` are valid arithmetic functions. Each takes two columns as input and returns the result of the arithmetic expression. Query Request: ```json { "select": [ { "function": "[add|subtract|multiply|divide]", "alias": " [optional string]", "parameters": { "left": " [string or nested]", "right": " [string or nested]" } } ] } ``` Query Response: ```json { "query_result": [ { "": "expression_result [number]" } ] } ``` Sample Request: ```json { "select": [ { "function": "multiply", "alias": "double_home_value", "parameters": { "left": "Home_Value", "right": 2 } } ] } ``` Sample Response: ```json { "query_result": [ { "double_home_value": 20000 } ] } ``` Sample nested request to compute `(Home_Value + Car_Value) * 2` ```json { "select": [ { "function": "multiply", "alias": "double_loans", "parameters": { "left": { "nested_function": { "function": "add", "alias": "total_loan", "parameters": { "left": "Home_Value", "right": "Car_Value" } } }, "right": 2 } } ] } ``` Sample Nested Response: ```json { "query_result": [ { "double_loans": 20000 } ] } ``` [back to top](#transformation-functions) ### Absolute Value Take the absolute value of a property. Query Request: ```json { "select": [ { "function": "abs", "alias": " [optional string]", "parameters": { "property": " [string or nested]" } } ] } ``` Query Response: ```json { "query_result": [ { "": " [float]" } ] } ``` Sample Request: ```json { "select": [ { "function": "abs", "alias": "abs_delta", "parameters": { "property": "delta" } } ] } ``` Sample Response: ```json { "query_result": [ { "abs_delta": 55.45 } ] } ``` [back to top](#transformation-functions) ### Logical Functions `equals`, `and`, and `or` are valid logical functions. Each takes two columns as input and returns the result of the logical expression. These follow the same API as [Arithmetic Functions](#arithmetic) Query Request: ```json { "select": [ { "function": "[equals|and|or]", "alias": " [optional string]", "parameters": { "left": " [string or nested]", "right": " [string or nested]" } } ] } ``` Query Response: ```json { "query_result": [ { "": "expression_result [0 or 1]" } ] } ``` Sample Request: ```json { "select": [ { "function": "equals", "alias": "has_phd", "parameters": { "left": "education", "right": 4 } } ] } ``` Sample Response: ```json { "query_result": [ { "has_phd": 1 } ] } ``` Sample nested request to compute `has_phd` or `has_masters` ```json { "select": [ { "function": "or", "alias": "has_higher_education", "parameters": { "left": { "nested_function": { "function": "equals", "alias": "has_phd", "parameters": { "left": "education", "right": 4 } } }, "right": { "nested_function": { "function": "equals", "alias": "has_masters", "parameters": { "left": "education", "right": 3 } } } } } ] } ``` Sample Nested Response: ```json { "query_result": [ { "has_higher_education": 1 } ] } ``` [back to top](#transformation-functions)