New
Join our webinar! Building a customizable and extensible cloud asset inventory at scale
Back to destination list
clickhouse
Official

ClickHouse

This destination plugin lets you sync data from a CloudQuery source to ClickHouse database

Publisher

cloudquery

Repositorygithub.com
Latest version

v6.0.3

Type

Destination

Platforms
Date Published

Price

Free

Overview #

ClickHouse destination plugin

This destination plugin lets you sync data from a CloudQuery source to ClickHouse database.
It supports append write mode only. Write mode selection is required through write_mode.
Supported database versions: >= 22.1.2

Configuration #

Example #

kind: destination
spec:
  name: "clickhouse"
  path: "cloudquery/clickhouse"
  registry: "cloudquery"
  version: "v6.0.3"
  write_mode: "append"
  # Learn more about the configuration options at https://cql.ink/clickhouse_destination
  spec:
    connection_string: "clickhouse://${CH_USER}:${CH_PASSWORD}@localhost:9000/${CH_DATABASE}"
    # Optional parameters
    # cluster: ""
    # ca_cert: ""
    # engine:
    #   name: MergeTree
    #   parameters: []
    #
    # batch_size: 10000
    # batch_size_bytes: 5242880 # 5 MiB
    # batch_timeout: 20s
This example configures a ClickHouse instance, located at localhost:9000. It expects CH_USER, CH_PASSWORD and CH_DATABASE environment variables to be set. The (top level) spec section is described in the Destination Spec Reference.

ClickHouse spec #

This is the (nested) spec used by the ClickHouse destination plugin.
  • connection_string (string) (required)
    Connection string to connect to the database. See SDK documentation for more details.
    Example connection string:
    • "clickhouse://username:password@host1:9000,host2:9000/database?dial_timeout=200ms&max_execution_time=60"
  • cluster (string) (optional) (default: not used)
    Cluster name to be used for distributed DDL. If the value is empty, DDL operations will affect only the server the plugin is connected to.
  • ca_cert (string) (optional) (default: not used)
    PEM-encoded certificate authorities. When set, a certificate pool will be created by appending the certificates to the system pool.
    See file variable substitution for how to read this value from a file.
  • engine (optional, table engine settings. Default: MergeTree engine)
    Engine to be used for tables. Only *MergeTree family is supported at the moment.
  • batch_size (integer) (optional) (default: 10000)
    Maximum number of items that may be grouped together to be written in a single write.
  • batch_size_bytes (integer) (optional) (default: 5242880 (= 5 MiB))
    Maximum size of items that may be grouped together to be written in a single write.
  • batch_timeout (duration) (optional) (default: 20s)
    Maximum interval between batch writes.
  • partition (optional, partitioning) (default: no partitioning)
    Partitioning strategy to be used for tables (i.e. PARTITION BY clause in CREATE TABLE statements).
  • order (optional, ordering) (default: use existing primary key)
    Ordering strategy to be used for tables (i.e. ORDER BY clause in CREATE TABLE statements).
ClickHouse table engine
This option allows to specify a custom table engine to be used.
  • name (string) (required)
    Name of the table engine. Only *MergeTree family is supported at the moment.
  • parameters (array of parameters) (optional) (default: empty)
    Engine parameters. Currently, no restrictions are imposed on the parameter types.
kind: destination
spec:
  name:       "clickhouse"
  path:       "cloudquery/clickhouse"
  registry:   "cloudquery"
  version:    "v6.0.3"
  write_mode: "append"

  spec:
    connection_string: "clickhouse://${CH_USER}:${CH_PASSWORD}@localhost:9000/${CH_DATABASE}"
    engine:
      name: ReplicatedMergeTree
      parameters:
      - "/clickhouse/tables/{shard}/{database}/{table}"
      - "{replica}"
Partitioning
This option allows to specify a partitioning strategy to be used for tables. It is an array of objects.
Each object has the following fields:
  • tables (array of strings) (optional) (default: ["*"])
    List of glob patterns to match table names against. Follows the same rules as the top-level spec tables option.
    If a table matches both a pattern in tables and skip_tables, the table will be skipped.
    Partition strategy table patterns should be disjointed sets: if a table matches two partition strategies, an error will be raised at runtime.
  • skip_tables (array of strings) (optional) (default: empty)
    List of glob patterns to skip matching table names against. Follows the same rules as the top-level spec skip_tables option.
    If a table matches both a pattern in tables and skip_tables, the table will be skipped.
    Partition strategy table patterns should be disjointed sets: if a table matches two partition strategies, an error will be raised at runtime.
  • partition_by (string) (required)
    Partitioning strategy to use, e.g. toYYYYMM(_cq_sync_time), the string is passed as is after "PARTITION BY" clause with no validation or quoting.
    An unset partition_by is not valid.
