package com.skp.experiment.common.join; import java.io.DataInput; import java.io.DataOutput; import java.io.IOException; import org.apache.hadoop.io.WritableComparable; import org.apache.hadoop.io.WritableComparator; /* * CompositeJoinKey * * This class hold keys from SRC or TGT table with suffix * JOIN A, B, C => A`s suffix is 2, B is 1, C is 0 */ public class CompositeJoinKey implements WritableComparable<CompositeJoinKey> { private String joinKey = ""; private int suffix = 0; public void set(String strJoinKey, int nth) { this.joinKey = strJoinKey; this.suffix = nth; } public String getJoinKey() { return this.joinKey; } public int getSuffix() { return this.suffix; } @Override public void readFields(DataInput in) throws IOException { joinKey = in.readUTF(); suffix = in.readInt(); } @Override public void write(DataOutput out) throws IOException { out.writeUTF(joinKey); out.writeInt(suffix); } @Override public int compareTo(CompositeJoinKey o) { if (this.joinKey.compareTo(o.joinKey) != 0) { return this.joinKey.compareTo(o.joinKey); } else if (this.suffix != o.suffix) { return suffix < o.suffix ? -1 : 1; } else { return 0; } } public static class CompositeJoinKeyComparator extends WritableComparator { protected CompositeJoinKeyComparator() { super(CompositeJoinKey.class); } public int compare(byte[] b1, int s1, int l1, byte[] b2, int s2, int l2) { return compareBytes(b1, s1, l1, b2, s2, l2); } } static { //register WritableComparator.define(CompositeJoinKey.class, new CompositeJoinKeyComparator()); } }