Hi Vertica support team,
I have a requirement to ingest data with array elements. Here is the example data with 3 columns, col1, col1 are normal int column but column "mapElementColumn" is having array elements which has sub-ccolumns.
Example Data
[
{
"col1": 34,
"col2": 44,
"mapElementColumn": [
{
"ip": "12.13.8.178",
"dns": null,
"userresourceid": null,
"siteresourceid": 10623
},
{
"ip": "12.13.28.243",
"dns": null,
"userresourceid": null,
"siteresourceid": 10020
}
]
},
{
"col1": 35,
"col2": 54,
"mapElementColumn": [
{
"ip": "11.12.28.243",
"dns": null,
"userresourceid": null,
"siteresourceid": 10020
},
{
"ip": "11.12.28.244",
"dns": null,
"userresourceid": null,
"siteresourceid": 10020
}
]
}
]
My question, is it beneficial to store array column [mapElementColumn] data in varchar and "explode" at query time OR explode at ingest time and store multiple rows [per sub-element]?
I have following query (working) -
SELECT
col1::int
,col1::int
,maplookup(values,'ip')::varchar AS 'ip'
,maplookup(values,'dns')::varchar AS 'dns'
,maplookup(values,'userresourceid')::varchar AS 'userresourceid'
,maplookup(values,'siteresourceid')::varchar AS 'siteresourceid'
FROM (
SELECT col1,col2, mapitems (mapElementColumn)
OVER(PARTITION BY col1, col2)
FROM
<
table name>
) table_alias
The volume of data is 3k/min.
Vertica Analytic Database v9.3.1-0