Fondamentalement, si un tableau est stocké dans une cellule, comment "exploser" les données en hauteur.
Ils l'ont dans d'autres langues.
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+LateralView
clear log();
clear globals();
names default to here(1);
tbl_src_stacked = Data Table( "tbl_src_data" ) << Stack(
columns( :fieldxy, :semfxy, :diexy, :locxy, :resid, :botcd, :maccdbot3sig, :cogxinter, :cogyinter, :chxbot, :chybot ),
Source Label Column( "Label" ),
Stacked Data Column( "Data" )
);
tbl_src_stacked << setname( "tbl_src_stacked" );
//close (tbl_src_data, nosave);
tbl_wide_data = tbl_src_stacked << Text To Columns( delimiter( "|" ), columns( :Data ) );
tbl_wide_data << setname( "tbl_wide_data" );
tbl_wide_data << delete column( Column( "Data" ) );
//result = Query( Table( datatable("tbl_wide_data"), "t1" ), "select * from t1;" );
col_names = Data Table( "tbl_wide_data" ) << getcolumnnames();
cols_data = {};
For( i = 1, i <= N Items( col_names ), i++,
If( Contains( col_names[i], "Data " ),
Insert Into( cols_data, col_names[i] )
)
);
tbl_wide_data_stacked = Data Table( "tbl_wide_data" ) << Stack( columns( cols_data ), Source Label Column( "Label" ), Stacked Data Column( "Data" ) );
tbl_wide_data_stacked << setname( "tbl_wide_data_stacked" );
close (datatable("tbl_wide_data"),nosave);
tbl_wide_data_stacked_split = tbl_wide_data_stacked << Split(
Split By( :Label ),
Split( :Data ),
Group( :hdrid, :designid, :lotid, :slotno, :waferid, :scribeid, :layer, :inspmode, :recipe, :rundate, :target, :iteration, :edges, :Label 2 ),
Sort by Column Property
);
tbl_wide_data_stacked_split << setname( "tbl_wide_data_stacked_split" );
close (datatable("tbl_wide_data_stacked"),nosave);
tbl_wide_data_stacked_split << New Column( "Index",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula( Num( Word( 1, :Label 2, "Data " ) ) )
);
Column(tbl_wide_data_stacked_split, "Index" ) << Delete Formula;
tbl_wide_data_stacked_split << delete column( Column( "Label 2" ) );
close(Data Table( "tbl_src_data" ),nosave);