johnpoint

johnpoint

(。・∀・)ノ゙嗨
github

docker-composeを使用してClickHouseクラスタを構築する

Docker Compose の設定#

version: '3'
services:
  clickhouse-server-ck1:
    restart: on-failure:10 # 非0で終了した場合、10回再起動を試みる
    image: yandex/clickhouse-server
    container_name: ck1
    networks:
      - ck-network
    ports:
      - "8124:8123"
      - "9001:9000"
      - "9010:9004"
    volumes:
      - `pwd`/clickhouse/:/var/lib/clickhouse/
      - `pwd`/clickhouse-server/:/etc/clickhouse-server/
      - `pwd`/log/clickhouse-server/:/var/log/clickhouse-server/
    ulimits:
      nofile:
        soft: "262144"
        hard: "262144"
    depends_on:
      - zookeeper-1

  clickhouse-server-ck2:
    restart: on-failure:10 # 非0で終了した場合、10回再起動を試みる
    image: yandex/clickhouse-server
    container_name: ck2
    networks:
      - ck-network
    ports:
      - "8125:8123"
      - "9002:9000"
      - "9011:9004"
    volumes:
      - `pwd`/clickhouse2/:/var/lib/clickhouse/
      - `pwd`/clickhouse-server2/:/etc/clickhouse-server/
      - `pwd`/log/clickhouse-server2/:/var/log/clickhouse-server/
    ulimits:
      nofile:
        soft: "262144"
        hard: "262144"
    depends_on:
      - zookeeper-1

  clickhouse-server-ck3:
    restart: on-failure:10 # 非0で終了した場合、10回再起動を試みる
    image: yandex/clickhouse-server
    container_name: ck3
    networks:
      - ck-network
    ports:
      - "8126:8123"
      - "9003:9000"
      - "9012:9004"
    volumes:
      - `pwd`/clickhouse3/:/var/lib/clickhouse/
      - `pwd`/clickhouse-server3/:/etc/clickhouse-server/
      - `pwd`/log/clickhouse-server3/:/var/log/clickhouse-server/
    ulimits:
      nofile:
        soft: "262144"
        hard: "262144"
    depends_on:
      - zookeeper-1

  zookeeper-1:
    restart: on-failure:10 # 非0で終了した場合、10回再起動を試みる
    image: zookeeper:3.8.0
    container_name: zookeeper1
    networks:
      - ck-network
    ports:
      - "2181:2181"
    volumes:
      - `pwd`/zookeeper/conf/:/apache-zookeeper-3.8.0-bin/conf/
      - `pwd`/zookeeper/data/:/data
      - `pwd`/zookeeper/datalog/:/datalog
      - `pwd`/zookeeper/logs/:/logs
    ulimits:
      nofile:
        soft: "262144"
        hard: "262144"

networks:
  ck-network:

ClickHouse 設定ファイル#

<?xml version="1.0"?>
<!--
  注意: ユーザーとクエリレベルの設定は「users.xml」ファイルで設定されています。
  ここにユーザーレベルの設定を誤って指定した場合、サーバーは起動しません。
  設定を「users.xml」ファイルの正しい場所に移動するか、
   ここに<skip_check_for_incorrect_settings>1</skip_check_for_incorrect_settings>を追加してください。
