@Override public void removeTiles (String tableName, Iterable<TileIndex> tiles) throws IOException { List<String> rowIds = new ArrayList<>(); for (TileIndex tile: tiles) { rowIds.add( rowIdFromTileIndex( tile ) ); } deleteRows(tableName, rowIds, TILE_COLUMN); }
@Override public <T> InputStream getTileStream (String tableName, TileSerializer<T> serializer, TileIndex tile) throws IOException { List<String> rowIds = new ArrayList<String>(); rowIds.add(rowIdFromTileIndex(tile)); List<Map<HBaseColumn, byte[]>> rawResults = readRows(tableName, rowIds, TILE_COLUMN); Iterator<Map<HBaseColumn, byte[]>> iData = rawResults.iterator(); if (iData.hasNext()) { Map<HBaseColumn, byte[]> rawResult = iData.next(); if (null != rawResult) { byte[] rawData = rawResult.get(TILE_COLUMN); return new ByteArrayInputStream(rawData); } } return null; }
@Override public <T> Put getPutForTile(TileData<T> tile, TileSerializer<T> serializer) throws IOException { ByteArrayOutputStream baos = new ByteArrayOutputStream(); serializer.serialize(tile, baos); return addToPut(null, rowIdFromTileIndex(tile.getDefinition()), TILE_COLUMN, baos.toByteArray()); } }
protected <T> List<TileData<T>> readTiles (String tableName, TileSerializer<T> serializer, Iterable<TileIndex> tiles, HBaseColumn... columns) throws IOException { List<String> rowIds = new ArrayList<String>(); for (TileIndex tile: tiles) { rowIds.add(rowIdFromTileIndex(tile)); } List<Map<HBaseColumn, byte[]>> rawResults = readRows(tableName, rowIds, columns); List<TileData<T>> results = new LinkedList<TileData<T>>(); Iterator<Map<HBaseColumn, byte[]>> iData = rawResults.iterator(); Iterator<TileIndex> indexIterator = tiles.iterator(); while (iData.hasNext()) { Map<HBaseColumn, byte[]> rawResult = iData.next(); TileIndex index = indexIterator.next(); if (null != rawResult) { for (HBaseColumn column: columns) { byte[] rawData = rawResult.get(column); ByteArrayInputStream bais = new ByteArrayInputStream(rawData); TileData<T> data = serializer.deserialize(index, bais); results.add(data); } } } return results; }
private <T> Put addSlices (Put existingPut, TileSerializer<List<T>> serializer, TileData<List<T>> tile) throws IOException { // Figure out into how many slices to divide the data int slices = numSlices(tile); // Store the whole thing pyramidded. int slicesPerWrite = 1; while (slicesPerWrite < slices) { // Divide the tile into slices, storing each of them individually in their own column for (int startSlice = 0; startSlice < slices; startSlice = startSlice + slicesPerWrite) { int endSlice = startSlice + slicesPerWrite - 1; TileData<List<T>> slice = new DenseTileMultiSliceView<T>(tile, startSlice, endSlice).harden(); ByteArrayOutputStream baos = new ByteArrayOutputStream(); serializer.serialize(slice, baos); existingPut = addToPut(existingPut, rowIdFromTileIndex(tile.getDefinition()), getSliceColumn(startSlice, endSlice), baos.toByteArray()); } // If not pyramidding, bail out after our first time through. if (_doPyramidding) slicesPerWrite = slicesPerWrite * 2; else slicesPerWrite = slices; } return existingPut; }