配列のダブルフラット化。Ksqldb 0.8.1

ホセ:

データ。

kafkacat -b 127.0.0.1 -t group-topic -P
{"groups":[{"name":"Roberth","surname":"Smith","origin":"England","albums":["Wish","Desintegration"],"group":"The Cure"},{"name":"Peter","surname":"Murphy","origin":"England","albums":["Mask","In The Flat Field"],"group":"Bauhaus"}]};

//構造ストリーム


SET 'auto.offset.reset' = 'earliest';


CREATE STREAM GROUPS_01 
(groups ARRAY<STRUCT<
            albums ARRAY<VARCHAR>,
            name VARCHAR,
            surname VARCHAR
            >>) 
WITH (kafka_topic='group-topic', value_format='JSON');
SELECT 
EXPLODE(groups)->name AS name,
EXPLODE(groups)->surname AS surname,
EXPLODE(groups)->albums AS albums
FROM GROUPS_01 
EMIT CHANGES;

// 私は持っています

NAME       SURNAME     ALBUMS
Roberth    Smith       [Wish,Desintegration]
Peter      Murphy      [Mask,In The Flat Field]

// 私は欲しい

NAME       SURNAME     ALBUM
Roberth    Smith       Wish
Roberth    Smith       Desintegration
Peter      Murphy      Mask
Peter      Murphy      In The Flat Field

// TRY

EXPLODE(groups)->EXPLODE(albums)->album AS album

EXPLODE(albums)->album AS album
ロビン・モファット:

明確にするために、ここで指定したソース・データがあります:

{
    "groups": [
        {
            "name": "Roberth",
            "surname": "Smith",
            "origin": "England",
            "albums": [
                "Wish",
                "Desintegration"
            ],
            "group": "The Cure"
        },
        {
            "name": "Peter",
            "surname": "Murphy",
            "origin": "England",
            "albums": [
                "Mask",
                "In The Flat Field"
            ],
            "group": "Bauhaus"
        }
    ]
}

まずルート配列を爆発

ksql> CREATE STREAM EX1A AS SELECT EXPLODE(GROUPS) AS GROUP_SINGLE FROM GROUPS_01 EMIT CHANGES;

 Message
-----------------------------------
 Created query with ID CSAS_EX1A_5
-----------------------------------

これは、私たちを与えます:

ksql> SELECT * FROM EX1A EMIT CHANGES;
+----------------+-------+-----------------------------------------------------------+
|ROWTIME         |ROWKEY |GROUP_SINGLE                                               |
+----------------+-------+-----------------------------------------------------------+
|1585666857714   |null   |{ALBUMS=[Wish, Desintegration], NAME=Roberth, SURNAME=Smith|
|                |       |}                                                          |
|1585666857714   |null   |{ALBUMS=[Mask, In The Flat Field], NAME=Peter, SURNAME=Murp|
|                |       |hy}                                                        |

今使っ->入れ子構造にアクセスし、爆発する演算子をALBUMS配列:

CREATE STREAM ALBUMS_EXPLODED AS 
    SELECT GROUP_SINGLE->NAME AS NAME, 
           GROUP_SINGLE->SURNAME AS SURNAME, 
           EXPLODE(GROUP_SINGLE->ALBUMS) AS ALBUM 
      FROM EX1A 
      EMIT CHANGES;

ksql> SELECT NAME, SURNAME, ALBUM FROM ALBUMS_EXPLODED EMIT CHANGES;
+-------------------+----------------------+-------------------+
|GROUP_SINGLE__NAME |GROUP_SINGLE__SURNAME |KSQL_COL_2         |
+-------------------+----------------------+-------------------+
|Roberth            |Smith                 |Wish               |
|Roberth            |Smith                 |Desintegration     |
|Peter              |Murphy                |Mask               |
|Peter              |Murphy                |In The Flat Field  |

おすすめ

転載: http://10.200.1.11:23101/article/api/json?id=377842&siteId=1