> ## Documentation Index
> Fetch the complete documentation index at: https://docs.firebolt.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Semi-structured and structured data functions

> Snowflake semi-structured and structured data functions supported in Snowflake compatibility mode.

<span className="feature-tag">Preview</span>

Snowflake [semi-structured and structured data functions](https://docs.snowflake.com/en/sql-reference/functions-semistructured) in [Snowflake compatibility mode](/reference-sql/snowflake/overview).

| Function | Support | Notes |
| :- | :- | :- |
| `ARRAYS_OVERLAP` | Supported | |
| `ARRAY_APPEND` | Supported | |
| `ARRAY_CAT` | Supported | |
| `ARRAY_DISTINCT` | Supported | |
| `ARRAY_MAX` | Supported | |
| `ARRAY_MIN` | Supported | |
| `ARRAY_POSITION` | With limitations | Snowflake's `(element, array)` argument order and 0-based result are handled; the element must share the array's element type, as Firebolt's arrays are typed rather than VARIANT. |
| `ARRAY_PREPEND` | Supported | |
| `ARRAY_REVERSE` | Supported | |
| `ARRAY_SIZE` | Supported | |
| `ARRAY_SLICE` | Supported | |
| `ARRAY_SORT` | Supported | |
| `ARRAY_TO_STRING` | Supported | |
| `ARRAY_CONTAINS` | With limitations | Available for some argument types only. |
| `CHECK_JSON`, `TO_JSON`, `TYPEOF` | With limitations | Runs, but the result differs from Snowflake. |
| `ARRAY_COMPACT`, `ARRAY_EXCEPT`, `ARRAY_GENERATE_RANGE`, `ARRAY_INSERT`, `ARRAY_INTERSECTION`, `ARRAY_REMOVE`, `ARRAY_REMOVE_AT`, `ARRAY_REPEAT`, `AS_ARRAY`, `AS_BINARY`, `AS_BOOLEAN`, `AS_CHAR`, `AS_DATE`, `AS_DECIMAL`, `AS_DOUBLE`, `AS_INTEGER`, `AS_NUMBER`, `AS_OBJECT`, `AS_REAL`, `AS_TIME`, `AS_TIMESTAMP_LTZ`, `AS_TIMESTAMP_NTZ`, `AS_TIMESTAMP_TZ`, `AS_VARCHAR`, `CHECK_XML`, `GET`, `GET_IGNORE_CASE`, `GET_PATH`, `IS_ARRAY`, `IS_BINARY`, `IS_BOOLEAN`, `IS_CHAR`, `IS_DATE`, `IS_DATE_VALUE`, `IS_DECIMAL`, `IS_DOUBLE`, `IS_INTEGER`, `IS_NULL_VALUE`, `IS_OBJECT`, `IS_REAL`, `IS_TIME`, `IS_TIMESTAMP_LTZ`, `IS_TIMESTAMP_NTZ`, `IS_TIMESTAMP_TZ`, `IS_VARCHAR`, `MAP_CONSTRUCT`, `OBJECT_DELETE`, `OBJECT_KEYS`, `OBJECT_PICK`, `STRIP_NULL_VALUE`, `TO_XML`, `TRY_PARSE_JSON`, `XMLGET` | Not supported | |

## Limitations

`PARSE_JSON` returns the value as text rather than as a `VARIANT`. The `:` path operator, `::` casts and `json_extract` all work on that text, so ordinary path access behaves as expected, but two functions differ:

| Expression | In this mode | In Snowflake |
| :- | :- | :- |
| `TYPEOF(PARSE_JSON('1'))` | `unknown` | `INTEGER` |
| `TO_JSON(PARSE_JSON('1'))` | `"1"` | `1` |

`SPLIT`, `ARRAY_AGG` and the `ARRAY_*` family return a typed array rather than a `VARIANT` array. The elements are the same; the rendering differs, which matters if a client parses the output text.

`ARRAY_SLICE` is rejected with a negative index, because counting from the end of the array has no direct equivalent. It is also rejected with a computed bound, because the rewrite needs literal bounds.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.