I have the following schema:
root
|-- data: struct (nullable = true)
| |-- user_agent_DEVICE_METADATA: string (nullable = true)
| |-- tags_0_epochTs_DEVICE_METADATA: string (nullable = true)
| |-- tags_0_name_DEVICE_METADATA: string (nullable = true)
| |-- tags_0_timestamp_DEVICE_METADATA: string (nullable = true)
| |-- tags_1_epochTs_DEVICE_METADATA: string (nullable = true)
| |-- tags_1_name_DEVICE_METADATA: string (nullable = true)
| |-- tags_1_timestamp_DEVICE_METADATA: string (nullable = true)
| |-- tags_1_value_DEVICE_METADATA: string (nullable = true)
| |-- tags_2_epochTs_DEVICE_METADATA: string (nullable = true)
| |-- tags_2_name_DEVICE_METADATA: string (nullable = true)
| |-- tags_2_timestamp_DEVICE_METADATA: string (nullable = true)
| |-- tags_2_value_DEVICE_METADATA: string (nullable = true)
And I need to add a column with the tags as an array of structs like this:
root
|-- data: struct (nullable = true)
| |-- user_agent_DEVICE_METADATA: string (nullable = true)
| |-- tags_0_epochTs_DEVICE_METADATA: string (nullable = true)
| |-- tags_0_name_DEVICE_METADATA: string (nullable = true)
| |-- tags_0_timestamp_DEVICE_METADATA: string (nullable = true)
| |-- tags_1_epochTs_DEVICE_METADATA: string (nullable = true)
| |-- tags_1_name_DEVICE_METADATA: string (nullable = true)
| |-- tags_1_timestamp_DEVICE_METADATA: string (nullable = true)
| |-- tags_1_value_DEVICE_METADATA: string (nullable = true)
| |-- tags_2_epochTs_DEVICE_METADATA: string (nullable = true)
| |-- tags_2_name_DEVICE_METADATA: string (nullable = true)
| |-- tags_2_timestamp_DEVICE_METADATA: string (nullable = true)
| |-- tags_2_value_DEVICE_METADATA: string (nullable = true)
|-- device_metadata_tags: array (nullable = true)
| |-- element: struct (containsNull = true)
| | |-- name: string (nullable = true)
| | |-- value: string (nullable = true)
| | |-- epochTs: double (nullable = true)
| | |-- timestamp: double (nullable = true)
But as you can see in the tags I don't always have all of the columns I need for example I don't have tags_0_value_DEVICE_METADATA
and I don't know how long the list of the tags is, here its 3 but it can change.
Is there a way to do something like that?