Skip to content

[DNR]feat(plugin-clickhouse) : Enable jdbc-fetch-size #27688

Draft
nishithakbhaskaran wants to merge 1 commit intoprestodb:masterfrom
nishithakbhaskaran:clickhouse-jdbc-fetchsize
Draft

[DNR]feat(plugin-clickhouse) : Enable jdbc-fetch-size #27688
nishithakbhaskaran wants to merge 1 commit intoprestodb:masterfrom
nishithakbhaskaran:clickhouse-jdbc-fetchsize

Conversation

@nishithakbhaskaran
Copy link
Copy Markdown
Contributor

@nishithakbhaskaran nishithakbhaskaran commented Apr 30, 2026

Description

Motivation and Context

Impact

Test Plan

Contributor checklist

  • Please make sure your submission complies with our contributing guide, in particular code style and commit standards.
  • PR description addresses the issue accurately and concisely. If the change is non-trivial, a GitHub Issue is referenced.
  • Documented new properties (with its default value), SQL syntax, functions, or other functionality.
  • If release notes are required, they follow the release notes guidelines.
  • Adequate tests were added if applicable.
  • CI passed.
  • If adding new dependencies, verified they have an OpenSSF Scorecard score of 5.0 or higher (or obtained explicit TSC approval for lower scores).

Release Notes

Please follow release notes guidelines and fill in the release notes below.

== RELEASE NOTES ==

General Changes
* ... 
* ... 

Hive Connector Changes
* ... 
* ... 

If release note is NOT required, use:

== NO RELEASE NOTE ==

Summary by Sourcery

Add configurable JDBC fetch size support to the ClickHouse connector and apply it to query and metadata retrieval.

New Features:

  • Introduce a jdbc-fetch-size configuration option for the ClickHouse connector with a default value of 20000 rows, used when fetching query and metadata results.

Tests:

  • Extend ClickHouse configuration tests to cover the new jdbc-fetch-size property defaults and explicit mappings.

@prestodb-ci prestodb-ci added the from:IBM PR from IBM label Apr 30, 2026
@sourcery-ai
Copy link
Copy Markdown
Contributor

sourcery-ai Bot commented Apr 30, 2026

Reviewer's Guide

Adds a configurable JDBC fetch size to the ClickHouse connector and wires it through to JDBC PreparedStatements and metadata ResultSets, with defaults and tests for configuration mapping.

Sequence diagram for applying jdbc-fetch-size in ClickHouseClient

sequenceDiagram
    participant PrestoEngine
    participant ClickHouseClient
    participant Connection
    participant PreparedStatement
    participant DatabaseMetaData
    participant ResultSet

    PrestoEngine->>ClickHouseClient: new ClickHouseClient(connectorId, config, baseJdbcConfig, connectionFactory)
    ClickHouseClient->>ClickHouseConfig: getFetchSize()
    ClickHouseConfig-->>ClickHouseClient: fetchSize
    Note over ClickHouseClient: fetchSize stored in ClickHouseClient.fetchSize

    PrestoEngine->>ClickHouseClient: getPreparedStatement(connection, sql)
    ClickHouseClient->>Connection: prepareStatement(sql)
    Connection-->>ClickHouseClient: PreparedStatement
    ClickHouseClient->>PreparedStatement: setFetchSize(fetchSize)
    ClickHouseClient-->>PrestoEngine: PreparedStatement

    PrestoEngine->>ClickHouseClient: getTables(connection, schemaName, tableName)
    ClickHouseClient->>Connection: getMetaData()
    Connection-->>ClickHouseClient: DatabaseMetaData
    ClickHouseClient->>DatabaseMetaData: getTables(catalog, schemaPattern, tablePattern, types)
    DatabaseMetaData-->>ClickHouseClient: ResultSet
    ClickHouseClient->>ResultSet: setFetchSize(fetchSize)
    ClickHouseClient-->>PrestoEngine: ResultSet
Loading

Class diagram for ClickHouseConfig and ClickHouseClient fetch size support

classDiagram
    class ClickHouseConfig {
        - boolean allowDropTable
        - int commitBatchSize
        - boolean caseSensitiveNameMatchingEnabled
        - int fetchSize
        + String getConnectionUrl()
        + ClickHouseConfig setConnectionUrl(String connectionUrl)
        + boolean isMapStringAsVarchar()
        + ClickHouseConfig setMapStringAsVarchar(boolean mapStringAsVarchar)
        + boolean isCaseInsensitiveNameMatching()
        + ClickHouseConfig setCaseSensitiveNameMatching(boolean caseSensitiveNameMatchingEnabled)
        + int getFetchSize()
        + ClickHouseConfig setFetchSize(int fetchSize)
    }

    class ClickHouseClient {
        - ClickHouseConnectorId connectorId
        - ClickHouseConfig config
        - int commitBatchSize
        - boolean mapStringAsVarchar
        - boolean caseSensitiveEnabled
        - Cache remoteSchemaNames
        - Cache remoteTableNames
        - boolean caseSensitiveNameMatchingEnabled
        - int fetchSize
        + ClickHouseClient(ClickHouseConnectorId connectorId, ClickHouseConfig config, BaseJdbcConfig baseJdbcConfig, ConnectionFactory connectionFactory)
        + Optional toPrestoType(ClickHouseTypeHandle typeHandle)
        + PreparedStatement getPreparedStatement(Connection connection, String sql)
        + ResultSet getTables(Connection connection, Optional schemaName, Optional tableName)
        + PreparedStatement buildSql(ConnectorSession session, Connection connection, ClickHouseSplit split, List columnHandles)
    }

    ClickHouseClient --> ClickHouseConfig : uses
    ClickHouseClient "1" o-- "1" ClickHouseConnectorId : identified_by
Loading

File-Level Changes

Change Details Files
Introduce configurable JDBC fetch size in ClickHouse connector configuration and expose it as a new property.
  • Add fetchSize field with @min(1) validation and default value 20000 to configuration
  • Implement getter and annotated setter for jdbc-fetch-size with description
  • Extend configuration defaults test to include default fetch size
  • Extend explicit property mapping test to cover jdbc-fetch-size and its expected value
presto-clickhouse/src/main/java/com/facebook/presto/plugin/clickhouse/ClickHouseConfig.java
presto-clickhouse/src/test/java/com/facebook/presto/plugin/clickhouse/TestClickHouseConfig.java
Use the configured fetch size for JDBC PreparedStatements and metadata ResultSets in ClickHouse client.
  • Store fetchSize from ClickHouseConfig in ClickHouseClient constructor
  • Set fetch size on PreparedStatements created for query execution
  • Set fetch size on ResultSet returned by DatabaseMetaData.getTables
presto-clickhouse/src/main/java/com/facebook/presto/plugin/clickhouse/ClickHouseClient.java

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

@nishithakbhaskaran nishithakbhaskaran changed the title feat(plugin-clickhouse) : Enable jdbc-fetch-size [DNR]feat(plugin-clickhouse) : Enable jdbc-fetch-size Apr 30, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

from:IBM PR from IBM

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants