从Talend中的HBase表检索行键

从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

我是塔伦德的新手。 我正在尝试从hbase读取数据,并在expression builder中使用大数据批处理对数据进行一些转换,然后将输出写入文件。

现在我想获取表的行键并对其应用如下转换

(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类的代码