Module: ClickHouse::Client

Defined in:
lib/click_house/client.rb,
lib/click_house/client/query.rb,
lib/click_house/client/quoting.rb,
lib/click_house/client/version.rb,
lib/click_house/client/database.rb,
lib/click_house/client/redactor.rb,
lib/click_house/client/response.rb,
lib/click_house/client/formatter.rb,
lib/click_house/client/query_like.rb,
lib/click_house/client/arel_engine.rb,
lib/click_house/client/arel_visitor.rb,
lib/click_house/client/configuration.rb,
lib/click_house/client/query_builder.rb,
lib/click_house/client/bind_index_manager.rb

Defined Under Namespace

Modules: Quoting, Redactor Classes: ArelEngine, ArelVisitor, BindIndexManager, Configuration, Database, Formatter, Query, QueryBuilder, QueryLike, Response

Constant Summary collapse

Error =
Class.new(StandardError)
ConfigurationError =
Class.new(Error)
DatabaseError =
Class.new(Error)
QueryError =
Class.new(Error)
VERSION =
"0.8.0"

Class Method Summary collapse

Class Method Details

.configurationObject



27
28
29
# File 'lib/click_house/client.rb', line 27

def configuration
  @configuration ||= Configuration.new
end

.configure {|configuration| ... } ⇒ Object

Yields:



31
32
33
34
# File 'lib/click_house/client.rb', line 31

def configure
  yield(configuration)
  configuration.validate!
end

.database_configured?(database, configuration = self.configuration) ⇒ Boolean

Returns:

  • (Boolean)


42
43
44
# File 'lib/click_house/client.rb', line 42

def self.database_configured?(database, configuration = self.configuration)
  !!configuration.databases[database]
end

.execute(query, database, configuration = self.configuration) ⇒ Object

Executes any kinds of database query without returning any data (INSERT, DELETE)



58
59
60
61
62
63
64
# File 'lib/click_house/client.rb', line 58

def self.execute(query, database, configuration = self.configuration)
  instrumented_execute(query, database, configuration) do |response, instrument|
    expose_summary(response.headers, instrument)
  end

  true
end

.insert_csv(query, io, database, configuration = self.configuration) ⇒ Object

Inserts a gzip-compressed CSV to ClickHouse

Usage:

Create a compressed CSV file: > File.binwrite(“my_csv.csv”, ActiveSupport::Gzip.compress(“idn10n20”))

Invoke the INSERT query: > ClickHouse::Client.insert_csv(‘INSERT INTO events (id) FORMAT CSV’, File.open(“my_csv.csv”), :main)



75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
# File 'lib/click_house/client.rb', line 75

def self.insert_csv(query, io, database, configuration = self.configuration)
  db = lookup_database(configuration, database)

  headers = db.headers.merge(
    'Transfer-Encoding' => 'chunked',
    'Content-Encoding' => 'gzip'
  )

  query = ClickHouse::Client::Query.build(query)
  ActiveSupport::Notifications.instrument('sql.click_house', { query:, database: }) do |instrument|
    response = configuration.http_post_proc.call(
      db.build_custom_uri(extra_variables: { query: query.to_sql }).to_s,
      headers,
      io
    )
    raise DatabaseError, response.body unless response.success?

    expose_summary(response.headers, instrument)
  end

  true
end

.select(query, database, configuration = self.configuration) ⇒ Object

Executes a SELECT database query



47
48
49
50
51
52
53
54
55
# File 'lib/click_house/client.rb', line 47

def self.select(query, database, configuration = self.configuration)
  instrumented_execute(query, database, configuration) do |response, instrument|
    parsed_response = configuration.json_parser.parse(response.body)

    instrument[:statistics] = parsed_response['statistics']&.symbolize_keys

    Formatter.format(parsed_response)
  end
end