Project: YugabyteDB (App Definition and Development / Database)
File: expr_fcall.md

title: Built-in function call [YCQL] headerTitle: Built-in function call linkTitle: Function call description: Use a function call expression to apply the specified function to given arguments between parentheses and return the result of the computation. menu: v2.16: parent: api-cassandra weight: 1350 type: docs Use a function call expression to apply the specified function to given arguments between parentheses and return the result of the computation. ```sql functioncall ::= functionname '(' [ arguments ... ] ')' ``` | Function | Return Type | Argument Type | Description | |-|-||-| | BlobAs\<Type> | \<Type> | () | Converts a value from `BLOB` | | \<Type>AsBlob | | (\<Type>) | Converts a value to `BLOB` | | | | () | Conversion | | | | () | Returns the associated max time UUID | | | | () | Returns the associated min time UUID | | | | () | Return the system current date | | | | () | Return the system current time of day | | | | () | Return the system current timestamp | | | | () | Returns the UUID of the current timestamp | | | | (\<AnyType>) | Get time-to-live of a column | | | | () | Conversion | | | | () | Conversion | | ToTime | | () | Conversion | | ToTime | | ( | Conversion | | | () | () | Conversion | | | () | (`TIMEUUID`) | Conversion | | | | () | Conversion | | | | () | Conversion | | | | () | Conversion | | | | () | Conversion | | | | () | Returns a version 4 UUID | | | | (\<AnyType>) | Returns the timestamp when the column was written | | | | () | Computes the partition hash value (uint16) for the partition key columns of a row | | Function | Description | |-|-| | COUNT | Returns number of selected rows | | SUM | Returns sums of column values | | AVG | Returns the average of column values | | MIN | Returns the minimum value of column values | | MAX | Returns the maximum value of column values | The argument data types must be convertible to the expected type for that argument that was specified by the function definition. Function execution will return a value of the specified type by the function definition. YugabyteDB allows function calls to be used any where that expression is allowed. CAST function converts the value returned from a table column to the specified data type. ```sql cast_call ::= CAST '(' column AS type ')' ``` The following table lists the column data types and the target data

| Source column type | Target data type | |--|| | `BIGINT` | `SMALLINT`, `INT`, `TEXT` | | `BOOLEAN` | `TEXT` | | `DATE` | `TEXT`, `TIMESTAMP` | | `DOUBLE` | `BIGINT`, `INT`, `SMALLINT`, `TEXT` | | `FLOAT` | `BIGINT`, `INT`, `SMALLINT`, `TEXT` | | `INT` | `BIGINT`, `SMALLINT`, `TEXT` | | `SMALLINT` | `BIGINT`, `INT`, `TEXT` | | `TIME` | `TEXT` | | `TIMESTAMP` | `DATE`, `TEXT` | | `TIMEUUID` | `DATE`, `TIMESTAMP` | ```sql ycqlsh:example> CREATE TABLE test_cast (k INT PRIMARY KEY, ts TIMESTAMP); ``` ```sql ycqlsh:example> INSERT INTO test_cast (k, ts) VALUES (1, '2018-10-09 12:00:00'); ``` ```sql ycqlsh:example> SELECT CAST(ts AS DATE) FROM test_cast; ``` ```output cast(ts as date) 2018-10-09 ``` `partition_hash` is a function that takes as arguments the partition key columns of the primary key of a row and returns a `uint16` hash value representing the hash value for the row used for partitioning the table. The hash values used for partitioning fall in the `0-65535` (uint16) range. Tables are partitioned into tablets, with each tablet being responsible for a range of partition values. The `partition_hash` of the row is used to decide which tablet the row will reside in. `partition_hash` can be beneficial for querying a subset of the data to get approximate row counts or to break down full-table operations into smaller sub-tasks that can be run in parallel. One use of `partition_hash` is to query a subset of the data and get approximate count of rows in the table. For example, suppose you have a table `t` with partitioning columns `(h1,h2)` as follows: ```sql create table t (h1 int, h2 int, r1 int, r2 int, v int, primary key ((h1, h2), r1, r2)); ``` You can use this function to query a subset of the data (in this case, 1/128 of the data) as follows: ```sql select count(*) from t where partition_hash(h1, h2) >= 0 and partition_hash(h1, h2) < 512; ``` The value `512` comes from dividing the full hash partition range by the number of subsets that you want to query (`65536/128=512`). To do a distributed scan, you can issue, in this case, 128 queries each using a different hash range as follows: ```sql .. where partitionhash(h1, h2) >= 0 and partitionhash(h1, h2) < 512; ``` ```sql .. where partitionhash(h1, h2) >= 512 and partitionhash(h1, h2) <1024 ; ``` and so on, till the last segment/range of `512` in the partition space: ```sql .. where partition_hash(h1, h2) >= 65024; ``` Refer to `partition_hash` in and for full implementation of a parallel table scan. The `WriteTime` function returns the timestamp in microseconds when a column was written. For example, suppose you have a table `page_views` with a column named `views`: ```sql SELECT writetime(views) FROM page_views; writetime(views) 1572882871160113 (1 rows) ``` The TTL function returns the number of seconds until a column or row expires. Assuming you have a table `page_views` and a column named `views`: ```sql SELECT TTL(views) FROM page_views; ttl(views) 86367 (1 rows) ```