@Override public Map<String, Object> readRow(String tableName, Object keyObject) throws Exception { if (!(keyObject instanceof Map) && !(keyObject instanceof String) && !(keyObject instanceof byte[])) { throw new IllegalArgumentException( "Unsupported key type - " + keyObject.getClass().getName()); } Map<String, Object> result; HCatTable table = hcatClient.getTable("default", tableName); String hbaseTableName = HiveUtils.getTableName(table); HTableInterface tableInterface = tableFactory.getTable(hbaseConfiguration, hbaseTableName); try { List<HCatFieldSchema> columns = table.getCols(); HCatFieldSchema keyColumn = columns.get(0); // we use the serializer to build the row key HiveSerializer serializer = new HiveSerializer(table); final byte[] rowKey; if (keyObject instanceof Map) { rowKey = serializer.serializeHiveType(keyColumn, null, keyObject, 0); } else if (keyObject instanceof String) { rowKey = Bytes.toBytes((String) keyObject); } else { rowKey = (byte[]) keyObject; } Get get = new Get(rowKey); get.setCacheBlocks(true); get.setMaxVersions(1); Result dbResult = tableInterface.get(get); HiveDeserializer deserializer = new HiveDeserializer(table, dbResult); result = deserializer.deserialize(); result.put("__rowkey", rowKey); } finally { tableInterface.close(); } return result; }