public static SortSpec[] schemaToSortSpecs(Schema schema) { SortSpec[] specs = new SortSpec[schema.getColumnNum()]; for (int i = 0; i < schema.getColumnNum(); i++) { specs[i] = new SortSpec(schema.getColumn(i), true, false); } return specs; }
@Before public void setUp() throws Exception { this.conf = new TajoConf(); util = new TajoTestingCluster(); catalog = util.startCatalogCluster().getCatalog(); testDir = CommonTestingUtil.getTestDir(TEST_PATH); conf.setVar(TajoConf.ConfVars.WORKER_TEMPORAL_DIR, testDir.toString()); sm = StorageManagerFactory.getStorageManager(conf, testDir); Schema schema = new Schema(); schema.addColumn("managerId", Type.INT4); schema.addColumn("empId", Type.INT4); schema.addColumn("deptName", Type.TEXT); TableMeta employeeMeta = CatalogUtil.newTableMeta(StoreType.CSV); Path employeePath = new Path(testDir, "employee.csv"); Appender appender = StorageManagerFactory.getStorageManager(conf) .getAppender(employeeMeta, schema, employeePath); appender.enableStats(); appender.init(); Tuple tuple = new VTuple(schema.getColumnNum()); for (int i = 0; i < numTuple; i++) { tuple.put( new Datum[] { DatumFactory.createInt4(rnd.nextInt(50)), DatumFactory.createInt4(rnd.nextInt(100)), DatumFactory.createText("dept_" + i), }); appender.addTuple(tuple); } appender.flush(); appender.close(); System.out.println( appender.getStats().getNumRows() + " rows (" + (appender.getStats().getNumBytes() / 1048576) + " MB)"); employee = new TableDesc("employee", schema, employeeMeta, employeePath); catalog.addTable(employee); analyzer = new SQLAnalyzer(); planner = new LogicalPlanner(catalog); }
/** * It computes the value cardinality of a tuple range. * * @return */ public static BigDecimal computeCardinalityForAllColumns( Schema schema, TupleRange range, boolean inclusive) { Tuple start = range.getStart(); Tuple end = range.getEnd(); Column col; BigDecimal cardinality = new BigDecimal(1); BigDecimal columnCard; for (int i = 0; i < schema.getColumnNum(); i++) { col = schema.getColumn(i); columnCard = computeCardinality(col.getDataType(), start.get(i), end.get(i), inclusive); if (new BigDecimal(0).compareTo(columnCard) < 0) { cardinality = cardinality.multiply(columnCard); } } return cardinality; }