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