我有一个包含10列的HIVE表,其中前9列将具有重复行,而第10列不会像CREATE_DATE那样具有创建日期.
例:
如果我今天在表中插入10行,它将把CREATE_DATE作为今天的日期..如果我明天再次插入相同的10行,它将有一个不同的CREATE_DATE,这会产生我使用DISTINCT的问题.
有没有办法根据9列删除重复记录而忽略第10列.
示例:让我们考虑表中有5列.这是由DAYID和MARKETID划分的外部HIVE表.每当除CREATEDATE之外的列(由第1行和第2行引用)相同或者如果行是重复的(如第3行和第4行所引用),它应该保留这些行中的任何一行.它保留哪个并不重要.
COL1 COL2 CREATEDATE DAYID MARKETID
A 1 20131206 20131207 1234
A 1 20131207 20131207 1234
A 1 20131206 20131207 1234
B 1 20131206 20131207 1234
B 1 20131206 20131207 1234
C 2 20131206 20131207 1234
C 2 20131207 20131207 5678
Run Code Online (Sandbox Code Playgroud)
输出---
COL1 COL2 CREATEDATE DAYID MARKETID
A 1 20131206 20131207 1234
B 1 20131206 20131207 1234
C 2 20131206 20131207 1234
C 2 20131207 20131207 5678
Run Code Online (Sandbox Code Playgroud)
谢谢Nates
我有一个GenericUDF(见下面的代码)在Hadoop-1和Hive-0.12上正常运行.但是当使用Hive-0.13 + Hadoop-2测试相同的GenericUDF时,我收到以下错误.
顶点失败,vertexName = Map 12,vertexId = vertex_1409698731658_42202_1_00,diagnostics = [顶点输入:ccv初始化程序失败.,org.apache.hive.com.esotericsoftware.kry o.KryoException:无法找到类:com.xxx.xxx.Id1
这是我的UDF的代码.
package com.xxx.xxx;
import org.apache.hadoop.hive.*;
public class Id1 extends GenericUDF {
private MapredContext context;
private long sequenceNum = 0;
private static final int padLength = 10;
StringBuilder sb = null;
public ObjectInspector initialize(ObjectInspector[] arguments)
throws UDFArgumentException {
sequenceNum = 0;
sb = new StringBuilder();
return PrimitiveObjectInspectorFactory.javaStringObjectInspector;
}
public Object evaluate(DeferredObject[] arguments) throws HiveException {
int sbLength = sb.toString().length();
if (sbLength > 0)
sb.replace(0, sbLength, "");
String taskId = …
Run Code Online (Sandbox Code Playgroud) 当我尝试从列表中对json对象进行parjse时,我收到错误com.google.gson.JsonPrimitive无法强制转换为com.google.gson.JsonObject
输入:
{
"r$contentRatings": [
{
"r$scheme": "urn:rt",
"r$rating": "criticSummaryScore=-1,criticSummaryCount=0,criticSummaryCertified=false,criticSummaryRotten=false,fanSummaryScore=75,fanSummaryCount=4"
}
]
}
Run Code Online (Sandbox Code Playgroud)
码:
JsonElement elem = null;
elem = jsonObject.get("r$contentRatings");
if(elem != null) {
JsonArray contentRatingsList = elem.getAsJsonArray();
if(contentRatingsList != null) {
for(int i=0; i< contentRatingsList.size(); i++) {
JsonObject scheme =contentRatingsList.get(i).getAsJsonObject().getAsJsonObject("r$scheme");
JsonObject rating =contentRatingsList.get(i).getAsJsonObject().getAsJsonObject("r$rating");
JsonArray subRatings = contentRatingsList.get(i).getAsJsonObject().getAsJsonObject("r$subRatings").getAsJsonArray();
Run Code Online (Sandbox Code Playgroud)
错误:
在for循环中,当我尝试jsonobject
从列表中访问时,r$scheme
我收到一个错误
com.google.gson.JsonPrimitive无法强制转换为com.google.gson.JsonObject
你能告诉我如何摆脱这个错误..
我有一个 HIVE 分区表,在向其中插入记录之前,我需要查找记录是否已存在。
例子。
Insert into table employee partition (day, location) select distinct name, number,
date,aud_date, day, location from tableB.
Run Code Online (Sandbox Code Playgroud)
如果我尝试从 tableB 插入的记录已存在于员工表中,则应绕过它或将其写入另一个表中。我需要检查员工表中是否已存在的列是姓名、号码、日期、日期、位置。我不想检查 aud_date 因为它会有所不同。
我在 teradata 表中有一个 TIMESTAMP 列。我想将时间戳转换为纪元值。有人可以解释一下如何做到这一点。