All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.facebook.presto.jdbc.internal.spi.ConnectorTableLayout Maven / Gradle / Ivy

There is a newer version: 0.286
Show newest version
/*
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.facebook.presto.jdbc.internal.spi;

import com.facebook.presto.jdbc.internal.spi.predicate.TupleDomain;

import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.Set;

import static java.util.Collections.emptyList;
import static java.util.Objects.requireNonNull;

public class ConnectorTableLayout
{
    private final ConnectorTableLayoutHandle handle;
    private final Optional> columns;
    private final TupleDomain predicate;
    private final Optional tablePartitioning;
    private final Optional> streamPartitioningColumns;
    private final Optional discretePredicates;
    private final List> localProperties;

    public ConnectorTableLayout(ConnectorTableLayoutHandle handle)
    {
        this(handle,
                Optional.empty(),
                TupleDomain.all(),
                Optional.empty(),
                Optional.empty(),
                Optional.empty(),
                emptyList());
    }

    public ConnectorTableLayout(
            ConnectorTableLayoutHandle handle,
            Optional> columns,
            TupleDomain predicate,
            Optional tablePartitioning,
            Optional> streamPartitioningColumns,
            Optional discretePredicates,
            List> localProperties)
    {
        requireNonNull(handle, "handle is null");
        requireNonNull(columns, "columns is null");
        requireNonNull(streamPartitioningColumns, "partitioningColumns is null");
        requireNonNull(tablePartitioning, "tablePartitioning is null");
        requireNonNull(predicate, "predicate is null");
        requireNonNull(discretePredicates, "discretePredicates is null");
        requireNonNull(localProperties, "localProperties is null");

        this.handle = handle;
        this.columns = columns;
        this.tablePartitioning = tablePartitioning;
        this.streamPartitioningColumns = streamPartitioningColumns;
        this.predicate = predicate;
        this.discretePredicates = discretePredicates;
        this.localProperties = localProperties;
    }

    public ConnectorTableLayoutHandle getHandle()
    {
        return handle;
    }

    /**
     * The columns from the original table provided by this layout. A layout may provide only a subset of columns.
     */
    public Optional> getColumns()
    {
        return columns;
    }

    /**
     * A TupleDomain that represents a predicate that every row this TableScan node
     * produces is guaranteed to satisfy.
     * 

* This guarantee can have different origins. * For example, it may be successful predicate push down, or inherent guarantee provided by the underlying data. */ public TupleDomain getPredicate() { return predicate; } /** * The partitioning of the table across the worker nodes. *

* If the table is node partitioned, the connector guarantees that each combination of values for * the distributed columns will be contained within a single worker. */ public Optional getTablePartitioning() { return tablePartitioning; } /** * The partitioning for the table streams. * If empty, the table layout is partitioned arbitrarily. * Otherwise, table steams are partitioned on the given set of columns (or unpartitioned, if the set is empty) *

* If the table is partitioned, the connector guarantees that each combination of values for * the partition columns will be contained within a single split (i.e., partitions cannot * straddle multiple splits) */ public Optional> getStreamPartitioningColumns() { return streamPartitioningColumns; } /** * A collection of discrete predicates describing the data in this layout. The union of * these predicates is expected to be equivalent to the overall predicate returned * by {@link #getPredicate()}. They may be used by the engine for further optimizations. */ public Optional getDiscretePredicates() { return discretePredicates; } /** * Properties describing the layout of the data (grouping/sorting) within each partition */ public List> getLocalProperties() { return localProperties; } @Override public int hashCode() { return Objects.hash(handle, columns, predicate, discretePredicates, streamPartitioningColumns, tablePartitioning, localProperties); } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj == null || getClass() != obj.getClass()) { return false; } ConnectorTableLayout other = (ConnectorTableLayout) obj; return Objects.equals(this.handle, other.handle) && Objects.equals(this.columns, other.columns) && Objects.equals(this.predicate, other.predicate) && Objects.equals(this.discretePredicates, other.discretePredicates) && Objects.equals(this.streamPartitioningColumns, other.streamPartitioningColumns) && Objects.equals(this.tablePartitioning, other.tablePartitioning) && Objects.equals(this.localProperties, other.localProperties); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy