@Override public boolean matches(Map<ColumnDescriptor, DictionaryDescriptor> dictionaries) { ImmutableMap.Builder<ColumnDescriptor, Domain> domains = ImmutableMap.builder(); for (RichColumnDescriptor column : columns) { DictionaryDescriptor dictionaryDescriptor = dictionaries.get(column); Domain domain = getDomain(getPrestoType(effectivePredicate, column), dictionaryDescriptor); if (domain != null) { domains.put(column, domain); } } TupleDomain<ColumnDescriptor> stripeDomain = TupleDomain.withColumnDomains(domains.build()); return effectivePredicate.overlaps(stripeDomain); }
@Override public ConnectorSplitSource getSplits(ConnectorTransactionHandle transaction, ConnectorSession session, ConnectorTableLayoutHandle layout, SplitSchedulingStrategy splitSchedulingStrategy) { JmxTableLayoutHandle jmxLayout = (JmxTableLayoutHandle) layout; JmxTableHandle tableHandle = jmxLayout.getTable(); TupleDomain<ColumnHandle> predicate = jmxLayout.getConstraint(); //TODO is there a better way to get the node column? Optional<JmxColumnHandle> nodeColumnHandle = tableHandle.getColumnHandles().stream() .filter(jmxColumnHandle -> jmxColumnHandle.getColumnName().equals(NODE_COLUMN_NAME)) .findFirst(); checkState(nodeColumnHandle.isPresent(), "Failed to find %s column", NODE_COLUMN_NAME); List<ConnectorSplit> splits = nodeManager.getAllNodes().stream() .filter(node -> { NullableValue value = NullableValue.of(createUnboundedVarcharType(), utf8Slice(node.getNodeIdentifier())); return predicate.overlaps(fromFixedValues(ImmutableMap.of(nodeColumnHandle.get(), value))); }) .map(node -> new JmxSplit(tableHandle, ImmutableList.of(node.getHostAndPort()))) .collect(toList()); return new FixedSplitSource(splits); } }
@Override public boolean matches(long numberOfRows, Map<ColumnDescriptor, Statistics<?>> statistics, ParquetDataSourceId id, boolean failOnCorruptedParquetStatistics) throws ParquetCorruptionException { if (numberOfRows == 0) { return false; } ImmutableMap.Builder<ColumnDescriptor, Domain> domains = ImmutableMap.builder(); for (RichColumnDescriptor column : columns) { Statistics<?> columnStatistics = statistics.get(column); Domain domain; Type type = getPrestoType(effectivePredicate, column); if (columnStatistics == null || columnStatistics.isEmpty()) { // no stats for column domain = Domain.all(type); } else { domain = getDomain(type, numberOfRows, columnStatistics, id, column.toString(), failOnCorruptedParquetStatistics); } domains.put(column, domain); } TupleDomain<ColumnDescriptor> stripeDomain = TupleDomain.withColumnDomains(domains.build()); return effectivePredicate.overlaps(stripeDomain); }
private boolean overlaps(Map<ColumnHandle, Domain> domains1, Map<ColumnHandle, Domain> domains2) { TupleDomain<ColumnHandle> tupleDomain1 = TupleDomain.withColumnDomains(domains1); TupleDomain<ColumnHandle> tupleDOmain2 = TupleDomain.withColumnDomains(domains2); return tupleDomain1.overlaps(tupleDOmain2); }
.filter(partition -> tupleDomain.overlaps(partition.getTupleDomain())) .collect(toList());
@Override public boolean matches(Map<Integer, ParquetDictionaryDescriptor> dictionariesByColumnIndex) { ImmutableMap.Builder<C, Domain> domains = ImmutableMap.builder(); for (ColumnReference<C> columnReference : columnReferences) { ParquetDictionaryDescriptor dictionaryDescriptor = dictionariesByColumnIndex.get(columnReference.getOrdinal()); Domain domain = getDomain(columnReference.getType(), dictionaryDescriptor); if (domain != null) { domains.put(columnReference.getColumn(), domain); } } TupleDomain<C> stripeDomain = TupleDomain.withColumnDomains(domains.build()); return effectivePredicate.overlaps(stripeDomain); }
@Override public boolean matches(long numberOfRows, Map<Integer, ColumnStatistics> statisticsByColumnIndex) { ImmutableMap.Builder<C, Domain> domains = ImmutableMap.builder(); for (ColumnReference<C> columnReference : columnReferences) { ColumnStatistics columnStatistics = statisticsByColumnIndex.get(columnReference.getOrdinal()); Domain domain; if (columnStatistics == null) { // no stats for column domain = Domain.all(columnReference.getType()); } else { domain = getDomain(columnReference.getType(), numberOfRows, columnStatistics); } domains.put(columnReference.getColumn(), domain); } TupleDomain<C> stripeDomain = TupleDomain.withColumnDomains(domains.build()); return effectivePredicate.overlaps(stripeDomain); }
@Override public boolean matches(long numberOfRows, Map<Integer, Statistics<?>> statisticsByColumnIndex) { if (numberOfRows == 0) { return false; } ImmutableMap.Builder<C, Domain> domains = ImmutableMap.builder(); for (ColumnReference<C> columnReference : columnReferences) { Statistics<?> statistics = statisticsByColumnIndex.get(columnReference.getOrdinal()); Domain domain; if (statistics == null || statistics.isEmpty()) { // no stats for column domain = Domain.all(columnReference.getType()); } else { domain = getDomain(columnReference.getType(), numberOfRows, statistics); } domains.put(columnReference.getColumn(), domain); } TupleDomain<C> stripeDomain = TupleDomain.withColumnDomains(domains.build()); return effectivePredicate.overlaps(stripeDomain); }
.filter(partition -> tupleDomain.overlaps(partition.getTupleDomain())) .collect(toList());