org.apache.hadoop.hive.ql.udf.UDFBin Maven / Gradle / Ivy
/*
* 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.hadoop.hive.ql.udf;
import org.apache.hadoop.hive.ql.exec.Description;
import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.hive.ql.exec.vector.VectorizedExpressions;
import org.apache.hadoop.hive.ql.exec.vector.expressions.FuncBin;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
/**
* UDFBin.
*
*/
@Description(name = "bin",
value = "_FUNC_(n) - returns n in binary",
extended = "n is a BIGINT. Returns NULL if n is NULL.\n"
+ "Example:\n" + " > SELECT _FUNC_(13) FROM src LIMIT 1\n" + " '1101'")
@VectorizedExpressions({FuncBin.class})
public class UDFBin extends UDF {
private final Text result = new Text();
private final byte[] value = new byte[64];
public Text evaluate(LongWritable n) {
if (n == null) {
return null;
}
long num = n.get();
// Extract the bits of num into value[] from right to left
int len = 0;
do {
len++;
value[value.length - len] = (byte) ('0' + (num & 1));
num >>>= 1;
} while (num != 0);
result.set(value, value.length - len, len);
return result;
}
}