Changeset: aad07033f66f for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=aad07033f66f
Modified Files:
monetdb5/modules/mal/mosaic.c
monetdb5/modules/mal/mosaic.h
sql/backends/monet5/sql.c
sql/backends/monet5/sql.mal
sql/scripts/76_compression.sql
Branch: mosaic
Log Message:
Allow for compression list
The analysis command can be given a list of optional compression schemes to use.
diffs (149 lines):
diff --git a/monetdb5/modules/mal/mosaic.c b/monetdb5/modules/mal/mosaic.c
--- a/monetdb5/modules/mal/mosaic.c
+++ b/monetdb5/modules/mal/mosaic.c
@@ -1323,24 +1323,31 @@ MOSjoin(Client cntxt, MalBlkPtr mb, MalS
#define STEP MOSAIC_METHODS
static int
-makepatterns(int *patterns, int size)
+makepatterns(int *patterns, int size, str compressions)
{
int i,j,k, idx, bit=1, step = MOSAIC_METHODS - 1;
int lim= 8*7*6*5*4*3*2;
-
- for(k=0, i=0; i<lim && k <size; i++){
+ int candidate[MOSAIC_METHODS]= {0};
+
+ for( i = 0; i < MOSAIC_METHODS; i++)
+ candidate[i] = strstr(compressions,MOSfiltername[i]) != 0;
+
+ for( k=0, i=0; i<lim && k <size; i++){
patterns[k]=0;
idx =i;
while(idx > 0) {
- if( idx % step )
+ if( idx % step && candidate[ idx % step])
patterns[k] |= 1 <<(idx % step);
idx /= step;
}
+
+ // weed out duplicates
for( j=0; j< k; j++)
if(patterns[k] == patterns[j]) break;
if( j < k ) continue;
#ifdef _MOSAIC_DEBUG_
+ mnstr_printf(GDKout,"#");
for(j=0, bit=1; j < MOSAIC_METHODS-1; j++){
mnstr_printf(GDKout,"%d", (patterns[k] & bit) > 0);
bit *=2;
@@ -1421,7 +1428,7 @@ MOSanalyseInternal(Client cntxt, int thr
#define CANDIDATES 256 /* all three combinations */
void
-MOSanalyseReport(Client cntxt, BAT *b, BAT *btech, BAT *boutput, BAT *bfactor,
lng sample)
+MOSanalyseReport(Client cntxt, BAT *b, BAT *btech, BAT *boutput, BAT *bfactor,
str compressions)
{
int i,j,k,cases, bit=1, ret, bid= b->batCacheid;
BUN cnt= BATcount(b);
@@ -1431,7 +1438,7 @@ MOSanalyseReport(Client cntxt, BAT *b, B
char technique[CANDIDATES]={0}, *t = technique;
dbl xf[CANDIDATES], factor;
- cases = makepatterns(pattern,CANDIDATES);
+ cases = makepatterns(pattern,CANDIDATES, compressions);
task = (MOStask) GDKzalloc(sizeof(*task));
if( task == NULL)
return;
@@ -1447,7 +1454,7 @@ MOSanalyseReport(Client cntxt, BAT *b, B
task->filter[j]= (pattern[i] & bit)>0;
bit *=2;
}
- MOScompressInternal(cntxt, &ret, &bid, task, sample, 0);
+ MOScompressInternal(cntxt, &ret, &bid, task, 0, 0);
// analyse result to detect a new combination
for(k=0, j=0, bit=1; j < MOSAIC_METHODS-1; j++){
@@ -1654,7 +1661,7 @@ MOSoptimize(Client cntxt, MalBlkPtr mb,
(void) mb;
- cases = makepatterns(pattern,CANDIDATES);
+ cases = makepatterns(pattern,CANDIDATES,NULL);
task= (MOStask) GDKzalloc(sizeof(*task));
if( task == NULL)
throw(MAL, "mosaic.mosaic", MAL_MALLOC_FAIL);
diff --git a/monetdb5/modules/mal/mosaic.h b/monetdb5/modules/mal/mosaic.h
--- a/monetdb5/modules/mal/mosaic.h
+++ b/monetdb5/modules/mal/mosaic.h
@@ -220,7 +220,7 @@ mosaic_export str MOSdump(Client cntxt,
mosaic_export str MOSlayout(Client cntxt, BAT *b, BAT *btech, BAT *bcount, BAT
*binput, BAT *boutput, BAT *bproperties);
mosaic_export str MOSsliceInternal(Client cntxt, bat *slices, BUN size, BAT
*b);
mosaic_export int MOSanalyseInternal(Client cntxt, int threshold, MOStask
task, bat bid);
-mosaic_export void MOSanalyseReport(Client cntxt, BAT *b, BAT *btech, BAT
*output, BAT *factor, lng sample);
+mosaic_export void MOSanalyseReport(Client cntxt, BAT *b, BAT *btech, BAT
*output, BAT *factor, str compressions);
mosaic_export str MOSoptimize(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr pci);
mosaic_export str MOSslice(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr
pci);
mosaic_export void MOSblk(MosaicBlk blk);
diff --git a/sql/backends/monet5/sql.c b/sql/backends/monet5/sql.c
--- a/sql/backends/monet5/sql.c
+++ b/sql/backends/monet5/sql.c
@@ -586,7 +586,7 @@ alter_table(Client cntxt, mvc *sql, char
return msg;
// TODO check:allocate_delta(sql->session->tr, nc);
d = nc->data;
- assert(nc->base.allocated == 1);
+ //assert(nc->base.allocated == 1);
nc->base.rtime = nc->base.wtime =
sql->session->tr->wtime;
d->bid = bid;
mvc_storage(sql, nc, c->storage_type);
@@ -4812,12 +4812,14 @@ sql_storage(Client cntxt, MalBlkPtr mb,
/* just
take a sample */
if
(cnt1 > 512)
cnt1 = cnt2 = 512;
-
BATloop(bn, p, q) {
-
str s = BUNtail(bi, p);
-
if (s != NULL && strcmp(s, str_nil))
-
sum += (int) strlen(s);
-
if (--cnt1 <= 0)
-
break;
+ if
(BATcount(bn)){
+
BATloop(bn, p, q) {
+
str s = BUNtail(bi, p);
+
if (s != NULL && strcmp(s, str_nil))
+
sum += (int) strlen(s);
+
if (--cnt1 <= 0)
+
break;
+
}
}
if
(cnt2)
w = (int) (sum / cnt2);
diff --git a/sql/backends/monet5/sql.mal b/sql/backends/monet5/sql.mal
--- a/sql/backends/monet5/sql.mal
+++ b/sql/backends/monet5/sql.mal
@@ -486,6 +486,11 @@ pattern mosaicLayout(sch:str,tbl:str,col
address sql_mosaicLayout
comment "Return a table with detailed compression information ";
+pattern mosaicAnalysis(sch:str,tbl:str,col:str,compression:str)(
+ technique:bat[:oid,:str],
+ outputsize:bat[:oid,:lng],
+ factor:bat[:oid,:dbl])
+address sql_mosaicAnalysis;
pattern mosaicAnalysis(sch:str,tbl:str,col:str)(
technique:bat[:oid,:str],
outputsize:bat[:oid,:lng],
diff --git a/sql/scripts/76_compression.sql b/sql/scripts/76_compression.sql
--- a/sql/scripts/76_compression.sql
+++ b/sql/scripts/76_compression.sql
@@ -38,3 +38,10 @@ returns table(
outputsize bigint, -- after compression
factor double -- compression factor
) external name sql."mosaicAnalysis";
+
+create function mosaic.analysis(sch string, tbl string, col string,
compressions string)
+returns table(
+ technique string, -- compression techniques being used
+ outputsize bigint, -- after compression
+ factor double -- compression factor
+) external name sql."mosaicAnalysis";
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list