Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用HBase API过滤和解码使用Phoenix API存储的数据_Java_Hadoop_Nosql_Hbase_Phoenix - Fatal编程技术网

Java 使用HBase API过滤和解码使用Phoenix API存储的数据

Java 使用HBase API过滤和解码使用Phoenix API存储的数据,java,hadoop,nosql,hbase,phoenix,Java,Hadoop,Nosql,Hbase,Phoenix,下面是我现在正在编写的代码的简短描述: 我们正在使用ApacheHBase API在Hbase数据库中存储数据。模式由各种数据类型的属性组成,如date、float、varchar、char等 现在出现了一个需求,我们需要访问一个元组ie的不同版本。该行将在多年的不同时间更新,我们希望访问所有这些不同的版本 目前Apache API只支持 1) 定义在使用DDL创建表时表应维护的版本数 2) 创建新连接时,指定所有查询都应在其上工作的表的版本号 但这太有限了,HBase API支持时间范围,并

下面是我现在正在编写的代码的简短描述:

我们正在使用ApacheHBase API在Hbase数据库中存储数据。模式由各种数据类型的属性组成,如date、float、varchar、char等

现在出现了一个需求,我们需要访问一个元组ie的不同版本。该行将在多年的不同时间更新,我们希望访问所有这些不同的版本

目前Apache API只支持

1) 定义在使用DDL创建表时表应维护的版本数

2) 创建新连接时,指定所有查询都应在其上工作的表的版本号

但这太有限了,HBase API支持时间范围,并在我们需要的时间范围内设置最大版本。因此,我决定使用Hbase API访问使用Phoenix API存储的数据


这是我面临的问题

 Filter DateFilter = new RowFilter(CompareOp.EQUAL, new SubstringComparator("\\x80\\x00\\x01aD\\x5C\\xFC\\x00"));
1) 我想根据主键中的任何属性筛选行。我的主键由9个属性组成:

Char(10),Char(10),Char(3),Varchar(40),Varchar(8),Varchar(8),Varchar(40),Varchar(256),Date

Phoenix API连接这些值并从中创建一个行键,如下所示:

$qA$F62&81PPEDOID01 PGKBLOOMBRG\x00VENDOR\x00PRCQUOTE\x00BB\x001\x00\x80\x00\x01aD\x5C\xFC\x00

我正在使用Hbase行过滤器等于比较器子字符串匹配根据主键值过滤行

        Filter IDFilter = new RowFilter(CompareOp.EQUAL, new SubstringComparator("$qA$F62&81"));
        Filter CurrencyCodeFilter = new RowFilter(CompareOp.EQUAL, new SubstringComparator("PGK"));

        ArrayList<Filter> filters = new ArrayList<>();
        filters.add(IDFilter);
        filters.add(CurrencyCodeFilter);
        FilterList filterList = new FilterList(Operator.MUST_PASS_ALL ,filters);
        scan.setMaxVersions(1);
        scan.setFilter(filterList);
当我sysout日期过滤器

行筛选器(相等,\x5Cx80\x5Cx00\x5Cx01ad\x5Cx5c\x5Cxfc\x5Cx00)

“\”>“\x5C”的转换是问题的原因,因此我没有得到任何结果


如何根据任何日期执行行筛选?我是否必须将日期转换为Phoenix API存储它的格式,然后运行行过滤器?还是有别的办法


这是我到目前为止测试基于不同属性过滤和解码提取数据的代码:

import java.io.IOException;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Locale;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.KeyValue;
import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.HTable;
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.Filter;
import org.apache.hadoop.hbase.filter.FirstKeyOnlyFilter;
import org.apache.hadoop.hbase.filter.PrefixFilter;
import org.apache.hadoop.hbase.filter.QualifierFilter;
import org.apache.hadoop.hbase.filter.RegexStringComparator;
import org.apache.hadoop.hbase.filter.RowFilter;
import org.apache.hadoop.hbase.filter.SingleColumnValueFilter;
import org.apache.hadoop.hbase.filter.SubstringComparator;
import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.CompareType;
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.CompareFilter.CompareOp;
import org.apache.hadoop.hbase.filter.Filter.ReturnCode;
import org.apache.hadoop.hbase.filter.FilterList;
import org.apache.hadoop.hbase.filter.FilterList.Operator;
import org.apache.phoenix.schema.PStringColumn;
import org.apache.phoenix.schema.SortOrder;
import org.apache.phoenix.schema.types.PDataType;
import org.apache.phoenix.schema.types.PDate;
import org.apache.phoenix.schema.types.PFloat;
import org.apache.phoenix.schema.types.PInteger;
import org.apache.phoenix.shaded.org.apache.directory.shared.kerberos.codec.types.PaDataType;
import org.apache.phoenix.shaded.org.joni.Regex;
import org.apache.hadoop.hbase.util.Bytes;

