The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

Name

QBit::Application::Model::DB::clickhouse::Table - Class for ClickHouse tables.

Description

Implements methods for ClickHouse tables.

Package methods

add

Arguments:

  • $data - reference to hash or object(QBit::Application::Model::DB::Query)

  • %opts - additional options

    • fields - array ref (order for fields)

Return values:

  • $count - number of new records

Example:

  my $count = $app->db->stat->add({date => '2017-09-03', hits => 10}); # $count = 1, insert all fields

  $count = $app->db->stat->add({date => '2017-09-03', hits => 10, not_exists => 'something'}, fields => [qw(date hits)]);
  # $count = 1, insert only date and hits in this order

  $app->db->stat->add(
      $app->db->query->select(
          table  => $app->db->today_stat,
          fields => [qw(date hits)],
          filter => {date => '2017-09-17 19:19:23'}
      ),
      fields => [qw(date hits)]
  );

  # clickhouse
  INSERT INTO `stat` (`date`, `hits`) SELECT
    `today_stat`.`date` AS `date`,
    `today_stat`.`hits` AS `hits`
  FROM `today_stat`
  WHERE (
    `today_stat`.`date` = '2017-09-17 19:19:23'
  );

add_multi

ADD_CHUNK (records number in one statement; default: 1000)

  $QBit::Application::Model::DB::clickhouse::ADD_CHUNK = 500;

Arguments:

  • $data - reference to array

  • %opts - additional options

    • fields - array ref (order for fields)

    • identical_rows - boolean (true: get field names from first row, false: Unites all fields from all rows; default: false)

    • ignore_extra_fields - boolean (true: ignore field names that not exists in table, false: throw exception; default: false)

Return values:

  • $count - records number

Example:

  my $count = $app->db->stat->add_multi([{date => '2017-09-02', hits => 5}, {date => '2017-09-03', hits => 10}]); # $count = 2

  $count = $app->db->stat->add_multi([
      {date => '2017-09-02', hits => 5, not_exists => 'something'},
      {date => '2017-09-03', hits => 10, not_exists => 'something'}
    ],
    fields => [qw(date hits)]
  );
  # $count = 2, insert only date and hits in this order

create_sql

returns sql for create table.

No arguments.

Return values:

  • $sql - string

Example:

  my $sql = $app->db->stat->create_sql();