Example:
partition:
- tables: ["*"]
  skip_tables: ["special_partition_table", "non_partitioned_table"]
  partition_by: "toYYYYMM(_cq_sync_time)"
- tables: ["special_partition_table"]
  partition_by: "toYYYYMMDD(_cq_sync_time)"
Ordering
This option allows to specify custom ORDER BY clauses for tables or groups of tables. It is an array of objects.
Each object has the following fields:
  • tables (array of strings) (optional) (default: ["*"])
    List of glob patterns to match table names against. Follows the same rules as the top-level spec tables option.
    If a table matches both a pattern in tables and skip_tables, the table will be skipped.
    Ordering strategy table patterns should be disjointed sets: if a table matches two ordering strategies, an error will be raised at runtime.
  • skip_tables (array of strings) (optional) (default: empty)
    List of glob patterns to skip matching table names against. Follows the same rules as the top-level spec skip_tables option.
    If a table matches both a pattern in tables and skip_tables, the table will be skipped.
    Ordering strategy table patterns should be disjointed sets: if a table matches two ordering strategies, an error will be raised at runtime.
  • order_by (array of strings) (required)
    Sort key to use, the strings are passed as is after "ORDER BY" clause with no validation or quoting.
Example:
order:
- tables: ["aws_ec2_instances"]
  order_by:
  - "`account_id`"
  - "`region`"
  - "toYYYYMM(`_cq_sync_time`) DESC"
  - "`_cq_id`"

Connecting to ClickHouse Cloud #

To connect to ClickHouse Cloud, you need to set the secure=true parameter, username is default, and the port is 9440. Use a connection string similar to:
connection_string: "clickhouse://default:${CH_PASSWORD}@<your-server-id>.<region>.<provider>.clickhouse.cloud:9440/${CH_DATABASE}?secure=true"
Verbose logging for debug
The ClickHouse destination can be run in debug mode. To achieve this pass the debug=true option to connection_string. See SDK documentation for more details.
Note: This will use SDK built-in logging and might output data and sensitive information to logs. Make sure not to use it in production environment.
kind: destination
spec:
  name:       "clickhouse"
  path:       "cloudquery/clickhouse"
  registry:   "cloudquery"
  version:    "v6.0.3"
  write_mode: "append"

  spec:
    connection_string: "clickhouse://${CH_USER}:${CH_PASSWORD}@localhost:9000/${CH_DATABASE}?debug=true"


Types #

Apache Arrow type conversion #

The ClickHouse destination plugin supports most of Apache Arrow types. It uses the same approach as documented in ClickHouse reference. The following table shows the supported types and how they are mapped to ClickHouse data types.
Arrow Column TypeClickHouse Type
BinaryString
Binary ViewString
BooleanBool
Date32Date32
Date64DateTime
Decimal128 (Decimal)Decimal
Decimal256Decimal
Fixed Size BinaryFixedString
Fixed Size ListArray
Float16Float32
Float32Float32
Float64Float64
Int8Int8
Int16Int16
Int32Int32
Int64Int64
Large BinaryString
Large ListArray
Large StringString
ListArray
MapMap
StringString
String ViewString
StructTuple
Time32DateTime64
Time64DateTime64
TimestampDateTime64
UUID (CloudQuery extension)UUID
Uint8UInt8
Uint16UInt16
Uint32UInt32
Uint64UInt64


Licenses #

