1. 程式人生 > >ClickHouse學習系列之三【配置檔案說明】

ClickHouse學習系列之三【配置檔案說明】

背景

      最近花了些時間看了下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 settings、Settings

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

&n