精华内容
下载资源
问答
  • 2019独角兽企业重金招聘Python工程师标准>>> ...

    RowFilter用于过滤row key

    Operator Description
    LESS 小于
    LESS_OR_EQUAL 小于等于
    [EQUAL 等于
    NOT_EQUAL 不等于
    GREATER_OR_EQUAL 大于等于
    GREATER 大于
    NO_OP 排除所有

     

    Comparator Description
    BinaryComparator 使用Bytes.compareTo()比较
    BinaryPrefixComparator 和BinaryComparator差不多,从前面开始比较
    NullComparator Does not compare against an actual value but whether a given one is null, or not  null.
    BitComparator Performs a bitwise comparison, providing a BitwiseOp class with OR, and XORoperators.
    RegexStringComparator 正则表达式
    SubstringComparator 把数据当成字符串,用contains()来判断
    import java.io.IOException;
    
    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.hbase.HBaseConfiguration;
    import org.apache.hadoop.hbase.HColumnDescriptor;
    import org.apache.hadoop.hbase.HTableDescriptor;
    import org.apache.hadoop.hbase.client.HBaseAdmin;
    import org.apache.hadoop.hbase.client.HTable;
    import org.apache.hadoop.hbase.client.Put;
    import org.apache.hadoop.hbase.client.Result;
    import org.apache.hadoop.hbase.client.ResultScanner;
    import org.apache.hadoop.hbase.client.Scan;
    import org.apache.hadoop.hbase.filter.BinaryComparator;
    import org.apache.hadoop.hbase.filter.BinaryPrefixComparator;
    import org.apache.hadoop.hbase.filter.CompareFilter;
    import org.apache.hadoop.hbase.filter.Filter;
    import org.apache.hadoop.hbase.filter.RegexStringComparator;
    import org.apache.hadoop.hbase.filter.RowFilter;
    import org.apache.hadoop.hbase.filter.SubstringComparator;
    
    public class TestHbaseRowFilter {
            String tableName = "test_row_filter";
            Configuration config = HBaseConfiguration.create();
    
            /**
             * 部分代码来自hbase权威指南
             * @throws IOException
             */
            public void testRowFilter() throws IOException {
    
                    HTable table = new HTable(config, tableName);
                    Scan scan = new Scan();
    
                    System.out.println("小于等于row010的行");
                    Filter filter1 = new RowFilter(CompareFilter.CompareOp.LESS_OR_EQUAL,
                                    new BinaryComparator("row010".getBytes()));
                    scan.setFilter(filter1);
                    ResultScanner scanner1 = table.getScanner(scan);
                    for (Result res : scanner1) {
                            System.out.println(res);
                    }
                    scanner1.close();
    
                    System.out.println("正则获取结尾为5的行");
                    Filter filter2 = new RowFilter(CompareFilter.CompareOp.EQUAL,
                                    new RegexStringComparator(".*5[        DISCUZ_CODE_0        ]quot;));
                    scan.setFilter(filter2);
                    ResultScanner scanner2 = table.getScanner(scan);
                    for (Result res : scanner2) {
                            System.out.println(res);
                    }
                    scanner2.close();
    
                    System.out.println("包含有5的行");
                    Filter filter3 = new RowFilter(CompareFilter.CompareOp.EQUAL,
                                    new SubstringComparator("5"));
                    scan.setFilter(filter3);
                    ResultScanner scanner3 = table.getScanner(scan);
                    for (Result res : scanner3) {
                            System.out.println(res);
                    }
                    scanner3.close();
    
                    System.out.println("开头是row01的");
                    Filter filter4 = new RowFilter(CompareFilter.CompareOp.EQUAL,
                                    new BinaryPrefixComparator("row01".getBytes()));
                    scan.setFilter(filter4);
                    ResultScanner scanner4 = table.getScanner(scan);
                    for (Result res : scanner4) {
                            System.out.println(res);
                    }
                    scanner3.close();
            }
    
            /**
             * 初始化数据
             */
            public void init() {
                    // 创建表和初始化数据
                    try {
                            HBaseAdmin admin = new HBaseAdmin(config);
                            if (!admin.tableExists(tableName)) {
                                    HTableDescriptor htd = new HTableDescriptor(tableName);
                                    HColumnDescriptor hcd1 = new HColumnDescriptor("data");
                                    htd.addFamily(hcd1);
                                    HColumnDescriptor hcd2 = new HColumnDescriptor("url");
                                    htd.addFamily(hcd2);
    
                                    admin.createTable(htd);
                            }
    
                            HTable table = new HTable(config, tableName);
    
                            table.setAutoFlush(false);
                            int count = 50;
                            for (int i = 1; i <= count; ++i) {
                                    Put p = new Put(String.format("row%03d", i).getBytes());
                                    p.add("data".getBytes(), String.format("col%01d", i % 10)
                                                    .getBytes(), String.format("data%03d", i).getBytes());
                                    p.add("url".getBytes(), String.format("col%01d", i % 10)
                                                    .getBytes(), String.format("url%03d", i).getBytes());
                                    table.put(p);
                            }
                            table.close();
    
                    } catch (IOException e) {
                            e.printStackTrace();
                    }
            }
    
            /**
             * @param args
             * @throws IOException
             */
            public static void main(String[] args) throws IOException {
                    TestHbaseRowFilter test = new TestHbaseRowFilter();
                    test.init();
                    test.testRowFilter();
            }
    
    }

    输出结果

    小于等于row010的行
    keyvalues={row001/data:col1/1364133382268/Put/vlen=7, row001/url:col1/1364133382268/Put/vlen=6}
    keyvalues={row002/data:col2/1364133382268/Put/vlen=7, row002/url:col2/1364133382268/Put/vlen=6}
    keyvalues={row003/data:col3/1364133382268/Put/vlen=7, row003/url:col3/1364133382268/Put/vlen=6}
    keyvalues={row004/data:col4/1364133382268/Put/vlen=7, row004/url:col4/1364133382268/Put/vlen=6}
    keyvalues={row005/data:col5/1364133382268/Put/vlen=7, row005/url:col5/1364133382268/Put/vlen=6}
    keyvalues={row006/data:col6/1364133382268/Put/vlen=7, row006/url:col6/1364133382268/Put/vlen=6}
    keyvalues={row007/data:col7/1364133382268/Put/vlen=7, row007/url:col7/1364133382268/Put/vlen=6}
    keyvalues={row008/data:col8/1364133382268/Put/vlen=7, row008/url:col8/1364133382268/Put/vlen=6}
    keyvalues={row009/data:col9/1364133382268/Put/vlen=7, row009/url:col9/1364133382268/Put/vlen=6}
    keyvalues={row010/data:col0/1364133382268/Put/vlen=7, row010/url:col0/1364133382268/Put/vlen=6}
    正则获取结尾为5的行
    keyvalues={row005/data:col5/1364133382268/Put/vlen=7, row005/url:col5/1364133382268/Put/vlen=6}
    keyvalues={row015/data:col5/1364133382268/Put/vlen=7, row015/url:col5/1364133382268/Put/vlen=6}
    keyvalues={row025/data:col5/1364133382268/Put/vlen=7, row025/url:col5/1364133382268/Put/vlen=6}
    keyvalues={row035/data:col5/1364133382268/Put/vlen=7, row035/url:col5/1364133382268/Put/vlen=6}
    keyvalues={row045/data:col5/1364133382268/Put/vlen=7, row045/url:col5/1364133382268/Put/vlen=6}
    包行有5的行
    keyvalues={row005/data:col5/1364133382268/Put/vlen=7, row005/url:col5/1364133382268/Put/vlen=6}
    keyvalues={row015/data:col5/1364133382268/Put/vlen=7, row015/url:col5/1364133382268/Put/vlen=6}
    keyvalues={row025/data:col5/1364133382268/Put/vlen=7, row025/url:col5/1364133382268/Put/vlen=6}
    keyvalues={row035/data:col5/1364133382268/Put/vlen=7, row035/url:col5/1364133382268/Put/vlen=6}
    keyvalues={row045/data:col5/1364133382268/Put/vlen=7, row045/url:col5/1364133382268/Put/vlen=6}
    keyvalues={row050/data:col0/1364133382268/Put/vlen=7, row050/url:col0/1364133382268/Put/vlen=6}
    开头是row01的
    keyvalues={row010/data:col0/1364133382268/Put/vlen=7, row010/url:col0/1364133382268/Put/vlen=6}
    keyvalues={row011/data:col1/1364133382268/Put/vlen=7, row011/url:col1/1364133382268/Put/vlen=6}
    keyvalues={row012/data:col2/1364133382268/Put/vlen=7, row012/url:col2/1364133382268/Put/vlen=6}
    keyvalues={row013/data:col3/1364133382268/Put/vlen=7, row013/url:col3/1364133382268/Put/vlen=6}
    keyvalues={row014/data:col4/1364133382268/Put/vlen=7, row014/url:col4/1364133382268/Put/vlen=6}
    keyvalues={row015/data:col5/1364133382268/Put/vlen=7, row015/url:col5/1364133382268/Put/vlen=6}
    keyvalues={row016/data:col6/1364133382268/Put/vlen=7, row016/url:col6/1364133382268/Put/vlen=6}
    keyvalues={row017/data:col7/1364133382268/Put/vlen=7, row017/url:col7/1364133382268/Put/vlen=6}
    keyvalues={row018/data:col8/1364133382268/Put/vlen=7, row018/url:col8/1364133382268/Put/vlen=6}
    keyvalues={row019/data:col9/1364133382268/Put/vlen=7, row019/url:col9/1364133382268/Put/vlen=6}

    复制代码

    RowFilter用于过滤row key

    Operator Description
    LESS 小于
    LESS_OR_EQUAL 小于等于
    [EQUAL 等于
    NOT_EQUAL 不等于
    GREATER_OR_EQUAL 大于等于
    GREATER 大于
    NO_OP 排除所有

     

    Comparator Description
    BinaryComparator 使用Bytes.compareTo()比较
    BinaryPrefixComparator 和BinaryComparator差不多,从前面开始比较
    NullComparator Does not compare against an actual value but whether a given one is null, or not  null.
    BitComparator Performs a bitwise comparison, providing a BitwiseOp class with OR, and XORoperators.
    RegexStringComparator 正则表达式
    SubstringComparator 把数据当成字符串,用contains()来判断
    import java.io.IOException;
    
    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.hbase.HBaseConfiguration;
    import org.apache.hadoop.hbase.HColumnDescriptor;
    import org.apache.hadoop.hbase.HTableDescriptor;
    import org.apache.hadoop.hbase.client.HBaseAdmin;
    import org.apache.hadoop.hbase.client.HTable;
    import org.apache.hadoop.hbase.client.Put;
    import org.apache.hadoop.hbase.client.Result;
    import org.apache.hadoop.hbase.client.ResultScanner;
    import org.apache.hadoop.hbase.client.Scan;
    import org.apache.hadoop.hbase.filter.BinaryComparator;
    import org.apache.hadoop.hbase.filter.BinaryPrefixComparator;
    import org.apache.hadoop.hbase.filter.CompareFilter;
    import org.apache.hadoop.hbase.filter.Filter;
    import org.apache.hadoop.hbase.filter.RegexStringComparator;
    import org.apache.hadoop.hbase.filter.RowFilter;
    import org.apache.hadoop.hbase.filter.SubstringComparator;
    
    public class TestHbaseRowFilter {
            String tableName = "test_row_filter";
            Configuration config = HBaseConfiguration.create();
    
            /**
             * 部分代码来自hbase权威指南
             * @throws IOException
             */
            public void testRowFilter() throws IOException {
    
                    HTable table = new HTable(config, tableName);
                    Scan scan = new Scan();
    
                    System.out.println("小于等于row010的行");
                    Filter filter1 = new RowFilter(CompareFilter.CompareOp.LESS_OR_EQUAL,
                                    new BinaryComparator("row010".getBytes()));
                    scan.setFilter(filter1);
                    ResultScanner scanner1 = table.getScanner(scan);
                    for (Result res : scanner1) {
                            System.out.println(res);
                    }
                    scanner1.close();
    
                    System.out.println("正则获取结尾为5的行");
                    Filter filter2 = new RowFilter(CompareFilter.CompareOp.EQUAL,
                                    new RegexStringComparator(".*5[        DISCUZ_CODE_0        ]quot;));
                    scan.setFilter(filter2);
                    ResultScanner scanner2 = table.getScanner(scan);
                    for (Result res : scanner2) {
                            System.out.println(res);
                    }
                    scanner2.close();
    
                    System.out.println("包含有5的行");
                    Filter filter3 = new RowFilter(CompareFilter.CompareOp.EQUAL,
                                    new SubstringComparator("5"));
                    scan.setFilter(filter3);
                    ResultScanner scanner3 = table.getScanner(scan);
                    for (Result res : scanner3) {
                            System.out.println(res);
                    }
                    scanner3.close();
    
                    System.out.println("开头是row01的");
                    Filter filter4 = new RowFilter(CompareFilter.CompareOp.EQUAL,
                                    new BinaryPrefixComparator("row01".getBytes()));
                    scan.setFilter(filter4);
                    ResultScanner scanner4 = table.getScanner(scan);
                    for (Result res : scanner4) {
                            System.out.println(res);
                    }
                    scanner3.close();
            }
    
            /**
             * 初始化数据
             */
            public void init() {
                    // 创建表和初始化数据
                    try {
                            HBaseAdmin admin = new HBaseAdmin(config);
                            if (!admin.tableExists(tableName)) {
                                    HTableDescriptor htd = new HTableDescriptor(tableName);
                                    HColumnDescriptor hcd1 = new HColumnDescriptor("data");
                                    htd.addFamily(hcd1);
                                    HColumnDescriptor hcd2 = new HColumnDescriptor("url");
                                    htd.addFamily(hcd2);
    
                                    admin.createTable(htd);
                            }
    
                            HTable table = new HTable(config, tableName);
    
                            table.setAutoFlush(false);
                            int count = 50;
                            for (int i = 1; i <= count; ++i) {
                                    Put p = new Put(String.format("row%03d", i).getBytes());
                                    p.add("data".getBytes(), String.format("col%01d", i % 10)
                                                    .getBytes(), String.format("data%03d", i).getBytes());
                                    p.add("url".getBytes(), String.format("col%01d", i % 10)
                                                    .getBytes(), String.format("url%03d", i).getBytes());
                                    table.put(p);
                            }
                            table.close();
    
                    } catch (IOException e) {
                            e.printStackTrace();
                    }
            }
    
            /**
             * @param args
             * @throws IOException
             */
            public static void main(String[] args) throws IOException {
                    TestHbaseRowFilter test = new TestHbaseRowFilter();
                    test.init();
                    test.testRowFilter();
            }
    
    }

    复制代码

    输出结果

    小于等于row010的行
    keyvalues={row001/data:col1/1364133382268/Put/vlen=7, row001/url:col1/1364133382268/Put/vlen=6}
    keyvalues={row002/data:col2/1364133382268/Put/vlen=7, row002/url:col2/1364133382268/Put/vlen=6}
    keyvalues={row003/data:col3/1364133382268/Put/vlen=7, row003/url:col3/1364133382268/Put/vlen=6}
    keyvalues={row004/data:col4/1364133382268/Put/vlen=7, row004/url:col4/1364133382268/Put/vlen=6}
    keyvalues={row005/data:col5/1364133382268/Put/vlen=7, row005/url:col5/1364133382268/Put/vlen=6}
    keyvalues={row006/data:col6/1364133382268/Put/vlen=7, row006/url:col6/1364133382268/Put/vlen=6}
    keyvalues={row007/data:col7/1364133382268/Put/vlen=7, row007/url:col7/1364133382268/Put/vlen=6}
    keyvalues={row008/data:col8/1364133382268/Put/vlen=7, row008/url:col8/1364133382268/Put/vlen=6}
    keyvalues={row009/data:col9/1364133382268/Put/vlen=7, row009/url:col9/1364133382268/Put/vlen=6}
    keyvalues={row010/data:col0/1364133382268/Put/vlen=7, row010/url:col0/1364133382268/Put/vlen=6}
    正则获取结尾为5的行
    keyvalues={row005/data:col5/1364133382268/Put/vlen=7, row005/url:col5/1364133382268/Put/vlen=6}
    keyvalues={row015/data:col5/1364133382268/Put/vlen=7, row015/url:col5/1364133382268/Put/vlen=6}
    keyvalues={row025/data:col5/1364133382268/Put/vlen=7, row025/url:col5/1364133382268/Put/vlen=6}
    keyvalues={row035/data:col5/1364133382268/Put/vlen=7, row035/url:col5/1364133382268/Put/vlen=6}
    keyvalues={row045/data:col5/1364133382268/Put/vlen=7, row045/url:col5/1364133382268/Put/vlen=6}
    包行有5的行
    keyvalues={row005/data:col5/1364133382268/Put/vlen=7, row005/url:col5/1364133382268/Put/vlen=6}
    keyvalues={row015/data:col5/1364133382268/Put/vlen=7, row015/url:col5/1364133382268/Put/vlen=6}
    keyvalues={row025/data:col5/1364133382268/Put/vlen=7, row025/url:col5/1364133382268/Put/vlen=6}
    keyvalues={row035/data:col5/1364133382268/Put/vlen=7, row035/url:col5/1364133382268/Put/vlen=6}
    keyvalues={row045/data:col5/1364133382268/Put/vlen=7, row045/url:col5/1364133382268/Put/vlen=6}
    keyvalues={row050/data:col0/1364133382268/Put/vlen=7, row050/url:col0/1364133382268/Put/vlen=6}
    开头是row01的
    keyvalues={row010/data:col0/1364133382268/Put/vlen=7, row010/url:col0/1364133382268/Put/vlen=6}
    keyvalues={row011/data:col1/1364133382268/Put/vlen=7, row011/url:col1/1364133382268/Put/vlen=6}
    keyvalues={row012/data:col2/1364133382268/Put/vlen=7, row012/url:col2/1364133382268/Put/vlen=6}
    keyvalues={row013/data:col3/1364133382268/Put/vlen=7, row013/url:col3/1364133382268/Put/vlen=6}
    keyvalues={row014/data:col4/1364133382268/Put/vlen=7, row014/url:col4/1364133382268/Put/vlen=6}
    keyvalues={row015/data:col5/1364133382268/Put/vlen=7, row015/url:col5/1364133382268/Put/vlen=6}
    keyvalues={row016/data:col6/1364133382268/Put/vlen=7, row016/url:col6/1364133382268/Put/vlen=6}
    keyvalues={row017/data:col7/1364133382268/Put/vlen=7, row017/url:col7/1364133382268/Put/vlen=6}
    keyvalues={row018/data:col8/1364133382268/Put/vlen=7, row018/url:col8/1364133382268/Put/vlen=6}
    keyvalues={row019/data:col9/1364133382268/Put/vlen=7, row019/url:col9/1364133382268/Put/vlen=6}

    复制代码

    RowFilter用于过滤row key

    Operator Description
    LESS 小于
    LESS_OR_EQUAL 小于等于
    [EQUAL 等于
    NOT_EQUAL 不等于
    GREATER_OR_EQUAL 大于等于
    GREATER 大于
    NO_OP 排除所有

     

    Comparator Description
    BinaryComparator 使用Bytes.compareTo()比较
    BinaryPrefixComparator 和BinaryComparator差不多,从前面开始比较
    NullComparator Does not compare against an actual value but whether a given one is null, or not  null.
    BitComparator Performs a bitwise comparison, providing a BitwiseOp class with OR, and XORoperators.
    RegexStringComparator 正则表达式
    SubstringComparator 把数据当成字符串,用contains()来判断
    import java.io.IOException;
    
    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.hbase.HBaseConfiguration;
    import org.apache.hadoop.hbase.HColumnDescriptor;
    import org.apache.hadoop.hbase.HTableDescriptor;
    import org.apache.hadoop.hbase.client.HBaseAdmin;
    import org.apache.hadoop.hbase.client.HTable;
    import org.apache.hadoop.hbase.client.Put;
    import org.apache.hadoop.hbase.client.Result;
    import org.apache.hadoop.hbase.client.ResultScanner;
    import org.apache.hadoop.hbase.client.Scan;
    import org.apache.hadoop.hbase.filter.BinaryComparator;
    import org.apache.hadoop.hbase.filter.BinaryPrefixComparator;
    import org.apache.hadoop.hbase.filter.CompareFilter;
    import org.apache.hadoop.hbase.filter.Filter;
    import org.apache.hadoop.hbase.filter.RegexStringComparator;
    import org.apache.hadoop.hbase.filter.RowFilter;
    import org.apache.hadoop.hbase.filter.SubstringComparator;
    
    public class TestHbaseRowFilter {
            String tableName = "test_row_filter";
            Configuration config = HBaseConfiguration.create();
    
            /**
             * 部分代码来自hbase权威指南
             * @throws IOException
             */
            public void testRowFilter() throws IOException {
    
                    HTable table = new HTable(config, tableName);
                    Scan scan = new Scan();
    
                    System.out.println("小于等于row010的行");
                    Filter filter1 = new RowFilter(CompareFilter.CompareOp.LESS_OR_EQUAL,
                                    new BinaryComparator("row010".getBytes()));
                    scan.setFilter(filter1);
                    ResultScanner scanner1 = table.getScanner(scan);
                    for (Result res : scanner1) {
                            System.out.println(res);
                    }
                    scanner1.close();
    
                    System.out.println("正则获取结尾为5的行");
                    Filter filter2 = new RowFilter(CompareFilter.CompareOp.EQUAL,
                                    new RegexStringComparator(".*5[        DISCUZ_CODE_0        ]quot;));
                    scan.setFilter(filter2);
                    ResultScanner scanner2 = table.getScanner(scan);
                    for (Result res : scanner2) {
                            System.out.println(res);
                    }
                    scanner2.close();
    
                    System.out.println("包含有5的行");
                    Filter filter3 = new RowFilter(CompareFilter.CompareOp.EQUAL,
                                    new SubstringComparator("5"));
                    scan.setFilter(filter3);
                    ResultScanner scanner3 = table.getScanner(scan);
                    for (Result res : scanner3) {
                            System.out.println(res);
                    }
                    scanner3.close();
    
                    System.out.println("开头是row01的");
                    Filter filter4 = new RowFilter(CompareFilter.CompareOp.EQUAL,
                                    new BinaryPrefixComparator("row01".getBytes()));
                    scan.setFilter(filter4);
                    ResultScanner scanner4 = table.getScanner(scan);
                    for (Result res : scanner4) {
                            System.out.println(res);
                    }
                    scanner3.close();
            }
    
            /**
             * 初始化数据
             */
            public void init() {
                    // 创建表和初始化数据
                    try {
                            HBaseAdmin admin = new HBaseAdmin(config);
                            if (!admin.tableExists(tableName)) {
                                    HTableDescriptor htd = new HTableDescriptor(tableName);
                                    HColumnDescriptor hcd1 = new HColumnDescriptor("data");
                                    htd.addFamily(hcd1);
                                    HColumnDescriptor hcd2 = new HColumnDescriptor("url");
                                    htd.addFamily(hcd2);
    
                                    admin.createTable(htd);
                            }
    
                            HTable table = new HTable(config, tableName);
    
                            table.setAutoFlush(false);
                            int count = 50;
                            for (int i = 1; i <= count; ++i) {
                                    Put p = new Put(String.format("row%03d", i).getBytes());
                                    p.add("data".getBytes(), String.format("col%01d", i % 10)
                                                    .getBytes(), String.format("data%03d", i).getBytes());
                                    p.add("url".getBytes(), String.format("col%01d", i % 10)
                                                    .getBytes(), String.format("url%03d", i).getBytes());
                                    table.put(p);
                            }
                            table.close();
    
                    } catch (IOException e) {
                            e.printStackTrace();
                    }
            }
    
            /**
             * @param args
             * @throws IOException
             */
            public static void main(String[] args) throws IOException {
                    TestHbaseRowFilter test = new TestHbaseRowFilter();
                    test.init();
                    test.testRowFilter();
            }
    
    }

     

    输出结果

    小于等于row010的行
    keyvalues={row001/data:col1/1364133382268/Put/vlen=7, row001/url:col1/1364133382268/Put/vlen=6}
    keyvalues={row002/data:col2/1364133382268/Put/vlen=7, row002/url:col2/1364133382268/Put/vlen=6}
    keyvalues={row003/data:col3/1364133382268/Put/vlen=7, row003/url:col3/1364133382268/Put/vlen=6}
    keyvalues={row004/data:col4/1364133382268/Put/vlen=7, row004/url:col4/1364133382268/Put/vlen=6}
    keyvalues={row005/data:col5/1364133382268/Put/vlen=7, row005/url:col5/1364133382268/Put/vlen=6}
    keyvalues={row006/data:col6/1364133382268/Put/vlen=7, row006/url:col6/1364133382268/Put/vlen=6}
    keyvalues={row007/data:col7/1364133382268/Put/vlen=7, row007/url:col7/1364133382268/Put/vlen=6}
    keyvalues={row008/data:col8/1364133382268/Put/vlen=7, row008/url:col8/1364133382268/Put/vlen=6}
    keyvalues={row009/data:col9/1364133382268/Put/vlen=7, row009/url:col9/1364133382268/Put/vlen=6}
    keyvalues={row010/data:col0/1364133382268/Put/vlen=7, row010/url:col0/1364133382268/Put/vlen=6}
    正则获取结尾为5的行
    keyvalues={row005/data:col5/1364133382268/Put/vlen=7, row005/url:col5/1364133382268/Put/vlen=6}
    keyvalues={row015/data:col5/1364133382268/Put/vlen=7, row015/url:col5/1364133382268/Put/vlen=6}
    keyvalues={row025/data:col5/1364133382268/Put/vlen=7, row025/url:col5/1364133382268/Put/vlen=6}
    keyvalues={row035/data:col5/1364133382268/Put/vlen=7, row035/url:col5/1364133382268/Put/vlen=6}
    keyvalues={row045/data:col5/1364133382268/Put/vlen=7, row045/url:col5/1364133382268/Put/vlen=6}
    包行有5的行
    keyvalues={row005/data:col5/1364133382268/Put/vlen=7, row005/url:col5/1364133382268/Put/vlen=6}
    keyvalues={row015/data:col5/1364133382268/Put/vlen=7, row015/url:col5/1364133382268/Put/vlen=6}
    keyvalues={row025/data:col5/1364133382268/Put/vlen=7, row025/url:col5/1364133382268/Put/vlen=6}
    keyvalues={row035/data:col5/1364133382268/Put/vlen=7, row035/url:col5/1364133382268/Put/vlen=6}
    keyvalues={row045/data:col5/1364133382268/Put/vlen=7, row045/url:col5/1364133382268/Put/vlen=6}
    keyvalues={row050/data:col0/1364133382268/Put/vlen=7, row050/url:col0/1364133382268/Put/vlen=6}
    开头是row01的
    keyvalues={row010/data:col0/1364133382268/Put/vlen=7, row010/url:col0/1364133382268/Put/vlen=6}
    keyvalues={row011/data:col1/1364133382268/Put/vlen=7, row011/url:col1/1364133382268/Put/vlen=6}
    keyvalues={row012/data:col2/1364133382268/Put/vlen=7, row012/url:col2/1364133382268/Put/vlen=6}
    keyvalues={row013/data:col3/1364133382268/Put/vlen=7, row013/url:col3/1364133382268/Put/vlen=6}
    keyvalues={row014/data:col4/1364133382268/Put/vlen=7, row014/url:col4/1364133382268/Put/vlen=6}
    keyvalues={row015/data:col5/1364133382268/Put/vlen=7, row015/url:col5/1364133382268/Put/vlen=6}
    keyvalues={row016/data:col6/1364133382268/Put/vlen=7, row016/url:col6/1364133382268/Put/vlen=6}
    keyvalues={row017/data:col7/1364133382268/Put/vlen=7, row017/url:col7/1364133382268/Put/vlen=6}
    keyvalues={row018/data:col8/1364133382268/Put/vlen=7, row018/url:col8/1364133382268/Put/vlen=6}
    keyvalues={row019/data:col9/1364133382268/Put/vlen=7, row019/url:col9/1364133382268/Put/vlen=6}

    复制代码

    转载于:https://my.oschina.net/u/3346994/blog/1923985

    展开全文
  • 2019独角兽企业重金招聘Python工程师标准>>> ...

    问题导读:
    1.如何根据rowkey模糊查询?
    2.如何使用Comparator过滤rowkey?
    3.如何查询rowkey中包含有某字符串的数据?



    RowFilter用于过滤row key

    Operator Description
    LESS 小于
    LESS_OR_EQUAL 小于等于
    [EQUAL 等于
    NOT_EQUAL 不等于
    GREATER_OR_EQUAL 大于等于
    GREATER 大于
    NO_OP 排除所有

     

    Comparator Description
    BinaryComparator 使用Bytes.compareTo()比较
    BinaryPrefixComparator 和BinaryComparator差不多,从前面开始比较
    NullComparator Does not compare against an actual value but whether a given one is null, or not  null.
    BitComparator Performs a bitwise comparison, providing a BitwiseOp class with OR, and XOR operators.
    RegexStringComparator 正则表达式
    SubstringComparator 把数据当成字符串,用contains()来判断
    import java.io.IOException;
    
    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.hbase.HBaseConfiguration;
    import org.apache.hadoop.hbase.HColumnDescriptor;
    import org.apache.hadoop.hbase.HTableDescriptor;
    import org.apache.hadoop.hbase.client.HBaseAdmin;
    import org.apache.hadoop.hbase.client.HTable;
    import org.apache.hadoop.hbase.client.Put;
    import org.apache.hadoop.hbase.client.Result;
    import org.apache.hadoop.hbase.client.ResultScanner;
    import org.apache.hadoop.hbase.client.Scan;
    import org.apache.hadoop.hbase.filter.BinaryComparator;
    import org.apache.hadoop.hbase.filter.BinaryPrefixComparator;
    import org.apache.hadoop.hbase.filter.CompareFilter;
    import org.apache.hadoop.hbase.filter.Filter;
    import org.apache.hadoop.hbase.filter.RegexStringComparator;
    import org.apache.hadoop.hbase.filter.RowFilter;
    import org.apache.hadoop.hbase.filter.SubstringComparator;
    
    public class TestHbaseRowFilter {
            String tableName = "test_row_filter";
            Configuration config = HBaseConfiguration.create();
    
            /**
             * 部分代码来自hbase权威指南
             * @throws IOException
             */
            public void testRowFilter() throws IOException {
    
                    HTable table = new HTable(config, tableName);
                    Scan scan = new Scan();
    
                    System.out.println("小于等于row010的行");
                    Filter filter1 = new RowFilter(CompareFilter.CompareOp.LESS_OR_EQUAL,
                                    new BinaryComparator("row010".getBytes()));
                    scan.setFilter(filter1);
                    ResultScanner scanner1 = table.getScanner(scan);
                    for (Result res : scanner1) {
                            System.out.println(res);
                    }
                    scanner1.close();
    
                    System.out.println("正则获取结尾为5的行");
                    Filter filter2 = new RowFilter(CompareFilter.CompareOp.EQUAL,
                                    new RegexStringComparator(".*5));
                    scan.setFilter(filter2);
                    ResultScanner scanner2 = table.getScanner(scan);
                    for (Result res : scanner2) {
                            System.out.println(res);
                    }
                    scanner2.close();
    
                    System.out.println("包含有5的行");
                    Filter filter3 = new RowFilter(CompareFilter.CompareOp.EQUAL,
                                    new SubstringComparator("5"));
                    scan.setFilter(filter3);
                    ResultScanner scanner3 = table.getScanner(scan);
                    for (Result res : scanner3) {
                            System.out.println(res);
                    }
                    scanner3.close();
    
                    System.out.println("开头是row01的");
                    Filter filter4 = new RowFilter(CompareFilter.CompareOp.EQUAL,
                                    new BinaryPrefixComparator("row01".getBytes()));
                    scan.setFilter(filter4);
                    ResultScanner scanner4 = table.getScanner(scan);
                    for (Result res : scanner4) {
                            System.out.println(res);
                    }
                    scanner3.close();
            }
    
            /**
             * 初始化数据
             */
            public void init() {
                    // 创建表和初始化数据
                    try {
                            HBaseAdmin admin = new HBaseAdmin(config);
                            if (!admin.tableExists(tableName)) {
                                    HTableDescriptor htd = new HTableDescriptor(tableName);
                                    HColumnDescriptor hcd1 = new HColumnDescriptor("data");
                                    htd.addFamily(hcd1);
                                    HColumnDescriptor hcd2 = new HColumnDescriptor("url");
                                    htd.addFamily(hcd2);
    
                                    admin.createTable(htd);
                            }
    
                            HTable table = new HTable(config, tableName);
    
                            table.setAutoFlush(false);
                            int count = 50;
                            for (int i = 1; i <= count; ++i) {
                                    Put p = new Put(String.format("row%03d", i).getBytes());
                                    p.add("data".getBytes(), String.format("col%01d", i % 10)
                                                    .getBytes(), String.format("data%03d", i).getBytes());
                                    p.add("url".getBytes(), String.format("col%01d", i % 10)
                                                    .getBytes(), String.format("url%03d", i).getBytes());
                                    table.put(p);
                            }
                            table.close();
    
                    } catch (IOException e) {
                            e.printStackTrace();
                    }
            }
    
            /**
             * @param args
             * @throws IOException
             */
            public static void main(String[] args) throws IOException {
                    TestHbaseRowFilter test = new TestHbaseRowFilter();
                    test.init();
                    test.testRowFilter();
            }
    
    }

    复制代码

    输出结果

    小于等于row010的行
    keyvalues={row001/data:col1/1364133382268/Put/vlen=7, row001/url:col1/1364133382268/Put/vlen=6}
    keyvalues={row002/data:col2/1364133382268/Put/vlen=7, row002/url:col2/1364133382268/Put/vlen=6}
    keyvalues={row003/data:col3/1364133382268/Put/vlen=7, row003/url:col3/1364133382268/Put/vlen=6}
    keyvalues={row004/data:col4/1364133382268/Put/vlen=7, row004/url:col4/1364133382268/Put/vlen=6}
    keyvalues={row005/data:col5/1364133382268/Put/vlen=7, row005/url:col5/1364133382268/Put/vlen=6}
    keyvalues={row006/data:col6/1364133382268/Put/vlen=7, row006/url:col6/1364133382268/Put/vlen=6}
    keyvalues={row007/data:col7/1364133382268/Put/vlen=7, row007/url:col7/1364133382268/Put/vlen=6}
    keyvalues={row008/data:col8/1364133382268/Put/vlen=7, row008/url:col8/1364133382268/Put/vlen=6}
    keyvalues={row009/data:col9/1364133382268/Put/vlen=7, row009/url:col9/1364133382268/Put/vlen=6}
    keyvalues={row010/data:col0/1364133382268/Put/vlen=7, row010/url:col0/1364133382268/Put/vlen=6}
    正则获取结尾为5的行
    keyvalues={row005/data:col5/1364133382268/Put/vlen=7, row005/url:col5/1364133382268/Put/vlen=6}
    keyvalues={row015/data:col5/1364133382268/Put/vlen=7, row015/url:col5/1364133382268/Put/vlen=6}
    keyvalues={row025/data:col5/1364133382268/Put/vlen=7, row025/url:col5/1364133382268/Put/vlen=6}
    keyvalues={row035/data:col5/1364133382268/Put/vlen=7, row035/url:col5/1364133382268/Put/vlen=6}
    keyvalues={row045/data:col5/1364133382268/Put/vlen=7, row045/url:col5/1364133382268/Put/vlen=6}
    包行有5的行
    keyvalues={row005/data:col5/1364133382268/Put/vlen=7, row005/url:col5/1364133382268/Put/vlen=6}
    keyvalues={row015/data:col5/1364133382268/Put/vlen=7, row015/url:col5/1364133382268/Put/vlen=6}
    keyvalues={row025/data:col5/1364133382268/Put/vlen=7, row025/url:col5/1364133382268/Put/vlen=6}
    keyvalues={row035/data:col5/1364133382268/Put/vlen=7, row035/url:col5/1364133382268/Put/vlen=6}
    keyvalues={row045/data:col5/1364133382268/Put/vlen=7, row045/url:col5/1364133382268/Put/vlen=6}
    keyvalues={row050/data:col0/1364133382268/Put/vlen=7, row050/url:col0/1364133382268/Put/vlen=6}
    开头是row01的
    keyvalues={row010/data:col0/1364133382268/Put/vlen=7, row010/url:col0/1364133382268/Put/vlen=6}
    keyvalues={row011/data:col1/1364133382268/Put/vlen=7, row011/url:col1/1364133382268/Put/vlen=6}
    keyvalues={row012/data:col2/1364133382268/Put/vlen=7, row012/url:col2/1364133382268/Put/vlen=6}
    keyvalues={row013/data:col3/1364133382268/Put/vlen=7, row013/url:col3/1364133382268/Put/vlen=6}
    keyvalues={row014/data:col4/1364133382268/Put/vlen=7, row014/url:col4/1364133382268/Put/vlen=6}
    keyvalues={row015/data:col5/1364133382268/Put/vlen=7, row015/url:col5/1364133382268/Put/vlen=6}
    keyvalues={row016/data:col6/1364133382268/Put/vlen=7, row016/url:col6/1364133382268/Put/vlen=6}
    keyvalues={row017/data:col7/1364133382268/Put/vlen=7, row017/url:col7/1364133382268/Put/vlen=6}
    keyvalues={row018/data:col8/1364133382268/Put/vlen=7, row018/url:col8/1364133382268/Put/vlen=6}
    keyvalues={row019/data:col9/1364133382268/Put/vlen=7, row019/url:col9/1364133382268/Put/vlen=6}

    复制代码

    转载于:https://my.oschina.net/u/3346994/blog/1923983

    展开全文
  • Java生成密钥的实例 1个目标文件 摘要:Java源码,算法相关,密钥 Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、...
  • iPhone开发秘籍(第2版)--源代码

    热门讨论 2012-12-11 13:51:22
    此外,还结合实例讲解了如何开发各种iphone特性,包括视图、视图控制器、警告、表格、媒体、控件、人物、位置和事件。  《iphone开发秘籍(第2版)》适合iphone和mac开发人员。 作译者 作者:(美国)萨丹(Erica ...
  • 凭借“全域数据可引入”、“百分之百消除数据二义性”、“分钟级自动化代码生成”、“360度全链路数据洞察”和“极简式查询与分析”的五大数据建设核心能力,帮助企业能够轻松搭建专属自己的统一数据基础层,统一...

    今年“新冠”疫情的特殊考验,让越来越多企业感受到数字经济趋势下数智化的重要性。

    我企已开始了数字化转型,根据业务场景需求及调研,最后选择了阿里云的Dataphin产品。Dataphin产品支持多种业务数据源,能够将我企的所有业务数据导入Dataphin平台。在Dataphin平台构建智能数据时,只需从业务视角看数据和用数据而不需关注需求背后到底来自多少个技术视角的物理表,大大提升了数据研发效率 。
    同时,基于Dataphin构建的智能数据,我企高管制定了数字化转型战略的布局,以实现数据驱动业务,带来的一些可观的业务价值。
    疫情期间,我企线下门店在疫情期间悉数歇业。全员线上营销,一季度整体业绩已经恢复到同期的80% 。

    强力推荐Dataphin产品给正在转型的企业及正在努力寻找业务发力点的企业,构建企业自己的数据中台。
    在使用Dataphin产品时,面向零售店铺的模型构建与管理使用教程给予了我们很大的帮助和启发,对如何使用Dataphin产品有了更进一步的理解。
    在这里插入图片描述

    流程 描述 操作
    准备数据 构建业务数据及Dataphin的计算引擎源。 准备数据
    数仓规划 规划店铺销售模型的数仓,包括创建业务板块、计算源、数据源、项目及项目中的成员。 数仓规划
    数据集成 同步业务数据源至您的工作空间。 数据集成
    规范定义 定义本教程中的维度、业务过程、原子指标、时间周期和派生指标。 规范定义
    规范建模 基于规范定义,构建数据模型。 规范建模
    补数据 通常,您构建的数据模型会参与生产环境的调度。本教程为了让您快速熟悉智能数据构建与管理的流程,采用补数据的方式,构建数据模型运行生成的数据。 补数据
    验证数据 验证数据模型运行后生成的数据是否符合您的预期。 验证数据
    创建质量规则 为数据表创建质量规则。系统会自动校验数据表质量并生成质量报告。 创建质量规则
    查看质量报告 质量报告是对数据表参与生产环境运维调度的结果进行周期性质量校验的结果。 查看质量报告
    展开全文
  • Windows Communication Foundation(WCF),它把Web 服务的概念扩展和改进为一种企业级通信技 术。本书最后一章是第27 章,介绍了Windows Workflow Foundation(WF),它允许在应用程序中执 行工作流功能,因此可以定义...
  • 了解企业网页的开发过程、代码编写标准、网站性能优化、浏览器各种版本的兼容性等。 实战项目 主流电子商务平台前端项目 知识点 HTML标签,HTML5新标签,CSS样式,CSS3样式,媒体查询,等等 适合人群 一个想...

    第一阶段:HTML网页开发

    通过学习HTML的基本知识点,结合案例演示,实施实战项目,制作PC网页和手机响应页面。

    了解企业网页的开发过程、代码编写标准、网站性能优化、浏览器各种版本的兼容性等。

    实战项目

    主流电子商务平台前端项目

    知识点

    HTML标签,HTML5新标签,CSS样式,CSS3样式,媒体查询,等等

    适合人群

    一个想学习前端但又不知道如何开始的学生。

    基础薄弱,缺乏对大学生的系统研究、人员迁移等。

    第二阶段:JavaScript

    对于零基础想学习web前端开发的朋友也给大家准备的一套学习资料,家web前端开发的学习裙:三二八四零零三一四,免费领取。无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!
    简介

    通过学习JavaScript的基本变量、操作符、数据类型、函数和DOM高级操作,实现对前端用户各种操作的数据处理和响应。

    学习ajax数据交互,使用JSON进行数据处理、对象解析和面向对象的开发,实现网页的异步更新

    实战项目

    2018包插件、开发组件等。

    知识点

    jQuery,ajax,面向对象,HTTP传输协议等。

    适合人群

    HTML基本知识和JS基本操作的大学生,在职程序员,前端爱好,等等。

    第三阶段:H5先进项目开发

    简介

    学习基于原生JavaScript的高级3D应用场景

    H5游戏开发与大数据图形处理

    在Web应用程序的交互设计

    微信JS实战开发—

    LBS定位系统的实时异步交互与实时通信引擎

    实战项目

    主要应用开发项目

    知识点

    画布,js高级应用程序,js SDK,H5新技术

    适合人群

    拥有熟练的前端开发技术,缺乏H5开发经验的大学生、在职程序员等。

    展开全文
  • 联科教育“跟着王进老师学Python”系列课程是专门针对想要从事Python Web开发的朋友而准备的,并且按照企业需求的标准定制的学习路线。学习路线中包含Python基础和进阶、Web前端、MySQL数据库、Flask和Django框架...
  • JAVA上百实例源码以及开源项目

    千次下载 热门讨论 2016-01-03 17:37:40
     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...
  • C++程序员面试宝典

    热门讨论 2013-04-01 13:36:19
    本书通过380余个面试题,对企业招聘C/C++程序员需要掌握的知识进行了系统、全面的总结,以帮助读者进行充分的面试准备,在激烈的竞争中成功应聘。本书内容大多取材于各大IT公司的面试题,详细分析了应聘C/C++程序员...
  • 实例291 标准记录编辑界面 383 实例292 获取驱动列表并加载指定的驱动 385 实例293 获取驱动所支持的表名 387 实例294 创建表和删除表 388 实例295 对ADO控件的无数据库操作 389 第9章 SQL技术 391 9.1...
  • OQ100(邮件客户端)全球首款带管理功能的云邮件客户端,独具创新,专为中小企业用户量身打造,是企业邮箱的最佳搭档,它不但具有outlook或foxmail一样的收发邮件功能,还具有合适中小企业应用的管理功能,如CRM、OA、...
  • Oracle_Database_11g完全参考手册.part1/3

    热门讨论 2012-08-18 17:29:13
    4.6.2 代码、缩写和命名标准 4.7 如何减少混淆 4.7.1 规范化 4.7.2 表和列的英文名称 4.7.3 数据中的英文单词 4.8 名称和数据中的大写 4.9 规范化名称 4.10 人性化和优秀的设计 4.10.1 理解应用程序的任务 4.10.2 ...
  • 4.6.2 代码、缩写和命名标准 38 4.7 如何减少混淆 39 4.7.1 规范化 40 4.7.2 表和列的英文名称 44 4.7.3 数据中的英文单词 46 4.8 名称和数据中的大写 46 4.9 规范化名称 47 4.10 人性化和优秀的设计 47 ...
  • asp.net知识库

    2015-06-18 08:45:45
    如何在客户端调用服务端代码 页面一postback,它就显示页面的最顶端,怎样让它定位在某一位置? 如何保证页面刷新后的滚动条位置 清除网页历史记录,屏蔽后退按钮! 如何传值在2个页面之间 :要求不刷新父页面,并且...
  • 8.3.2 非分布式PL/SQL代码块中的COMMIT 249 8.4 完整性约束和事务 250 8.4.1 IMMEDIATE约束 251 8.4.2 DEFERRABLE约束和级联更新 251 8.5 不好的事务习惯 255 8.5.1 在循环中提交 255 8.5.2 使用自动提交 261...
  • CruiseYoung提供的带有详细书签的电子书籍目录 ... Oracle 9i & 10g编程艺术:深入...第9章讨论redo和undo,解释了它们分别是什么,并指出如何避免各种可能出现的错误。第10章介绍了各种类型的表,其中最重要的是堆组织表...
  • 本书包含的一些例子程序显示了每个设计实际上如何操作,大多数的例子实现了标准因特网应用协议。  本书适合于大学高年级学生或研究生的网络编程入门课程,也可作为程序员的参考书。   作译者 作者:Douglas E....
  • 从实例学sap abap编程(完整版)

    热门讨论 2012-04-19 10:24:12
    SAP(System, Applications, and Products in Data Processing)公司是全球最大的管理软件供应商,其主打产品R/3系统是ERP产品的领导者,涵盖了企业管理业务的各个方面,ABAP (Advanced Business Application ...
  • 拥有20年专业软件产品研发经验的Lauren,被公认为企业架构和商业级移动应用开发的权威.Lauren获得了加州大学圣克鲁兹分校授予的计算机学士学位. 目录 封面 -20 封底 -19 扉页 -18 版权 -17 内容提要 -16 作者简介 -...
  • 11.2 标准查询操作符 11.2.1 过滤 11.2.2 用索引来过滤 11.2.3 类型过滤 11.2.4 复合的from子句 11.2.5 排序 11.2.6 分组 11.2.7 对嵌套的对象分组 11.2.8 连接 11.2.9 设置操作 11.2.10 分区 11.2.11 合计操作符 ...
  • 11.2 标准查询操作符 11.2.1 筛选 11.2.2 用索引筛选 11.2.3 类型筛选 11.2.4 复合的from子句 11.2.5 排序 11.2.6 分组 11.2.7 对嵌套的对象分组 11.2.8 内连接 11.2.9 左外连接 11.2.10 组连接 11.2.11 集合操作...
  • 11.2 标准查询操作符 11.2.1 筛选 11.2.2 用索引筛选 11.2.3 类型筛选 11.2.4 复合的from子句 11.2.5 排序 11.2.6 分组 11.2.7 对嵌套的对象分组 11.2.8 内连接 11.2.9 左外连接 11.2.10 组连接 11.2.11 集合操作...
  • 11.2 标准查询操作符 11.2.1 筛选 11.2.2 用索引筛选 11.2.3 类型筛选 11.2.4 复合的from子句 11.2.5 排序 11.2.6 分组 11.2.7 对嵌套的对象分组 11.2.8 内连接 11.2.9 左外连接 11.2.10 组连接 11.2.11 集合操作...
  • 构建中小型互联网企业架构(干货) python 学习持续更新 ElasticSearch 笔记 kafka storm 实战 (干货) scala 学习持续更新 RPC 深度学习 GO 语言 持续更新 更多干货 React 入门实战(干货) ...
  • PostgreSQL必备参考手册--详细书签版

    热门讨论 2013-02-04 13:28:35
    现代关系数据库管理系统(RDBMS)更是企业不可缺少的工具。PostgreSQL是RDBMS中的一朵奇葩。PostgreSQL的魅力主要有两个方面:一是完全开放的源代码适应了IT技术发展的新潮流,同时也满足了开发人员进行创造性开发的...
  • Android 上百实例源码分析以及开源分析 集合打包4

    千次下载 热门讨论 2012-07-10 21:54:03
    5、一款查询软件(身份证号,号码归属等)源代码 (个人觉得这是一款开源软件) 此实例非常好,非常使用,在开发中可以借鉴啊。 本项目有24个目标文件。 BaseActivity 头部bar的布局 BaseLayout 头部bar的布局 ...
  • Visual C++实践与提高-COM和COM+篇『PDF』

    千次下载 热门讨论 2009-05-22 21:06:47
    3.1.3.2 接口查询:QueryInterface 3.1.4 全球唯一标识符GUID 3.1.5 COM接口定义 3.1.6 接口描述语言IDL 3.2 COM应用模型 3.2.1 客户/服务器模型 3.2.2 进程内组件 3.2.3 进程外组件 3.2.4 COM库 3.2.5 HRESULT...

空空如也

空空如也

1 2 3 4
收藏数 62
精华内容 24
关键字:

企业标准代码如何查询