From 4e3a29b49d03f9cd7c90e9b5757b241f4cde397e Mon Sep 17 00:00:00 2001 From: Karol Sobczak Date: Fri, 25 Oct 2019 21:53:28 +0200 Subject: [PATCH] Add missing support for bucket sort order in Glue Support for bucket sort order was missing in Glue when table or partition was created or updated. --- .../glue/converter/GlueInputConverter.java | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/presto-hive/src/main/java/io/prestosql/plugin/hive/metastore/glue/converter/GlueInputConverter.java b/presto-hive/src/main/java/io/prestosql/plugin/hive/metastore/glue/converter/GlueInputConverter.java index 502c6c58418d..95fd6a62e29e 100644 --- a/presto-hive/src/main/java/io/prestosql/plugin/hive/metastore/glue/converter/GlueInputConverter.java +++ b/presto-hive/src/main/java/io/prestosql/plugin/hive/metastore/glue/converter/GlueInputConverter.java @@ -14,11 +14,13 @@ package io.prestosql.plugin.hive.metastore.glue.converter; import com.amazonaws.services.glue.model.DatabaseInput; +import com.amazonaws.services.glue.model.Order; import com.amazonaws.services.glue.model.PartitionInput; import com.amazonaws.services.glue.model.SerDeInfo; import com.amazonaws.services.glue.model.StorageDescriptor; import com.amazonaws.services.glue.model.TableInput; import com.google.common.collect.ImmutableMap; +import io.prestosql.plugin.hive.HiveBucketProperty; import io.prestosql.plugin.hive.PartitionStatistics; import io.prestosql.plugin.hive.metastore.Column; import io.prestosql.plugin.hive.metastore.Database; @@ -29,6 +31,7 @@ import io.prestosql.plugin.hive.metastore.glue.GlueColumnStatisticsProvider; import java.util.List; +import java.util.Optional; import static com.google.common.collect.ImmutableList.toImmutableList; import static io.prestosql.plugin.hive.metastore.thrift.ThriftMetastoreUtil.updateStatisticsParameters; @@ -96,9 +99,15 @@ private static StorageDescriptor convertStorage(Storage storage, List co sd.setOutputFormat(storage.getStorageFormat().getOutputFormatNullable()); sd.setParameters(ImmutableMap.of()); - if (storage.getBucketProperty().isPresent()) { - sd.setNumberOfBuckets(storage.getBucketProperty().get().getBucketCount()); - sd.setBucketColumns(storage.getBucketProperty().get().getBucketedBy()); + Optional bucketProperty = storage.getBucketProperty(); + if (bucketProperty.isPresent()) { + sd.setNumberOfBuckets(bucketProperty.get().getBucketCount()); + sd.setBucketColumns(bucketProperty.get().getBucketedBy()); + if (!bucketProperty.get().getSortedBy().isEmpty()) { + sd.setSortColumns(bucketProperty.get().getSortedBy().stream() + .map(column -> new Order().withColumn(column.getColumnName()).withSortOrder(column.getOrder().getHiveOrder())) + .collect(toImmutableList())); + } } return sd;