Ejemplo n.º 1
0
  // select data
  // http://blog.csdn.net/cnweike/article/details/42920547 for more detail.
  public static String select(
      String tableName, String begin, String end, String colFamily, String column, String value) {
    String result = "";
    TableName tn = TableName.valueOf(tableName);
    try {
      Table table = conn.getTable(tn);
      Scan scan = new Scan(Bytes.toBytes(begin), Bytes.toBytes(end));

      SingleColumnValueFilter scvf =
          new SingleColumnValueFilter(
              Bytes.toBytes(colFamily),
              Bytes.toBytes(column),
              CompareFilter.CompareOp.EQUAL,
              new SubstringComparator(value));
      scvf.setFilterIfMissing(false);
      scvf.setLatestVersionOnly(true); // OK

      scan.setFilter(scvf);

      ResultScanner scanner = table.getScanner(scan);
      List<Map<String, String>> total = new ArrayList<Map<String, String>>();
      for (Result res : scanner) {
        Map<String, String> map = new HashMap<String, String>();
        for (Cell cell : res.rawCells())
          map.put(
              Bytes.toString(CellUtil.cloneQualifier(cell)),
              Bytes.toString(CellUtil.cloneValue(cell)));
        total.add(map);
      }

      ObjectMapper mapper = new ObjectMapper();
      result = mapper.writeValueAsString(total);

    } catch (IOException e) {
      e.printStackTrace();
    }

    return result;
  }
Ejemplo n.º 2
0
  /*
   * Must be sure that column is in format like 'family: column'
   */
  public void prepare(String[] columns) throws IOException {
    this.scan = new Scan();
    if (this.startKey != null) {
      logger.info(String.format("HBaseReader set startkey to %s .", Bytes.toString(this.startKey)));
      scan.setStartRow(startKey);
    }
    if (this.endKey != null) {
      logger.info(String.format("HBaseReader set endkey to %s .", Bytes.toString(this.endKey)));
      scan.setStopRow(endKey);
    }
    if (this.minStamp > 0 && this.maxStamp > 0) {
      scan.setTimeRange(minStamp, maxStamp);
      if (StringUtils.isNotEmpty(primaryKey)) {
        String[] cs = StringUtils.split(primaryKey, ":");
        scan.addColumn(cs[0].getBytes(), cs[1].getBytes());
      }
    } else if (ETLStringUtils.isNotEmpty(startDate)
        && ETLStringUtils.isNotEmpty(familyName)
        && ETLStringUtils.isNotEmpty(fieldName)) {
      SingleColumnValueFilter scvf =
          new SingleColumnValueFilter(
              Bytes.toBytes(familyName),
              Bytes.toBytes(fieldName),
              CompareOp.GREATER_OR_EQUAL,
              new BinaryPrefixComparator(startDate.getBytes()));
      scvf.setFilterIfMissing(true);
      scvf.setLatestVersionOnly(true);
      if (ETLStringUtils.isNotEmpty(endDate)) {
        SingleColumnValueFilter scvf1 =
            new SingleColumnValueFilter(
                Bytes.toBytes(familyName),
                Bytes.toBytes(fieldName),
                CompareOp.LESS_OR_EQUAL,
                new BinaryPrefixComparator(endDate.getBytes()));
        scvf1.setFilterIfMissing(true);
        scvf1.setLatestVersionOnly(true);
        List<Filter> filters = new ArrayList<Filter>();
        filters.add(scvf);
        filters.add(scvf1);
        FilterList fl = new FilterList(FilterList.Operator.MUST_PASS_ALL, filters);
        scan.setFilter(fl);
      } else {
        scan.setFilter(scvf);
      }
    }
    this.families = new String[columns.length];
    this.columns = new String[columns.length];

    int idx = 0;
    for (String column : columns) {
      this.families[idx] = column.split(":")[0].trim();
      this.columns[idx] = column.split(":")[1].trim();
      if (!(this.minStamp > 0 && this.maxStamp > 0)) {
        scan.addColumn(this.families[idx].getBytes(), this.columns[idx].getBytes());
      }
      idx++;
    }
    if ("true".equalsIgnoreCase(this.isSaveOneObj)) {
      scan.addColumn(this.oneObjFamilyName.getBytes(), this.oneObjColName.getBytes());
    }
    if (this.maxversion > 0) {
      scan.setMaxVersions(this.maxversion);
    } else {
      scan.setMaxVersions();
    }

    htable.setScannerCaching(SCAN_CACHE);
    this.rs = htable.getScanner(this.scan);
  }
