Hey Flinksters,

I'm reading a nested JSON object into a table and would like to access the
nested rows inside an array. Is there a way to flatten them so that I get a
table with the nested rows?

So far, I've only been able to figure out how to access a specific element
inside the array using the "at" method but I'm trying to flatten the nested
rows into a table and the arrays can have variable length. Below is a code
snippet of what I have thus far but notice how I'm only accessing the first
element in each array.

How do you do this in Flink? Apologies if this is obvious - I wasn't able
to find an example or documentation and would appreciate any help.

Thank you,
Matthias

---------------

StreamExecutionEnvironment env =
StreamExecutionEnvironment.getExecutionEnvironment();
StreamTableEnvironment tEnv = StreamTableEnvironment.create(env);


TableDescriptor jsonTable = TableDescriptor.forConnector("filesystem")
        .schema(Schema.newBuilder()
                .column("id", DataTypes.INT())
                .column("customerid", DataTypes.INT())
                .column("time", DataTypes.INT())
                .column("entries", DataTypes.ARRAY(DataTypes.ROW(
                        DataTypes.FIELD("productid", DataTypes.INT()),
                        DataTypes.FIELD("quantity", DataTypes.INT()),
                        DataTypes.FIELD("unit_price", DataTypes.DECIMAL(9,3)),
                        DataTypes.FIELD("discount", DataTypes.DECIMAL(9,3))
                        )))
                .build())
        .option("path", C360Test.RETAIL_DATA_DIR.toAbsolutePath() +
"/orders.json")
        .format("json")
        .build();



tEnv.createTable("Orders",jsonTable);
Table orders = tEnv.from("Orders");

Table flattenEntries =
orders.select($("entries").at(1).get("quantity").sum().as("totalquant"));

Reply via email to