Java Code Examples for org.apache.hadoop.hbase.Cell#getRowOffset()
The following examples show how to use
org.apache.hadoop.hbase.Cell#getRowOffset() .
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: HalyardBulkDelete.java From Halyard with Apache License 2.0 | 6 votes |
@Override protected void map(ImmutableBytesWritable key, Result value, Context output) throws IOException, InterruptedException { for (Cell c : value.rawCells()) { Statement st = HalyardTableUtils.parseStatement(c, SVF); if ((subj == null || subj.equals(st.getSubject())) && (pred == null || pred.equals(st.getPredicate())) && (obj == null || obj.equals(st.getObject())) && (ctx == null || ctx.contains(st.getContext()))) { KeyValue kv = new KeyValue(c.getRowArray(), c.getRowOffset(), (int) c.getRowLength(), c.getFamilyArray(), c.getFamilyOffset(), (int) c.getFamilyLength(), c.getQualifierArray(), c.getQualifierOffset(), c.getQualifierLength(), c.getTimestamp(), KeyValue.Type.DeleteColumn, c.getValueArray(), c.getValueOffset(), c.getValueLength(), c.getTagsArray(), c.getTagsOffset(), c.getTagsLength()); output.write(new ImmutableBytesWritable(kv.getRowArray(), kv.getRowOffset(), kv.getRowLength()), kv); deleted++; } else { output.progress(); } if (total++ % 10000l == 0) { String msg = MessageFormat.format("{0} / {1} cells deleted", deleted, total); output.setStatus(msg); LOG.log(Level.INFO, msg); } } }
Example 2
Source File: MetaDataUtil.java From phoenix with Apache License 2.0 | 6 votes |
public static void mutatePutValue(Put somePut, byte[] family, byte[] qualifier, byte[] newValue) { NavigableMap<byte[], List<Cell>> familyCellMap = somePut.getFamilyCellMap(); List<Cell> cells = familyCellMap.get(family); List<Cell> newCells = Lists.newArrayList(); if (cells != null) { for (Cell cell : cells) { if (Bytes.compareTo(cell.getQualifierArray(), cell.getQualifierOffset(), cell.getQualifierLength(), qualifier, 0, qualifier.length) == 0) { Cell replacementCell = new KeyValue(cell.getRowArray(), cell.getRowOffset(), cell.getRowLength(), cell.getFamilyArray(), cell.getFamilyOffset(), cell.getFamilyLength(), cell.getQualifierArray(), cell.getQualifierOffset(), cell.getQualifierLength(), cell.getTimestamp(), KeyValue.Type.codeToType(cell.getType().getCode()), newValue, 0, newValue.length); newCells.add(replacementCell); } else { newCells.add(cell); } } familyCellMap.put(family, newCells); } }
Example 3
Source File: TupleProjector.java From phoenix with Apache License 2.0 | 6 votes |
public ProjectedValueTuple projectResults(Tuple tuple, boolean useNewValueQualifier) { long maxTS = tuple.getValue(0).getTimestamp(); int nCells = tuple.size(); for (int i = 1; i < nCells; i++) { long ts = tuple.getValue(i).getTimestamp(); if (ts > maxTS) { maxTS = ts; } } byte[] bytesValue = schema.toBytes(tuple, getExpressions(), valueSet, ptr); Cell base = tuple.getValue(0); if (useNewValueQualifier) { return new ProjectedValueTuple(base.getRowArray(), base.getRowOffset(), base.getRowLength(), maxTS, bytesValue, 0, bytesValue.length, valueSet.getEstimatedLength()); } else { return new OldProjectedValueTuple(base.getRowArray(), base.getRowOffset(), base.getRowLength(), maxTS, bytesValue, 0, bytesValue.length, valueSet.getEstimatedLength()); } }
Example 4
Source File: HBaseNumericIndexStrategyFilter.java From geowave with Apache License 2.0 | 6 votes |
private boolean inBounds(final Cell cell) { final GeoWaveKeyImpl cellKey = new GeoWaveKeyImpl( cell.getRowArray(), indexStrategy.getPartitionKeyLength(), cell.getRowOffset(), cell.getRowLength()); final byte[] sortKey = cellKey.getSortKey(); final byte[] partitionKey = cellKey.getPartitionKey(); final MultiDimensionalCoordinates coordinates = indexStrategy.getCoordinatesPerDimension(partitionKey, sortKey); return rangeCache.inBounds(coordinates); }
Example 5
Source File: LocalIndexStoreFileScanner.java From phoenix with Apache License 2.0 | 6 votes |
private boolean isSatisfiedMidKeyCondition(Cell kv) { ImmutableBytesWritable rowKey = new ImmutableBytesWritable(kv.getRowArray(), kv.getRowOffset() + reader.getOffset(), kv.getRowLength() - reader.getOffset()); Entry<ImmutableBytesWritable, IndexMaintainer> entry = reader.getIndexMaintainers().entrySet().iterator().next(); IndexMaintainer indexMaintainer = entry.getValue(); byte[] viewIndexId = indexMaintainer.getViewIndexIdFromIndexRowKey(rowKey); IndexMaintainer actualIndexMaintainer = reader.getIndexMaintainers().get(new ImmutableBytesWritable(viewIndexId)); if(actualIndexMaintainer != null) { byte[] dataRowKey = actualIndexMaintainer.buildDataRowKey(rowKey, reader.getViewConstants()); int compareResult = Bytes.compareTo(dataRowKey, reader.getSplitRow()); if (reader.isTop()) { if (compareResult >= 0) { return true; } } else { if (compareResult < 0) { return true; } } } return false; }
Example 6
Source File: KeyValueUtil.java From phoenix with Apache License 2.0 | 5 votes |
/** * Binary search for latest column value without allocating memory in the process * @param kvBuilder TODO * @param kvs * @param family * @param qualifier */ public static Cell getColumnLatest(KeyValueBuilder kvBuilder, Cell[] kvs, byte[] family, byte[] qualifier) { if (kvs.length == 0) { return null; } Cell kvForRow = kvs[0]; Comparator<Cell> comp = new SearchComparator(kvBuilder, kvForRow.getRowArray(), kvForRow.getRowOffset(), kvForRow.getRowLength(), family, qualifier); // pos === ( -(insertion point) - 1) int pos = Arrays.binarySearch(kvs, null, comp); // never will exact match if (pos < 0) { pos = (pos+1) * -1; // pos is now insertion point } if (pos == kvs.length) { return null; // doesn't exist } Cell kv = kvs[pos]; if (Bytes.compareTo(kv.getFamilyArray(), kv.getFamilyOffset(), kv.getFamilyLength(), family, 0, family.length) != 0) { return null; } if (Bytes.compareTo(kv.getQualifierArray(), kv.getQualifierOffset(), kv.getQualifierLength(), qualifier, 0, qualifier.length) != 0) { return null; } return kv; }
Example 7
Source File: TraceIndexScatterMapper.java From pinpoint with Apache License 2.0 | 5 votes |
static Dot createDot(Cell cell) { final Buffer valueBuffer = new OffsetFixedBuffer(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength()); int elapsed = valueBuffer.readVInt(); int exceptionCode = valueBuffer.readSVInt(); String agentId = valueBuffer.readPrefixedString(); final int acceptTimeOffset = cell.getRowOffset() + HbaseTableConstatns.APPLICATION_NAME_MAX_LEN + HbaseColumnFamily.APPLICATION_TRACE_INDEX_TRACE.ROW_DISTRIBUTE_SIZE; long reverseAcceptedTime = BytesUtils.bytesToLong(cell.getRowArray(), acceptTimeOffset); long acceptedTime = TimeUtils.recoveryTimeMillis(reverseAcceptedTime); TransactionId transactionId = TransactionIdMapper.parseVarTransactionId(cell.getQualifierArray(), cell.getQualifierOffset(), cell.getQualifierLength()); return new Dot(transactionId, acceptedTime, elapsed, exceptionCode, agentId); }
Example 8
Source File: AbstractIteratorRegionScanner.java From spliceengine with GNU Affero General Public License v3.0 | 5 votes |
private boolean containedInScan(Cell kv) { byte[] rowArray = kv.getRowArray(); int rowOffset = kv.getRowOffset(); int rowLength = kv.getRowLength(); if(Bytes.compareTo(scan.getStartRow(),0,scan.getStartRow().length,rowArray,rowOffset,rowLength)>0) return false; if(Bytes.compareTo(scan.getStopRow(),0,scan.getStopRow().length,rowArray,rowOffset,rowLength)<=0) return false; byte[] family = CellUtil.cloneFamily(kv); Map<byte[], NavigableSet<byte[]>> familyMap = scan.getFamilyMap(); if(familyMap.size()<=0) return true; if(!familyMap.containsKey(family)) return false; NavigableSet<byte[]> qualifiersToFetch = familyMap.get(family); if(qualifiersToFetch.size()<=0) return true; return qualifiersToFetch.contains(CellUtil.cloneQualifier(kv)); }
Example 9
Source File: HBaseDistributableFilter.java From geowave with Apache License 2.0 | 5 votes |
protected ReturnCode applyFilter(final Cell cell) { final GeoWaveKeyImpl rowKey = new GeoWaveKeyImpl( cell.getRowArray(), partitionKeyLength, cell.getRowOffset(), cell.getRowLength()); return applyFilter(rowKey); }
Example 10
Source File: CellUtils.java From spliceengine with GNU Affero General Public License v3.0 | 5 votes |
/** * Returns true if the specified KeyValue is contained by the specified range. */ public static boolean isKeyValueInRange(Cell kv, Pair<byte[], byte[]> range) { byte[] kvBuffer = kv.getRowArray(); // TODO JL SAR int rowKeyOffset = kv.getRowOffset(); short rowKeyLength = kv.getRowLength(); byte[] start = range.getFirst(); byte[] stop = range.getSecond(); return (start.length == 0 || Bytes.compareTo(start, 0, start.length, kvBuffer, rowKeyOffset, rowKeyLength) <= 0) && (stop.length == 0 || Bytes.compareTo(stop, 0, stop.length, kvBuffer, rowKeyOffset, rowKeyLength) >= 0); }
Example 11
Source File: CellUtils.java From phoenix-omid with Apache License 2.0 | 5 votes |
/** * Returns a new shadow cell created from a particular cell. * @param cell * the cell to reconstruct the shadow cell from. * @param shadowCellValue * the value for the new shadow cell created * @return the brand-new shadow cell */ public static Cell buildShadowCellFromCell(Cell cell, byte[] shadowCellValue) { byte[] shadowCellQualifier = addShadowCellSuffixPrefix(cell.getQualifierArray(), cell.getQualifierOffset(), cell.getQualifierLength()); return new KeyValue( cell.getRowArray(), cell.getRowOffset(), cell.getRowLength(), cell.getFamilyArray(), cell.getFamilyOffset(), cell.getFamilyLength(), shadowCellQualifier, 0, shadowCellQualifier.length, cell.getTimestamp(), KeyValue.Type.codeToType(cell.getTypeByte()), shadowCellValue, 0, shadowCellValue.length); }
Example 12
Source File: UpgradeUtil.java From phoenix with Apache License 2.0 | 5 votes |
@SuppressWarnings("deprecation") private static KeyValue addSaltByte(Cell keyValue, int nSaltBuckets) { byte[] buf = keyValue.getRowArray(); int length = keyValue.getRowLength(); int offset = keyValue.getRowOffset(); boolean isViewSeq = length > SEQ_PREFIX_BYTES.length && Bytes.compareTo(SEQ_PREFIX_BYTES, 0, SEQ_PREFIX_BYTES.length, buf, offset, SEQ_PREFIX_BYTES.length) == 0; if (!isViewSeq && nSaltBuckets == 0) { return null; } byte[] newBuf; if (isViewSeq) { // We messed up the name for the sequences for view indexes so we'll take this opportunity to fix it if (buf[length-1] == 0) { // Global indexes on views have trailing null byte length--; } byte[][] rowKeyMetaData = new byte[3][]; SchemaUtil.getVarChars(buf, offset, length, 0, rowKeyMetaData); byte[] schemaName = rowKeyMetaData[PhoenixDatabaseMetaData.SCHEMA_NAME_INDEX]; byte[] unprefixedSchemaName = new byte[schemaName.length - MetaDataUtil.VIEW_INDEX_SEQUENCE_PREFIX_BYTES.length]; System.arraycopy(schemaName, MetaDataUtil.VIEW_INDEX_SEQUENCE_PREFIX_BYTES.length, unprefixedSchemaName, 0, unprefixedSchemaName.length); byte[] tableName = rowKeyMetaData[PhoenixDatabaseMetaData.TABLE_NAME_INDEX]; PName physicalName = PNameFactory.newName(unprefixedSchemaName); // Reformulate key based on correct data newBuf = MetaDataUtil.getViewIndexSequenceKey(tableName == null ? null : Bytes.toString(tableName), physicalName, nSaltBuckets, false).getKey(); } else { newBuf = new byte[length + 1]; System.arraycopy(buf, offset, newBuf, SaltingUtil.NUM_SALTING_BYTES, length); newBuf[0] = SaltingUtil.getSaltingByte(newBuf, SaltingUtil.NUM_SALTING_BYTES, length, nSaltBuckets); } return new KeyValue(newBuf, 0, newBuf.length, buf, keyValue.getFamilyOffset(), keyValue.getFamilyLength(), buf, keyValue.getQualifierOffset(), keyValue.getQualifierLength(), keyValue.getTimestamp(), KeyValue.Type.codeToType(keyValue.getTypeByte()), buf, keyValue.getValueOffset(), keyValue.getValueLength()); }
Example 13
Source File: HBaseDistributableFilter.java From geowave with Apache License 2.0 | 5 votes |
/** Handle the entire row at one time */ @Override public void filterRowCells(final List<Cell> rowCells) throws IOException { if (!rowCells.isEmpty()) { final Iterator<Cell> it = rowCells.iterator(); GeoWaveKeyImpl rowKey = null; commonData = new MultiFieldPersistentDataset<>(); while (it.hasNext()) { final Cell cell = it.next(); // Grab rowkey from first cell if (rowKey == null) { rowKey = new GeoWaveKeyImpl( cell.getRowArray(), partitionKeyLength, cell.getRowOffset(), cell.getRowLength()); } unreadData = aggregateFieldData(cell, commonData); } final ReturnCode code = applyFilter(rowKey); if (code == ReturnCode.SKIP) { rowCells.clear(); } } }
Example 14
Source File: StatisticsUtil.java From phoenix with Apache License 2.0 | 4 votes |
public static PTableStats readStatistics(HTableInterface statsHTable, byte[] tableNameBytes, long clientTimeStamp) throws IOException { ImmutableBytesWritable ptr = new ImmutableBytesWritable(); Scan s = MetaDataUtil.newTableRowsScan(tableNameBytes, MetaDataProtocol.MIN_TABLE_TIMESTAMP, clientTimeStamp); s.addColumn(QueryConstants.DEFAULT_COLUMN_FAMILY_BYTES, PhoenixDatabaseMetaData.GUIDE_POSTS_BYTES); s.addColumn(QueryConstants.DEFAULT_COLUMN_FAMILY_BYTES, PhoenixDatabaseMetaData.GUIDE_POSTS_ROW_COUNT_BYTES); ResultScanner scanner = statsHTable.getScanner(s); Result result = null; long timeStamp = MetaDataProtocol.MIN_TABLE_TIMESTAMP; TreeMap<byte[], GuidePostsInfo> guidePostsPerCf = new TreeMap<byte[], GuidePostsInfo>( Bytes.BYTES_COMPARATOR); while ((result = scanner.next()) != null) { CellScanner cellScanner = result.cellScanner(); long rowCount = 0; ImmutableBytesPtr valuePtr = new ImmutableBytesPtr(HConstants.EMPTY_BYTE_ARRAY); byte[] cfName = null; int tableNameLength; int cfOffset; int cfLength; boolean valuesSet = false; // Only the two cells with quals GUIDE_POSTS_ROW_COUNT_BYTES and GUIDE_POSTS_BYTES would be retrieved while (cellScanner.advance()) { Cell current = cellScanner.current(); if (!valuesSet) { tableNameLength = tableNameBytes.length + 1; cfOffset = current.getRowOffset() + tableNameLength; cfLength = getVarCharLength(current.getRowArray(), cfOffset, current.getRowLength() - tableNameLength); ptr.set(current.getRowArray(), cfOffset, cfLength); valuesSet = true; } cfName = ByteUtil.copyKeyBytesIfNecessary(ptr); if (Bytes.equals(current.getQualifierArray(), current.getQualifierOffset(), current.getQualifierLength(), PhoenixDatabaseMetaData.GUIDE_POSTS_ROW_COUNT_BYTES, 0, PhoenixDatabaseMetaData.GUIDE_POSTS_ROW_COUNT_BYTES.length)) { rowCount = PLong.INSTANCE.getCodec().decodeLong(current.getValueArray(), current.getValueOffset(), SortOrder.getDefault()); } else { valuePtr.set(current.getValueArray(), current.getValueOffset(), current.getValueLength()); } if (current.getTimestamp() > timeStamp) { timeStamp = current.getTimestamp(); } } if (cfName != null) { GuidePostsInfo newGPInfo = GuidePostsInfo.deserializeGuidePostsInfo( valuePtr.get(), valuePtr.getOffset(), valuePtr.getLength(), rowCount); GuidePostsInfo oldInfo = guidePostsPerCf.put(cfName, newGPInfo); if (oldInfo != null) { newGPInfo.combine(oldInfo); } } } if (!guidePostsPerCf.isEmpty()) { return new PTableStatsImpl(guidePostsPerCf, timeStamp); } return PTableStats.EMPTY_STATS; }
Example 15
Source File: MultiRowRangeFilter.java From hbase with Apache License 2.0 | 4 votes |
@Override public boolean filterRowKey(Cell firstRowCell) { if (filterAllRemaining()) return true; // N.b. We can only do this after we're iterating over records. If we try to do // it before, the Scan (and this filter) may not yet be fully initialized. This is a // wart on Filter and something that'd be nice to clean up (like CP's in HBase2.0) if (!ranges.isInitialized()) { ranges.initialize(isReversed()); } // If it is the first time of running, calculate the current range index for // the row key. If index is out of bound which happens when the start row // user sets is after the largest stop row of the ranges, stop the scan. // If row key is after the current range, find the next range and update index. byte[] rowArr = firstRowCell.getRowArray(); int length = firstRowCell.getRowLength(); int offset = firstRowCell.getRowOffset(); if (!ranges.hasFoundFirstRange() || !range.contains(rowArr, offset, length)) { byte[] rowkey = CellUtil.cloneRow(firstRowCell); index = ranges.getNextRangeIndex(rowkey); if (ranges.isIterationComplete(index)) { done = true; currentReturnCode = ReturnCode.NEXT_ROW; return false; } if(index != ROW_BEFORE_FIRST_RANGE) { range = ranges.get(index); } else { range = ranges.get(0); } if (ranges.isExclusive()) { ranges.resetExclusive(); currentReturnCode = ReturnCode.NEXT_ROW; return false; } if (!ranges.hasFoundFirstRange()) { if(index != ROW_BEFORE_FIRST_RANGE) { currentReturnCode = ReturnCode.INCLUDE; } else { currentReturnCode = ReturnCode.SEEK_NEXT_USING_HINT; } ranges.setFoundFirstRange(); } else { if (range.contains(rowArr, offset, length)) { currentReturnCode = ReturnCode.INCLUDE; } else { currentReturnCode = ReturnCode.SEEK_NEXT_USING_HINT; } } } else { currentReturnCode = ReturnCode.INCLUDE; } return false; }
Example 16
Source File: TupleProjector.java From phoenix with Apache License 2.0 | 4 votes |
public ProjectedValueTuple projectResults(Tuple tuple) { byte[] bytesValue = schema.toBytes(tuple, getExpressions(), valueSet, ptr); Cell base = tuple.getValue(0); return new ProjectedValueTuple(base.getRowArray(), base.getRowOffset(), base.getRowLength(), base.getTimestamp(), bytesValue, 0, bytesValue.length, valueSet.getEstimatedLength()); }
Example 17
Source File: SystemCatalogWALEntryFilter.java From phoenix with Apache License 2.0 | 4 votes |
private boolean isTenantRowCell(Cell cell) { ImmutableBytesWritable key = new ImmutableBytesWritable(cell.getRowArray(), cell.getRowOffset(), cell.getRowLength()); //rows in system.catalog that aren't tenant-owned will have a leading separator byte return key.get()[key.getOffset()] != QueryConstants.SEPARATOR_BYTE; }
Example 18
Source File: DefaultStatisticsCollector.java From phoenix with Apache License 2.0 | 4 votes |
/** * Update the current statistics based on the latest batch of key-values from the underlying scanner * * @param results * next batch of {@link KeyValue}s * @throws IOException */ @Override public void collectStatistics(final List<Cell> results) { // A guide posts depth of zero disables the collection of stats if (guidePostDepth == 0 || results.size() == 0) { return; } Map<ImmutableBytesPtr, Boolean> famMap = Maps.newHashMap(); boolean incrementRow = false; Cell c = results.get(0); ImmutableBytesWritable row = new ImmutableBytesWritable(c.getRowArray(), c.getRowOffset(), c.getRowLength()); /* * During compaction, it is possible that HBase will not return all the key values when * internalScanner.next() is called. So we need the below check to avoid counting a row more * than once. */ if (currentRow == null || !row.equals(currentRow)) { currentRow = row; incrementRow = true; } for (Cell cell : results) { maxTimeStamp = Math.max(maxTimeStamp, cell.getTimestamp()); Pair<Long, GuidePostsInfoBuilder> gps; if (cachedGuidePosts == null) { ImmutableBytesPtr cfKey = new ImmutableBytesPtr(cell.getFamilyArray(), cell.getFamilyOffset(), cell.getFamilyLength()); gps = guidePostsInfoWriterMap.get(cfKey); if (gps == null) { gps = new Pair<Long, GuidePostsInfoBuilder>(0l, new GuidePostsInfoBuilder()); guidePostsInfoWriterMap.put(cfKey, gps); } if (famMap.get(cfKey) == null) { famMap.put(cfKey, true); gps.getSecond().incrementRowCount(); } } else { gps = cachedGuidePosts; if (incrementRow) { cachedGuidePosts.getSecond().incrementRowCount(); incrementRow = false; } } int kvLength = KeyValueUtil.getSerializedSize(cell, true); long byteCount = gps.getFirst() + kvLength; gps.setFirst(byteCount); if (byteCount >= guidePostDepth) { if (gps.getSecond().addGuidePostOnCollection(row, byteCount, gps.getSecond().getRowCount())) { gps.setFirst(0l); gps.getSecond().resetRowCount(); } } } }
Example 19
Source File: CellUtils.java From spliceengine with GNU Affero General Public License v3.0 | 4 votes |
public static Cell newKeyValue(Cell keyValue, byte[] value) { return new KeyValue(getBuffer(keyValue), keyValue.getRowOffset(), keyValue.getRowLength(), getBuffer(keyValue), keyValue.getFamilyOffset(), keyValue.getFamilyLength(), getBuffer(keyValue), keyValue.getQualifierOffset(), keyValue.getQualifierLength(), keyValue.getTimestamp(), KeyValue.Type.Put, value, 0, value == null ? 0 : value.length); }
Example 20
Source File: MergingServerOp.java From geowave with Apache License 2.0 | 4 votes |
protected Cell mergeList(final List<Cell> cells) { synchronized (MUTEX) { Mergeable currentMergeable = null; final Cell firstCell = cells.get(0); for (final Cell cell : cells) { final Mergeable mergeable = getMergeable( cell, // TODO consider avoiding extra byte array // allocations (which would require // persistence utils to be able to use // bytebuffer instead of byte[]) CellUtil.cloneValue(cell)); if (mergeable != null) { if (currentMergeable == null) { currentMergeable = mergeable; } else { currentMergeable.merge(mergeable); } } } final byte[] valueBinary = getBinary(currentMergeable); // this is basically a lengthy verbose form of cloning // in-place (without allocating new byte arrays) and // simply replacing the value with the new mergeable // value return new KeyValue( firstCell.getRowArray(), firstCell.getRowOffset(), firstCell.getRowLength(), firstCell.getFamilyArray(), firstCell.getFamilyOffset(), firstCell.getFamilyLength(), firstCell.getQualifierArray(), firstCell.getQualifierOffset(), firstCell.getQualifierLength(), firstCell.getTimestamp(), Type.codeToType(firstCell.getTypeByte()), valueBinary, 0, valueBinary.length, firstCell.getTagsArray(), firstCell.getTagsOffset(), firstCell.getTagsLength()); } }