in metacat-connector-hive/src/main/java/com/netflix/metacat/connector/hive/sql/DirectSqlGetPartition.java [733:790]
private <T> List<T> getHandlerResults(
final String databaseName,
final String tableName,
@Nullable final String filterExpression,
@Nullable final List<String> partitionIds,
final String sql,
final ResultSetExtractor resultSetExtractor,
@Nullable final String joinSql,
@Nullable final String filterSql,
@Nullable final List<Object> filterParams,
@Nullable final Sort sort,
@Nullable final Pageable pageable,
final boolean forceDisableAudit
) {
//
// Limiting the in clause to 5000 part names because the sql query with the IN clause for part_name(767 bytes)
// will hit the max sql query length(max_allowed_packet for our RDS) if we use more than 5400 or so
//
List<T> partitions = Lists.newArrayList();
if (partitionIds != null && partitionIds.size() > 5000) {
final List<List<String>> subFilterPartitionNamesList = Lists.partition(partitionIds, 5000);
final List<T> finalPartitions = partitions;
subFilterPartitionNamesList.forEach(
subPartitionIds -> finalPartitions.addAll(
this.getSubHandlerResultsFromQuery(
databaseName,
tableName,
filterExpression,
subPartitionIds,
sql,
resultSetExtractor,
joinSql,
filterSql,
filterParams,
sort,
pageable,
forceDisableAudit
)
)
);
} else {
partitions = this.getSubHandlerResultsFromQuery(
databaseName,
tableName,
filterExpression,
partitionIds,
sql,
resultSetExtractor,
joinSql,
filterSql,
filterParams,
sort,
pageable,
forceDisableAudit
);
}
return partitions;
}