The following tools / packages are used in this plugin:
NameLicense
github.com/ClickHouse/ch-goApache-2.0
github.com/ClickHouse/clickhouse-go/v2Apache-2.0
github.com/adrg/xdgMIT
github.com/andybalholm/brotliMIT
github.com/apache/arrow/go/v13Apache-2.0
github.com/apache/arrow-go/v18Apache-2.0
github.com/apapsch/go-jsonmerge/v2MIT
github.com/aws/aws-sdk-go-v2Apache-2.0
github.com/aws/aws-sdk-go-v2/configApache-2.0
github.com/aws/aws-sdk-go-v2/credentialsApache-2.0
github.com/aws/aws-sdk-go-v2/feature/ec2/imdsApache-2.0
github.com/aws/aws-sdk-go-v2/internal/configsourcesApache-2.0
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2Apache-2.0
github.com/aws/aws-sdk-go-v2/internal/iniApache-2.0
github.com/aws/aws-sdk-go-v2/internal/sync/singleflightBSD-3-Clause
github.com/aws/aws-sdk-go-v2/service/internal/accept-encodingApache-2.0
github.com/aws/aws-sdk-go-v2/service/internal/presigned-urlApache-2.0
github.com/aws/aws-sdk-go-v2/service/licensemanagerApache-2.0
github.com/aws/aws-sdk-go-v2/service/marketplacemeteringApache-2.0
github.com/aws/aws-sdk-go-v2/service/ssoApache-2.0
github.com/aws/aws-sdk-go-v2/service/ssooidcApache-2.0
github.com/aws/aws-sdk-go-v2/service/stsApache-2.0
github.com/aws/smithy-goApache-2.0
github.com/aws/smithy-go/internal/sync/singleflightBSD-3-Clause
github.com/bahlo/generic-list-goBSD-3-Clause
github.com/buger/jsonparserMIT
github.com/cenkalti/backoff/v4MIT
github.com/cloudquery/cloudquery-api-goMPL-2.0
github.com/cloudquery/plugin-pb-goMPL-2.0
github.com/cloudquery/plugin-sdk/v2/internal/globMIT
github.com/cloudquery/plugin-sdk/v2/schemaMIT
github.com/cloudquery/plugin-sdk/v2/typesMPL-2.0
github.com/cloudquery/plugin-sdk/v4MPL-2.0
github.com/cloudquery/plugin-sdk/v4/globMIT
github.com/cloudquery/plugin-sdk/v4/scalarMIT
github.com/davecgh/go-spew/spewISC
github.com/ghodss/yamlMIT
github.com/go-faster/cityMIT
github.com/go-faster/errorsBSD-3-Clause
github.com/go-logr/logrApache-2.0
github.com/go-logr/stdrApache-2.0
github.com/goccy/go-jsonMIT
github.com/google/flatbuffers/goApache-2.0
github.com/google/uuidBSD-3-Clause
github.com/grpc-ecosystem/go-grpc-middleware/v2/interceptorsApache-2.0
github.com/grpc-ecosystem/grpc-gateway/v2BSD-3-Clause
github.com/hashicorp/go-cleanhttpMPL-2.0
github.com/hashicorp/go-retryablehttpMPL-2.0
github.com/huandu/xstringsMIT
github.com/invopop/jsonschemaMIT
github.com/klauspost/compressApache-2.0
github.com/klauspost/compress/internal/snaprefBSD-3-Clause
github.com/klauspost/compress/zstd/internal/xxhashMIT
github.com/mailru/easyjsonMIT
github.com/mattn/go-colorableMIT
github.com/mattn/go-isattyMIT
github.com/oapi-codegen/runtimeApache-2.0
github.com/paulmach/orbMIT
github.com/pierrec/lz4/v4BSD-3-Clause
github.com/pkg/errorsBSD-2-Clause
github.com/pmezard/go-difflib/difflibBSD-3-Clause
github.com/rs/zerologMIT
github.com/santhosh-tekuri/jsonschema/v6Apache-2.0
github.com/segmentio/asmMIT
github.com/shopspring/decimalMIT
github.com/spf13/cobraApache-2.0
github.com/spf13/pflagBSD-3-Clause
github.com/stretchr/testifyMIT
github.com/thoas/go-funkMIT
github.com/wk8/go-ordered-map/v2Apache-2.0
github.com/zeebo/xxh3BSD-2-Clause
go.opentelemetry.io/otelApache-2.0
go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttpApache-2.0
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttpApache-2.0
go.opentelemetry.io/otel/exporters/otlp/otlptraceApache-2.0
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttpApache-2.0
go.opentelemetry.io/otel/logApache-2.0
go.opentelemetry.io/otel/metricApache-2.0
go.opentelemetry.io/otel/sdkApache-2.0
go.opentelemetry.io/otel/sdk/logApache-2.0
go.opentelemetry.io/otel/sdk/metricApache-2.0
go.opentelemetry.io/otel/traceApache-2.0
go.opentelemetry.io/proto/otlpApache-2.0
golang.org/x/expBSD-3-Clause
golang.org/x/netBSD-3-Clause
golang.org/x/sync/errgroupBSD-3-Clause
golang.org/x/sysBSD-3-Clause
golang.org/x/textBSD-3-Clause
golang.org/x/xerrorsBSD-3-Clause
google.golang.org/genproto/googleapis/api/httpbodyApache-2.0
google.golang.org/genproto/googleapis/rpc/statusApache-2.0
google.golang.org/grpcApache-2.0
google.golang.org/protobufBSD-3-Clause
gopkg.in/yaml.v2Apache-2.0
gopkg.in/yaml.v3MIT


Join our mailing list

Subscribe to our newsletter to make sure you don't miss any updates.

Legal

© 2024 CloudQuery, Inc. All rights reserved.

We use tracking cookies to understand how you use the product and help us improve it. Please accept cookies to help us improve. You can always opt out later via the link in the footer.