public Builder retainColumns(ColumnSelection selection) { if (!selection.allColumnsSelected()) { Iterables.addAll(columns, selection.getSelectedColumns()); } return this; }
public static Arg<?> columnCount(ColumnSelection columnSelection) { return getArg("columnCount", columnSelection.allColumnsSelected() ? "all" : Iterables.size(columnSelection.getSelectedColumns()), true); }
/** * This will add any local writes for this row to the result map. * <p> * If an empty value was written as a delete, this will also be included in the map. */ private void extractLocalWritesForRow( @Output ImmutableMap.Builder<Cell, byte[]> result, SortedMap<Cell, byte[]> writes, byte[] row, ColumnSelection columnSelection) { Cell lowCell = Cells.createSmallestCellForRow(row); Iterator<Entry<Cell, byte[]>> it = writes.tailMap(lowCell).entrySet().iterator(); while (it.hasNext()) { Entry<Cell, byte[]> entry = it.next(); Cell cell = entry.getKey(); if (!Arrays.equals(row, cell.getRowName())) { break; } if (columnSelection.allColumnsSelected() || columnSelection.getSelectedColumns().contains(cell.getColumnName())) { result.put(cell, entry.getValue()); } } }
private Map<Cell, Value> getRowsForSpecificColumns(final TableReference tableRef, final Iterable<byte[]> rows, ColumnSelection selection, final long startTs) { Preconditions.checkArgument(!selection.allColumnsSelected(), "Must select specific columns"); Collection<byte[]> selectedColumns = selection.getSelectedColumns(); Set<Cell> cells = Sets.newHashSetWithExpectedSize(selectedColumns.size() * Iterables.size(rows)); for (byte[] row : rows) { for (byte[] col : selectedColumns) { cells.add(Cell.create(row, col)); } } StartTsResultsCollector collector = new StartTsResultsCollector(metricsManager, startTs); cellLoader.loadWithTs("getRows", tableRef, cells, startTs, false, collector, readConsistency); return collector.getCollectedResults(); }
@Override public FullQuery getAllRowQuery(byte[] row, long ts, ColumnSelection columns, boolean includeValue) { String query = " /* GET_ALL_ROW (" + tableName + ") */ " + " SELECT m.row_name, m.col_name, m.ts" + (includeValue ? ", m.val " : " ") + " FROM " + prefixedTableName() + " m " + " WHERE m.row_name = ? " + " AND m.ts < ? " + (columns.allColumnsSelected() ? "" : " AND m.col_name IN " + numParams(Iterables.size(columns.getSelectedColumns()))); FullQuery fullQuery = new FullQuery(query).withArgs(row, ts); return columns.allColumnsSelected() ? fullQuery : fullQuery.withArgs(columns.getSelectedColumns()); }
@Override public FullQuery getAllRowsQuery(Collection<Entry<byte[], Long>> rows, ColumnSelection columns, boolean includeValue) { String query = " /* GET_ALL_ROWS (" + tableName + ") */ " + " SELECT m.row_name, m.col_name, m.ts" + (includeValue ? ", m.val " : " ") + " FROM " + prefixedTableName() + " m," + " (VALUES " + groupOfNumParams(2, rows.size()) + ") t(row_name, ts) " + " WHERE m.row_name = t.row_name " + " AND m.ts < t.ts " + (columns.allColumnsSelected() ? "" : " AND m.col_name IN " + numParams(Iterables.size(columns.getSelectedColumns()))); FullQuery fullQuery = addRowTsArgs(new FullQuery(query), rows); return columns.allColumnsSelected() ? fullQuery : fullQuery.withArgs(columns.getSelectedColumns()); }
@Override public FullQuery getAllRowsQuery(Iterable<byte[]> rows, long ts, ColumnSelection columns, boolean includeValue) { String query = " /* GET_ALL_ROWS (" + tableName + ") */ " + " SELECT m.row_name, m.col_name, m.ts" + (includeValue ? ", m.val " : " ") + " FROM " + prefixedTableName() + " m " + " WHERE m.row_name IN " + numParams(Iterables.size(rows)) + " AND m.ts < ? " + (columns.allColumnsSelected() ? "" : " AND m.col_name IN " + numParams(Iterables.size(columns.getSelectedColumns()))); FullQuery fullQuery = new FullQuery(query).withArgs(rows).withArg(ts); return columns.allColumnsSelected() ? fullQuery : fullQuery.withArgs(columns.getSelectedColumns()); }
@Override public FullQuery getLatestRowsQuery(Collection<Entry<byte[], Long>> rows, ColumnSelection columns, boolean includeValue) { String query = " /* GET_LATEST_ROWS_INNER (" + tableName + ") */ " + " SELECT m.row_name, m.col_name, max(m.ts) as ts " + " FROM " + prefixedTableName() + " m," + " (VALUES " + groupOfNumParams(2, rows.size()) + ") t(row_name, ts) " + " WHERE m.row_name = t.row_name " + " AND m.ts < t.ts " + (columns.allColumnsSelected() ? "" : " AND m.col_name IN " + numParams(Iterables.size(columns.getSelectedColumns()))) + " GROUP BY m.row_name, m.col_name "; query = wrapQueryWithIncludeValue("GET_LATEST_ROW", query, includeValue); FullQuery fullQuery = addRowTsArgs(new FullQuery(query), rows); return columns.allColumnsSelected() ? fullQuery : fullQuery.withArgs(columns.getSelectedColumns()); }
@Override public void serialize(TableRowSelection value, JsonGenerator jgen, SerializerProvider provider) throws IOException { TableMetadata metadata = metadataCache.getMetadata(value.getTableName()); Preconditions.checkNotNull(metadata, "Unknown table %s", value.getTableName()); jgen.writeStartObject(); jgen.writeStringField("table", value.getTableName()); jgen.writeArrayFieldStart("rows"); for (byte[] row : value.getRows()) { AtlasSerializers.serializeRowish(jgen, metadata.getRowMetadata(), row); } jgen.writeEndArray(); if (!value.getColumnSelection().allColumnsSelected()) { jgen.writeArrayFieldStart("cols"); for (byte[] col : value.getColumnSelection().getSelectedColumns()) { jgen.writeUTF8String(col, 0, col.length); } jgen.writeEndArray(); } jgen.writeEndObject(); } }
@Override public FullQuery getLatestRowQuery(byte[] row, long ts, ColumnSelection columns, boolean includeValue) { String query = " /* GET_LATEST_ROW_INNER (" + tableName + ") */ " + " SELECT m.row_name, m.col_name, max(m.ts) as ts " + " FROM " + prefixedTableName() + " m " + " WHERE m.row_name = ? " + " AND m.ts < ? " + (columns.allColumnsSelected() ? "" : " AND m.col_name IN " + numParams(Iterables.size(columns.getSelectedColumns()))) + " GROUP BY m.row_name, m.col_name"; query = wrapQueryWithIncludeValue("GET_LATEST_ROW", query, includeValue); FullQuery fullQuery = new FullQuery(query).withArgs(row, ts); return columns.allColumnsSelected() ? fullQuery : fullQuery.withArgs(columns.getSelectedColumns()); }
@Override public FullQuery getLatestRowsQuery(Iterable<byte[]> rows, long ts, ColumnSelection columns, boolean includeValue) { String query = " /* GET_LATEST_ROWS_INNER (" + tableName + ") */ " + " SELECT m.row_name, m.col_name, max(m.ts) as ts " + " FROM " + prefixedTableName() + " m " + " WHERE m.row_name IN " + numParams(Iterables.size(rows)) + " AND m.ts < ? " + (columns.allColumnsSelected() ? "" : " AND m.col_name IN " + numParams(Iterables.size(columns.getSelectedColumns()))) + " GROUP BY m.row_name, m.col_name "; query = wrapQueryWithIncludeValue("GET_LATEST_ROW", query, includeValue); FullQuery fullQuery = new FullQuery(query).withArgs(rows).withArg(ts); return columns.allColumnsSelected() ? fullQuery : fullQuery.withArgs(columns.getSelectedColumns()); }
private Map<Cell, Value> getRowsSomeColumns(final TableReference tableRef, final Iterable<byte[]> rows, final ColumnSelection columnSelection, final long timestamp) { if (Iterables.isEmpty(rows)) { return ImmutableMap.of(); } return run(ctx -> { Select<? extends Record> query = getLatestTimestampQuerySomeColumns( ctx, tableRef, ImmutableList.copyOf(rows), columnSelection.getSelectedColumns(), timestamp); Result<? extends Record> records = fetchValues(ctx, tableRef, query); Map<Cell, Value> results = Maps.newHashMapWithExpectedSize(records.size()); for (Record record : records) { results.put( Cell.create(record.getValue(A_ROW_NAME), record.getValue(A_COL_NAME)), Value.create(record.getValue(A_VALUE), record.getValue(A_TIMESTAMP))); } return results; }); }
boolean nonEmpty = false; boolean shouldLoad = false; for (byte[] col : columnSelection.getSelectedColumns()) { byte[] val = getCachedCellIfPresent(tableRef, Cell.create(row, col)); if (val == null) {
@Override public FullQuery getAllRowQuery(byte[] row, long ts, ColumnSelection columns, boolean includeValue) { String query = " /* GET_ALL_ONE_ROW (" + tableName + ") */ " + " SELECT" + " /*+ INDEX(m " + PrimaryKeyConstraintNames.get(tableName) + ") */ " + " m.row_name, m.col_name, m.ts" + getValueSubselect("m", includeValue) + " FROM " + tableName + " m " + " WHERE m.row_name = ? " + " AND m.ts < ? " + (columns.allColumnsSelected() ? "" : " AND EXISTS (" + "SELECT" + " /*+ NL_SJ */" + " 1" + " FROM TABLE(CAST(? AS " + structArrayPrefix() + "CELL_TS_TABLE))" + " WHERE row_name = m.col_name) "); FullQuery fullQuery = new FullQuery(query).withArgs(row, ts); return columns.allColumnsSelected() ? fullQuery : fullQuery.withArg(rowsToOracleArray(columns.getSelectedColumns())); }
@Override public FullQuery getLatestRowQuery(byte[] row, long ts, ColumnSelection columns, boolean includeValue) { String query = " /* GET_LATEST_ONE_ROW_INNER (" + tableName + ") */ " + " SELECT" + " /*+ USE_NL(t m) CARDINALITY(t 1) CARDINALITY(m 10) INDEX(m " + PrimaryKeyConstraintNames.get(tableName) + ") */ " + " m.row_name, m.col_name, max(m.ts) as ts " + " FROM " + tableName + " m " + " WHERE m.row_name = ? " + " AND m.ts < ? " + (columns.allColumnsSelected() ? "" : " AND EXISTS (" + "SELECT " + " /*+ NL_SJ */" + " 1" + " FROM TABLE(CAST(? AS " + structArrayPrefix() + "CELL_TS_TABLE))" + " WHERE row_name = m.col_name)") + " GROUP BY m.row_name, m.col_name"; query = wrapQueryWithIncludeValue("GET_LATEST_ONE_ROW", query, includeValue); FullQuery fullQuery = new FullQuery(query).withArgs(row, ts); return columns.allColumnsSelected() ? fullQuery : fullQuery.withArg(rowsToOracleArray(columns.getSelectedColumns())); }
@Override public FullQuery getAllRowsQuery(Iterable<byte[]> rows, long ts, ColumnSelection columns, boolean includeValue) { String query = " /* GET_ALL_ROWS_SINGLE_BOUND (" + tableName + ") */ " + " SELECT" + " /*+ USE_NL(t m) CARDINALITY(t 1) CARDINALITY(m 10) INDEX(m " + PrimaryKeyConstraintNames.get(tableName) + ") */ " + " m.row_name, m.col_name, m.ts" + getValueSubselect("m", includeValue) + " FROM " + tableName + " m, TABLE(CAST(? AS " + structArrayPrefix() + "CELL_TS_TABLE)) t " + " WHERE m.row_name = t.row_name " + " AND m.ts < ? " + (columns.allColumnsSelected() ? "" : " AND EXISTS (" + "SELECT" + " /*+ NL_SJ */" + " 1" + " FROM TABLE(CAST(? AS " + structArrayPrefix() + "CELL_TS_TABLE))" + " WHERE row_name = m.col_name) "); FullQuery fullQuery = new FullQuery(query).withArgs(rowsToOracleArray(rows), ts); return columns.allColumnsSelected() ? fullQuery : fullQuery.withArg(rowsToOracleArray(columns.getSelectedColumns())); }
@Override public FullQuery getAllRowsQuery(Collection<Map.Entry<byte[], Long>> rows, ColumnSelection columns, boolean includeValue) { String query = " /* GET_ALL_ROWS_MANY_BOUNDS (" + tableName + ") */ " + " SELECT" + " /*+ USE_NL(t m) CARDINALITY(t 1) CARDINALITY(m 10) INDEX(m " + PrimaryKeyConstraintNames.get(tableName) + ") */ " + " m.row_name, m.col_name, m.ts" + getValueSubselect("m", includeValue) + " FROM " + tableName + " m, TABLE(CAST(? AS " + structArrayPrefix() + "CELL_TS_TABLE)) t " + " WHERE m.row_name = t.row_name " + " AND m.ts < t.max_ts " + (columns.allColumnsSelected() ? "" : " AND EXISTS (" + "SELECT" + " /*+ NL_SJ */" + " 1" + " FROM TABLE(CAST(? AS " + structArrayPrefix() + "CELL_TS_TABLE))" + " WHERE row_name = m.col_name) "); FullQuery fullQuery = new FullQuery(query).withArg(rowsAndTimestampsToOracleArray(rows)); return columns.allColumnsSelected() ? fullQuery : fullQuery.withArg(rowsToOracleArray(columns.getSelectedColumns())); }
@Override public FullQuery getLatestRowsQuery(Iterable<byte[]> rows, long ts, ColumnSelection columns, boolean includeValue) { String query = " /* GET_LATEST_ROWS_SINGLE_BOUND_INNER (" + tableName + ") */ " + " SELECT" + " /*+ USE_NL(t m) CARDINALITY(t 1) CARDINALITY(m 10) INDEX(m " + PrimaryKeyConstraintNames.get(tableName) + ") */ " + " m.row_name, m.col_name, max(m.ts) as ts " + " FROM " + tableName + " m, TABLE(CAST(? AS " + structArrayPrefix() + "CELL_TS_TABLE)) t " + " WHERE m.row_name = t.row_name " + " AND m.ts < ? " + (columns.allColumnsSelected() ? "" : " AND EXISTS (" + "SELECT" + " /*+ NL_SJ */" + " 1" + " FROM TABLE(CAST(? AS " + structArrayPrefix() + "CELL_TS_TABLE))" + " WHERE row_name = m.col_name) ") + " GROUP BY m.row_name, m.col_name"; query = wrapQueryWithIncludeValue("GET_LATEST_ROWS_SINGLE_BOUND", query, includeValue); FullQuery fullQuery = new FullQuery(query).withArgs(rowsToOracleArray(rows), ts); return columns.allColumnsSelected() ? fullQuery : fullQuery.withArg(rowsToOracleArray(columns.getSelectedColumns())); }
@Override public FullQuery getLatestRowsQuery(Collection<Map.Entry<byte[], Long>> rows, ColumnSelection columns, boolean includeValue) { String query = " /* GET_LATEST_ROWS_MANY_BOUNDS_INNER (" + tableName + ") */ " + " SELECT" + " /*+ USE_NL(t m) CARDINALITY(t 1) CARDINALITY(m 10) INDEX(m " + PrimaryKeyConstraintNames.get(tableName) + ") */ " + " m.row_name, m.col_name, max(m.ts) as ts " + " FROM " + tableName + " m, TABLE(CAST(? AS " + structArrayPrefix() + "CELL_TS_TABLE)) t " + " WHERE m.row_name = t.row_name " + " AND m.ts < t.max_ts " + (columns.allColumnsSelected() ? "" : " AND EXISTS (" + "SELECT" + " /*+ NL_SJ */" + " 1" + " FROM TABLE(CAST(? AS " + structArrayPrefix() + "CELL_TS_TABLE))" + " WHERE row_name = m.col_name) ") + " GROUP BY m.row_name, m.col_name"; query = wrapQueryWithIncludeValue("GET_LATEST_ROWS_MANY_BOUNDS", query, includeValue); FullQuery fullQuery = new FullQuery(query).withArg(rowsAndTimestampsToOracleArray(rows)); return columns.allColumnsSelected() ? fullQuery : fullQuery.withArg(rowsToOracleArray(columns.getSelectedColumns())); }
public Builder retainColumns(ColumnSelection selection) { if (!selection.allColumnsSelected()) { Iterables.addAll(columns, selection.getSelectedColumns()); } return this; }