您可以強制您的HbaseInput組件獲取Hbase表的rowkey。 執行以下操作,轉到tHbaseInput類存在的位置。
C:\ Program Files文件 (x86)的\拓藍工作室\工作室\插件\ org.talend.designer.components.mrprovider_6.2.1.20160704_1411 \組件\ tHBaseInput
而在tHBaseInput_mrcode_main_only的java類噴, 將會有一個方法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()%>"))
完成後,刪除文件C 「ComponentsCache.javacache」:\程序文件(x86)\拓藍工作室\工作室\ configurat離子。 然後重新啓動talend open studio。 現在您的tHbaseInput組件將從Hbase表中獲取行鍵。 對於每種情況,這可能不是明智之舉,但如果您使用talend open studio生成作業並在其他地方部署jar,這可能會有所幫助。
感謝我的項目經理。
我使用hbase工作過一個項目,我們所做的是插入另一列並將rowkey放入。因此,您可以像普通列一樣使用它 –
@ThéoCapdet我想從表中選取rowkey。如何我們應該怎樣去做。 –
當你第一次加載你的hbase表時,你需要創建一個你在裏面複製rowkey的列。 –