-->
<clickhouse>
    <logger>
        <!-- 可能なレベル [1]:

          - none (ロギングをオフ)
          - fatal
          - critical
          - error
          - warning
          - notice
          - information
          - debug
          - trace
          - test (本番使用には適していません)

            [1]: https://github.com/pocoproject/poco/blob/poco-1.9.4-release/Foundation/include/Poco/Logger.h#L105-L114
        -->
        <level>trace</level>
        <log>/var/log/clickhouse-server/clickhouse-server.log</log>
        <errorlog>/var/log/clickhouse-server/clickhouse-server.err.log</errorlog>
        <!-- ローテーションポリシー
             詳細は https://github.com/pocoproject/poco/blob/poco-1.9.4-release/Foundation/include/Poco/FileChannel.h#L54-L85 を参照
          -->
        <size>1000M</size>
        <count>10</count>
        <!-- <console>1</console> --> <!-- デフォルトの動作は自動検出です (デーモンモードでない場合、ttyであればコンソールにログを出力) -->

        <!-- レベルごとのオーバーライド (レガシー):

        例えば、ConfigReloaderのロギングを抑制するには次のようにします:
        注意: levels.loggerは予約されています。以下を参照してください。
        -->
        <!--
        <levels>
          <ConfigReloader>none</ConfigReloader>
        </levels>
        -->

        <!-- レベルごとのオーバーライド:

        例えば、デフォルトユーザーのRBACのロギングを抑制するには次のようにします:
        (ただし、ロガー名はバージョンごとに変更される可能性があることに注意してください。)
        -->
        <!--
        <levels>
          <logger>
            <name>ContextAccess (default)</name>
            <level>none</level>
          </logger>
          <logger>
            <name>DatabaseOrdinary (test)</name>
            <level>none</level>
          </logger>
        </levels>
        -->
    </logger>

    <!-- OPTIONSリクエストの応答にヘッダーを追加します。OPTIONSメソッドはCORSのプレフライトリクエストで使用されます。 -->
    <!-- デフォルトではオフになっています。次のヘッダーはCORSに必須です。-->
    <!-- http_options_response>
        <header>
            <name>Access-Control-Allow-Origin</name>
            <value>*</value>
        </header>
        <header>
            <name>Access-Control-Allow-Headers</name>
            <value>origin, x-requested-with</value>
        </header>
        <header>
            <name>Access-Control-Allow-Methods</name>
            <value>POST, GET, OPTIONS</value>
        </header>
        <header>
            <name>Access-Control-Max-Age</name>
            <value>86400</value>
        </header>
    </http_options_response -->

    <!-- これはclickhouse-clientに表示される名前です。
         デフォルトでは、「production」を含むものはクエリプロンプトで赤色で強調表示されます。
    -->
    <!--display_name>production</display_name-->

    <!-- HTTP APIのポート。セキュアな接続用の「https_port」も参照してください。
         このインターフェースはODBCおよびJDBCドライバー(DataGrip、Dbeaverなど)や
         ほとんどのWebインターフェース(埋め込みUI、Grafana、Redashなど)でも使用されます。
      -->
    <http_port>8123</http_port>

    <!-- ネイティブプロトコルによるインタラクションのためのポート:
         - clickhouse-clientおよび他のネイティブClickHouseツール (clickhouse-benchmark、clickhouse-copier);
         - 分散クエリ処理のための他のclickhouse-serverとのインタラクション;
         - ネイティブプロトコルをサポートするClickHouseドライバーおよびアプリケーション
         (このプロトコルは非公式に「TCPプロトコル」とも呼ばれます);
         セキュアな接続用の「tcp_port_secure」も参照してください。
    -->
    <tcp_port>9000</tcp_port>

    <!-- MySQLプロトコルとの互換性。
         ClickHouseはこのポートに接続するアプリケーションに対してMySQLのふりをします。
    -->
    <mysql_port>9004</mysql_port>

    <!-- PostgreSQLプロトコルとの互換性。
         ClickHouseはこのポートに接続するアプリケーションに対してPostgreSQLのふりをします。
    -->
    <postgresql_port>9005</postgresql_port>

    <!-- TLS(HTTPS)を使用したHTTP API。
         このインターフェースを有効にするには証明書を設定する必要があります。
         以下のOpenSSLセクションを参照してください。
    -->
    <!-- <https_port>8443</https_port> -->

    <!-- TLSを使用したネイティブインターフェース。
         このインターフェースを有効にするには証明書を設定する必要があります。
         以下のOpenSSLセクションを参照してください。
    -->
    <!-- <tcp_port_secure>9440</tcp_port_secure> -->

    <!-- PROXYv1プロトコルでラップされたネイティブインターフェース
         各接続に対してPROXYv1ヘッダーが送信されます。
         ClickHouseはヘッダーからプロキシ転送されたクライアントアドレスに関する情報を抽出します。
    -->
    <!-- <tcp_with_proxy_port>9011</tcp_with_proxy_port> -->

    <!-- レプリカ間の通信のためのポート。データ交換に使用されます。
         サーバー間の低レベルデータアクセスを提供します。
         このポートは信頼できないネットワークからアクセスできないようにする必要があります。
         また「interserver_http_credentials」も参照してください。
         このポートへの接続で転送されるデータは信頼できないネットワークを通過してはいけません。
         また「interserver_https_port」も参照してください。
      -->
    <interserver_http_port>9009</interserver_http_port>

    <!-- TLSを使用したレプリカ間の通信のためのポート。
         このインターフェースを有効にするには証明書を設定する必要があります。
         以下のOpenSSLセクションを参照してください。
         また「interserver_http_credentials」も参照してください。
      -->
    <!-- <interserver_https_port>9010</interserver_https_port> -->

    <!-- 他のレプリカがこのサーバーにリクエストを送信するために使用するホスト名。
         指定しない場合は「hostname -f」コマンドに類似して決定されます。
         この設定は、別のネットワークインターフェースにレプリケーションを切り替えるために使用できます
         (サーバーは複数のアドレスを介して複数のネットワークに接続されている可能性があります)
      -->

    <interserver_http_host>0.0.0.0</interserver_http_host>

    <!-- レプリカ間の認証に必要な資格情報を指定できます。
         これは「interserver_https_port」が信頼できないネットワークからアクセス可能な場合に必要です。
         また、ネットワーク内の可能性のある妥協されたサービスからのSSRF攻撃を避けるために推奨されます。
      -->
    <!--<interserver_http_credentials>
        <user>interserver</user>
        <password></password>
    </interserver_http_credentials>-->

    <!-- 指定されたアドレスをリッスンします。
         すべての場所からIPv4とIPv6の両方の接続を受け入れたい場合は、::(ワイルドカードIPv6アドレス)を使用します。
         注意:
         ワイルドカードアドレスから接続を開く場合は、次のいずれかの対策が適用されていることを確認してください。
         - サーバーはファイアウォールで保護され、信頼できないネットワークからアクセスできない;
         - すべてのユーザーはネットワークアドレスのサブセットに制限されている(users.xmlを参照);
         - すべてのユーザーは強力なパスワードを持ち、セキュア(TLS)インターフェースのみがアクセス可能で、接続はTLSインターフェースを介してのみ行われる。
         - パスワードなしのユーザーは読み取り専用アクセスを持つ。
         詳細は: https://www.shodan.io/search?query=clickhouse を参照してください。
      -->
    <!-- <listen_host>::</listen_host> -->


    <!-- IPv6をサポートしていないホストの場合も同様です: -->
    <listen_host>0.0.0.0</listen_host>

    <!-- デフォルト値 - IPv4とIPv6の両方でlocalhostをリッスンしようとします。 -->
    <!--
    <listen_host>::1</listen_host>
    <listen_host>127.0.0.1</listen_host>
    -->

    <!-- IPv6またはIPv4ネットワークが利用できない場合でも、リッスンしようとすると終了しません。 -->
    <!-- <listen_try>0</listen_try> -->

    <!-- 同じアドレス:ポートで複数のサーバーがリッスンできるようにします。これは推奨されません。
      -->
    <!-- <listen_reuse_port>0</listen_reuse_port> -->

    <!-- <listen_backlog>4096</listen_backlog> -->

    <max_connections>4096</max_connections>

    <!-- HTTP 1.1での「Connection: keep-alive」 -->
    <keep_alive_timeout>3</keep_alive_timeout>

    <!-- gRPCプロトコル(APIについてはsrc/Server/grpc_protos/clickhouse_grpc.protoを参照) -->
    <!-- <grpc_port>9100</grpc_port> -->
    <grpc>
        <enable_ssl>false</enable_ssl>

        <!-- 次の2つのファイルはenable_ssl=1の場合のみ使用されます -->
        <ssl_cert_file>/path/to/ssl_cert_file</ssl_cert_file>
        <ssl_key_file>/path/to/ssl_key_file</ssl_key_file>

        <!-- サーバーがクライアントに証明書を要求するかどうか -->
        <ssl_require_client_auth>false</ssl_require_client_auth>

        <!-- ssl_require_client_auth=1の場合のみ使用される次のファイル -->
        <ssl_ca_cert_file>/path/to/ssl_ca_cert_file</ssl_ca_cert_file>

        <!-- デフォルトの圧縮アルゴリズム(クライアントが別のアルゴリズムを指定しない場合に適用されます。QueryInfoのresult_compressionを参照)。
             サポートされているアルゴリズム: none, deflate, gzip, stream_gzip -->
        <compression>deflate</compression>

        <!-- デフォルトの圧縮レベル(クライアントが別のレベルを指定しない場合に適用されます。QueryInfoのresult_compressionを参照)。
             サポートされているレベル: none, low, medium, high -->
        <compression_level>medium</compression_level>

        <!-- バイト単位の送信/受信メッセージサイズ制限。-1は無制限を意味します -->
        <max_send_message_size>-1</max_send_message_size>
        <max_receive_message_size>-1</max_receive_message_size>

        <!-- 非常に詳細なログが必要な場合は有効にします -->
        <verbose_logs>false</verbose_logs>
    </grpc>

    <!-- https_portおよびtcp_port_secureで使用されます。完全なsslオプションリスト: https://github.com/ClickHouse-Extras/poco/blob/master/NetSSL_OpenSSL/include/Poco/Net/SSLManager.h#L71 -->
    <openSSL>
        <server> <!-- httpsサーバーおよびセキュアtcpポート用 -->
            <!-- 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>
            <privateKeyFile>/etc/clickhouse-server/server.key</privateKeyFile>
            <!-- dhparamsはオプションです。<dhParamsFile>要素を削除できます。
                 dhparamsを生成するには、次のコマンドを使用します:
                  openssl dhparam -out /etc/clickhouse-server/dhparam.pem 4096
                 BEGIN DH PARAMETERSで始まるファイル形式のみがサポートされています。
              -->
            <dhParamsFile>/etc/clickhouse-server/dhparam.pem</dhParamsFile>
            <verificationMode>none</verificationMode>
            <loadDefaultCAFile>true</loadDefaultCAFile>
            <cacheSessions>true</cacheSessions>
            <disableProtocols>sslv2,sslv3</disableProtocols>
            <preferServerCiphers>true</preferServerCiphers>
        </server>

        <client> <!-- https辞書ソースおよびセキュアなZookeeper通信に接続するために使用されます -->
            <loadDefaultCAFile>true</loadDefaultCAFile>
            <cacheSessions>true</cacheSessions>
            <disableProtocols>sslv2,sslv3</disableProtocols>
            <preferServerCiphers>true</preferServerCiphers>
            <!-- 自己署名の場合: <verificationMode>none</verificationMode> を使用 -->
            <invalidCertificateHandler>
                <!-- 自己署名の場合: <name>AcceptCertificateHandler</name> を使用 -->
                <name>RejectCertificateHandler</name>
            </invalidCertificateHandler>
        </client>
    </openSSL>

    <!-- http[s]サーバーのデフォルトルートページ。例えば、http://localhost:8123を開くときにhttps://tabix.io/からUIを読み込む -->
    <!--
    <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>
    -->

    <!-- 同時クエリの最大数。 -->
    <max_concurrent_queries>100</max_concurrent_queries>

    <!-- サーバープロセスの最大メモリ使用量(常駐セットサイズ)。
         ゼロ値または未設定はデフォルトを意味します。デフォルトは利用可能な物理RAMの「max_server_memory_usage_to_ram_ratio」です。
         値が利用可能な物理RAMの「max_server_memory_usage_to_ram_ratio」より大きい場合、カットダウンされます。

         制約はクエリ実行時にチェックされます。
         クエリがメモリを割り当てようとし、現在のメモリ使用量と割り当てが指定されたしきい値を超える場合、例外がスローされます。

         数ギガバイトのような小さな値にこの制約を設定するのは実用的ではありません。
          なぜなら、メモリアロケーターはこの量のメモリをキャッシュに保持し、サーバーはクエリのサービスを拒否するからです。
      -->
    <max_server_memory_usage>0</max_server_memory_usage>

    <!-- グローバルスレッドプールの最大スレッド数。
    指定しない場合、最大10000スレッドがデフォルトになります。
    この設定は、大量の分散クエリが同時に実行されているがほとんどの時間アイドル状態であるシナリオで役立ちます。
    その場合、より多くのスレッドが必要になるかもしれません。
    -->

    <max_thread_pool_size>10000</max_thread_pool_size>

    <!-- バックグラウンドで接続を再利用するためのワーカーの数(drain_timeoutも参照)。
         プールが満杯の場合、接続は同期的に排出されます。 -->
    <!-- <max_threads_for_connection_collector>10</max_threads_for_connection_collector> -->

    <!-- メモリ制約のある環境では、これを1より大きな値に設定する必要があるかもしれません。
      -->
    <max_server_memory_usage_to_ram_ratio>0.9</max_server_memory_usage_to_ram_ratio>

    <!-- サーバー全体のメモリプロファイラー。ピーク割り当てステップごとにスタックトレースを収集します(バイト単位)。
         データはsystem.trace_logテーブルにquery_id = 空文字列で保存されます。
         ゼロは無効を意味します。
      -->
    <total_memory_profiler_step>4194304</total_memory_profiler_step>

    <!-- ランダムな割り当てと解放を収集し、'MemorySample' trace_typeでsystem.trace_logに書き込みます。
         確率は、サイズに関係なく、すべての割り当て/解放に対して適用されます。
         注意: サンプリングは、追跡されていないメモリの量が追跡されていないメモリ制限を超えたときのみ発生します。
          デフォルトでは4 MiBですが、'total_memory_profiler_step'が低く設定されると低くすることができます。
         'total_memory_profiler_step'を1に設定して、より細かいサンプリングを行うことをお勧めします。
      -->
    <total_memory_tracker_sample_probability>0</total_memory_tracker_sample_probability>

    <!-- 開いているファイルの数に制限を設定します(デフォルト: 最大)。この設定はMac OS Xで意味があります。
         なぜなら、getrlimit()が正しい最大値を取得できないからです。 -->
    <!-- <max_open_files>262144</max_open_files> -->

    <!-- MergeTreeファミリーのテーブルで使用される非圧縮データブロックのキャッシュサイズ。
         バイト単位。キャッシュはサーバーに対して単一です。メモリは必要に応じて割り当てられます。
         キャッシュは、'use_uncompressed_cache'ユーザー設定がオンになっている場合に使用されます(デフォルトはオフ)。
         非圧縮キャッシュは、非常に短いクエリや稀なケースでのみ有利です。

         注意: 非圧縮キャッシュはlz4には無意味である可能性があります。なぜなら、メモリ帯域幅
         は一部のサーバー構成でのマルチコアデコンプレッションよりも遅いためです。
         有効にすると、時には逆にクエリが遅くなることがあります。
      -->
    <uncompressed_cache_size>8589934592</uncompressed_cache_size>

    <!-- MergeTreeファミリーのテーブルで使用されるマークキャッシュの概算サイズ。
         バイト単位。キャッシュはサーバーに対して単一です。メモリは必要に応じて割り当てられます。
         この値を下げるべきではありません。
      -->
    <mark_cache_size>5368709120</mark_cache_size>


    <!-- `min_bytes_to_use_mmap_io`設定を有効にすると、
         MergeTreeテーブル内のデータはmmapを使用してカーネルからユーザースペースへのコピーを回避できます。
         大きなファイルに対してのみ意味があり、データがページキャッシュに存在する場合にのみ役立ちます。
         頻繁なopen/mmap/munmap/close呼び出し(これはページフォルトによるコストが非常に高い)を避けるために、
         複数のスレッドやクエリからのマッピングを再利用するために、
         マッピングされたファイルのキャッシュが維持されます。そのサイズはマッピングされた領域の数です(通常はマッピングされたファイルの数と等しい)。
         マッピングされたファイル内のデータの量は、system.metrics、system.metric_logでMMappedFiles、MMappedFileBytesメトリックによって監視できます。
         また、system.asynchronous_metrics、system.asynchronous_metrics_logでMMapCacheCellsメトリックによっても監視できます。
         さらに、system.events、system.processes、system.query_log、system.query_thread_log、system.query_views_logで
         CreatedReadBufferMMap、CreatedReadBufferMMapFailed、MMappedFileCacheHits、MMappedFileCacheMissesイベントによっても監視できます。
         マッピングされたファイル内のデータの量は、メモリを直接消費せず、クエリやサーバーのメモリ使用量にはカウントされません。
         このメモリはOSページキャッシュに類似して破棄される可能性があります。
         キャッシュは、MergeTree内の古い部分を削除すると自動的に削除されます。
         また、SYSTEM DROP MMAP CACHEクエリによって手動で削除することもできます。
      -->
    <mmap_cache_size>1000</mmap_cache_size>

    <!-- コンパイルされた式のキャッシュサイズ(バイト単位)。-->
    <compiled_expression_cache_size>134217728</compiled_expression_cache_size>

    <!-- コンパイルされた式のキャッシュサイズ(要素数)。-->
    <compiled_expression_cache_elements_size>10000</compiled_expression_cache_elements_size>

    <!-- データディレクトリへのパス、末尾にスラッシュを付ける。 -->
    <path>/var/lib/clickhouse/</path>

    <!-- ハードクエリ処理用の一時データへのパス。 -->
    <tmp_path>/var/lib/clickhouse/tmp/</tmp_path>

    <!-- 一時ファイルのための<storage_configuration>からのポリシー。
         設定されていない場合は<tmp_path>が使用されます。それ以外の場合は<tmp_path>は無視されます。

         注意:
         - move_factor              は無視されます
         - keep_free_space_bytes    は無視されます
         - max_data_part_size_bytes は無視されます
         - このポリシーには正確に1つのボリュームが必要です
    -->
    <!-- <tmp_policy>tmp</tmp_policy> -->

    <!-- 'file'テーブル関数でアクセス可能なユーザー提供ファイルのディレクトリ。 -->
    <user_files_path>/var/lib/clickhouse/user_files/</user_files_path>

    <!-- LDAPサーバーの定義。 -->
    <ldap_servers>
        <!-- 後で1) 'password'の代わりに'ldap'認証メカニズムが指定された専用のローカルユーザーの認証者として使用するため、
              または2)リモートユーザーディレクトリとして使用するために、ここに接続パラメータを持つLDAPサーバーのリストを定義します。
             パラメータ:
                host - LDAPサーバーのホスト名またはIP、このパラメータは必須で空にできません。
                port - LDAPサーバーのポート、enable_tlsがtrueに設定されている場合はデフォルトで636、それ以外は389。
                bind_dn - バインドするためのDNを構築するために使用されるテンプレート。
                        結果のDNは、各認証試行中にテンプレートのすべての'{user_name}'部分文字列を実際のユーザー名に置き換えることによって構築されます。
                user_dn_detection - バインドされたユーザーの実際のユーザーDNを検出するためのLDAP検索パラメータのセクション。
                        これは主に、サーバーがActive Directoryの場合の役割マッピングのための検索フィルターで使用されます。
                         結果のユーザーDNは、'{user_dn}'部分文字列が許可されている場所で置き換えられます。デフォルトでは、
                         ユーザーDNはバインドDNと等しく設定されますが、検索が実行されると、実際に検出された
                         ユーザーDN値で更新されます。
                    base_dn - LDAP検索のためのベースDNを構築するために使用されるテンプレート。
                            結果のDNは、テンプレートのすべての'{user_name}'および'{bind_dn}'部分文字列を
                             実際のユーザー名とバインドDNに置き換えることによって構築されます。
                    scope - LDAP検索のスコープ。
                            受け入れられる値は: 'base', 'one_level', 'children', 'subtree'(デフォルト)。
                    search_filter - LDAP検索のための検索フィルターを構築するために使用されるテンプレート。
                            結果のフィルターは、テンプレートのすべての'{user_name}', '{bind_dn}', '{base_dn}'
                             部分文字列を実際のユーザー名、バインドDN、およびベースDNに置き換えることによって構築されます。
                            特殊文字はXMLで適切にエスケープする必要があります。
                verification_cooldown - 成功したバインド試行の後、ユーザーがすべての連続リクエストに対して
                         成功裏に認証されていると見なされる期間(秒)。
                        0(デフォルト)を指定してキャッシュを無効にし、各認証リクエストのためにLDAPサーバーに連絡するように強制します。
                enable_tls - LDAPサーバーへのセキュア接続をトリガーするフラグ。
                        プレーンテキスト(ldap://)プロトコルの場合は「no」を指定します(推奨されません)。
                        SSL/TLS(ldaps://)プロトコルの場合は「yes」を指定します(推奨、デフォルト)。
                        レガシーStartTLSプロトコルの場合は「starttls」を指定します(プレーンテキスト(ldap://)プロトコルがTLSにアップグレードされます)。
                tls_minimum_protocol_version - SSL/TLSの最小プロトコルバージョン。
                        受け入れられる値は: 'ssl2', 'ssl3', 'tls1.0', 'tls1.1', 'tls1.2'(デフォルト)。
                tls_require_cert - SSL/TLSピア証明書の検証動作。
                        受け入れられる値は: 'never', 'allow', 'try', 'demand'(デフォルト)。
                tls_cert_file - 証明書ファイルへのパス。
                tls_key_file - 証明書キーへのパス。
                tls_ca_cert_file - CA証明書ファイルへのパス。
                tls_ca_cert_dir - CA証明書を含むディレクトリへのパス。
                tls_cipher_suite - 許可される暗号スイート(OpenSSL表記)。
             例:
                <my_ldap_server>
                    <host>localhost</host>
                    <port>636</port>
                    <bind_dn>uid={user_name},ou=users,dc=example,dc=com</bind_dn>
                    <verification_cooldown>300</verification_cooldown>
                    <enable_tls>yes</enable_tls>
                    <tls_minimum_protocol_version>tls1.2</tls_minimum_protocol_version>
                    <tls_require_cert>demand</tls_require_cert>
                    <tls_cert_file>/path/to/tls_cert_file</tls_cert_file>
                    <tls_key_file>/path/to/tls_key_file</tls_key_file>
                    <tls_ca_cert_file>/path/to/tls_ca_cert_file</tls_ca_cert_file>
                    <tls_ca_cert_dir>/path/to/tls_ca_cert_dir</tls_ca_cert_dir>
                    <tls_cipher_suite>ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:AES256-GCM-SHA384</tls_cipher_suite>
                </my_ldap_server>
             例(役割マッピングのために検出されたユーザーDNに依存する典型的なActive Directory):
                <my_ad_server>
                    <host>localhost</host>
                    <port>389</port>
                    <bind_dn>EXAMPLE\{user_name}</bind_dn>
                    <user_dn_detection>
                        <base_dn>CN=Users,DC=example,DC=com</base_dn>
                        <search_filter>(&amp;(objectClass=user)(sAMAccountName={user_name}))</search_filter>
                    </user_dn_detection>
                    <enable_tls>no</enable_tls>
                </my_ad_server>
        -->
    </ldap_servers>

    <!-- HTTPリクエストのKerberos認証サポートを有効にするには(GSS-SPNEGO)、明示的に
          Kerberos経由で認証されるように設定されたユーザーのために、ここに単一の「kerberos」セクションを定義します。
         パラメータ:
            principal - セキュリティコンテキストを受け入れるときに取得され使用される標準サービスプリンシパル名。
                    このパラメータはオプションで、省略した場合はデフォルトのプリンシパルが使用されます。
                    このパラメータは「realm」パラメータと一緒に指定できません。
            realm - 認証を、そのイニシエーターのレルムが一致するリクエストのみに制限するために使用されるレルム。
                    このパラメータはオプションで、省略した場合はレルムによる追加のフィルタリングは適用されません。
                    このパラメータは「principal」パラメータと一緒に指定できません。
         例:
            <kerberos />
         例:
            <kerberos>
                <principal>HTTP/[email protected]</principal>
            </kerberos>
         例:
            <kerberos>
                <realm>EXAMPLE.COM</realm>
            </kerberos>
    -->

    <!-- ユーザー、役割、アクセス権、設定プロファイル、クォータを読み取るためのソース。 -->
    <user_directories>
        <users_xml>
            <!-- 事前定義されたユーザーを持つ設定ファイルへのパス。 -->
            <path>users.xml</path>
        </users_xml>
        <local_directory>
            <!-- SQLコマンドによって作成されたユーザーが保存されるフォルダーへのパス。 -->
            <path>/var/lib/clickhouse/access/</path>
        </local_directory>

        <!-- ローカルに定義されていないユーザーのリモートユーザーディレクトリとしてLDAPサーバーを追加するには、
              次のパラメータを持つ単一の「ldap」セクションを定義します:
                server - 上記の「ldap_servers」設定セクションで定義されたLDAPサーバー名の1つ。
                        このパラメータは必須で空にできません。
                roles - LDAPサーバーから取得された各ユーザーに割り当てられるローカルに定義された役割のリストを持つセクション。
                        ここで役割が指定されていない場合、または役割マッピング中に割り当てられていない場合、
                         ユーザーは認証後に何のアクションも実行できません。
                role_mapping - LDAP検索パラメータとマッピングルールを持つセクション。
                        ユーザーが認証されると、LDAPにバインドされたまま、search_filterと
                         ログインユーザー名を使用してLDAP検索が実行されます。
                        検索中に見つかった各エントリについて、指定された属性の値が抽出されます。
                        指定されたプレフィックスを持つ各属性値について、プレフィックスが削除され、
                        残りの値がClickHouseで事前に作成されることが期待されるローカル役割の名前になります。
                        同じ「ldap」セクション内に複数の「role_mapping」セクションを定義できます。すべてが適用されます。
                    base_dn - LDAP検索のためのベースDNを構築するために使用されるテンプレート。
                            結果のDNは、テンプレートのすべての'{user_name}', '{bind_dn}', および'{user_dn}'
                             部分文字列を実際のユーザー名、バインドDN、およびユーザーDNに置き換えることによって構築されます。
                    scope - LDAP検索のスコープ。
                            受け入れられる値は: 'base', 'one_level', 'children', 'subtree'(デフォルト)。
                    search_filter - LDAP検索のための検索フィルターを構築するために使用されるテンプレート。
                            結果のフィルターは、テンプレートのすべての'{user_name}', '{bind_dn}', '{user_dn}', および
                             '{base_dn}'部分文字列を実際のユーザー名、バインドDN、ユーザーDN、およびベースDNに置き換えることによって構築されます。
                            特殊文字はXMLで適切にエスケープする必要があります。
                    attribute - LDAP検索によって返される値の属性名。デフォルトは'cn'。
                    prefix - LDAP検索によって返される元の文字列リストの各文字列の前に期待されるプレフィックス。
                             プレフィックスは元の文字列から削除され、結果の文字列はローカル役割名として扱われます。デフォルトは空です。
             例:
                <ldap>
                    <server>my_ldap_server</server>
                    <roles>
                        <my_local_role1 />
                        <my_local_role2 />
                    </roles>
                    <role_mapping>
                        <base_dn>ou=groups,dc=example,dc=com</base_dn>
                        <scope>subtree</scope>
                        <search_filter>(&amp;(objectClass=groupOfNames)(member={bind_dn}))</search_filter>
                        <attribute>cn</attribute>
                        <prefix>clickhouse_</prefix>
                    </role_mapping>
                </ldap>
             例(検出されたユーザーDNに依存する役割マッピングを持つ典型的なActive Directory):
                <ldap>
                    <server>my_ad_server</server>
                    <role_mapping>
                        <base_dn>CN=Users,DC=example,DC=com</base_dn>
                        <attribute>CN</attribute>
                        <scope>subtree</scope>
                        <search_filter>(&amp;(objectClass=group)(member={user_dn}))</search_filter>
                        <prefix>clickhouse_</prefix>
                    </role_mapping>
                </ldap>
        -->
    </user_directories>

    <!-- 設定のデフォルトプロファイル。 -->
    <default_profile>default</default_profile>

    <!-- ユーザー定義設定のプレフィックスのカンマ区切りリスト。 -->
    <custom_settings_prefixes></custom_settings_prefixes>

    <!-- システム設定のプロファイル。この設定は内部プロセス(Distributed DDLワーカーなど)によって使用されます。 -->
    <!-- <system_profile>default</system_profile> -->

    <!-- バッファプロファイルの設定。
         この設定は、バッファストレージがデータを基になるテーブルにフラッシュするために使用されます。
         デフォルト: system_profileディレクティブから使用されます。
    -->
    <!-- <buffer_profile>default</buffer_profile> -->

    <!-- デフォルトデータベース。 -->
    <default_database>default</default_database>

    <!-- サーバーのタイムゾーンをここで設定できます。

         タイムゾーンは、StringとDateTime型の間の変換時、
          テキスト形式でDateTimeを印刷する際やテキストからDateTimeを解析する際に使用され、
          特定のタイムゾーンが引数として渡されなかった場合に、日付および時間関連の関数で使用されます。

         タイムゾーンはIANAタイムゾーンデータベースからの識別子として指定され、UTCやAfrica/Abidjanのようになります。
         指定しない場合は、サーバー起動時のシステムタイムゾーンが使用されます。

         サーバーは指定された名前の代わりにタイムゾーンエイリアスを表示する場合があります。
         例: W-SUはEurope/Moscowのエイリアスで、ZuluはUTCのエイリアスです。
    -->
    <!-- <timezone>Europe/Moscow</timezone> -->

    <!-- ここでumaskを指定できます(「man umask」を参照)。サーバーは起動時にこれを適用します。
         数字は常に8進数として解析されます。デフォルトのumaskは027です(他のユーザーはログ、データファイルなどを読み取れません; グループは読み取りのみ可能)。
    -->
    <!-- <umask>022</umask> -->

    <!-- 起動後にmlockallを実行して最初のクエリのレイテンシを低下させ、
          高IO負荷の下でclickhouse実行可能ファイルがページアウトされるのを防ぎます。
         このオプションを有効にすることは推奨されますが、起動時間が数秒増加します。
    -->
    <mlock_executable>true</mlock_executable>

    <!-- 巨大ページを使用して機械コード(「テキスト」)のメモリを再割り当てします。非常に実験的です。 -->
    <remap_executable>false</remap_executable>

    <![CDATA[
         JDBCテーブルエンジンと関数を使用するには、以下のコメントを外してください。

         JDBCブリッジをインストールしてバックグラウンドで実行するには:
         * [Debian/Ubuntu]
           export MVN_URL=https://repo1.maven.org/maven2/ru/yandex/clickhouse/clickhouse-jdbc-bridge
           export PKG_VER=$(curl -sL $MVN_URL/maven-metadata.xml | grep '<release>' | sed -e 's|.*>\(.*\)<.*|\1|')
           wget https://github.com/ClickHouse/clickhouse-jdbc-bridge/releases/download/v$PKG_VER/clickhouse-jdbc-bridge_$PKG_VER-1_all.deb
           apt install --no-install-recommends -f ./clickhouse-jdbc-bridge_$PKG_VER-1_all.deb
           clickhouse-jdbc-bridge &

         * [CentOS/RHEL]
           export MVN_URL=https://repo1.maven.org/maven2/ru/yandex/clickhouse/clickhouse-jdbc-bridge
           export PKG_VER=$(curl -sL $MVN_URL/maven-metadata.xml | grep '<release>' | sed -e 's|.*>\(.*\)<.*|\1|')
           wget https://github.com/ClickHouse/clickhouse-jdbc-bridge/releases/download/v$PKG_VER/clickhouse-jdbc-bridge-$PKG_VER-1.noarch.rpm
           yum localinstall -y clickhouse-jdbc-bridge-$PKG_VER-1.noarch.rpm
           clickhouse-jdbc-bridge &

         詳細については https://github.com/ClickHouse/clickhouse-jdbc-bridge#usage を参照してください。
    ]]>
    <!--
    <jdbc_bridge>
        <host>127.0.0.1</host>
        <port>9019</port>
    </jdbc_bridge>
    -->

    <!-- 分散テーブルで使用できるクラスターの設定。
         https://clickhouse.com/docs/en/operations/table_engines/distributed/
      -->
    <remote_servers>
        <default_cluster>
            <shard>
                <weight>1</weight>
                <internal_replication>false</internal_replication>
                <replica>
                    <host>ck1</host>
                    <port>9000</port>
                </replica>
            </shard>
            <shard>
                <weight>1</weight>
                <internal_replication>false</internal_replication>
                <replica>
                    <host>ck2</host>
                    <port>9000</port>
                </replica>
            </shard>
            <shard>
                <weight>1</weight>
                <internal_replication>false</internal_replication>
                <replica>
                    <host>ck3</host>
                    <port>9000</port>
                </replica>
            </shard>
        </default_cluster>
    </remote_servers>

    <macros>
        <replica>ck1</replica>
        <shard>01</shard>
        <layer>01</layer>
    </macros>


    <!-- URL関連のストレージエンジンおよびテーブル関数で使用するホストのリスト。
        このセクションが設定に存在しない場合、すべてのホストが許可されます。
    -->
    <!--<remote_url_allow_hosts>-->
    <!-- ホストはURLと正確に同じように指定する必要があります。名前はDNS解決の前にチェックされます。
        例: "yandex.ru", "yandex.ru." および "www.yandex.ru" は異なるホストです。
                URLにポートが明示的に指定されている場合、host:port全体がチェックされます。
                ここでポートなしで指定されたホストは、任意のポートが許可されます。
                "yandex.ru" -> "yandex.ru:443", "yandex.ru:80" などが許可されますが、"yandex.ru:80" -> "yandex.ru:80" のみが許可されます。
        ホストがIPアドレスとして指定されている場合、URLに指定されたようにチェックされます。例: "[2a02:6b8:a::a]"。
        リダイレクトがあり、リダイレクトのサポートが有効になっている場合、すべてのリダイレクト(Locationフィールド)がチェックされます。
        ホストは次のようにホストxmlタグを使用して指定する必要があります:
                <host>yandex.ru</host>
    -->

    <!-- 正規表現を指定できます。RE2エンジンが正規表現に使用されます。
        正規表現は整列されていません: ^と$を追加することを忘れないでください。また、ドット(.)メタキャラクターをエスケープすることを忘れないでください
        (これを忘れることは一般的なエラーの原因です)。
    -->
    <!--</remote_url_allow_hosts>-->

    <!-- 要素に'incl'属性がある場合、その値には別のファイルからの対応する置換が使用されます。
         デフォルトでは、置換のためのファイルへのパスは/etc/metrika.xmlです。'include_from'要素で設定できます。
         置換の値は、そのファイル内の/clickhouse/name_of_substitution要素で指定されます。
      -->

    <!-- ZooKeeperは、レプリケートテーブルを使用する際にレプリカに関するメタデータを保存するために使用されます。
         オプションです。レプリケートテーブルを使用しない場合は、これを省略できます。

         https://clickhouse.com/docs/en/engines/table-engines/mergetree-family/replication/ を参照してください。
      -->

    <zookeeper>
        <node>
            <host>zookeeper1</host>
            <port>2181</port>
        </node>
    </zookeeper>

    <!-- レプリケートテーブルのパラメータの置換。
          オプションです。レプリケートテーブルを使用しない場合は、これを省略できます。

         https://clickhouse.com/docs/en/engines/table-engines/mergetree-family/replication/#creating-replicated-tables を参照してください。
      -->
    <!--
    <macros>
        <shard>01</shard>
        <replica>example01-01-1</replica>
    </macros>
    -->


    <!-- 組み込み辞書のリロード間隔(秒単位)。デフォルト: 3600。 -->
    <builtin_dictionaries_reload_interval>3600</builtin_dictionaries_reload_interval>


    <!-- 最大セッションタイムアウト(秒単位)。デフォルト: 3600。 -->
    <max_session_timeout>3600</max_session_timeout>

    <!-- デフォルトのセッションタイムアウト(秒単位)。デフォルト: 60。 -->
    <default_session_timeout>60</default_session_timeout>

    <!-- 監視のためにGraphiteにデータを送信します。複数のセクションを定義できます。 -->
    <!--
        interval - X秒ごとに送信
        root_path - キーのプレフィックス
        hostname_in_path - root_pathにホスト名を追加する(デフォルト = true)
        metrics - system.metricsテーブルからデータを送信
        events - system.eventsテーブルからデータを送信
        asynchronous_metrics - system.asynchronous_metricsテーブルからデータを送信
    -->
    <!--
    <graphite>
        <host>localhost</host>
        <port>42000</port>
        <timeout>0.1</timeout>
        <interval>60</interval>
        <root_path>one_min</root_path>
        <hostname_in_path>true</hostname_in_path>

        <metrics>true</metrics>
        <events>true</events>
        <events_cumulative>false</events_cumulative>
        <asynchronous_metrics>true</asynchronous_metrics>
    </graphite>
    <graphite>
        <host>localhost</host>
        <port>42000</port>
        <timeout>0.1</timeout>
        <interval>1</interval>
        <root_path>one_sec</root_path>

        <metrics>true</metrics>
        <events>true</events>
        <events_cumulative>false</events_cumulative>
        <asynchronous_metrics>false</asynchronous_metrics>
    </graphite>
    -->

    <!-- Prometheus監視のためのエンドポイントを提供します。 -->
    <!--
        endpoint - メトリクスパス(ルートに対して相対的で、"/"で始まる)
        port - サーバーを設定するポート。定義されていない場合や0の場合はhttp_portが使用されます
        metrics - system.metricsテーブルからデータを送信
        events - system.eventsテーブルからデータを送信
        asynchronous_metrics - system.asynchronous_metricsテーブルからデータを送信
        status_info - CHの異なるコンポーネントからデータを送信、例: 辞書の状態
    -->
    <!--
    <prometheus>
        <endpoint>/metrics</endpoint>
        <port>9363</port>

        <metrics>true</metrics>
        <events>true</events>
        <asynchronous_metrics>true</asynchronous_metrics>
        <status_info>true</status_info>
    </prometheus>
    -->

    <!-- クエリログ。log_queries = 1の設定を持つクエリのみで使用されます。 -->
    <query_log>
        <!-- データを挿入するテーブル。テーブルが存在しない場合は作成されます。
             システムアップデート後にクエリログ構造が変更された場合、
              古いテーブルは名前が変更され、新しいテーブルが自動的に作成されます。
        -->
        <database>system</database>
        <table>query_log</table>
        <!--
            PARTITION BY expr: https://clickhouse.com/docs/en/table_engines/mergetree-family/custom_partitioning_key/
            例:
                event_date
                toMonday(event_date)
                toYYYYMM(event_date)
                toStartOfHour(event_time)
        -->
        <partition_by>toYYYYMM(event_date)</partition_by>
        <!--
            テーブルTTL仕様: https://clickhouse.com/docs/en/engines/table-engines/mergetree-family/mergetree/#mergetree-table-ttl
            例:
                event_date + INTERVAL 1 WEEK
                event_date + INTERVAL 7 DAY DELETE
                event_date + INTERVAL 2 WEEK TO DISK 'bbb'

        <ttl>event_date + INTERVAL 30 DAY DELETE</ttl>
        -->

        <!-- partition_byの代わりに、パラメータ付きの完全なエンジン式(ENGINE = から始まる)を提供できます。
             例: <engine>ENGINE = MergeTree PARTITION BY toYYYYMM(event_date) ORDER BY (event_date, event_time) SETTINGS index_granularity = 1024</engine>
          -->

        <!-- データをフラッシュする間隔。 -->
        <flush_interval_milliseconds>7500</flush_interval_milliseconds>
    </query_log>

    <!-- トレースログ。クエリプロファイラーによって収集されたスタックトレースを保存します。
         query_profiler_real_time_period_nsおよびquery_profiler_cpu_time_period_ns設定を参照してください。 -->
    <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>

    <!-- クエリスレッドログ。クエリ実行に参加したすべてのスレッドに関する情報を持っています。
         log_query_threads = 1の設定を持つクエリのみで使用されます。 -->
    <query_thread_log>
        <database>system</database>
        <table>query_thread_log</table>
        <partition_by>toYYYYMM(event_date)</partition_by>
        <flush_interval_milliseconds>7500</flush_interval_milliseconds>
    </query_thread_log>

    <!-- クエリビューのログ。クエリに関連するすべての依存ビューに関する情報を持っています。
         log_query_views = 1の設定を持つクエリのみで使用されます。 -->
    <query_views_log>
        <database>system</database>
        <table>query_views_log</table>
        <partition_by>toYYYYMM(event_date)</partition_by>
        <flush_interval_milliseconds>7500</flush_interval_milliseconds>
    </query_views_log>

    <!-- パートログを使用する場合はコメントを外してください。
         パートログには、MergeTreeテーブル内のパーツに関するすべてのアクション(作成、削除、マージ、ダウンロード)に関する情報が含まれます。-->
    <part_log>
        <database>system</database>
        <table>part_log</table>
        <partition_by>toYYYYMM(event_date)</partition_by>
        <flush_interval_milliseconds>7500</flush_interval_milliseconds>
    </part_log>

    <!-- テキストログをテーブルに書き込むためにコメントを外してください。
         テキストログには通常のサーバーログからのすべての情報が含まれますが、構造化され効率的な方法で保存されます。
         テーブルに送信されるメッセージのレベルを制限することができます(<level>)、指定しない場合はすべてのメッセージがテーブルに送信されます。
    <text_log>
        <database>system</database>
        <table>text_log</table>
        <flush_interval_milliseconds>7500</flush_interval_milliseconds>
        <level></level>
    </text_log>
    -->

    <!-- メトリクスログには、ProfileEvents、CurrentMetricsの現在の値を含む行が含まれます。
         "collect_interval_milliseconds"間隔で収集されます。 -->
    <metric_log>
        <database>system</database>
        <table>metric_log</table>
        <flush_interval_milliseconds>7500</flush_interval_milliseconds>
        <collect_interval_milliseconds>1000</collect_interval_milliseconds>
    </metric_log>

    <!--
        非同期メトリクスログには、system.asynchronous_metricsからのメトリクスの値が含まれます。
    -->
    <asynchronous_metric_log>
        <database>system</database>
        <table>asynchronous_metric_log</table>
        <!--
            非同期メトリクスは1分ごとに更新されるため、より頻繁にフラッシュする必要はありません。
        -->
        <flush_interval_milliseconds>7000</flush_interval_milliseconds>
    </asynchronous_metric_log>

    <!--
        OpenTelemetryログにはOpenTelemetryトレーススパンが含まれます。
    -->
    <opentelemetry_span_log>
        <!--
            デフォルトのテーブル作成コードは不十分であり、この<engine>仕様は
            回避策です。このログには'event_time'がありませんが、開始と終了の2つの時間があります。
            終了時間でソートされており、過去にデータを挿入するのを避けるために(おそらく、並行して挿入された
            複数のスパンの間の競合により、テーブル内の最後のスパンよりも数秒早くスパンを挿入できることがあります)。
            これにより、スパンにグローバルな順序が与えられ、外部システムへの挿入を再試行するために使用できます。
        -->
        <engine>
            engine MergeTree
            partition by toYYYYMM(finish_date)
            order by (finish_date, finish_time_us, trace_id)
        </engine>
        <database>system</database>
        <table>opentelemetry_span_log</table>
        <flush_interval_milliseconds>7500</flush_interval_milliseconds>
    </opentelemetry_span_log>


    <!-- クラッシュログ。致命的なエラーのスタックトレースを保存します。
         このテーブルは通常空です。 -->
    <crash_log>
        <database>system</database>
        <table>crash_log</table>

        <partition_by/>
        <flush_interval_milliseconds>1000</flush_interval_milliseconds>
    </crash_log>

    <!-- セッションログ。ユーーログイン(成功または失敗)およびログアウトイベントを保存します。 -->
    <session_log>
        <database>system</database>
        <table>session_log</table>

        <partition_by>toYYYYMM(event_date)</partition_by>
        <flush_interval_milliseconds>7500</flush_interval_milliseconds>
    </session_log>

    <!-- Yandex.Metricaで使用される組み込み辞書のパラメータ。
         https://clickhouse.com/docs/en/dicts/internal_dicts/ を参照してください。
    -->

    <!-- 地域階層を含むファイルへのパス。 -->
    <!-- <path_to_regions_hierarchy_file>/opt/geo/regions_hierarchy.txt</path_to_regions_hierarchy_file> -->

    <!-- 地域名を含むファイルのディレクトリへのパス -->
    <!-- <path_to_regions_names_files>/opt/geo/</path_to_regions_names_files> -->


    <!-- <top_level_domains_path>/var/lib/clickhouse/top_level_domains/</top_level_domains_path> -->
    <!-- カスタムTLDリスト。
         フォーマット: <name>/path/to/file</name>

         サーバーの再起動なしには変更は適用されません。
         リストへのパスはtop_level_domains_pathの下にあります(上記参照)。
    -->
    <top_level_domains_lists>
        <!--
        <public_suffix_list>/path/to/public_suffix_list.dat</public_suffix_list>
        -->
    </top_level_domains_lists>

    <!-- 外部辞書の設定。詳細は:
         https://clickhouse.com/docs/en/sql-reference/dictionaries/external-dictionaries/external-dicts を参照してください。
    -->
    <dictionaries_config>*_dictionary.xml</dictionaries_config>

    <!-- ユーザー定義の実行可能関数の設定 -->
    <user_defined_executable_functions_config>*_function.xml</user_defined_executable_functions_config>

    <!-- データを30-100%より良く圧縮したい場合はコメントを外してください。
         ClickHouseを使い始めたばかりの場合は、これを行わないでください。
      -->
    <!--
    <compression>
        <!- - 一連のバリアント。順番にチェックされます。最後に一致したケースが勝ちます。何も一致しない場合は、lz4が使用されます。 - ->
        <case>

            <!- - 条件。すべて満たされる必要があります。一部の条件は省略可能です。 - ->
            <min_part_size>10000000000</min_part_size>        <!- - バイト単位の最小パートサイズ。 - ->
            <min_part_size_ratio>0.01</min_part_size_ratio>   <!- - テーブル全体のサイズに対するパートの最小サイズ。 - ->

            <!- - 使用する圧縮方法。 - ->
            <method>zstd</method>
        </case>
    </compression>
    -->

    <!-- 暗号化の設定。サーバーは、起動時にそのようなコマンドが定義されている場合、暗号化キーを取得するためにコマンドを実行します。
         そうでない場合、暗号化コーデックは無効になります。このコマンドは/bin/shを介して実行され、
         Base64エンコードされたキーをstdoutに書き込むことが期待されます。 -->
    <encryption_codecs>
        <!-- aes_128_gcm_siv -->
        <!-- 環境からの16バイトの長さのキーを取得する例 -->
        <!-- このキーを使用し、長さが16バイトでない場合は例外をスローする必要があります -->
        <!--key_hex from_env="..."></key_hex -->

        <!-- 複数の16バイトの長さのキーの例。環境からインポートするか、設定に書き込むことができます -->
        <!-- これらのキーを使用し、長さが16バイトでない場合は例外をスローする必要があります -->
        <!-- key_hex id="0">...</key_hex -->
        <!-- key_hex id="1" from_env=".."></key_hex -->
        <!-- key_hex id="2">...</key_hex -->
        <!-- current_key_id>2</current_key_id -->

        <!-- 設定からの16バイトの長さのキーを取得する例 -->
        <!-- このキーを使用し、長さが16バイトでない場合は例外をスローする必要があります -->
        <!-- key>...</key -->

        <!-- nonceの追加の例 -->
        <!-- nonce>...</nonce -->

        <!-- /aes_128_gcm_siv -->
    </encryption_codecs>

    <!-- クラスター上で分散DDLクエリ(CREATE、DROP、ALTER、RENAME)を実行できるようにします。
         ZooKeeperが有効になっている場合のみ機能します。この機能が必要ない場合はコメントしてください。 -->
    <distributed_ddl>
        <!-- ZooKeeper内のDDLクエリのキューへのパス -->
        <path>/clickhouse/task_queue/ddl</path>

        <!-- このプロファイルの設定はDDLクエリを実行するために使用されます -->
        <!-- <profile>default</profile> -->

        <!-- ON CLUSTERクエリを同時に実行できる数を制御します。 -->
        <!-- <pool_size>1</pool_size> -->

        <!--
             クリーンアップ設定(アクティブなタスクは削除されません)
        -->

        <!-- タスクTTLを制御します(デフォルトは1週間) -->
        <!-- <task_max_lifetime>604800</task_max_lifetime> -->

        <!-- クリーンアップを実行する頻度を制御します(秒単位) -->
        <!-- <cleanup_delay_period>60</cleanup_delay_period> -->

        <!-- キュー内に存在できるタスクの数を制御します -->
        <!-- <max_tasks_in_queue>1000</max_tasks_in_queue> -->
    </distributed_ddl>

    <!-- MergeTreeテーブルを微調整するための設定。ソースコードのMergeTreeSettings.hのドキュメントを参照してください。 -->
    <!--
    <merge_tree>
        <max_suspicious_broken_parts>5</max_suspicious_broken_parts>
    </merge_tree>
    -->

    <!-- 偶発的なDROPからの保護。
         MergeTreeテーブルのサイズがmax_table_size_to_drop(バイト単位)を超える場合、そのテーブルは
         いかなるDROPクエリでも削除できません。
         1つのテーブルを削除したい場合、clickhouse-serverの設定を変更したくない場合は、
         特別なファイル<clickhouse-path>/flags/force_drop_tableを作成し、1回DROPを実行できます。
         デフォルトではmax_table_size_to_dropは50GBです; max_table_size_to_drop=0は任意のテーブルをDROP可能にします。
         max_partition_size_to_dropについても同様です。
         コメントを外して保護を無効にします。
    -->
    <!-- <max_table_size_to_drop>0</max_table_size_to_drop> -->
    <!-- <max_partition_size_to_drop>0</max_partition_size_to_drop> -->

    <!-- GraphiteMergeTreeテーブルエンジンのパラメータの例 -->
    <graphite_rollup_example>
        <pattern>
            <regexp>click_cost</regexp>
            <function>any</function>
            <retention>
                <age>0</age>
                <precision>3600</precision>
            </retention>
            <retention>
                <age>86400</age>
                <precision>60</precision>
            </retention>
        </pattern>
        <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>

    <!-- 様々な入力形式のスキーマファイルを含む<clickhouse-path>内のディレクトリ。
         ディレクトリが存在しない場合は作成されます。
      -->
    <format_schema_path>/var/lib/clickhouse/format_schemas/</format_schema_path>

    <!-- デフォルトのクエリマスキングルール、マッチする行はログ内の他のもので置き換えられます
        (テキストログとsystem.query_logの両方)。
        name - ルールの名前(オプション)
        regexp - RE2互換の正規表現(必須)
        replace - 機密データの置換文字列(オプション、デフォルトは6つのアスタリスク)
    -->
    <query_masking_rules>
        <rule>
            <name>暗号化/復号化引数を隠す</name>
            <regexp>((?:aes_)?(?:encrypt|decrypt)(?:_mysql)?)\s*\(\s*(?:'(?:\\'|.)+'|.*?)\s*\)</regexp>
            <!-- より安全ですが、より侵襲的でもあります:
                (aes_\w+)\s*\(.*\)
            -->
            <replace>\1(???)</replace>
        </rule>
    </query_masking_rules>

    <!-- カスタムHTTPハンドラーを使用する場合はコメントを外してください。
        ルールは上から下へチェックされ、最初の一致がハンドラーを実行します
            url - リクエストURLに一致させるため、正規表現一致を使用するには'regex:'プレフィックスを使用できます(オプション)
            methods - リクエストメソッドに一致させるため、複数のメソッド一致をカンマで区切ることができます(オプション)
            headers - リクエストヘッダーに一致させるため、各子要素(子要素名はヘッダー名)を一致させます。
            ハンドラーはリクエストハンドラーです
            type - サポートされているタイプ: static, dynamic_query_handler, predefined_query_handler
            query - predefined_query_handlerタイプで使用し、ハンドラーが呼び出されたときにクエリを実行します
            query_param_name - dynamic_query_handlerタイプで使用し、HTTPリクエストパラメータ内の<query_param_name>値に対応する値を抽出して実行します
            status - staticタイプで使用し、応答ステータスコード
            content_type - staticタイプで使用し、応答のcontent-type
            response_content - staticタイプで使用し、クライアントに送信される応答内容。'file://'または'config://'プレフィックスを使用する場合、ファイルまたは設定から内容を見つけてクライアントに送信します。

    <http_handlers>
        <rule>
            <url>/</url>
            <methods>POST,GET</methods>
            <headers><pragma>no-cache</pragma></headers>
            <handler>
                <type>dynamic_query_handler</type>
                <query_param_name>query</query_param_name>
            </handler>
        </rule>

        <rule>
            <url>/predefined_query</url>
            <methods>POST,GET</methods>
            <handler>
                <type>predefined_query_handler</type>
                <query>SELECT * FROM system.settings</query>
            </handler>
        </rule>

        <rule>
            <handler>
                <type>static</type>
                <status>200</status>
                <content_type>text/plain; charset=UTF-8</content_type>
                <response_content>config://http_server_default_response</response_content>
            </handler>
        </rule>
    </http_handlers>
    -->

    <send_crash_reports>
        <!-- <enabled>をtrueに変更すると、クラッシュレポートを送信できます -->
        <!-- ClickHouseコア開発者チームにSentry経由で https://sentry.io -->
        <!-- プリプロダクション環境では、これを行うことが非常に評価されます -->
        <enabled>false</enabled>
        <!-- クラッシュレポートにサーバーホスト名を添付することに不安がある場合は<anonymize>をtrueに変更します -->
        <anonymize>false</anonymize>
        <!-- デフォルトのエンドポイントは、内部エンジニアや雇われたコンサルタントがClickHouseの問題をデバッグするために使用する場合にのみ、異なるSentry DSNに変更する必要があります -->
        <endpoint
読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。