Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Clickhouse Builder Laravel Package

bavix/clickhouse-builder

PHP 7.1+ query builder for ClickHouse. Build and execute SELECT queries with a fluent API: select columns with aliases, closures for complex expressions or subqueries, and integrate with the-tinderbox/clickhouse-php-client for execution.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture Fit

  • ClickHouse Query Builder: The package provides a fluent, Laravel-compatible query builder for ClickHouse, aligning well with Laravel’s Eloquent-like syntax. It supports complex ClickHouse-specific features (e.g., SAMPLE, ARRAY JOIN, dictGetString, LIMIT BY), which are critical for analytical workloads.
  • Fluent Interface: The builder follows Laravel’s query builder patterns (e.g., method chaining, closures for subqueries), reducing cognitive load for Laravel developers transitioning to ClickHouse.
  • ClickHouse-Specific Optimizations: Features like temporary tables, async queries, and local file integration (TempTable) address ClickHouse’s strengths (e.g., bulk operations, distributed processing) but may introduce complexity for teams unfamiliar with these patterns.

Integration Feasibility

  • Laravel/Lumen Integration: The package includes a ClickhouseServiceProvider for seamless Laravel integration, with config options mirroring Laravel’s database.php. This reduces boilerplate for connecting to ClickHouse clusters or standalone servers.
  • Dependency on clickhouse-php-client: Requires the-tinderbox/clickhouse-php-client (v7.1+), which must be installed separately. This adds a minor dependency risk but ensures compatibility with ClickHouse’s PHP client.
  • SQL Generation: The builder generates raw ClickHouse SQL, which is flexible but requires validation to avoid injection risks (e.g., user-provided input in where clauses). Laravel’s query builder already handles this via binding parameters, but ClickHouse’s syntax (e.g., dictGetString) may need additional sanitization.

Technical Risk

  • Maturity Concerns: The package has 0 stars, 0 dependents, and a last release in 2026 (likely a typo; assume recent). Lack of community adoption or testing may indicate instability or undocumented edge cases.
  • Unstable Features: The README notes that column functions (e.g., sumIf) are "not stable and under development," which could break queries in future updates.
  • ClickHouse Version Lock: No explicit ClickHouse version compatibility is stated. ClickHouse’s rapid evolution (e.g., new SQL functions) may require package updates.
  • Performance Overhead: Fluent builders can introduce minor overhead for simple queries. For high-throughput analytical queries, raw SQL or ClickHouse’s native client may be preferable.

Key Questions

  1. Compatibility:
    • What ClickHouse versions does this package support? Are there known issues with ClickHouse 22.8+?
    • How does it handle ClickHouse’s data type system (e.g., DateTime64, Nullable)?
  2. Security:
    • Does the package escape inputs for where/join clauses? If not, how should Laravel’s query binding be adapted?
    • Are there risks with temporary tables (e.g., race conditions, cleanup)?
  3. Performance:
    • Has the package been benchmarked against raw ClickHouse queries or other builders (e.g., clickhouse-php)?
    • How does it handle large result sets (e.g., streaming, pagination)?
  4. Maintenance:
    • Who maintains the package? Is there a roadmap for stability?
    • Are there plans to add Laravel Scout or Eloquent model support?
  5. Alternatives:

Integration Approach

Stack Fit

  • Laravel/Lumen: Ideal for teams already using Laravel’s query builder. The package’s Laravel integration (ClickhouseServiceProvider) enables ClickHouse to be treated as a first-class database connection alongside MySQL/PostgreSQL.
  • ClickHouse Use Cases:
    • Analytical Workloads: Excels for aggregations, time-series data, and nested data (e.g., ARRAY JOIN).
    • Hybrid Architectures: Useful for Laravel apps needing both transactional (PostgreSQL) and analytical (ClickHouse) databases.
  • Non-Laravel PHP: Can be used standalone, but loses Laravel’s conveniences (e.g., service container, query logging).

