ClickHouse學習系列之三【配置文件說明】

  • 2020 年 4 月 11 日
  • 筆記

背景

      最近花了些時間看了下ClickHouse文檔,發現它在OLAP方面表現很優異,而且相對也比較輕量和簡單,所以準備入門了解下該資料庫系統。在介紹了安裝用戶許可權管理之後,本文對其配置文件做下相關的介紹說明。

說明

      ClickHouse的配置文件是config.xml,默認在/etc/clickhouse-server/目錄中,可以在conf.d和config.d目錄中的*.xml和*.conf文件中覆蓋各個設置。還可以為這些配置文件的元素指定replace或remove屬性,如果均未指定,它將以遞歸方式合併元素的內容,從而替換重複子元素的值。如果指定了replace,將用指定的元素替換整個元素。如果指定了remove,則刪除該元素。

  配置文件還可以定義substitutions(替代)。如果元素具有incl屬性,則文件中的相應值將被替換。替換文件的路徑為/etc/metrika.xml。可以在配置文件加入include_from元素進行更改。替換值在此文件的/yandex/substitution_name元素中指定。如果incl中指定的替代不存在,則將其記錄在日誌中。為了防止ClickHouse記錄缺少的替代項,請指定:optional= true屬性。

      可以從ZooKeeper中進行替換,指定屬性from_zk =“ /path/to/node”。元素值將替換為ZooKeeper中/path/to/node上節點的內容。還可以將整個XML子樹放在ZooKeeper節點上,並將其完全插入到source元素中。

      config.xml文件可以使用users設置,為profiles和quotas指定單獨的配置。此配置的相對路徑在’users_config‘元素中設置。默認情況下,它是users.xml。如果省略users_config,則直接在config.xml中指定。

配置參數

了解了各個參數的目的是更好進行配置和使用資源的限制,關於參數的詳細說明可以看官方文檔:Server settingsSettings

Server settings:在config.xml里設置

1. builtin_dictionaries_reload_interval:重新載入內置詞典的時間間隔(以秒為單位),默認3600。可以在不重新啟動伺服器的情況下“即時”修改詞典。

<builtin_dictionaries_reload_interval>3600</builtin_dictionaries_reload_interval>

2. compression:MergeTree引擎表的數據壓縮設置。配置模板如:

<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:默認資料庫。

<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>

可以看複製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’。

可以看DateTime數據類型和日期函數

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:如果右表具有多個匹配行,則僅連接找到的最後一個。

可以看JOIN子句聯接表引擎

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介面的IN​​SERT,伺服器解析數據格式並形成指定大小的塊。默認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。可選值:uniquniqCombineduniqCombined64uniqHLL12uniqExact

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的時候會持續更新。