CREATE TABLE source_table (
event_time_line array<ROW (
`rule_name` VARCHAR,
`count` VARCHAR
)>
) WITH (
'connector.type' = 'kafka',
'connector.version' = 'universal',
'connector.startup-mode' = 'earliest-offset',
'connector.topic' = 'topic_test_1',
'connector.properties.zookeeper.connect' = 'localhost:2181',
'connector.properties.bootstrap.servers' = 'localhost:9092',
'update-mode' = 'append',
'format.type' = 'json',
'format.derive-schema' = 'true'
);
import org.apache.flink.api.common.typeinfo.TypeInformation;
import org.apache.flink.api.common.typeinfo.Types;
import org.apache.flink.api.java.typeutils.RowTypeInfo;
import org.apache.flink.table.functions.TableFunction;
import org.apache.flink.types.Row;
/**
* 列 转 行
*/
public class ColumnToLine extends TableFunction<Row> {
public ColumnToLine() {
}
public void eval(Row[] rows) {
for (Row row:rows){
collector.collect(Row.of(row.getField(0),row.getField(1)));
}
}
@Override
public TypeInformation<?>[] getParameterTypes(Class<?>[] signature) {
return new RowTypeInfo(Types.OBJECT_ARRAY(Types.ROW(Types.STRING, Types.STRING))).getFieldTypes();
}
@Override
public TypeInformation<Row> getResultType() {
return Types.ROW(Types.STRING, Types.STRING);
}
}
select types,name,counts from source_table,lateral table (column_to_line(enen_time_line)) as T(counts,name)