Migration Path

  1. Add Dependencies:
    composer require the-tinderbox/clickhouse-builder the-tinderbox/clickhouse-php-client
    
  2. Configure Laravel:
    • Register the service provider in config/app.php:
      \Tinderbox\ClickhouseBuilder\Integrations\Laravel\ClickhouseServiceProvider::class
      
    • Define ClickHouse connection in config/database.php:
      'clickhouse' => [
          'driver' => 'clickhouse',
          'servers' => [...], // Cluster or single server
          'options' => [...],
      ]
      
  3. Replace Raw SQL:
    • Replace direct ClickHouse queries with the builder:
      // Before
      DB::select("SELECT * FROM events WHERE user_id = ?", [$userId]);
      
      // After
      DB::connection('clickhouse')->query()
          ->from('events')
          ->where('user_id', $userId)
          ->get();
      
  4. Leverage ClickHouse Features:
    • Use builder-specific methods for ClickHouse optimizations:
      // Temporary tables for large IN clauses
      $builder->addFile(new TempTable('user_ids', 'users.tsv', ['id' => 'UInt64']))
              ->from('events')
              ->whereIn('user_id', 'user_ids')
              ->get();
      
      // Async queries
      $builder->asyncWithQuery(function($q) {
          $q->from('events')->limit(1000);
      })->get();
      

Compatibility

  • Laravel Versions: Officially supports Laravel/Lumen < 5.5. Later versions may require updates (e.g., service provider registration changes).
  • ClickHouse SQL: The builder generates standard ClickHouse SQL, but complex features (e.g., dictGetString) may not work with older ClickHouse versions.
  • Query Builder Parity:
    • Supports: select, from, join, where, groupBy, orderBy, limit, union, subqueries.
    • Missing: Laravel-specific features like cursor, chunk, or Eloquent relationships (would need custom implementation).

Sequencing

  1. Phase 1: Basic Queries
    • Replace simple SELECT/INSERT queries with the builder.
    • Validate SQL generation against raw queries.
  2. Phase 2: Advanced Features
    • Implement ClickHouse-specific optimizations (e.g., TempTable, ARRAY JOIN).
    • Test async queries and batch operations.
  3. Phase 3: Integration
    • Extend Laravel’s query logging to include ClickHouse queries.
    • Add custom macros for domain-specific logic (e.g., whereEventType).

Operational Impact

Maintenance

  • Dependency Management:
    • Monitor clickhouse-php-client for updates (breaking changes possible).
    • Pin package versions in composer.json to avoid surprises.
  • SQL Debugging:
    • Enable Laravel’s query logging to inspect generated ClickHouse SQL:
      DB::connection('clickhouse')->enableQueryLog();
      
    • Use ->toSql() to inspect queries before execution.
  • Schema Migrations:
    • ClickHouse lacks traditional migrations. Use the builder’s insertFile for bulk data loading or raw SQL for schema changes.

Support

  • Troubleshooting:
    • ClickHouse errors may differ from traditional databases (e.g., Code: 1001, e.displayText(): DB::Exception). Log raw errors for debugging.
    • Community support is limited (0 stars/dependents). Fall back to ClickHouse’s official forums or GitHub issues.
  • Laravel Ecosystem:
    • Tools like Tinker or Laravel Debugbar may not support ClickHouse queries. Use dd($builder->toSql()) for inspection.

Scaling

  • Performance:
    • Pros: The builder optimizes for ClickHouse’s strengths (e.g., LIMIT BY, ARRAY JOIN). Async queries reduce latency for parallel workloads.
    • Cons: Overhead for simple queries. For high-throughput apps, consider raw HTTP requests or ClickHouse’s native client.
  • Resource Usage:
    • Temporary tables and async queries may increase memory usage. Monitor ClickHouse’s system.processes table for long-running queries.
  • Horizontal Scaling:
    • The builder supports ClickHouse clusters via servers config. Ensure load balancing is configured in ClickHouse.

Failure Modes

Scenario Risk Mitigation
ClickHouse server down Query failures Implement retry logic with exponential backoff.
Malformed SQL Syntax errors
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
terminal42/code-quality-tools
codifyo/ts-generator-bundle
andydefer/laravel-cluster
testo/fiber
mintobit/jobqueue
a4sex/maintenance-bundle
a4sex/entity-date-update
a4sex/client-identifier
a4sex/base-utilites
a4sex/key-value-storage
a4sex/micro-status
chilldev/dependency-injection-extra
datinglibre/datinglibre-app-api
biberltd/corebundle
bricre/symfony-bundle-test
biberltd/logbundle
dominium/http-adapter-bundle
dominium/google-analytics
a4sex/auto-clean-entity
christhompsontldr/laravel-inky