| # PerfettoSQL Built-ins | 
 |  | 
 | These are functions built into C++ which reduce the amount of boilerplate which | 
 | needs to be written in SQL. | 
 |  | 
 | ## Profile Functions | 
 |  | 
 | ### STACK_FROM_STACK_PROFILE_FRAME | 
 |  | 
 | `STACK_FROM_STACK_PROFILE_FRAME(frame_id)` | 
 |  | 
 | #### Description | 
 |  | 
 | Creates a stack with just the frame referenced by `frame_id` (reference to the | 
 | [stack_profile_frame](sql-tables.autogen#stack_profile_frame) table) | 
 |  | 
 | #### Return Type | 
 |  | 
 | `BYTES` | 
 |  | 
 | #### Arguments | 
 |  | 
 | Argument | Type | Description | 
 | -------- | ---- | ----------- | 
 | frame_id | StackProfileFrameTable::Id | reference to the [stack_profile_frame](sql-tables.autogen#stack_profile_frame) table | 
 |  | 
 | ### STACK_FROM_STACK_PROFILE_CALLSITE | 
 |  | 
 | `STACK_FROM_STACK_PROFILE_CALLSITE(callsite_id)` | 
 |  | 
 | #### Description | 
 |  | 
 | Creates a stack by taking a `callsite_id` (reference to the | 
 | [stack_profile_callsite]](sql-tables.autogen#stack_profile_callsite) table) and | 
 | generating a list of frames (by walking the | 
 | [stack_profile_callsite]](sql-tables.autogen#stack_profile_callsite) table) | 
 |  | 
 | #### Return Type | 
 |  | 
 | `BYTES` | 
 |  | 
 | #### Arguments | 
 |  | 
 | Argument | Type | Description | 
 | -------- | ---- | ----------- | 
 | callsite_id | StackProfileCallsiteTable::Id | reference to the [stack_profile_callsite]](sql-tables.autogen#stack_profile_callsite) table | 
 |  | 
 | ### CAT_STACKS | 
 |  | 
 | `CAT_STACKS(([root [[,level_1 [, ...]], leaf]])` | 
 |  | 
 | #### Description | 
 |  | 
 | Creates a Stack by concatenating other Stacks. Also accepts STRING values for | 
 | which it generates a fake Frame. Null values are just ignored. | 
 |  | 
 | #### Return Type | 
 |  | 
 | `BYTES` | 
 |  | 
 | #### Arguments | 
 |  | 
 | Argument | Type | Description | 
 | -------- | ---- | ----------- | 
 | root | BYTES or STRING | Stack or STRING for which a fake Frame is generated | 
 | ... | BYTES or STRING | Stack or STRING for which a fake Frame is generated | 
 | leaf | BYTES or STRING | Stack or STRING for which a fake Frame is generated | 
 |  | 
 | ### EXPERIMENTAL_PROFILE | 
 |  | 
 | `EXPERIMENTAL_PROFILE(stack [,sample_type, sample_units, sample_value]*)` | 
 |  | 
 | #### Description | 
 |  | 
 | Aggregation function that generates a profile in | 
 | [pprof](https://github.com/google/pprof) format from the given samples. | 
 |  | 
 | #### Return Type | 
 |  | 
 | `BYTES` ([pprof](https://github.com/google/pprof) data) | 
 |  | 
 | #### Arguments | 
 |  | 
 | Argument | Type | Description | 
 | -------- | ---- | ----------- | 
 | stack | BYTES | Stack or string for which a fake Frame is generated | 
 | sample_type | STRING | Type of the sample value (e.g. size, time) | 
 | sample_units | STRING | Units of the sample value (e.g. bytes, count) | 
 | sample_value | LONG | Value for the sample | 
 |  | 
 | Multiple samples can be specified. | 
 |  | 
 | If only the `stack` argument is present, a `"samples"`, `"count"`, and `1` are | 
 | used as defaults for `sample_type`, `sample_units`, and `sample_value` | 
 |  respectively. | 
 |  | 
 | #### Example | 
 |  | 
 | CPU profile | 
 |  | 
 | ```sql | 
 | SELECT | 
 |   perf_session_id, | 
 |   EXPERIMENTAL_PROFILE( | 
 |     STACK_FROM_STACK_PROFILE_CALLSITE(callsite_id), | 
 |     'samples', | 
 |     'count', | 
 |     1) AS profile | 
 | FROM perf_sample | 
 | GROUP BY perf_session_id | 
 | ``` | 
 |  | 
 | Heap profile | 
 |  | 
 | ```sql | 
 | SELECT | 
 |   EXPERIMENTAL_PROFILE( | 
 |     CAT_STACKS(heap_name, STACK_FROM_STACK_PROFILE_CALLSITE(callsite_id)), | 
 |     'count', | 
 |     'count', | 
 |     count, | 
 |     'size', | 
 |     'bytes', | 
 |     size) AS profile | 
 | FROM heap_profile_allocation | 
 | WHERE size >= 0 AND count >= 0 | 
 | ``` |