从Talend中的HBase表检索行键
我是塔伦德的新手。 我正在尝试从hbase读取数据,并在expression builder中使用大数据批处理对数据进行一些转换,然后将输出写入文件。 现在我想获取表的行键并对其应用如下转换从Talend中的HBase表检索行键,hbase,talend,routines,row-key,Hbase,Talend,Routines,Row Key,我是塔伦德的新手。 我正在尝试从hbase读取数据,并在expression builder中使用大数据批处理对数据进行一些转换,然后将输出写入文件。 现在我想获取表的行键并对其应用如下转换 (concat('-',cast(cus.key as string))) as id 这里的key是我从中提取数据的hbase表的rowkey 和im附加映射选项卡的快照 因此,当我基本上运行我的作业时,应该拾取hbase表的键,以便上述转换cast(cus.key as string)应用于row
(concat('-',cast(cus.key as string))) as id
这里的key是我从中提取数据的hbase表的rowkey
和im附加映射选项卡的快照
因此,当我基本上运行我的作业时,应该拾取hbase表的键,以便上述转换cast(cus.key as string)
应用于rowkey并存储为列id
我想知道我们是否有任何简单的方法从hbase表中获取rowkey
提前感谢。在Hbase中加载数据时,首先需要创建一个自定义行键(在Hbase输出选项中) 您可以使用一些ID字段使其唯一,如
“key”+user\u ID
遵循以下步骤:
同时,将相同的值(“key”+user\u id
)存储在您命名为row\u key\u technical
的列中(例如)
现在,您可以像使用表中的普通列一样使用rowkey。因此,使用thbaseinput,您可以检索技术专栏中的rowkey存储,并执行任何您想要的操作
你需要在两次内完成
我不确定这是唯一的解决方案,但这是唯一的。可能有人有更好的解决方案;) 您可以强制HbaseInput组件获取Hbase表的行键。 执行以下操作,转到tHbaseInput类存在的位置 C:\程序文件 (x86)\Talend Studio\Studio\plugins\org.Talend.designer.components.mrprovider\u 6.2.1.20160704\u 1411\components\tHBaseInput 在tHBaseInput\u mrcode\u main\u only java jet类中, 将有一个validateResult()方法,如下所示
public boolean validateResult(org.apache.hadoop.hbase.client.Result result,
<%=recordStruct%> value) throws IOException {
org.apache.hadoop.hbase.io.ImmutableBytesWritable rowKey = new org.apache.hadoop.hbase.io.ImmutableBytesWritable();
rowKey.set(result.getRow());
lastSuccessfulRow = rowKey.get();
byte[] rowResult = null;
String temp = null;
<%
for (int i = 0; i < mapping.size(); i++) {
Map<String, String> map = mapping.get(i);
String family_column= map.get("FAMILY_COLUMN");
IMetadataColumn column = mainColumns.get(i);
String columnName = column.getLabel();
String defaultValue = column.getDefault();
String typeToGenerate = JavaTypesManager.getTypeToGenerate(column.getTalendType(), column.isNullable());
JavaType javaType = JavaTypesManager.getJavaTypeFromId(column.getTalendType());
String patternValue = column.getPattern() == null || column.getPattern().trim().length() == 0 ? null : column.getPattern();
boolean isPrimitiveType = JavaTypesManager.isJavaPrimitiveType(javaType, column.isNullable());
String toAssign = "value." + columnName;
%>
rowResult = result.getValue(
org.apache.hadoop.hbase.util.Bytes.toBytes(<%=family_column%>),
org.apache.hadoop.hbase.util.Bytes.toBytes("<%=column.getOriginalDbColumnName()%>"));
temp = org.apache.hadoop.hbase.util.Bytes.toString(rowResult);
Modify the above method to below
public boolean validateResult(org.apache.hadoop.hbase.client.Result result,
<%=recordStruct%> value) throws IOException {
org.apache.hadoop.hbase.io.ImmutableBytesWritable rowKey = new org.apache.hadoop.hbase.io.ImmutableBytesWritable();
rowKey.set(result.getRow());
lastSuccessfulRow = rowKey.get();
byte[] rowResult = null;
String temp = null;
value.key = org.apache.hadoop.hbase.util.Bytes.toString(lastSuccessfulRow);
<%
for (int i = 0; i < mapping.size(); i++) {
Map<String, String> map = mapping.get(i);
String family_column= map.get("FAMILY_COLUMN");
IMetadataColumn column = mainColumns.get(i);
String columnName = column.getLabel();
String defaultValue = column.getDefault();
String typeToGenerate = JavaTypesManager.getTypeToGenerate(column.getTalendType(), column.isNullable());
JavaType javaType = JavaTypesManager.getJavaTypeFromId(column.getTalendType());
String patternValue = column.getPattern() == null || column.getPattern().trim().length() == 0 ? null : column.getPattern();
boolean isPrimitiveType = JavaTypesManager.isJavaPrimitiveType(javaType, column.isNullable());
String toAssign = "value." + columnName;
%>
if(!"key".equalsIgnoreCase("<%=column.getOriginalDbColumnName()%>"))
public boolean validateResult(org.apache.hadoop.hbase.client.Result,
值)抛出IOException{
org.apache.hadoop.hbase.io.ImmutableBytesWritable rowKey=new org.apache.hadoop.hbase.io.ImmutableBytesWritable();
rowKey.set(result.getRow());
lastSuccessfulRow=rowKey.get();
字节[]rowResult=null;
字符串temp=null;
rowResult=result.getValue(
org.apache.hadoop.hbase.util.Bytes.toBytes(),
org.apache.hadoop.hbase.util.Bytes.toBytes(“”);
temp=org.apache.hadoop.hbase.util.Bytes.toString(rowResult);
将上述方法修改为下面的方法
public boolean validateResult(org.apache.hadoop.hbase.client.Result,
值)抛出IOException{
org.apache.hadoop.hbase.io.ImmutableBytesWritable rowKey=new org.apache.hadoop.hbase.io.ImmutableBytesWritable();
rowKey.set(result.getRow());
lastSuccessfulRow=rowKey.get();
字节[]rowResult=null;
字符串temp=null;
value.key=org.apache.hadoop.hbase.util.Bytes.toString(lastSuccessfulRow);
if(!“key”.equalsIgnoreCase(“”)
完成后,删除C:\Program Files(x86)\Talend Studio\Studio\configuration中的文件“ComponentsCache.javacache”。
然后重新启动talend open studio。
现在,您的tHbaseInput组件将从Hbase表中获取行键。
这可能不适合所有情况,但如果您使用talend open studio生成作业并将JAR部署到其他地方,这可能会有所帮助
感谢我的项目经理。我在hbase的一个项目中工作,我们所做的是插入另一列并放入行键。这样,您就可以像正常情况一样使用它了column@Théocapdate我想从表中提取行键。我们应该如何在talend中执行此操作。当您第一次加载hbase表时,您需要创建一个列,其中u在内部复制您的rowkey。@téo说明如何将row key映射到新列中。您可以相应地指导我或指向任何链接吗?您想让我从旧表中创建一个新的hbase表!!这对我来说是不可能的。我只想从hbase表中检索row key。我找到了从hbase表中检索row key的解决方法通过更改C:\Program Files(x86)\Talend Studio\Studio\plugins\org.Talend.designer.components.mrprovider\u 6.2.1.20160704\u 1411\components\tHBaseInput中hbaseInput类的代码