Ejemplo n.º 3
0
 public Filter build() {
   Filter filter;
   switch (FilterType.valueOf(type)) {
     case ColumnCountGetFilter:
       filter = new ColumnCountGetFilter(limit);
       break;
     case ColumnPaginationFilter:
       filter = new ColumnPaginationFilter(limit, offset);
       break;
     case ColumnPrefixFilter:
       filter = new ColumnPrefixFilter(Base64.decode(value));
       break;
     case ColumnRangeFilter:
       filter =
           new ColumnRangeFilter(
               Base64.decode(minColumn),
               minColumnInclusive,
               Base64.decode(maxColumn),
               maxColumnInclusive);
       break;
     case DependentColumnFilter:
       filter =
           new DependentColumnFilter(
               Base64.decode(family),
               qualifier != null ? Base64.decode(qualifier) : null,
               dropDependentColumn,
               CompareOp.valueOf(op),
               comparator.build());
       break;
     case FamilyFilter:
       filter = new FamilyFilter(CompareOp.valueOf(op), comparator.build());
       break;
     case FilterList:
       {
         List<Filter> list = new ArrayList<Filter>();
         for (FilterModel model : filters) {
           list.add(model.build());
         }
         filter = new FilterList(FilterList.Operator.valueOf(op), list);
       }
       break;
     case FirstKeyOnlyFilter:
       filter = new FirstKeyOnlyFilter();
       break;
     case InclusiveStopFilter:
       filter = new InclusiveStopFilter(Base64.decode(value));
       break;
     case KeyOnlyFilter:
       filter = new KeyOnlyFilter();
       break;
     case MultipleColumnPrefixFilter:
       {
         byte[][] values = new byte[prefixes.size()][];
         for (int i = 0; i < prefixes.size(); i++) {
           values[i] = Base64.decode(prefixes.get(i));
         }
         filter = new MultipleColumnPrefixFilter(values);
       }
       break;
     case PageFilter:
       filter = new PageFilter(Long.valueOf(value));
       break;
     case PrefixFilter:
       filter = new PrefixFilter(Base64.decode(value));
       break;
     case QualifierFilter:
       filter = new QualifierFilter(CompareOp.valueOf(op), comparator.build());
       break;
     case RandomRowFilter:
       filter = new RandomRowFilter(chance);
       break;
     case RowFilter:
       filter = new RowFilter(CompareOp.valueOf(op), comparator.build());
       break;
     case SingleColumnValueFilter:
       filter =
           new SingleColumnValueFilter(
               Base64.decode(family),
               qualifier != null ? Base64.decode(qualifier) : null,
               CompareOp.valueOf(op),
               comparator.build());
       if (ifMissing != null) {
         ((SingleColumnValueFilter) filter).setFilterIfMissing(ifMissing);
       }
       if (latestVersion != null) {
         ((SingleColumnValueFilter) filter).setLatestVersionOnly(latestVersion);
       }
       break;
     case SingleColumnValueExcludeFilter:
       filter =
           new SingleColumnValueExcludeFilter(
               Base64.decode(family),
               qualifier != null ? Base64.decode(qualifier) : null,
               CompareOp.valueOf(op),
               comparator.build());
       if (ifMissing != null) {
         ((SingleColumnValueExcludeFilter) filter).setFilterIfMissing(ifMissing);
       }
       if (latestVersion != null) {
         ((SingleColumnValueExcludeFilter) filter).setLatestVersionOnly(latestVersion);
       }
       break;
     case SkipFilter:
       filter = new SkipFilter(filters.get(0).build());
       break;
     case TimestampsFilter:
       filter = new TimestampsFilter(timestamps);
       break;
     case ValueFilter:
       filter = new ValueFilter(CompareOp.valueOf(op), comparator.build());
       break;
     case WhileMatchFilter:
       filter = new WhileMatchFilter(filters.get(0).build());
       break;
     default:
       throw new RuntimeException("unhandled filter type: " + type);
   }
   return filter;
 }