users.xml配置详解

<?xml version="1.0"?>
<yandex>
    <profiles>
        <default>
            <max_memory_usage>10000000000</max_memory_usage>  <!--单个查询最大内存使用量-->
            <max_memory_usage_for_user>0</max_memory_usage_for_user>  <!--在单个ClickHouse服务进程中,以用户为单位进行统计,单个用户在运行查询时,限制使用的最大内存用量,默认值为0,即不做限制-->
            <max_memory_usage_for_all_queries>0</max_memory_usage_for_all_queries><!--在单个ClickHouse服务进程中,所有运行的查询累加在一起,限制使用的最大内存用量,默认为0不做限制-->
            <max_partitions_per_insert_block>100</max_partitions_per_insert_block><!--在单次INSERT写入的时候,限制创建的最大分区个数,默认值为100个。如果超出这个阈值数目,将会得到异常-->
            <max_rows_to_group_by>0</max_rows_to_group_by> <!--在执行GROUP BY聚合查询的时候,限制去重后的聚合KEY的最大个数,默认值为0,即不做限制-->
            <max_bytes_before_external_group_by>0</max_bytes_before_external_group_by> <!--在执行GROUP BY聚合查询的时候,限制使用的最大内存用量,默认值为0,即不做限制-->
            <use_uncompressed_cache>0</use_uncompressed_cache>  <!--是否使用未压缩块的缓存。接受0或1。默认情况下,0(禁用)-->

            <load_balancing>random</load_balancing> <!--指定用于分布式查询处理的副本选择算法 默认:Random
			random是默认的负载均衡算法,在ClickHouse的服务节点中,拥有一个全局计数器errors_count,当服务发生任何异常时,该计数累积加1。而random算法会选择errors_count错误数量最少的replica,如果多个replica的errors_count计数相同,则在它们之中随机选择一个
			nearest_hostname可以看作random算法的变种,首先它会选择errors_count错误数量最少的replica,如果多个replica的errors_count计数相同,则选择集群配置中host名称与当前host最相似的一个
			in_order同样可以看作random算法的变种,首先它会选择errors_count错误数量最少的replica,如果多个replica的errors_count计数相同,则按照集群配置中replica的定义顺序逐个选择。
			first_or_random可以看作in_order算法的变种,首先它会选择errors_count错误数量最少的replica,如果多个replica的errors_count计数相同,它首先会选择集群配置中第一个定义的replica,如果该replica不可用,则进一步随机选择一个其他的replica。
-->
            <log_queries> 1</log_queries>  <!--用户配置开启query_log查询日志,记录了ClickHouse服务中所有已经执行的查询记录-->
            <log_query_threads> 1</log_query_threads>  <!--用户配置开启query_thread_log日志 记录了所有线程的执行查询的信息-->
            <part_log>1</part_log> <!--用户配置开启part_log日志,记录了MergeTree系列表引擎的分区操作日志-->
            <text_log>1</text_log>  <!--用户配置开启text_log日志 记录了ClickHouse运行过程中产生的一系列打印日志,包括INFO、DEBUG和Trace-->
            <metric_log>1</metric_log> <!--用户配置开启metric_log日志 用于将system.metrics和system.events中的数据汇聚到一起-->
        </default>
        
        <readonly>  <!--读权限、写权限和设置权限  readonly:用户名-->
            <readonly>0</readonly>  <!--不进行任何限制(默认值)-->
            <readonly>1</readonly>  <!--只拥有读权限(只能执行SELECT、EXISTS、SHOW和DESCRIBE)-->
            <readonly>2</readonly>  <!--拥有读权限和设置权限(在读权限基础上,增加了SET查询)-->
            <allow_ddl>0</allow_ddl>  <!--·当取值为0时,不允许DDL查询  create drop alter-->
            <allow_ddl>1</allow_ddl>  <!--·当取值为1时,允许DDL查询(默认值)-->
        </readonly>
    </profiles>

    <users>  <!--用户配置-->
        <default>  <!--用户名-->
            <password></password>  <!--置登录密码  免密码登入,支持明文、SHA256加密和double_sha1加密三种形式-->
            <password>123</password>   <!--明文密码-->
            <password_sha256_hex>a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3</password_sha256_hex>  <!--SHA256加密  # echo -n 123 | openssl dgst -sha256-->
            <password_double_sha1_hex>23ae809ddacaf96af0fd78ed04b6a265e05aa257</password_double_sha1_hex>  <!--double_sha1加密  # echo -n 123 | openssl dgst -sha1 -binary | openssl dgst -sha1-->
            
            <networks incl="networks" replace="replace">  <!--限制IP访问-->
                <ip>::/0</ip>   --允许任何地址访问
                <ip>127.0.0.1</ip>  --允许本地访问
                <ip>192.168.107.216</ip> --允许该IP访问
            </networks>
            
            <allow_databases>  <!--限制访问数据库   不指定表示不限制-->
                <database>default</database>  <!--库名称-->
                <database>test_dictionaries</database>
            </allow_databases>
            
            <databases>  <!--限制访问表的数据   不指定表示不限制-->
                <database_name><!--数据库名称-->
                    <table_name><!--表名称-->
                        <filter> id < 10</filter><!--数据过滤条件-->
                    </table_name>
            	</database_name>
           	</databases>
                    
            <profile>default</profile>

            <quota>default</quota>
        </default>
    </users>

    <quotas>  <!--限制资源被过度使用,当使用的资源数量达到阈值时,那么正在进行的操作会被自动中断-->
        <default>  <!--自定义名称,全局唯一-->
            <interval>  <!--配置时间间隔,每个时间内的资源消耗限制-->
                <duration>3600</duration>  <!--表示累积的时间周期,单位是秒-->
                <queries>0</queries>  <!--表示在周期内允许执行的查询次数,0表示不限制-->
                <errors>0</errors> <!--表示在周期内允许发生异常的次数,0表示不限制-->
                <result_rows>0</result_rows>  <!--表示在周期内允许查询返回的结果行数,0表示不限制-->
                <read_rows>0</read_rows>  <!--表示在周期内在分布式查询中,允许远端节点读取的数据行数,0表示不限制。-->
                <execution_time>0</execution_time>  <!--表示周期内允许执行的查询时间,单位是秒,0表示不限制。-->
            </interval>
        </default>
    </quotas>
</yandex>