use of org.apache.gora.kudu.mapping.Column in project gora by apache.
the class KuduStore method deleteByQuery.
@Override
public long deleteByQuery(Query<K, T> query) throws GoraException {
try {
long count = 0;
Column pkc = kuduMapping.getPrimaryKey().get(0);
ColumnSchema column = table.getSchema().getColumn(pkc.getName());
List<String> dbFields = new ArrayList<>();
dbFields.add(pkc.getName());
List<KuduPredicate> rangePredicates = KuduClientUtils.createRangePredicate(column, query.getStartKey(), query.getEndKey());
rangePredicates.add(KuduPredicate.newIsNotNullPredicate(column));
KuduScanner build = createScanner(rangePredicates, dbFields, query.getLimit());
while (build.hasMoreRows()) {
RowResultIterator nextRows = build.nextRows();
for (RowResult it : nextRows) {
count++;
K key = (K) KuduClientUtils.getObjectRow(it, pkc);
if (query.getFields() != null && query.getFields().length < kuduMapping.getFields().size()) {
Update updateOp = table.newUpdate();
PartialRow row = updateOp.getRow();
String[] avFields = getFieldsToQuery(query.getFields());
KuduClientUtils.addObjectRow(row, pkc, key);
for (String af : avFields) {
row.setNull(kuduMapping.getFields().get(af).getName());
}
session.apply(updateOp);
} else {
delete(key);
}
}
}
build.close();
return count;
} catch (Exception e) {
throw new GoraException(e);
}
}
use of org.apache.gora.kudu.mapping.Column in project gora by apache.
the class KuduStore method newInstance.
public T newInstance(RowResult next, String[] fields) throws IOException {
fields = getFieldsToQuery(fields);
T persistent = newPersistent();
for (String objField : fields) {
Schema.Field field = fieldMap.get(objField);
Schema fieldSchema = field.schema();
Column column = kuduMapping.getFields().get(objField);
if (next.isNull(column.getName())) {
continue;
}
Object fieldValue = KuduClientUtils.getObjectRow(next, column);
Object obtainedValue = deserializeFieldValue(field, fieldSchema, fieldValue, persistent);
persistent.put(field.pos(), obtainedValue);
persistent.setDirty(field.pos());
}
return persistent;
}
use of org.apache.gora.kudu.mapping.Column in project gora by apache.
the class KuduStore method delete.
@Override
public boolean delete(K key) throws GoraException {
try {
Column pkc = kuduMapping.getPrimaryKey().get(0);
Delete delete = table.newDelete();
PartialRow row = delete.getRow();
KuduClientUtils.addObjectRow(row, pkc, key);
OperationResponse apply = session.apply(delete);
return !apply.hasRowError();
} catch (KuduException ex) {
throw new GoraException(ex);
}
}
use of org.apache.gora.kudu.mapping.Column in project gora by apache.
the class KuduStore method put.
@Override
public void put(K key, T obj) throws GoraException {
try {
if (obj.isDirty()) {
Column pkc = kuduMapping.getPrimaryKey().get(0);
Upsert upsert = table.newUpsert();
PartialRow row = upsert.getRow();
KuduClientUtils.addObjectRow(row, pkc, key);
Schema schemaObj = obj.getSchema();
List<Schema.Field> fields = schemaObj.getFields();
for (Schema.Field field : fields) {
Column mappedColumn = kuduMapping.getFields().get(field.name());
if (mappedColumn != null) {
Object fieldValue = obj.get(field.pos());
if (fieldValue != null) {
Schema fieldSchema = field.schema();
Object serializedObj = serializeFieldValue(fieldSchema, fieldValue);
KuduClientUtils.addObjectRow(row, mappedColumn, serializedObj);
} else {
row.setNull(mappedColumn.getName());
}
} else {
throw new GoraException("Unmapped field : " + field.name());
}
}
session.apply(upsert);
} else {
LOG.info("Ignored putting object {} in the store as it is neither " + "new, neither dirty.", new Object[] { obj });
}
} catch (Exception e) {
throw new GoraException(e);
}
}
use of org.apache.gora.kudu.mapping.Column in project gora by apache.
the class KuduStore method createSchema.
@Override
public void createSchema() throws GoraException {
if (client == null) {
throw new GoraException("Impossible to create the schema as no connection has been initiated.");
}
if (schemaExists()) {
return;
}
try {
List<ColumnSchema> columns = new ArrayList<>();
List<String> keys = new ArrayList<>();
for (Column primaryKey : kuduMapping.getPrimaryKey()) {
columns.add(new ColumnSchema.ColumnSchemaBuilder(primaryKey.getName(), primaryKey.getDataType().getType()).key(true).build());
keys.add(primaryKey.getName());
}
for (Map.Entry<String, Column> clt : kuduMapping.getFields().entrySet()) {
Column aColumn = clt.getValue();
ColumnSchema aColumnSch;
ColumnSchema.ColumnSchemaBuilder aBaseColumn = new ColumnSchema.ColumnSchemaBuilder(aColumn.getName(), aColumn.getDataType().getType()).nullable(true);
if (aColumn.getDataType().getType() == Type.DECIMAL) {
aColumnSch = aBaseColumn.typeAttributes(DecimalUtil.typeAttributes(aColumn.getDataType().getPrecision(), aColumn.getDataType().getScale())).build();
} else {
aColumnSch = aBaseColumn.build();
}
columns.add(aColumnSch);
}
org.apache.kudu.Schema sch = new org.apache.kudu.Schema(columns);
CreateTableOptions cto = new CreateTableOptions();
cto.setNumReplicas(kuduMapping.getNumReplicas());
if (kuduMapping.getHashBuckets() > 0) {
cto.addHashPartitions(keys, kuduMapping.getHashBuckets());
}
if (!kuduMapping.getRangePartitions().isEmpty()) {
cto.setRangePartitionColumns(keys);
for (Map.Entry<String, String> range : kuduMapping.getRangePartitions()) {
PartialRow lowerPar = sch.newPartialRow();
PartialRow upperPar = sch.newPartialRow();
for (String ky : keys) {
if (!range.getKey().isEmpty()) {
lowerPar.addString(ky, range.getKey());
}
if (!range.getValue().isEmpty()) {
upperPar.addString(ky, range.getValue());
}
}
cto.addRangePartition(lowerPar, upperPar);
}
}
table = client.createTable(kuduMapping.getTableName(), sch, cto);
} catch (KuduException ex) {
throw new GoraException(ex);
}
}
Aggregations