From 5b22ecf75603ef37beeb9b505a2a929fd5fdd83f Mon Sep 17 00:00:00 2001 From: v-jizhang Date: Mon, 26 Apr 2021 13:28:51 -0700 Subject: [PATCH] Add missing support for bucket sort order in Glue Cherry pick of https://github.com/trinodb/trino/pull/1870. Co-authored-by: Karol Sobczak --- .../glue/converter/GlueInputConverter.java | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/presto-hive-metastore/src/main/java/com/facebook/presto/hive/metastore/glue/converter/GlueInputConverter.java b/presto-hive-metastore/src/main/java/com/facebook/presto/hive/metastore/glue/converter/GlueInputConverter.java index 62a85e73d97b5..edf2b7d17fdf5 100644 --- a/presto-hive-metastore/src/main/java/com/facebook/presto/hive/metastore/glue/converter/GlueInputConverter.java +++ b/presto-hive-metastore/src/main/java/com/facebook/presto/hive/metastore/glue/converter/GlueInputConverter.java @@ -14,10 +14,12 @@ package com.facebook.presto.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.facebook.presto.hive.HiveBucketProperty; import com.facebook.presto.hive.metastore.Column; import com.facebook.presto.hive.metastore.Database; import com.facebook.presto.hive.metastore.Partition; @@ -30,6 +32,7 @@ import java.util.EnumSet; import java.util.List; +import java.util.Optional; import static com.facebook.presto.hive.metastore.MetastoreUtil.updateStatisticsParameters; import static com.facebook.presto.hive.metastore.PrestoTableType.EXTERNAL_TABLE; @@ -37,6 +40,7 @@ import static com.facebook.presto.hive.metastore.PrestoTableType.VIRTUAL_VIEW; import static com.facebook.presto.spi.StandardErrorCode.NOT_SUPPORTED; import static com.google.common.base.Preconditions.checkArgument; +import static com.google.common.collect.ImmutableList.toImmutableList; import static java.util.stream.Collectors.toList; public final class GlueInputConverter @@ -119,9 +123,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;