背景
最近花了些時間看了下ClickHouse文檔,發現它在OLAP方面表現很優異,並且相對也比較輕量和簡單,因此準備入門瞭解下該數據庫系統。在介紹了安裝和用戶權限管理以後,本文對其配置文件作下相關的介紹說明。html
說明
ClickHouse的配置文件是config.xml,默認在/etc/clickhouse-server/目錄中,能夠在conf.d和config.d目錄中的*.xml和*.conf文件中覆蓋各個設置。還能夠爲這些配置文件的元素指定replace或remove屬性,若是均未指定,它將以遞歸方式合併元素的內容,從而替換重複子元素的值。若是指定了replace,將用指定的元素替換整個元素。若是指定了remove,則刪除該元素。node
配置文件還能夠定義substitutions(替代)。若是元素具備incl屬性,則文件中的相應值將被替換。替換文件的路徑爲/etc/metrika.xml。能夠在配置文件加入include_from元素進行更改。替換值在此文件的/yandex/substitution_name元素中指定。若是incl中指定的替代不存在,則將其記錄在日誌中。爲了防止ClickHouse記錄缺乏的替代項,請指定:optional= true屬性。mysql
能夠從ZooKeeper中進行替換,指定屬性from_zk =「 /path/to/node」。元素值將替換爲ZooKeeper中/path/to/node上節點的內容。還能夠將整個XML子樹放在ZooKeeper節點上,並將其徹底插入到source元素中。git
config.xml文件可使用users設置,爲profiles和quotas指定單獨的配置。此配置的相對路徑在'users_config'元素中設置。默認狀況下,它是users.xml。若是省略users_config,則直接在config.xml中指定。github
配置參數
瞭解了各個參數的目的是更好進行配置和使用資源的限制,關於參數的詳細說明能夠看官方文檔:Server settings、Settings正則表達式
Server settings:在config.xml裏設置
1. builtin_dictionaries_reload_interval:從新加載內置詞典的時間間隔(以秒爲單位),默認3600。能夠在不從新啓動服務器的狀況下「即時」修改詞典。算法
<builtin_dictionaries_reload_interval>3600</builtin_dictionaries_reload_interval>
2. compression:MergeTree引擎表的數據壓縮設置。配置模板如:sql
<compression incl="clickhouse_compression"> --指定incl <case> <min_part_size>10000000000</min_part_size> --數據部分的最小大小 <min_part_size_ratio>0.01</min_part_size_ratio> --數據部分大小與表大小的比率 <method>zstd</method> --壓縮算法,zstd和lz4 </case> </compression>
能夠配置多個<case>。若是數據部分與條件集匹配,使用指定的壓縮方法;若是數據部分匹配多個條件集,將使用第一個匹配的條件集;若是數據部分不知足任何條件,則使用lz4壓縮。數據庫
3. default_database:默認數據庫。express
<default_database>default</default_database>
4. default_profile:默認設置配置文件,在參數user_config中指定。
<default_profile>default</default_profile>
5. dictionaries_config:外部詞典的配置文件的路徑,在config配置文件中指定。路徑能夠包含通配符*和?的絕對或則相對路徑。
<dictionaries_config>*_dictionary.xml</dictionaries_config>
6. dictionaries_lazy_load:延遲加載詞典,默認false。
true:在首次使用時建立每一個字典。 若是字典建立失敗,則正在使用字典的函數將引起異常。
false:在服務器啓動時將建立全部字典,若是有錯誤,則服務器將關閉。
<dictionaries_lazy_load>true</dictionaries_lazy_load>
7. format_schema_path:包含輸入格式文件(例如CapnProto格式的方案)的目錄路徑。
<format_schema_path> format_schemas / </ format_schema_path>
8. graphite:將數據發送到Graphite,它是一款企業級監控。
<graphite> <host>localhost</host> -- Graphite服務器 <port>42000</port> -- Graphite服務器上的端口 <timeout>0.1</timeout> -- 發送超時時間,以秒爲單位 <interval>60</interval> -- 發送間隔,以秒爲單位 <root_path>one_min</root_path> -- 密鑰的前綴 <metrics>true</metrics> -- 從system.metrics表發送數據 <events>true</events> -- 從system.events表發送在該時間段內累積的增量數據 <events_cumulative>false</events_cumulative> -- 從system.events表發送累積數據 <asynchronous_metrics>true</asynchronous_metrics> -- 從system.asynchronous_metrics表發送數據 </graphite>
能夠配置多個<graphite>子句。例如,您可使用它以不一樣的時間間隔發送不一樣的數據。後期監控會單獨寫篇文章介紹,目前暫時進行說明。
9. graphite_rollup:數據彙總設置
<default> <function>max</function> <retention> <age>0</age> <precision>60</precision> </retention> <retention> <age>3600</age> <precision>300</precision> </retention> <retention> <age>86400</age> <precision>3600</precision> </retention> </default> </graphite_rollup_example>
更多詳細信息,請參見GraphiteMergeTree。
10. http_port/https_port:經過HTTP鏈接到服務器的端口。若是指定了https_port,則必須配置openSSL。若是指定了http_port,則即便已設置openSSL配置,也會將其忽略。
<http_port>8123</http_port>
11. http_server_default_response:訪問ClickHouse HTTP服務器時默認顯示的頁面。默認值爲「OK」(末尾有換行符)
<http_server_default_response> <![CDATA[<html ng-app="SMI2"><head><base href="http://ui.tabix.io/"></head><body><div ui-view="" class="content-ui"></div><script src="http://loader.tabix.io/master.js"></script></body></html>]]> </http_server_default_response>
12. include_from:帶替換文件的路徑,有關更多信息,請參見「Configuration files」部分。
<include_from>/etc/metrica.xml</include_from>
13. interserver_http_port:於在ClickHouse服務器之間交換數據的端口。
<interserver_http_port>9009</interserver_http_port>
14. interserver_http_host:其餘服務器能夠用來訪問該服務器的主機名。若是省略,則其定義方法與hostname -f命令相同。
<、>example.yandex.ru</interserver_http_host>
15. interserver_http_credentials:在使用Replicated *引擎進行復制期間進行身份驗證的用戶名和密碼。 這些憑據僅用於副本之間的通訊,與ClickHouse客戶端的憑據無關。 服務器正在檢查這些憑據以鏈接副本,並在鏈接到其餘副本時使用相同的憑據。 所以,對於羣集中的全部副本,應將這些憑據設置爲相同。默認不使用身份驗證。
<interserver_http_credentials> <user>admin</user> <password>222</password> </interserver_http_credentials>
16. keep_alive_timeout:ClickHouse在關閉鏈接以前等待傳入請求的秒數。 默認爲3秒。
<keep_alive_timeout>3</keep_alive_timeout>
17. listen_host:限制來源主機的請求, 若是要服務器回答全部請求,請指定「::」 :
<listen_host> :: 1 </ listen_host> <listen_host> 127.0.0.1 </ listen_host>
18. logger:日誌記錄設置。選項組裏的設置有:level、log、errorlog、size、count:
<logger>
<level>trace</level> --日誌記錄級別。可接受的值: trace, debug, information, warning, error <log>/var/log/clickhouse-server/clickhouse-server.log</log> --日誌文件,根據級別包含全部條目 <errorlog>/var/log/clickhouse-server/clickhouse-server.err.log</errorlog> -- 錯誤日誌文件 <size>1000M</size> -- 文件的大小。適用於loganderrorlog,文件達到大小後,ClickHouse將對其進行存檔並重命名,並在其位置建立一個新的日誌文件 <count>10</count> -- ClickHouse存儲的已歸檔日誌文件的數量 </logger>
還支持寫入系統日誌:
<logger>
<use_syslog>1</use_syslog> -- 寫入系統日誌 <syslog> <address>syslog.remote:10514</address> -- syslogd的主機[:port]。若是省略,則使用本地守護程序 <hostname>myhost.local</hostname> -- 可選,從中發送日誌的主機的名稱。 <facility>LOG_LOCAL6</facility> -- syslog關鍵字,其大寫字母帶有「 LOG_」前綴:(LOG_USER,LOG_DAEMON,LOG_LOCAL3,依此類推) <format>syslog</format> -- 格式。可能的值:bsd和syslog </syslog> </logger>
19. macros:複製表的參數替換,若是不使用複製表,則能夠省略。有關更多信息,請參見「Creating replicated tables」
<macros incl="macros" optional="true" />
20. mark_cache_size:標記緩存的大小,用於MergeTree系列的表中。 以字節爲單位,共享服務器的緩存,並根據須要分配內存。緩存大小必須至少爲5368709120(5G)。
<mark_cache_size>5368709120</mark_cache_size>
21. max_concurrent_queries:同時處理的最大請求數。
<max_concurrent_queries>100</max_concurrent_queries>
22. max_connections:最大鏈接數。
<max_connections>4096</max_connections>
23. max_open_files:打開最大的文件數,默認最大值
<max_open_files> 262144 </ max_open_files>
24. max_table_size_to_drop:刪除表的限制,默認50G,0表示不限制。若是MergeTree表的大小超過max_table_size_to_drop(以字節爲單位),則沒法使用DROP查詢將其刪除。若是仍然須要刪除表而不從新啓動ClickHouse服務器,請建立<clickhouse-path>/flags/force_drop_table文件並運行DROP查詢。
<max_table_size_to_drop>0</max_table_size_to_drop>
25. merge_tree:對MergeTree中的表進行調整,有關更多信息,請參見MergeTreeSettings.h頭文件。
<merge_tree> <max_suspicious_broken_parts>5</max_suspicious_broken_parts> </merge_tree>
26. openSSL:SSL客戶端/服務器配置。服務器/客戶端設置:
<openSSL> <server> <!-- openssl req -subj "/CN=localhost" -new -newkey rsa:2048 -days 365 -nodes -x509 -keyout /etc/clickhouse-server/server.key -out /etc/clickhouse-server/server.crt --> <certificateFile>/etc/clickhouse-server/server.crt</certificateFile> --PEM格式的客戶端/服務器證書文件的路徑。若是privateKeyFile包含證書,則能夠忽略它。 <privateKeyFile>/etc/clickhouse-server/server.key</privateKeyFile> --具備PEM證書的祕密密鑰的文件的路徑。該文件可能同時包含密鑰和證書。 <!-- openssl dhparam -out /etc/clickhouse-server/dhparam.pem 4096 --> <dhParamsFile>/etc/clickhouse-server/dhparam.pem</dhParamsFile> <verificationMode>none</verificationMode> --檢查節點證書的方法。詳細信息在Context類的描述中。可能的值:none, relaxed, strict, once. <loadDefaultCAFile>true</loadDefaultCAFile> --指示將使用OpenSSL的內置CA證書。可接受的值:true,false <cacheSessions>true</cacheSessions> --啓用或禁用緩存會話。必須與sessionIdContext結合使用。可接受的值:true,false。 <disableProtocols>sslv2,sslv3</disableProtocols> --不容許使用的協議。 <preferServerCiphers>true</preferServerCiphers> ----首選服務器密碼 </server> <client> <loadDefaultCAFile>true</loadDefaultCAFile> --指示將使用OpenSSL的內置CA證書。可接受的值:true,false <cacheSessions>true</cacheSessions> -- --啓用或禁用緩存會話。必須與sessionIdContext結合使用。可接受的值:true,false。 <disableProtocols>sslv2,sslv3</disableProtocols> --不容許使用的協議。 <preferServerCiphers>true</preferServerCiphers> --首選服務器密碼 <!-- Use for self-signed: <verificationMode>none</verificationMode> --> <invalidCertificateHandler> --用於驗證無效證書的類 <!-- Use for self-signed: <name>AcceptCertificateHandler</name> --> <name>RejectCertificateHandler</name> </invalidCertificateHandler> </client> </openSSL>
27. part_log:記錄與MergeTree關聯的事件。如添加或合併數據。可使用日誌來模擬合併算法並比較其特徵。 查詢記錄在system.part_log表中,而不記錄在單獨的文件中。 您能夠在table參數中配置該表的名稱(<part_log>)。使用如下參數來配置日誌記錄:
<part_log> <database>system</database> --庫名 <table>part_log</table> --表名 <partition_by>toMonday(event_date)</partition_by> --自定義分區鍵 <flush_interval_milliseconds>7500</flush_interval_milliseconds> --將數據從內存中的緩衝區刷新到表的時間間隔,單位毫秒。 </part_log>
28. path:數據的目錄路徑。
<path>/var/lib/clickhouse/</path>
29. query_log:經過log_queries = 1設置,記錄接收到的查詢。查詢記錄在system.query_log表中,而不記錄在單獨的文件中。能夠在table參數中更改表的名稱。
<query_log> <database>system</database> --庫名 <table>query_log</table> --表名 <partition_by>toMonday(event_date)</partition_by> --自定義分區鍵 <flush_interval_milliseconds>7500</flush_interval_milliseconds> --將數據從內存中的緩衝區刷新到表的時間間隔 </query_log>
若是該表不存在,ClickHouse將建立它。若是在更新ClickHouse服務器時查詢日誌的結構發生了更改,則具備舊結構的表將重命名,並自動建立一個新表。
30. query_thread_log:使用log_query_threads = 1設置,記錄接收到查詢的線程。查詢記錄在system.query_thread_log表中,而不記錄在單獨的文件中。您能夠在table參數中更改表的名稱。
<query_thread_log> <database>system</database> --庫名 <table>query_thread_log</table> --表名 <partition_by>toMonday(event_date)</partition_by> --自定義分區鍵 <flush_interval_milliseconds>7500</flush_interval_milliseconds> --將數據從內存中的緩衝區刷新到表的時間間隔 </query_thread_log>
若是該表不存在,ClickHouse將建立它。若是在更新ClickHouse服務器時查詢線程日誌的結構發生了更改,則具備舊結構的表將重命名,並自動建立一個新表。
31. trace_log:trace_log系統表操做的設置。
<trace_log> <database>system</database> --庫名 <table>trace_log</table> --表名 <partition_by>toYYYYMM(event_date)</partition_by> ----自定義分區鍵 <flush_interval_milliseconds>7500</flush_interval_milliseconds> ----將數據從內存中的緩衝區刷新到表的時間間隔 </trace_log>
32. query_masking_rules:基於Regexp的規則,應用於查詢以及全部日誌消息。再其存儲在服務器日誌中,system.query_log,system.text_log,system.processes表以及以日誌形式發送給客戶端。這樣能夠防止SQL查詢中的敏感數據泄漏記錄到日誌中。
<query_masking_rules> <rule> <name>hide SSN</name> --規則名稱 <regexp>(^|\D)\d{3}-\d{2}-\d{4}($|\D)</regexp> --正則表達式 <replace>000-00-0000</replace> --替換,敏感數據的替換字符串(默認爲可選-六個星號) </rule> </query_masking_rules>
規則適用於整個查詢,system.events表具備計數器QueryMaskingRulesMatch,該計數器具備查詢掩碼規則匹配的總數。對於分佈式查詢,必須分別配置每一個服務器,不然子查詢將傳遞給其餘服務器節點將被存儲而不會屏蔽。
33. remote_servers:遠程服務器,分佈式表引擎和集羣表功能使用的集羣的配置。
<remote_servers incl="clickhouse_remote_servers" />
34. timezone:服務器的時區,定爲UTC時區或地理位置(例如,非洲/阿比讓)的IANA標識符。
當DateTime字段輸出爲文本格式(打印在屏幕或文件中),以及從字符串獲取DateTime時,時區對於在String和DateTime格式之間進行轉換是必需的。 此外,若是在輸入參數中未接收到時區,則在使用時間和日期的函數中會使用時區。
<timezone>Europe/Moscow</timezone>
35. tcp_port:經過TCP協議與客戶端進行通訊的端口,即ClickHouse端口。
<tcp_port>9000</tcp_port>
36. tcp_port_secure:經過TCP協議與客戶端進行通訊的端口,即ClickHouse端口。 與OpenSSL設置一塊兒使用。
<tcp_port_secure> 9440 </ tcp_port_secure>
37. mysql_port:經過MySQL協議與客戶端通訊的端口。
<mysql_port>9004</mysql_port>
38. tmp_path:用於處理大型查詢的臨時數據的路徑。
<tmp_path>/var/lib/clickhouse/tmp/</tmp_path>
39. tmp_policy:從storage_configuration的策略,用於存儲臨時文件。若是未設置,則使用tmp_path,不然將忽略它。
40. uncompressed_cache_size:表引擎從MergeTree使用的未壓縮數據的緩存大小(以字節爲單位,8G)。服務器有一個共享緩存,內存是按需分配的。若是啓用,則使用高速緩存。在個別狀況下,未壓縮的緩存對於很是短的查詢是有利的。
<uncompressed_cache_size>8589934592</uncompressed_cache_size>
41. user_files_path:包含用戶文件的目錄,在表函數file()中使用。
<user_files_path>/var/lib/clickhouse/user_files/</user_files_path>
42. users_config:用戶配置文件,能夠配置用戶訪問、profiles、quota、查詢等級等。
<users_config>users.xml</users_config>
43. zookeeper:ClickHouse與ZooKeeper羣集進行交互的設置。使用複製表時,ClickHouse使用ZooKeeper來存儲副本的元數據。若是不使用複製表,則能夠忽略此參數。
<zookeeper> <node> <host>example1</host> <port>2181</port> </node> <node> <host>example2</host> <port>2181</port> </node> <session_timeout_ms>30000</session_timeout_ms> --客戶端會話的最大超時(以毫秒爲單位) <operation_timeout_ms>10000</operation_timeout_ms> <!-- Optional. Chroot suffix. Should exist. --> <root>/path/to/zookeeper/node</root> -- 用做ClickHouse服務器使用的znode的根的znode <!-- Optional. Zookeeper digest ACL string. --> <identity>user:password</identity> --用戶和密碼,ZooKeeper可能須要這些用戶和密碼才能訪問請求的znode </zookeeper>
44. use_minimalistic_part_header_in_zookeeper:ZooKeeper中數據部分頭的存儲方法。1:打開;0:關閉。默認0
僅適用於MergeTree系列。能夠指定:
- 位於config.xml文件的merge_tree部分,對服務器上的全部表使用該設置。 能夠隨時更改設置。 當設置更改時,現有表將更改其行爲。
- 對於每一個單獨的表,建立表時,請指定相應的引擎設置。 即便全局設置發生更改,具備此設置的現有表的行爲也不會更改。
若是use_minimalistic_part_header_in_zookeeper = 1,則複製的表使用單個znode緊湊地存儲數據部分的頭。 若是表包含許多列,則此存儲方法將大大減小Zookeeper中存儲的數據量。但沒法將ClickHouse服務器降級到不支持此設置的版本,在羣集中的服務器上升級ClickHouse時要當心。 不要一次升級全部服務器。 在測試環境中或僅在羣集中的幾臺服務器上測試ClickHouse的新版本更爲安全。已經使用此設置存儲的數據部件標題沒法恢復爲其之前的(非緊湊)表示形式。
45. disable_internal_dns_cache:禁用內部DNS緩存,默認0。
46. dns_cache_update_period:內部DNS緩存中存儲的IP地址的更新時間(以秒爲單位),更新是在單獨的系統線程中異步執行的,默認15秒。
Settings:使用set設置(system.settings)
1. distributed_product_mode:更改分佈式子查詢的行爲。當查詢包含分佈式表的乘積,即當分佈式表的查詢包含分佈式表的非GLOBAL子查詢時,ClickHouse將應用此設置。
限制條件:
- 僅適用於IN和JOIN子查詢。
- 僅當FROM部分使用包含多個分片的分佈式表時。
- 若是子查詢涉及一個包含多個分片的分佈式表。
- 不用於遠程功能。
可設置的值:
- deny:默認值。 禁止使用這些類型的子查詢(返回「 Double-distributed in / JOIN子查詢被拒絕」異常)。
- local:將子查詢中的數據庫和表替換爲目標服務器(碎片)的本地查詢,而保留普通的IN / JOIN。
- global:用GLOBAL IN / GLOBAL JOIN替換IN / JOIN查詢。
- allow:容許使用這些類型的子查詢。
2. enable_optimize_predicate_expression:SELECT查詢中打開謂詞下推,謂詞下推可能會大大減小分佈式查詢的網絡流量。默認1,可選0、1。
3. fallback_to_stale_replicas_for_distributed_queries:若是沒有新的數據,則強制查詢到過時的副本中查詢, 請參見複製。默認1,可選0、1。
4. force_index_by_date:若是沒法按日期使用索引,則禁用查詢執行,與MergeTree系列中的表一塊兒使用。默認0,可選0、1。
若是force_index_by_date = 1,檢查查詢是否具備可用於限制數據範圍的日期鍵條件。 若是沒有合適的條件,它將引起異常。 但不會檢查條件是否減小了要讀取的數據量。 如條件Date!='2000-01-01'是能夠接受的,即便它與表中的全部數據匹配(即,運行查詢須要徹底掃描)。
5. force_primary_key:若是沒法經過主鍵創建索引,則禁用查詢執行,與MergeTree系列中的表一塊兒使用。默認0,可選0、1。
若是force_primary_key = 1,檢查查詢是否具備可用於限制數據範圍的主鍵條件。 若是沒有合適的條件,它將引起異常。 但不會檢查條件是否減小了要讀取的數據量。
6. format_schema:使用定義的格式。
7. fsync_metadata:寫入.sql文件時啓用或禁用fsync。 默認1,啓用。可選0、1。若是服務器具備數百萬個不斷建立和銷燬的小表,則禁用它是有意義的。
8. enable_http_compression:HTTP請求的響應中啓用或禁用數據壓縮。默認0,可選0、1。
9. http_zlib_compression_level:設置HTTP請求的響應中的數據壓縮級別。默認3,可選1~9。
10. http_native_compression_disable_checksumming_on_decompress:從客戶端解壓縮HTTP POST數據時啓用或禁用校驗和驗證。 僅用於ClickHouse本機壓縮格式(不適用於gzip或deflate),默認0,禁用,可選0、1。
11. send_progress_in_http_headers:在clickhouse-server響應中啓用或禁用X-ClickHouse-Progress HTTP響應標頭。默認0,可選0、1。更多信息見:HTTP 客戶端
12. max_http_get_redirects:限制URL引擎表的最大HTTP GET重定向躍點數。 該設置適用於兩種類型的表:由CREATE TABLE查詢和url表函數建立的表。默認0,可選0、非0正整數。
13. input_format_allow_errors_num:設置從文本格式(CSV,TSV等)讀取時可接受的最大錯誤數。默認0。若是在讀取行時發生錯誤,但錯誤計數器仍小於input_format_allow_errors_num,則ClickHouse會忽略該行並繼續進行下一行。若是同時超過了input_format_allow_errors_num和input_format_allow_errors_ratio,則ClickHouse會引起異常。
14. input_format_allow_errors_ratio:設置從文本格式(CSV,TSV等)讀取時容許的最大錯誤百分比。錯誤百分比設置爲0到1之間的浮點數。默認0。若是在讀取行時發生錯誤,但錯誤計數器仍小於input_format_allow_errors_ratio,則ClickHouse會忽略該行並繼續進行下一行。若是同時超過了input_format_allow_errors_num和input_format_allow_errors_ratio,則ClickHouse會引起異常。
15. input_format_values_interpret_expressions:若是快速流解析器沒法解析數據,則啓用或禁用完整的SQL解析器。此設置僅用於數據插入時的「值」格式。有關語法分析的更多信息,請參見「語法」部分。默認1,可選0、1:
- 0:必須提供格式化的數據,請參閱格式部分。
- 1:將SQL表達式用做值,可是這種方式的數據插入速度要慢得多。
如:插入具備不一樣設置的DateTime類型值。SET input_format_values_interpret_expressions = 0; INSERT INTO datetime_t VALUES (now()) Exception on client: Code: 27. DB::Exception: Cannot parse input: expected ) before: now()): (at row 1) SET input_format_values_interpret_expressions = 1; INSERT INTO datetime_t VALUES (now()) Ok
16. input_format_values_deduce_templates_of_expressions:啓用或禁用SQL表達式模板推導。默認1。若是連續行中的表達式具備相同的結構,則能夠更快地解析和解釋Values中的表達式。 ClickHouse將嘗試推導表達式的模板,使用該模板解析如下行,並對成功解析的行進行評估。如:
INSERT INTO test VALUES (lower('Hello')), (lower('world')), (lower('INSERT')), (upper('Values')), ... 1:若是input_format_values_interpret_expressions = 1和format_values_deduce_templates_of_expressions = 0會分別爲每行解釋表達式(這對於大量的行來講很是慢) 2:若是input_format_values_interpret_expressions = 0和format_values_deduce_templates_of_expressions = 1會使用模板lower(String)解析第一,第二和第三行。 3:若是input_format_values_interpret_expressions = 1和format_values_deduce_templates_of_expressions = 1 與前面的狀況相同,可是若是沒法推斷出模板,則還容許回退以單獨解釋表達式。
17. input_format_values_accurate_types_of_literals: 僅當input_format_values_deduce_templates_of_expressions = 1時才使用此設置。可能會發生某些列的表達式具備相同的結構,但包含不一樣類型的狀況,默認1,可選0、1。如:
(..., abs(0), ...), -- UInt64 literal (..., abs(3.141592654), ...), -- Float64 literal (..., abs(-1), ...), -- Int64 literal
啓用此設置後,ClickHouse將檢查實際類型,並將使用相應類型的表達式模板。 在某些狀況下,可能會大大減慢表達式的評估。禁用後,ClickHouse可能會使用更通用的類型(例如Float64或Int64而不是42的UInt64),但可能會致使溢出和精度問題。
18. input_format_defaults_for_omitted_fields:執行INSERT查詢時,將省略的列替換爲各個列的默認值。 此選項僅適用於JSONEachRow,CSV和TabSeparated格式。啓用此選項後,擴展表元數據將從服務器發送到客戶端。 消耗了服務器上的其餘計算資源,並可能下降性能。默認1,可選0、1。
19. input_format_tsv_empty_as_default:將TSV中的空白字段替換爲默認值。對於複雜的默認表達式,也必須啓用input_format_defaults_for_omitted_fields。默認0,可選0、1。
20. input_format_null_as_default:若是輸入數據包含NULL,但對應列的數據類型不是Nullable(T),則啓用或禁用默認值(對於文本輸入格式),默認0,可選0、1
21. input_format_skip_unknown_fields:啓用或禁用跳過多餘數據列的插入。默認0,可選0、1。寫入數據時,若是輸入數據包含目標表中不存在的列,則ClickHouse會引起異常。若是啓用了跳過,則ClickHouse不會插入額外的數據,也不會引起異常。支持格式:JSONEachRow,CSVWithNames,TabSeparatedWithNames,TSKV。
22. input_format_import_nested_json:啓用或禁用帶有嵌套對象的JSON數據插入。默認0,可選0、1。支持的格式爲JSONEachRow。
23. input_format_with_names_use_header:啓用或禁用在插入數據時檢查列順序。默認0,可選0、1。爲了提升插入性能,若是肯定輸入數據的列順序與目標表中的順序相同,則建議禁用此檢查。支持的格式CSVWithNames、TabSeparatedWithNames。
24. date_time_input_format:容許選擇一個解析器的文本表示日期和時間,該設置不適用於日期和時間功能。默認basic,可選:basic、best_effort。
- basic:lickHouse只能解析基本的YYYY-MM-DD HH:MM:SS格式。 例如,「 2019-08-20 10:18:56」。
- best_effort:啓用擴展解析,能夠解析基本的YYYY-MM-DD HH:MM:SS格式以及全部ISO 8601日期和時間格式,如:'2018-06-08T01:02:03.000Z'。
25. join_default_strictness:設置JOIN子句的默認嚴格性,默認all。可選值:
- ALL:若是右表具備多個匹配的行,ClickHouse將從匹配的行建立笛卡爾積。 這是標準SQL的正常JOIN行爲。
- ANY:若是右表具備多個匹配的行,則僅鏈接找到的第一個行。 若是右表只有一個匹配行,則ANY和ALL的結果相同。
- ASOF:用於加入不肯定匹配的序列。
- 空字符串:若是在查詢中未指定ALL或ANY,則ClickHouse會引起異常。
26. join_any_take_last_row:嚴格更改聯接操做的行爲,僅適用於具備Join引擎表的JOIN操做。默認值0,
- 0:若是右表具備多個匹配行,則僅鏈接找到的第一個。
- 1:若是右表具備多個匹配行,則僅鏈接找到的最後一個。
27. join_use_nulls:設置JOIN行爲的類型,合併表時可能會出現空單元格,ClickHouse根據此設置以不一樣的方式填充。默認0,可選:
- 0:空單元格用相應字段類型的默認值填充。
- 1:JOIN的行爲與標準SQL相同。 相應字段的類型將轉換爲Nullable,而且將空單元格填充爲NULL。
28. join_any_take_last_row:更改ANY JOIN的行爲。 禁用,ANY JOIN將獲取找到的第一行鍵。 啓用,若是同一鍵有多個行,則ANY JOIN會獲取最後匹配的行。 該設置僅在聯接表引擎中使用。默認1,可選0、1。
29. max_block_size:在ClickHouse中,數據由塊(列部分的集合)處理。 處理每一個塊都有開銷。 對於要從表中加載的塊大小(以行數爲單位),建議使用max_block_size設置。 目的是避免在多個線程中提取大量列時避免佔用過多內存,並至少保留一些緩存局部性。默認:65,536(行數)。並不是老是從表中加載max_block_size大小的塊。 若是很明顯須要檢索較少的數據,則處理較小的塊。
30. preferred_block_size_bytes:用於與max_block_size相同的目的,可是它經過將其調整爲適合塊中的行數來設置建議的塊大小(以字節爲單位),但塊大小不能超過max_block_size行。默認值:1,000,000。 僅在從MergeTree引擎讀取時有效。
31. merge_tree_min_rows_for_concurrent_read:從MergeTree引擎表的文件中讀取的行數超過merge_tree_min_rows_for_concurrent_read,則ClickHouse嘗試在多個線程上從該文件執行併發讀取。默認163840,可選任何正整數。
32. merge_tree_min_bytes_for_concurrent_read:從MergeTree引擎表的文件讀取的字節數超過了merge_tree_min_bytes_for_concurrent_read,則ClickHouse會嘗試在多個線程中同時讀取該文件。默認251658240,可選任何正整數。
33. merge_tree_min_rows_for_seek:在一個文件中讀取的兩個數據塊之間的距離小於merge_tree_min_rows_for_seek行,則ClickHouse不會搜索文件,而是順序讀取數據。默認0,可選任何正整數。
34. merge_tree_min_bytes_for_seek:在一個文件中讀取的兩個數據塊之間的距離小於merge_tree_min_bytes_for_seek字節,則ClickHouse順序讀取包含兩個塊的文件的範圍,從而避免了額外的查找。默認0,可選任何正整數。
35. merge_tree_coarse_index_granularity:搜索數據時,ClickHouse檢查索引文件中的數據標記。若是ClickHouse發現所需鍵在某個範圍內,則會將該範圍劃分爲merge_tree_coarse_index_granularity子範圍,而後在該範圍內遞歸搜索所需鍵。默認8,可選任何正偶數整數。
36. merge_tree_max_rows_to_use_cache:在一個查詢中讀取的行數超過merge_tree_max_rows_to_use_cache行,則它不使用未壓縮塊的緩存,使用壓縮塊的高速緩存存儲爲查詢提取的數據。 ClickHouse使用此緩存來加快對重複的小型查詢的響應。此設置可保護高速緩存免受讀取大量數據的查詢的破壞。 uncompressed_cache_size服務器設置定義未壓縮塊的緩存大小。默認1048576,可選任何正整數。
37. merge_tree_max_bytes_to_use_cache:在一個查詢中讀取的數據多於merge_tree_max_bytes_to_use_cache字節,則它不使用未壓縮塊的緩存,同上。默認2013265920,可選任何正整數。
38. min_bytes_to_use_direct_io:使用直接I/O訪問存儲磁盤所需的最小數據量。若是要讀取的全部數據的總存儲量超過min_bytes_to_use_direct_io字節,則ClickHouse會使用O_DIRECT選項從存儲磁盤讀取數據。默認0,禁用,可選0、正整數。
39. log_queries:設置發送到ClickHouse的查詢將根據query_log服務器配置參數中的規則記錄。
40. log_query_threads:設置運行的查詢的線程將根據query_thread_log服務器配置參數中的規則記錄。
41. max_insert_block_size:插入表中要造成的塊的大小。此設置僅在服務器構成塊的狀況下適用。對經過HTTP接口的INSERT,服務器解析數據格式並造成指定大小的塊。默認1048576。默認值略大於max_block_size,這樣作是由於某些表引擎(* MergeTree)在磁盤上爲每一個插入的塊造成了一個數據部分,這是一個至關大的實體。相似地,* MergeTree表在插入期間對數據進行排序,而且足夠大的塊大小容許對RAM中的更多數據進行排序。
42. max_replica_delay_for_distributed_queries:以秒爲單位設置時間。若是副本滯後於設置值,則不使用該副本。默認300秒,在複製表的分佈式表執行SELECT時使用。
43. max_threads:查詢處理線程的最大數量,不包括用於從遠程服務器檢索數據的線程(請參見「 max_distributed_connections」參數),適用於並行執行查詢處理管道相同階段的線程。默認值:物理CPU內核數。max_threads值越小,消耗的內存越少。
當從表中讀取時,若是可使用函數求值表達式,使用WHERE進行過濾並使用至少「max_threads」個線程數並行地爲GROUP BY進行預聚合。
- 如在服務器上運行少於一個SELECT查詢,則將此參數設置爲稍小於處理器核心實際數量的值。
對於因爲LIMIT而快速完成的查詢,能夠設置較低的「max_threads」。
- 如若是每一個塊中都有必要的條目數,而且max_threads = 8,則將檢索8個塊,儘管僅讀取一個塊就足夠了。
44. max_insert_threads:執行INSERT SELECT查詢的最大線程數。默認值0,可選0、正整數。較高的值將致使較高的內存使用率。並行INSERT SELECT僅在SELECT部分並行執行時纔有效。
45. max_compress_block_size:壓縮寫入表以前,未壓縮數據塊的最大大小,默認1048576(1 MiB)。若是減少大小,則因爲高速緩存局部性,壓縮率將下降,壓縮和解壓縮速度會略有增長,而且內存消耗也會減小。一般沒有任何理由更改此設置。不要將壓縮塊(由字節組成的內存塊)與查詢處理塊(表中的一組行)混淆。
46. min_compress_block_size:對於MergeTree表爲了減小處理查詢時的延遲,若是塊的大小至少爲min_compress_block_size,則在寫入下一個標記時將壓縮該塊。默認值爲65536。若是未壓縮的數據小於max_compress_block_size,則塊的實際大小不小於此值且不小於一個標記的數據量,一般沒有任何理由更改此設置。
47. max_query_size:能夠帶到RAM以便與SQL解析器一塊兒解析的查詢的最大部分,默認256K。
48. Interactive_delay:檢查請求執行是否已取消併發送進度的時間間隔,以微秒爲單位。默認值:100000(檢查取消並每秒發送10次進度)。
49. connect_timeout,receive_timeout,send_timeout:用於與客戶端通訊的套接字上的超時(以秒爲單位),默認爲10,300,300
50. cancel_http_readonly_queries_on_client_close:當客戶端關閉鏈接而不等待響應時,取消HTTP只讀查詢。默認0,
51. poll_interval:將等待循環鎖定指定的秒數,默認10。
52. max_distributed_connections:與遠程服務器的併發鏈接的最大數量,用於對單個查詢到單個Distributed表進行分佈式處理。建議設置不小於集羣中服務器數量的值,默認1024。
53. distributed_connections_pool_size:與遠程服務器的併發鏈接的最大數量,用於對全部查詢到單個Distributed表進行的分佈式處理。 咱們建議設置一個不小於集羣中服務器數量的值。默認1024。
54. connect_timeout_with_failover_ms:若是集羣定義中使用了「 shard」和「 replica」部分,則鏈接到分佈式表引擎的遠程服務器的超時時間(以毫秒爲單位),默認50毫秒。
55. connections_with_failover_max_tries:分佈式表引擎與每一個副本的最大鏈接嘗試次數,默認3。
56. extremes:是否計算極值(查詢結果列中的最小值和最大值)。 接受0或1。默認狀況下,0(禁用)。
57. use_uncompressed_cache:是否使用未壓縮塊的緩存。接受0或1。默認狀況下,0(禁用)。
當使用大量短查詢時,使用未壓縮的緩存(僅適用於MergeTree系列中的表)能夠有效減小延遲並增長吞吐量。建議爲頻繁發送簡短請求的用戶啓用此設置。
注意uncompressed_cache_size配置參數(僅在配置文件中設置):未壓縮的緩存塊的大小。默認狀況下爲8 GiB。未壓縮的緩存將根據須要填充,而且使用最少的數據將自動刪除。
對於讀取一些數據量(一百萬行或更多)的查詢,未壓縮的緩存將自動禁用,以節省真正小的查詢的空間。這意味着能夠始終將「 use_uncompressed_cache」設置設爲1。
58. replace_running_query:使用HTTP接口時,能夠傳遞'query_id'參數。這是用做查詢標識符的任何字符串。若是此時已存在來自具備相同query_id的相同用戶的查詢,則行爲取決於replace_running_query參數:
- 0(默認值):引起異常(若是已經在運行具備相同「 query_id」的查詢,則不容許運行查詢)。
- 1 :取消舊查詢,而後開始運行新查詢。
59. stream_flush_interval_ms:在超時或線程生成max_insert_block_size行的狀況下,適用於具備流式傳輸的表,默認7500。值越小,將數據刷新到表中的頻率越高。將該值設置得過低會致使性能降低。
60. load_balancing:指定用於分佈式查詢處理的副本選擇算法。默認:Random。
- Random (by default):
計算每一個副本的錯誤數量。 查詢發送到最少的錯誤副本,若是存在多個,則發送到其中任何一個。
缺點:不考慮服務器的鄰近性; 若是副本具備不一樣的數據,則可能得到不一樣的數據。 - Nearest hostname:
計算每一個副本的錯誤數量。每隔5分鐘,錯誤數量將被2整除。若是有一個副本的錯誤數量最少(即最近在其餘副本上發生的錯誤),則將查詢發送給它。若是有多個副本且錯誤的最小數量相同,則查詢將以與配置文件中的服務器主機名最類似的主機名發送到副本。所以,若是存在等效的副本,則首選名稱最接近的副本。 - In order:
具備相同數量錯誤的副本將以與配置中指定的順序相同的順序進行訪問, - First or random:
選擇集合中的第一個副本,若是第一個副本不可用,則選擇一個隨機副本。 它在交叉複製拓撲設置中有效,但在其餘配置中無效。
first_or_random算法解決了in_order算法的問題。 使用in_order,若是一個副本出現故障,則下一個副本負載將加倍,而其他副本則處理一般的流量。 使用first_or_random算法時,負載在仍然可用的副本之間平均分配。
61. prefer_localhost_replica:啓用或則禁用處理分佈式查詢時使用localhost副本。默認1,可選值0、1:
- 1:ClickHouse始終向本地副本發送查詢(若是存在)。
- 0:ClickHouse使用load_balancing設置指定的平衡策略。
注意:若是使用max_parallel_replicas,請禁用此設置。
62. totals_mode:存在HAVING時以及存在max_rows_to_group_by和group_by_overflow_mode ='any'時如何計算TOTALS。
63. totals_auto_threshold:totals_mode ='auto'的閾值,
64. max_parallel_replicas:執行查詢時,每一個分片的最大副本數。爲了保持一致性(以獲取同一數據拆分的不一樣部分),此選項僅在設置採樣鍵時纔有效。複製延遲不受控制。
65. compile:啓用查詢編譯。默認狀況下,0(禁用)。編譯僅用於查詢處理管道的一部分:用於聚合的第一階段(GROUP BY)。對於具備多個簡單聚合函數的查詢,能夠看到最大的性能改進(在極少數狀況下,速度提升了四倍)。一般,性能提高微不足道。在極少數狀況下,它可能會減慢查詢的執行速度。
66. min_count_to_compile:運行編譯以前可能使用已編譯代碼塊的次數。默認狀況下,3。對於測試,能夠將該值設置爲0
67. output_format_json_quote_64bit_integers:若是該值爲true,則在使用JSON * Int64和UInt64格式時(以與大多數JavaScript實現兼容),引號中會出現整數。不然,將輸出不帶引號的整數。
68. format_csv_delimiter:CSV數據中的分隔符。默認狀況下爲:,
69. input_format_csv_unquoted_null_literal_as_null:對於CSV輸入格式,啓用或禁用將未引用的NULL解析爲文字。
70. output_format_csv_crlf_end_of_line:在CSV中使用DOS / Windows樣式行分隔符(CRLF),而不是Unix樣式(LF)。
71. output_format_tsv_crlf_end_of_line:在TSV中使用DOC / Windows樣式行分隔符(CRLF),而不是Unix樣式(LF)。
72. insert_quorum:啓用仲裁寫入,寫入多少個副本纔算成功。默認0。insert_quorum <2,則禁用仲裁寫入;insert_quorum> = 2,則啓用仲裁寫入。
當在insert_quorum_timeout期間將數據正確寫入副本的insert_quorum時,INSERT才能成功。若是因爲任何緣由而成功寫入的副本數量未達到insert_quorum,則認爲寫入失敗,並將從已寫入數據的全部副本中刪除插入的塊。讀取從insert_quorum寫入的數據時,可使用select_sequential_consistency選項。查詢時可用副本的數量小於insert_quorum則會報錯。
73. insert_quorum_timeout:仲裁寫入超時(秒),默認60s。 若是超時時間內沒有寫完,則將生成一個異常,而且客戶端必須重複查詢才能將同一塊寫入相同或任何其餘副本。
74. select_sequential_consistency:啓用或禁用SELECT查詢的順序一致性。默認0,可選0、1。啓用順序一致性後,ClickHouse容許客戶端僅對insert_quorum執行的INSERT查詢中的數據的副本執行SELECT查詢。 若是客戶端引用部分副本,則ClickHouse將生成一個異常。 SELECT查詢將不包括還沒有寫入副本仲裁的數據。
75. max_network_bytes:限制執行查詢時經過網絡接收或傳輸的數據量(以字節爲單位)。此設置適用於每一個單獨的查詢。默認0,不限制。可選值:0、正整數。
76. max_network_bandwidth_for_user:限制數據在網絡上每秒交換的速度(字節),用於單個用戶執行的全部同時運行的查詢。默認值:0,不限制。可選值:0、正整數。
77. max_network_bandwidth_for_all_users:限制數據在網絡上每秒交換的速度(字節),用於服務器上全部同時運行的查詢。默認值:0,不限制。可選值:0、正整數。
78. allow_experimental_cross_to_join_conversion:將連表的,語法重寫成join on、using語法,若是設置值爲0,則不會使用使用逗號的語法來處理查詢,而且會引起異常。默認1。可選0、1。能夠看join的使用
79. count_distinct_implementation:指定應使用哪一個uniq *函數來執行COUNT(DISTINCT ...),默認uniqExact。可選值:uniq、uniqCombined、uniqCombined64、uniqHLL12、uniqExact
80. skip_unavailable_shards:啓用或禁用跳過不可用的分片。若是分片的全部副本都不可用,則認爲分片不可用。默認0,禁止跳過,可選值0、1。
81. optimize_skip_unused_shards:對在PREWHERE / WHERE中具備分片鍵條件的SELECT查詢啓用或禁用跳過未使用的分片(假設數據是經過分片鍵分發的,不然不執行任何操做)。默認0,禁止跳過。
82. force_optimize_skip_unused_shards:若是啓用了optimize_skip_unused_shards(0),而且沒法跳過未使用的分片。若是沒法跳過而且啓用了設置,則將引起異常。默認0,禁用。可選值:0:禁用(不拋出)1:僅在表具備分片鍵時才禁用查詢執行 2:禁用查詢執行,不管爲表定義了分片鍵如何
83. optimize_throw_if_noop:若是OPTIMIZE查詢未執行合併,則啓用或禁用引起異常。默認0,可選0:禁用引起異常;1:啓用引起異常
默認狀況下,即便未執行任何操做,OPTIMIZE也會成功返回。使用此設置能夠區分這些狀況,並在異常消息中獲取緣由。
84. distributed_replica_error_half_life:控制將分佈式表中的錯誤快速歸零的方式。若是某個副本在一段時間內不可用,累積了5個錯誤,而且distributed_replica_error_half_life設置爲1秒,則該副本在上次錯誤以後3秒鐘被視爲正常。默認60s。
85. distributed_replica_error_cap:每一個副本的錯誤計數都以該值爲上限,從而防止單個副本累積太多錯誤,默認1000。
86. distributed_directory_monitor_sleep_time_ms:分佈式表引擎發送數據的基本間隔。發生錯誤時,實際間隔將呈指數增加,默認100毫秒。
87. distributed_directory_monitor_max_sleep_time_ms:分佈式表引擎發送數據的最大間隔。限制在distributed_directory_monitor_sleep_time_ms設置的間隔的指數增加。默認值:30000毫秒(30秒)。
88. distributed_directory_monitor_batch_inserts:啓用/禁用批量發送插入的數據。啓用批發送功能後,分佈式表引擎將嘗試經過一項操做發送多個插入數據文件,而不是分別發送。批發送經過更好地利用服務器和網絡資源來提升羣集性能。默認0,禁用,可選0、1。
89. os_thread_priority:爲執行查詢的線程設置優先級(nice)。當選擇在每一個可用CPU內核上運行的下一個線程時,OS調度程序會考慮此優先級。默認值:0,可選值:能夠在[-20,19]範圍內設置值。較低的值表示較高的優先級。
90. query_profiler_real_time_period_ns:查詢事件探查器的實際時鐘計時器的週期。實時時鐘計時器計算掛鐘時間。單位納秒,默認值:1000000000納秒(每秒),可選值:
- 10000000(每秒100次)納秒或更少的單個查詢。
- 1000000000(每秒一次)用於羣集範圍內的性能分析。
- 0 用於關閉計時器。
91. allow_introspection_functions:啓用禁用內省功能以進行查詢概要分析。默認值:0,可選0(禁用)、1(啓用)
92. input_format_parallel_parsing:啓用數據格式的保留順序並行解析。 僅支持TSV,TKSV,CSV和JSONEachRow格式。
93. min_chunk_bytes_for_parallel_parsing:每一個線程將並行解析的最小塊大小(以字節爲單位),默認1M。
94. output_format_avro_codec:設置用於輸出Avro文件的壓縮編解碼器。默認snappy或deflate,可選值:
- null:不壓縮
- deflate:使用Deflate壓縮(zlib)
- snappy:使用Snappy壓縮
95. output_format_avro_sync_interval:設置輸出Avro文件的同步標記之間的最小數據大小(以字節爲單位)。默認32K,可選值:32(32字節)~ 1073741824(1 GiB)
96. format_avro_schema_registry_url:設置Confluent Schema註冊表URL以與AvroConfluent格式一塊兒使用,默認空。
總結
關於配置文件和參數已經介紹完畢,主要是經過 Server settings 和 Settings 來進行說明的,在須要調整的時候能夠根據各個要求進行修改(修改配置文件& set settings = '')。後面再測試ClickHouse的時候會持續更新。