# Built-in Functions 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 ```