/* Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.pig.backend.hadoop.hbase; import java.io.IOException; import java.math.BigDecimal; import java.math.BigInteger; import java.util.Map; import org.apache.hadoop.hbase.util.Bytes; import org.apache.pig.LoadStoreCaster; import org.apache.pig.ResourceSchema.ResourceFieldSchema; import org.apache.pig.backend.executionengine.ExecException; import org.apache.pig.data.DataBag; import org.apache.pig.data.DataByteArray; import org.apache.pig.data.Tuple; import org.joda.time.DateTime; public class HBaseBinaryConverter implements LoadStoreCaster { @Override public String bytesToCharArray(byte[] b) throws IOException { return Bytes.toString(b); } @Override public Double bytesToDouble(byte[] b) throws IOException { if (Bytes.SIZEOF_DOUBLE > b.length){ return Bytes.toDouble(Bytes.padHead(b, Bytes.SIZEOF_DOUBLE - b.length)); } else { return Bytes.toDouble(Bytes.head(b, Bytes.SIZEOF_DOUBLE)); } } @Override public Float bytesToFloat(byte[] b) throws IOException { if (Bytes.SIZEOF_FLOAT > b.length){ return Bytes.toFloat(Bytes.padHead(b, Bytes.SIZEOF_FLOAT - b.length)); } else { return Bytes.toFloat(Bytes.head(b, Bytes.SIZEOF_FLOAT)); } } @Override public Integer bytesToInteger(byte[] b) throws IOException { if (Bytes.SIZEOF_INT > b.length){ return Bytes.toInt(Bytes.padHead(b, Bytes.SIZEOF_INT - b.length)); } else { return Bytes.toInt(Bytes.head(b, Bytes.SIZEOF_INT)); } } @Override public Long bytesToLong(byte[] b) throws IOException { if (Bytes.SIZEOF_LONG > b.length){ return Bytes.toLong(Bytes.padHead(b, Bytes.SIZEOF_LONG - b.length)); } else { return Bytes.toLong(Bytes.head(b, Bytes.SIZEOF_LONG)); } } @Override public Boolean bytesToBoolean(byte[] b) throws IOException { if (Bytes.SIZEOF_BOOLEAN > b.length) { return Bytes.toBoolean(Bytes.padHead(b, Bytes.SIZEOF_BOOLEAN - b.length)); } else { return Bytes.toBoolean(Bytes.head(b, Bytes.SIZEOF_BOOLEAN)); } } /** * NOT IMPLEMENTED */ @Override public DateTime bytesToDateTime(byte[] b) throws IOException { throw new ExecException("Can't generate a DateTime from byte[]"); } @Override public Map<String, Object> bytesToMap(byte[] b) throws IOException { return bytesToMap(b, null); } /** * NOT IMPLEMENTED */ @Override public Map<String, Object> bytesToMap(byte[] b, ResourceFieldSchema fieldSchema) throws IOException { throw new ExecException("Can't generate a Map from byte[]"); } /** * NOT IMPLEMENTED */ @Override public Tuple bytesToTuple(byte[] b, ResourceFieldSchema fieldSchema) throws IOException { throw new ExecException("Can't generate a Tuple from byte[]"); } /** * NOT IMPLEMENTED */ @Override public DataBag bytesToBag(byte[] b, ResourceFieldSchema fieldSchema) throws IOException { throw new ExecException("Can't generate DataBags from byte[]"); } /** * NOT IMPLEMENTED */ @Override public byte[] toBytes(DataBag bag) throws IOException { throw new ExecException("Cant' generate bytes from DataBag"); } @Override public byte[] toBytes(String s) throws IOException { return Bytes.toBytes(s); } @Override public byte[] toBytes(Double d) throws IOException { return Bytes.toBytes(d); } @Override public byte[] toBytes(Float f) throws IOException { return Bytes.toBytes(f); } @Override public byte[] toBytes(Integer i) throws IOException { return Bytes.toBytes(i); } @Override public byte[] toBytes(Long l) throws IOException { return Bytes.toBytes(l); } @Override public byte[] toBytes(Boolean b) throws IOException { return Bytes.toBytes(b); } /** * NOT IMPLEMENTED */ @Override public byte[] toBytes(DateTime dt) throws IOException { throw new IOException("Can't generate bytes from DateTime"); } /** * NOT IMPLEMENTED */ @Override public byte[] toBytes(Map<String, Object> m) throws IOException { throw new IOException("Can't generate bytes from Map"); } /** * NOT IMPLEMENTED */ @Override public byte[] toBytes(Tuple t) throws IOException { throw new IOException("Can't generate bytes from Tuple"); } @Override public byte[] toBytes(DataByteArray a) throws IOException { return a.get(); } /** * Not implemented! */ @Override public BigInteger bytesToBigInteger(byte[] b) throws IOException { throw new ExecException("Can't generate a BigInteger from byte[]"); } /** * Not implemented! */ @Override public BigDecimal bytesToBigDecimal(byte[] b) throws IOException { throw new ExecException("Can't generate a BigInteger from byte[]"); } /** * Not implemented! */ @Override public byte[] toBytes(BigInteger bi) throws IOException { throw new IOException("Can't generate bytes from BigInteger"); } /** * Not implemented! */ @Override public byte[] toBytes(BigDecimal bd) throws IOException { throw new IOException("Can't generate bytes from BigDecimal"); } }