use of io.trino.plugin.kudu.properties.PartitionDesign in project trino by trinodb.
the class KuduMetadata method beginCreateTable.
@Override
public ConnectorOutputTableHandle beginCreateTable(ConnectorSession session, ConnectorTableMetadata tableMetadata, Optional<ConnectorTableLayout> layout) {
PartitionDesign design = KuduTableProperties.getPartitionDesign(tableMetadata.getProperties());
boolean generateUUID = !design.hasPartitions();
ConnectorTableMetadata finalTableMetadata = tableMetadata;
if (generateUUID) {
String rowId = KuduColumnHandle.ROW_ID;
List<ColumnMetadata> copy = new ArrayList<>(tableMetadata.getColumns());
Map<String, Object> columnProperties = new HashMap<>();
columnProperties.put(KuduTableProperties.PRIMARY_KEY, true);
copy.add(0, ColumnMetadata.builder().setName(rowId).setType(VarcharType.VARCHAR).setComment(Optional.of("key=true")).setHidden(true).setProperties(columnProperties).build());
List<ColumnMetadata> finalColumns = ImmutableList.copyOf(copy);
Map<String, Object> propsCopy = new HashMap<>(tableMetadata.getProperties());
propsCopy.put(KuduTableProperties.PARTITION_BY_HASH_COLUMNS, ImmutableList.of(rowId));
propsCopy.put(KuduTableProperties.PARTITION_BY_HASH_BUCKETS, 2);
Map<String, Object> finalProperties = ImmutableMap.copyOf(propsCopy);
finalTableMetadata = new ConnectorTableMetadata(tableMetadata.getTable(), finalColumns, finalProperties, tableMetadata.getComment());
}
KuduTable table = clientSession.createTable(finalTableMetadata, false);
Schema schema = table.getSchema();
List<ColumnSchema> columns = schema.getColumns();
List<Type> columnTypes = columns.stream().map(TypeHelper::fromKuduColumn).collect(toImmutableList());
List<Type> columnOriginalTypes = finalTableMetadata.getColumns().stream().map(ColumnMetadata::getType).collect(toImmutableList());
return new KuduOutputTableHandle(finalTableMetadata.getTable(), columnOriginalTypes, columnTypes, generateUUID, table);
}
use of io.trino.plugin.kudu.properties.PartitionDesign in project trino by trinodb.
the class KuduClientSession method changeRangePartition.
private void changeRangePartition(SchemaTableName schemaTableName, RangePartition rangePartition, RangePartitionChange change) {
try {
String rawName = schemaEmulation.toRawName(schemaTableName);
KuduTable table = client.openTable(rawName);
Schema schema = table.getSchema();
PartitionDesign design = KuduTableProperties.getPartitionDesign(table);
RangePartitionDefinition definition = design.getRange();
if (definition == null) {
throw new TrinoException(QUERY_REJECTED, "Table " + schemaTableName + " has no range partition");
}
PartialRow lowerBound = KuduTableProperties.toRangeBoundToPartialRow(schema, definition, rangePartition.getLower());
PartialRow upperBound = KuduTableProperties.toRangeBoundToPartialRow(schema, definition, rangePartition.getUpper());
AlterTableOptions alterOptions = new AlterTableOptions();
switch(change) {
case ADD:
alterOptions.addRangePartition(lowerBound, upperBound);
break;
case DROP:
alterOptions.dropRangePartition(lowerBound, upperBound);
break;
}
client.alterTable(rawName, alterOptions);
} catch (KuduException e) {
throw new TrinoException(GENERIC_INTERNAL_ERROR, e);
}
}
use of io.trino.plugin.kudu.properties.PartitionDesign in project trino by trinodb.
the class KuduClientSession method buildCreateTableOptions.
private CreateTableOptions buildCreateTableOptions(Schema schema, Map<String, Object> properties) {
CreateTableOptions options = new CreateTableOptions();
RangePartitionDefinition rangePartitionDefinition = null;
PartitionDesign partitionDesign = KuduTableProperties.getPartitionDesign(properties);
if (partitionDesign.getHash() != null) {
for (HashPartitionDefinition partition : partitionDesign.getHash()) {
options.addHashPartitions(partition.getColumns(), partition.getBuckets());
}
}
if (partitionDesign.getRange() != null) {
rangePartitionDefinition = partitionDesign.getRange();
options.setRangePartitionColumns(rangePartitionDefinition.getColumns());
}
List<RangePartition> rangePartitions = KuduTableProperties.getRangePartitions(properties);
if (rangePartitionDefinition != null && !rangePartitions.isEmpty()) {
for (RangePartition rangePartition : rangePartitions) {
PartialRow lower = KuduTableProperties.toRangeBoundToPartialRow(schema, rangePartitionDefinition, rangePartition.getLower());
PartialRow upper = KuduTableProperties.toRangeBoundToPartialRow(schema, rangePartitionDefinition, rangePartition.getUpper());
options.addRangePartition(lower, upper);
}
}
Optional<Integer> numReplicas = KuduTableProperties.getNumReplicas(properties);
numReplicas.ifPresent(options::setNumReplicas);
return options;
}
Aggregations