public class HbaseVersionedPriceFetcher {

    public static void main(String[] args) {

        try {
            Configuration conf = HBaseConfiguration.create(new Configuration());  
            conf.set("hbase.zookeeper.quorum", "hostName");//Private Detail
            conf.set("hbase.zookeeper.property.clientPort", "2181");

            HTable table = new HTable(conf, "HSTP2");

//          Filter filter = new SingleColumnValueFilter("0".getBytes(),"LAST_CHG_USR_ID".getBytes(), CompareOp.EQUAL, "AUTO:GEN:SCRIPT".getBytes());            
//          Filter filter = new SingleColumnValueFilter("ISPH".getBytes(),"MKT_OID".getBytes(), CompareOp.EQUAL, "MARKET".getBytes());
//          Filter filter = new SingleColumnValueFilter("ISPH".getBytes(),"VALIDATED_PRC_TYPE".getBytes(), CompareOp.EQUAL, "MID".getBytes());


            Scan scan = new Scan();

            //Filter List
            Filter IDFilter = new RowFilter(CompareOp.EQUAL, new SubstringComparator("qA$F62&81"));         
            Filter CurrencyCodeFilter = new RowFilter(CompareOp.EQUAL, new SubstringComparator("PGK"));


            ArrayList<Filter> filters = new ArrayList<>();
            filters.add(IDFilter);
            filters.add(CurrencyCodeFilter);
            FilterList filterList = new FilterList(Operator.MUST_PASS_ALL ,filters);
            scan.setMaxVersions(1);
            scan.setFilter(filterList);

            //REGEX
            //Filter filter = new RowFilter(CompareOp.EQUAL, new RegexStringComparator(".*PGK.*VENDOR.*"))


            //scan.addColumn("ISPH".getBytes(), "ADJST_TMS".getBytes());

//          long start = new Long("1529578558767");
//              long end  = new Long("1529580854059");
//           
//           try {
//              scan.setTimeRange(start,end);
//          } catch (IOException e) {
//              // TODO Auto-generated catch block
//              e.printStackTrace();
//          }

            ResultScanner scanner = table.getScanner(scan);

            int count = 0;


                for (Result rr : scanner) {

                    count += 1;

                    System.out.println("Instrument "+ count);

                    System.out.println(rr);


                        for (KeyValue value: rr.raw()) {



                            String qualifier = new String(value.getQualifier());
                            System.out.print( qualifier+" : ");

                            byte[] valByteArray = value.getValue();

                            if(qualifier.equals("ASK_CPRC") || qualifier.equals("BID_CPRC") || qualifier.equals("MID_CPRC") || qualifier.equals("VALIDATED_CPRC")) {

                                float decoded = PFloat.INSTANCE.getCodec().decodeFloat(valByteArray, 0, SortOrder.getDefault());
                                System.out.println(decoded);

                            } else if (qualifier.equals("LAST_CHG_TMS") || qualifier.equals("ADJST_TMS") ) {

                                System.out.println(PDate.INSTANCE.toObject(valByteArray, SortOrder.getDefault()));

                            } else if (qualifier.equals("HST_PRC_DTE_OF_NUM")) {

                                int decoded = PInteger.INSTANCE.getCodec().decodeInt(valByteArray, 0, SortOrder.getDefault());
                                System.out.println(decoded);
                            } else {
                                System.out.println(new String(valByteArray));
                            }
                        }

                    }

                scanner.close();

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

    static byte[] getBytes(String string) {

        return string.getBytes();
    }
}
import java.io.IOException;
导入java.text.DateFormat;
导入java.text.ParseException;
导入java.text.simpleDataFormat;
导入java.util.ArrayList;
导入java.util.Date;
导入java.util.Locale;
导入org.apache.hadoop.conf.Configuration;
导入org.apache.hadoop.hbase.Cell;
导入org.apache.hadoop.hbase.HBaseConfiguration;
导入org.apache.hadoop.hbase.KeyValue;
导入org.apache.hadoop.hbase.client.Get;
导入org.apache.hadoop.hbase.client.HTable;
导入org.apache.hadoop.hbase.client.Result;
导入org.apache.hadoop.hbase.client.ResultScanner;
导入org.apache.hadoop.hbase.client.Scan;
导入org.apache.hadoop.hbase.filter.filter;
导入org.apache.hadoop.hbase.filter.FirstKeyOnlyFilter;
导入org.apache.hadoop.hbase.filter.PrefixFilter;
导入org.apache.hadoop.hbase.filter.QualifierFilter;
导入org.apache.hadoop.hbase.filter.RegexStringComparator;
导入org.apache.hadoop.hbase.filter.RowFilter;
导入org.apache.hadoop.hbase.filter.SingleColumnValueFilter;
导入org.apache.hadoop.hbase.filter.SubstringComparator;
导入org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.CompareType;
导入org.apache.hadoop.hbase.filter.BinaryComparator;
导入org.apache.hadoop.hbase.filter.BinaryPrefixComparator;
导入org.apache.hadoop.hbase.filter.CompareFilter;
导入org.apache.hadoop.hbase.filter.CompareFilter.CompareOp;
导入org.apache.hadoop.hbase.filter.filter.ReturnCode;
导入org.apache.hadoop.hbase.filter.FilterList;
导入org.apache.hadoop.hbase.filter.FilterList.Operator;
导入org.apache.phoenix.schema.PStringColumn;
导入org.apache.phoenix.schema.SortOrder;
导入org.apache.phoenix.schema.types.PDataType;
导入org.apache.phoenix.schema.types.PDate;
导入org.apache.phoenix.schema.types.PFloat;
导入org.apache.phoenix.schema.types.PInteger;
导入org.apache.phoenix.shade.org.apache.directory.shared.kerberos.codec.types.PaDataType;
导入org.apache.phoenix.shade.org.joni.Regex;
导入org.apache.hadoop.hbase.util.Bytes;
公共类HBaservisionedPriceFetcher{
公共静态void main(字符串[]args){
试一试{
Configuration conf=HBaseConfiguration.create(new Configuration());
conf.set(“hbase.zookeeper.quorum”,“hostName”);//私有详细信息
conf.set(“hbase.zookeeper.property.clientPort”,“2181”);
HTable table=新的HTable(conf,“HSTP2”);
//Filter Filter=new SingleColumnValueFilter(“0”.getBytes(),“LAST_CHG_USR_ID”.getBytes(),CompareOp.EQUAL,”AUTO:GEN:SCRIPT.getBytes());
//Filter Filter=new SingleColumnValueFilter(“ISPH”.getBytes(),“MKT_OID”.getBytes(),CompareOp.EQUAL,“MARKET”.getBytes());
//Filter Filter=new SingleColumnValueFilter(“ISPH”.getBytes(),“VALIDATED_PRC_TYPE”.getBytes(),CompareOp.EQUAL,“MID”.getBytes());
扫描=新扫描();
//筛选列表
过滤器IDFilter=新的行过滤器(CompareOp.EQUAL,新的子字符串比较器(“qA$F62&81”);
Filter CurrencyCodeFilter=新的行过滤器(CompareOp.EQUAL,新的子字符串比较器(“PGK”);
ArrayList过滤器=新的ArrayList();
filters.add(IDFilter);
filters.add(CurrencyCodeFilter);
FilterList FilterList=新的FilterList(Operator.MUST\u PASS\u ALL,filters);
scan.setMaxVersions(1);
scan.setFilter(过滤器列表);
//正则表达式
//过滤器过滤器=新的行过滤器(CompareOp.EQUAL,新的RegexStringComparator(“.*PGK.*VENDOR.*”))
//scan.addColumn(“ISPH.getBytes(),“ADJST_TMS.getBytes());
//长启动=新长启动(“1529578558767”);
//长端=东北