Unable to convert varchar to array in Presto Athena

前端 未结 1 1239
时光说笑
时光说笑 2021-01-07 01:03

My data is in varchar format. I want to split both the elements of this array so that I can then extract a key value from the json.

Data format:

[
  {
             


        
相关标签:
1条回答
  • 2021-01-07 01:46

    You can use a combination of parsing the value as JSON, casting it to a structured SQL type (array/map/row), and UNNEST WITH ORDINALITY to extract the elements from the array as separate rows. Note that this only works if the array elements in the JSON payload don't have a trailing commas. Your example has one but it is removed from the example below.

    WITH data(value) AS (VALUES
     '[
        {
          "skuId": "5bc87ae20d298a283c297ca1",
          "unitPrice": 0,
          "id": "5bc87ae20d298a283c297ca1",
          "quantity": "1"
        },
        {
          "skuId": "182784738484wefhdchs4848",
          "unitPrice": 50,
          "id": "5bc87ae20d298a283c297ca1",
          "quantity": "4"
        }
      ]'
    ),
    parsed(entries) AS (
      SELECT cast(json_parse(value) AS array(row(skuId varchar)))
      FROM data
    )
    SELECT ordinal, skuId
    FROM parsed, UNNEST(entries) WITH ORDINALITY t(skuId, ordinal)
    

    produces:

     ordinal |          skuId
    ---------+--------------------------
           1 | 5bc87ae20d298a283c297ca1
           2 | 182784738484wefhdchs4848
    (2 rows)
    
    0 讨论(0)
提交回复
热议问题