{"id":19273650,"url":"https://github.com/zikwall/clickhouse-docs","last_synced_at":"2026-02-28T02:39:32.303Z","repository":{"id":104958067,"uuid":"215285125","full_name":"zikwall/clickhouse-docs","owner":"zikwall","description":"🐾 ClickHouse Database + Apache Kafka + Zookeeper + Configure Cluster (Shards, Replicated)","archived":false,"fork":false,"pushed_at":"2020-02-25T11:17:03.000Z","size":137,"stargazers_count":7,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-02-23T20:44:01.741Z","etag":null,"topics":["analytics","apache-kafka","clickhouse","cluster","docs","statistics","zookeeper"],"latest_commit_sha":null,"homepage":null,"language":"SQL","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/zikwall.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-10-15T11:46:42.000Z","updated_at":"2024-05-28T09:28:00.000Z","dependencies_parsed_at":null,"dependency_job_id":"adf39a80-857d-4915-8dee-ebf9ee4d91bd","html_url":"https://github.com/zikwall/clickhouse-docs","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/zikwall/clickhouse-docs","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zikwall%2Fclickhouse-docs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zikwall%2Fclickhouse-docs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zikwall%2Fclickhouse-docs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zikwall%2Fclickhouse-docs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zikwall","download_url":"https://codeload.github.com/zikwall/clickhouse-docs/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zikwall%2Fclickhouse-docs/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29923413,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-27T19:37:42.220Z","status":"online","status_checked_at":"2026-02-28T02:00:07.010Z","response_time":90,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["analytics","apache-kafka","clickhouse","cluster","docs","statistics","zookeeper"],"created_at":"2024-11-09T20:43:43.892Z","updated_at":"2026-02-28T02:39:32.287Z","avatar_url":"https://github.com/zikwall.png","language":"SQL","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 💛 ClickHouse. 💙 Kafka. 💚 Zookeeper. ❤️ Clusters.\n\n##### 😋 _For the little ones_ 👲\n###### _Recommended Blog: [Geek Notes - Roman Bogachev](https://bogachev.biz)_ \n###### _Great presentation on CH: [Introduction to the Mysteries of ClickHouse Replication, By Robert Hodges and Altinity Engineering Team](https://www.slideshare.net/Altinity/introduction-to-the-mysteries-of-clickhouse-replication-by-robert-hodges-and-altinity-engineering-team)_\n\n\n### README\n\nThis manual uses specific, working examples, the general concept of which:\n\n```css\n\nClients --\u003e Events --\u003e (Nginx + Rsyslog) --\u003e Golang middleware --\u003e Apache Kafka\n\n                 | \u003c---\u003e Shard O  \\\n--\u003e Apache Kafka | \u003c---\u003e Shard I   | \u003c---\u003e Distributed Server \u003c---\u003e Analyst\n                 | \u003c---\u003e Shard II /\n\n```\n\n#### Replicated concept\n\n```css\n\n--\u003e Apache Kafka \n        --\u003e CH Kafka Engine Table \n            --\u003e Main Consummer (Materialized View) --\u003e Main Storage Table\n                                                    \\..\u003e  First Aggregate MV --\u003e ReplicatedSumminMergeTree\n                                                     \\..\u003e Second Aggregate MV --\u003e ReplicatedAggregatingMergeTree\n\n```\n\n## TABLE OF CONTENTS\n\n1. [ClickHouse](#clickhouse)\n    1. [Installation](#clickhouse-installation)\n    2. [Start](#clickhouse-start)\n    3. [Configuration](#clickhouse-configuration)\n    4. [An interesting selection of articles that you can read](#clickhouse-reeading)\n2. [Apache Kafka](#kafka)\n    1. [Installation](#kafka-installation)\n    2. [Configuration](#kafka-configuration)\n    3. [Systemd and run](#kafka-start)\n    4. [Kafka command line starter pack](#kafka-getting-starter)\n    5. [Create Kafka Topics in 3 Easy Steps](#kafka-create-topic-three-steep)\n3. [Zookeeper](#zookeeper)\n    1. [Before installation proccess](#zookeeper-before-installation)\n    2. [Installation](#zookeeper-installation)\n    3. [Configuration](#zookeeper-configuration)\n    4. [Start](#zookeeper-start)\n4. [Cluster and Replicated](#cluster)\n    1. [Configuration](#cluster-configuration)\n    2. [SetUp Distributed server](#cluster-distributed)\n    3. [Testing data](#cluster-testing)\n5. [Import from MySQL to ClickHouse](#clikchouse-import-mysql)\n6. [Rsyslog \u0026\u0026 Nginx](#rsyslog-nginx)\n\n## STRUCTURE OF FILES\n\n1. [MAIN](#file-readme-md)\n2. [Distributed Table](https://github.com/zikwall/clickhouse-docs/blob/master/src/sql/distributed.sql)\n3. [Materialized View](https://github.com/zikwall/clickhouse-docs/blob/master/src/sql/mv.sql)\n4. [Queue Table (Kafka ENGINE)](https://github.com/zikwall/clickhouse-docs/blob/master/src/sql/queue.sql)\n5. [Stat Table (Merge Tree, Replicated Merge Tree)](https://github.com/zikwall/clickhouse-docs/blob/master/src/sql/stat.sql)\n6. [GoLang Data Generator](https://github.com/zikwall/clickhouse-docs/blob/master/src/generator.go)\n\n***\n## \u003ca name=\"clickhouse\"\u003e\u003c/a\u003eClickHouse\n\n### \u003ca name=\"clickhouse-installation\"\u003e\u003c/a\u003eInstallation\n\n1. 1️⃣ __Check SSE:__ `grep -q sse4_2 /proc/cpuinfo \u0026\u0026 echo \"SSE 4.2 supported\" || echo \"SSE 4.2 not supported\"`\n2. 2️⃣ `deb http://repo.yandex.ru/clickhouse/trusty/ dists/stable/main/binary-amd64/`\n   - **or** ↘️ `echo \"deb [ arch=amd64 ] http://repo.yandex.ru/clickhouse/deb/stable/ main/\" | tee /etc/apt/sources.list.d/clickhouse.list`\n3. 3️⃣ **APT**\n   - 1️⃣ `sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv E0C56BD4`\n   - 2️⃣ `sudo apt-get update`\n   - 3️⃣ `sudo apt-get install clickhouse-client clickhouse-server`\n  \n#### \u003ca name=\"clickhouse-start\"\u003e\u003c/a\u003eStart\n\n- 📯 `sudo service clickhouse-server start`\n\n![Image of](https://images.squarespace-cdn.com/content/v1/58d158119f745633ea326878/1552927324227-R77P7FC6QG7QP7Q57YFF/ke17ZwdGBToddI8pDm48kPQ-r4N3e8V1OxBBbJA7n2BZw-zPPgdn4jUwVcJE1ZvWQUxwkmyExglNqGp0IvTJZamWLI2zvYWH8K3-s_4yszcp2ryTI0HqTOaaUohrI8PIqfMey-3XQuZ7dCrTil8FVfyFscw_fkSOWhK_zzlt9-wKMshLAGzx4R3EDFOm1kBS/ClickHouse%2BNetwork%2BConfiguration%2C%2BPart%2B1_cr.jpg)\n\n### \u003ca name=\"clickhouse-configuration\"\u003e\u003c/a\u003eConfiguration\n\n⚠️ _It is advisable to mount a separate disk for data storage_\n\n\n#### \u003ca name=\"clickhouse-reeading\"\u003e\u003c/a\u003eAn interesting selection of articles that you can read\n\n##### Only Russian Habr \u0026\u0026 HighLoad\n\n1. [2019.06.08 Анализ производительности запросов в ClickHouse. Доклад Яндекса](https://habr.com/ru/company/yandex/blog/459198/)\n2. [2018.11.22 Использование ClickHouse в VK, или Зачем мы написали KittenHouse](https://habr.com/ru/company/vk/blog/430168/)\n3. [2017.02.27 ClickHouse: очень быстро и очень удобно](https://habr.com/ru/post/322724/)\n4. [2016.11.07 Как запустить ClickHouse своими силами и выиграть джекпот](https://habr.com/ru/company/smi2/blog/314558/)\n5. [2016.11.07 Масштабирование ClickHouse, управление миграциями и отправка запросов из PHP в кластер](https://habr.com/ru/company/smi2/blog/314558/)\n6. [2018.06.25 Как VK вставляет данные в ClickHouse с десятков тысяч серверов](https://www.highload.ru/siberia/2018/abstracts/3614)\n7. [Масштабирование ClickHouse, управление миграциями и отправка запросов из PHP в кластер](https://habr.com/ru/company/smi2/blog/317682/)\n8. [Как мы в ivi переписывали etl: Flink+Kafka+ClickHouse](https://habr.com/ru/company/ivi/blog/347408/)\n\n***\n## \u003ca name=\"kafka\"\u003e\u003c/a\u003eApache Kafka\n\n### \u003ca name=\"kafka-installation\"\u003e\u003c/a\u003eInstallation\n\n1. `sudo apt install default-jre`\n2. `java -version`\n3. Download from https://kafka.apache.org/quickstart and `tar -xvzf /path/to/kafka_tmp/kafka.tgz --strip 1`\n\n\n### \u003ca name=\"kafka-configuration\"\u003e\u003c/a\u003eConfiguration\n\n1. `nano ~/kafka/config/server.properties`\n2. Add lines to end of file: `delete.topic.enable = true`\n3. The server.properties file defines the following important properties required for Kafka broker:\n\n   ```bash\n   # Broker identifier. This should be a unique number for each broker.\n   Broker.id = 0\n   # Listening port\n   port = 9092\n   # Directory where log files will be stored\n   log.dir = /tmp/kafka-logs\n   # By default, the number of sections of magazines per topic.\n   num.partitions = 2\n   # Zookeeper connection string\n   zookeeper.connect = localhost:2181\n   ```\n\n#### \u003ca name=\"kafka-start\"\u003e\u003c/a\u003e Systemd and run\n\n1. **Zookeeper service:**\n   - `sudo nano /etc/systemd/system/zookeeper.service`\n   - insert next lines (**only example**) ❗️\n   ```bash\n   [Unit]\n   Requires=network.target remote-fs.target\n   After=network.target remote-fs.target\n\n   [Service]\n   Type=simple\n   User=kafka\n   ExecStart=/kafka/kafka/bin/zookeeper-server-start.sh /kafka/kafka/config/zookeeper.properties\n   ExecStop=/kafka/kafka/bin/zookeeper-server-stop.sh\n   Restart=on-abnormal\n\n   [Install]\n   WantedBy=multi-user.target\n   ```\n\n2. **Kafka service:**\n   - `sudo nano /etc/systemd/system/kafka.service`\n   - insert (**example**) ❗️\n   ```bash\n   [Unit]\n   Requires=zookeeper.service\n   After=zookeeper.service\n\n   [Service]\n   Type=simple\n   User=kafka\n   ExecStart=/bin/sh -c '/kafka/kafka/bin/kafka-server-start.sh /kafka/kafka/config/server.properties \u003e       /kafka/kafka/kafka.log 2\u003e\u00261'\n   ExecStop=/kafka/kafka/bin/kafka-server-stop.sh\n   Restart=on-abnormal\n\n   [Install]\n   WantedBy=multi-user.target\n   ```\n### \u003ca name=\"kafka-getting-starter\"\u003e\u003c/a\u003eKafka command line starter pack\n\n1. **Create topic:** `bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic myTopicName`\n2. **Run consumer:** `bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic myTopicName --from-beginning`\n3. **Run producer:** `bin/kafka-console-producer.sh --broker-list localhost:9092 --topic myTopicName`\n4. **Delete topic:** `bin/kafka-topics.sh --zookeeper localhost:2181 --delete --topic myTopicName`\n5. **Get topic list:** `bin/kafka-topics.sh --list  --zookeeper localhost:2181`\n6. **Get count messages of topic:** `bin/kafka-run-class.sh kafka.tools.GetOffsetShell --broker-list localhost:9092 --topic statopic001 --time -1`\n\n### \u003ca name=\"kafka-create-topic-three-steep\"\u003e\u003c/a\u003eCreate Kafka Topics in 3 Easy Steps\n\n![Image of](https://github.com/zikwall/clickhouse-docs/blob/master/img/Read.webp)\n\nCreating a topic in production is an operative task that requires awareness and preparation. In this tutorial, we’ll explain all the parameters to consider when creating a new topic in production.\n\nSetting the partition count and replication factor is required when creating a new Topic and the following choices affect the performance and reliability of your system.\n\n**Create a topic**\n```\nkafka/bin/kafka-topics.sh --create \\\n--zookeeper localhost:2181 \\\n--replication-factor 2 \\\n--partitions 3 \\\n--topic unique-topic-name\n```\n\n**PARTITIONS**\nKafka topics are divided into a number of partitions, which contains messages in an unchangeable sequence. Each message in a partition is assigned and identified by its unique offset.\n\nPartitions allow us to split the data of a topic across multiple brokers balance the load between brokers. Each partition can be consumed by only one consumer group, so the parallelism of your service is bound by the number of partition the topic has.\n\nThe number of partitions is affected by two main factors, the number of messages and the avg size of each message. In case the volume is high you will need to use the number of brokers as a multiplier, to allow the load to be shared on all consumers and avoid creating a hot partition which will cause a high load on a specific broker. We aim to keep partition throughput up to 1MB per second.\n\nSet Number of Partitions\n\n`--partitions [number]`\n\n**REPLICAS**\n![Image of](https://github.com/zikwall/clickhouse-docs/blob/master/img/Read.webp)\n\nKafka optionally replicates topic partitions in case the leader partition fails and the follower replica is needed to replace it and become the leader. When configuring a topic, recall that partitions are designed for fast read and write speeds, scalability, and for distributing large amounts of data. The replication factor (RF), on the other hand, is designed to ensure a specified target of fault-tolerance. Replicas do not directly affect performance since at any given time, only one leader partition is responsible for handling producers and consumer requests via broker servers.\n\nAnother consideration when deciding the replication factor is the number of consumers that your service needs in order to meet the production volume.\n\n**Set Replication Factor (RF)**\nIn case your topic is using keys, consider using RF 3 otherwise, 2 should be sufficient.\n\n`--replication-factor [number]`\n\n***\n## \u003ca name=\"zookeeper\"\u003e\u003c/a\u003eZookeeper\n\n### \u003ca name=\"zookeeper-before-installation\"\u003e\u003c/a\u003eBefore installation proccess\n\n1. `sudo apt-get update`\n2. Check Java `java --version`\n3. If Java is not installed:\n   - `apt-get install default-jre`\n   - If you need a Java development kit (JDK) that is needed to compile Java applications (for example: Apache Ant, Apache Maven, Eclipse or IntelliJ IDEA), then you need to install: `apt-get install default-jdk`\n\n### \u003ca name=\"zookeeper-installation\"\u003e\u003c/a\u003eInstallation\n\n1. Download from (https://www.apache.org/dyn/closer.cgi/zookeeper/) example: `wget -P /home/master/zookeepertmp/ http://apache-mirror.rbc.ru/pub/apache/zookeeper/stable/apache-zookeeper-3.5.5-bin.tar.gz`\n2. Example unpack: `tar -xvzf /home/master/zookeepertmp/apache-zookeeper-3.5.5-bin.tar.gz --strip 1`\n\n### \u003ca name=\"zookeeper-configuration\"\u003e\u003c/a\u003eConfiguration\n\n1. Copy config file: `cp /path/to/zookeeper/conf/zoo_sample.cfg /path/to/zookeeper/conf/zoo.cfg`\n2. Delete comments (OPTIONAL)\n   example config:\n   ```bash\n   tickTime=2000\n   initLimit=5\n   syncLimit=2\n   dataDir=/clh/zookeeper/data\n   clientPort=2181\n   ```\n\n### \u003ca name=\"zookeeper-start\"\u003e\u003c/a\u003eStart\n\n1. `bin/zkServer.sh start`\n\n***\n## \u003ca name=\"cluster\"\u003e\u003c/a\u003eCluster and Replicated\n\n#### :exclamation: _This step requires you to complete the previous paragraph on Zookeeper_ :exclamation:\n##### :question: _An example of a cluster of two shards with one replica_ :question:\n\n![Image of](https://image.slidesharecdn.com/milovidovpl18internals-180502184851/95/clickhouse-deep-dive-by-aleksei-milovidov-29-638.jpg?cb=1525287046)\n\n### \u003ca name=\"cluster-configuration\"\u003e\u003c/a\u003eConfiguration\n\n0. :zero: On each server, you need to add a local IP address to the Clickhouse hosts configuration /etc/clickhouse-server/config.xml:\n   ```xml\n   \u003clisten_host\u003e::1\u003c/listen_host\u003e \u003c!-- or ipv4 --\u003e\n   \u003clisten_host\u003e--local-ip-here--\u003c/listen_host\u003e\n   ```\n\n1. :one: Configure Zookeeper config on each replica server, example:\n   ```xml\n   \u003czookeeper\u003e\n      \u003cnode\u003e\n         \u003chost\u003e--host or ip address here--\u003c/host\u003e\n         \u003cport\u003e2181\u003c/port\u003e\n      \u003c/node\u003e\n   \u003c/zookeeper\u003e\n   ```\n2. :two: Configure macros file, or macros section:\n   \n   - First replica on first shard:\n   ```xml\n   \u003cmacros\u003e\n        \u003clayer\u003e01\u003c/layer\u003e\n        \u003cshard\u003e01\u003c/shard\u003e\n        \u003creplica\u003eclh-01\u003c/replica\u003e\n   \u003c/macros\u003e\n   ```\n   - Second replica on second shard:\n   ```xml\n   \u003cmacros\u003e\n        \u003clayer\u003e01\u003c/layer\u003e\n        \u003cshard\u003e02\u003c/shard\u003e\n        \u003creplica\u003eclh-02\u003c/replica\u003e\n   \u003c/macros\u003e\n   ```\n\n3. :three: We create identical tables on each replica server, see: https://gist.github.com/zikwall/764673dfcd3c5fa4225b57a1a2899311#file-stat-sql\n\n#### \u003ca name=\"cluster-distributed\"\u003e\u003c/a\u003e SetUp Distributed server\n\u003e Those. each server will store a piece of the table (also called shards). But in this case, the work with the table becomes more complicated. After all, how to make a selection that processes all the data at once?\nFor this, Clickhouse has a special table engine - **Distributed**. It just addresses the indicated problem. Instead of the functions of a regular table, it sends requests to different servers and collects data from them. Then the collected data is further processed locally (for example, grouped) and the results are returned to the client.\n\n\u003e On a separate server (from which we will send requests) we will configure a cluster that points to shard servers. To do this, add the following to the _**\u003cremote_servers\u003e**_ block in the settings file _(/etc/clickhouse-server/config.xml)_:\n\n1. :one: Edit config.xml section __remote servers__ or __clickhouse_remote_servers.xml__\n   example:\n   ```xml\n   \u003cremote_servers\u003e\n      \u003cmonit_cluster\u003e \u003c!--  cluster name --\u003e\n         \u003c!-- first shard, one replica --\u003e\n         \u003cshard\u003e\n            \u003creplica\u003e\n               \u003chost\u003e--host_or_ip_address--\u003c/host\u003e\n               \u003cport\u003e9000\u003c/port\u003e\n               \u003cpassword\u003e--password_here--\u003c/password\u003e \u003c!-- for user default required --\u003e\n            \u003c/replica\u003e\n         \u003c/shard\u003e\n         \u003c!-- second shart, one replica --\u003e\n         \u003cshard\u003e\n            \u003creplica\u003e\n               \u003chost\u003e--host_or_ip_address--\u003c/host\u003e\n               \u003cport\u003e9000\u003c/port\u003e\n               \u003cpassword\u003e--password_here--\u003c/password\u003e\n            \u003c/replica\u003e\n         \u003c/shard\u003e\n      \u003c/monit_cluster\u003e\n    \u003c/remote_servers\u003e\n   ```\n\n### \u003ca name=\"cluster-testing\"\u003e\u003c/a\u003e Testing data\n\n\u003e You can fill in data from non-shard tables that could be generated by a GoLang script\n\n**Export** table from not Replicated table, example: `clickhouse-client -h::1 -udefault --password=passwordhere --max_threads=1  --query=\"select * from monit.stat where day_begin \u003e= 1563310800 and day_begin \u003c= 1563829200 FORMAT Native\"  \u003e /home/bduser/clh_exports/stat_1563310800_1563829200.native`\n\n\u003eYou may encounter errors, for example, a password entry field will be written to the dump. To fix you can do this trick\n`sed '1d' stat_1563397200.csv | clickhouse-client -h::1 -udefault --password=passhere --query=\"INSERT INTO monit.stat FORMAT CSV\"`\nThis error can be resolved immediately by specifying the password in the command line when connecting clickhouse client\n\n**Import:** `clickhouse-client -h::1 -udefault --password --max_threads=1  --query=\"INSERT INTO monit.stat FORMAT Native\" \u003c stat_1563310800_1563829200.native`\n\n***\n## \u003ca name=\"clikchouse-import-mysql\"\u003e\u003c/a\u003eImport from MySQL to ClickHouse\n\n**Import to Click House Server:** `cat table.tsv | clickhouse-client --query=\"INSERT INTO first_base.table_name FORMAT CSV\" -h::1 --password`\n\n**Export from MySQL to TSV**: `mysql -Bse \"select all_fields_here from db_name.table_name_here\" \u003e table.tsv -h hostname -u username -p`\n\n**Export from MySQL table (as CSV) AND INSERT TO Click House Table:** `mysql -u username  -p --compress -ss -e \"SELECT all_fields_here FROM db_name.table_name\" test | sed 's/\\\"//g;s/\\t/\",\"/g;s/^/\"/;s/$/\"/' | clickhouse-client --query=\"INSERT INTO first_base.table_name FORMAT TSV\" -h hostname`\n\n## \u003ca name=\"rsyslog-nginx\"\u003e\u003c/a\u003eRsyslog \u0026 Nginx\n\nSetup action: /etc/rsyslog.d/default.conf\n\n```\nlocal6.*  action(type=\"omprog\" binary=\"/path/to/hadnler/(php), (go), (peyhton)\")\n```\n\nNginx setup: /etc/nginx/sites-available/your-service.conf\n\n```\naccess_log syslog:server={ip:port},facility=local6 example_name_here;\n```\n\nExample PHP Handler @see: [Here](https://github.com/zikwall/clickhouse-docs/blob/master/src/php_handler.php)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzikwall%2Fclickhouse-docs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzikwall%2Fclickhouse-docs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzikwall%2Fclickhouse-docs/lists"}