• ClickHouse 简单使用(二)


    4 ClickHouse 启动和关闭

    4.1 通过系统命令

    启动

    systemctl start clickhouse-server

     

    关闭

    systemctl stop clickhouse-server

    重启

    systemctl restart clickhouse-server

    4.2 通过原生命令

        启动

    /etc/init.d/clickhouse-server start

    关闭

    /etc/init.d/clickhouse-server stop

        重启

    /etc/init.d/clickhouse-server stop

    登录方法

    5.1 clickhouse-client登录本地服务器

    clickhouse-client -h 127.0.0.1 --port 9000 -u default -d default --ask-password

    下面解释这些参数的含义:

    -h 127.0.0.1 表示连接到本地

    --port 9000是表示 clickhouse接收TPC/IP连接的端口是9000

    -u default 表示用户名是 default

    -d default 表示连接到的数据库的名称是 default

    我们推荐用puttyXShell来访问linux 客户端。

    注意BUG:用SecureCRT 访问会出错。例如:

    输入“alter”,会显示成下面这样:

     

    5.2 用图形化客户端

    dbeaver 提供了连接 clickhouse 的能力。它在连接clickhouse 服务端时会自动下载需要的驱动。

    如图所示,是一个连接的配置。注意clickhouse jdbc 是基于 HTTP协议的,而clickhouse接受HTTP连接的端口是8123

     

    6 常用 sql 语句

    ClickHouseMySQL语法相似。这里列出一些常用的sql 语句。参见官方手册的章节statement

    6.1 创建

    这一节的内容来自官方手册中的Create Queries.

    6.1.1 创建数据库

    基本语法:

    CREATE DATABASE [IF NOT EXISTS] db_name [ON CLUSTER cluster] [ENGINE = engine(...)]

    ClickHouse 的引擎(ENGINE有这些:

    1. 默认引擎

    默认情况下,ClickHouse使用自身的数据库引擎,该引擎可以提供表引擎配置( table engines )和SQLSQL dialect.

    2. MySQL引擎

    允许连接到远程MySQL服务器上的数据库,并执行INSERTSELECT查询以在ClickHouseMySQL之间交换数据。

    创建数据库语法:

    CREATE DATABASE [IF NOT EXISTS] db_name [ON CLUSTER cluster]

    ENGINE = MySQL('host:port', ['database' | database], 'user', 'password')

    3. Lazy引擎

    在最后一次访问之后,仅在expiration_time_in_seconds秒内将表保留在RAM中。只有Log引擎的表可以使用。

    该引擎针对存储很多小型Log引擎表的情况进行了优化。因为对于这些表而言,两次访问之间的时间间隔很长。

    创建数据库语法:

    CREATE DATABASE testlazy ENGINE = Lazy(expiration_time_in_seconds);

    6.1.2 创建表

    基本语法:

    CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]

    (

            name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1] [compression_codec] [TTL expr1],

            name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2] [compression_codec] [TTL expr2],

            ...

    ) ENGINE = engine;

        

        ClickHouse 的表的引擎很多,在7章会详细介绍。

    6.1.3 创建视图

    创建普通视图:

    CREATE [OR REPLACEVIEW [IF NOT EXISTS] [db.]table_name [ON CLUSTERAS SELECT ...

    创建物化视图:

    CREATE MATERIALIZED VIEW [IF NOT EXISTS] [db.]table_name [ON CLUSTER] [TO[db.]name] [ENGINE = engine] [POPULATE] AS SELECT ...

    6.1.4 创建用户

    基本语法:

    CREATE USER [IF NOT EXISTS | OR REPLACE] name [ON CLUSTER cluster_name]

    [

    IDENTIFIED

           [WITH

    {NO_PASSWORD|PLAINTEXT_PASSWORD|SHA256_PASSWORD|SHA256_HASH|DOUBLE_SHA1_PASSWORD|DOUBLE_SHA1_HASH}]

         BY {'password'|'hash'}

    ]

        [HOST {LOCAL | NAME 'name' | REGEXP 'name_regexp' | IP 'address' | LIKE 'pattern'} [,...] | ANY | NONE]

        [DEFAULT ROLE role [,...]]

        [SETTINGS variable [= value] [MIN [=] min_value] [MAX [=] max_value] [READONLY|WRITABLE] | PROFILE 'profile_name'] [,...]

    身份识别——identification

    定义身份识别的方法有多种:

    • IDENTIFIED WITH no_password
    • IDENTIFIED WITH plaintext_password BY 'qwerty'
    • IDENTIFIED WITH sha256_password BY 'qwerty' or IDENTIFIED BY 'password'
    • IDENTIFIED WITH sha256_hash BY 'hash'
    • IDENTIFIED WITH double_sha1_password BY 'qwerty'
    • IDENTIFIED WITH double_sha1_hash BY 'hash'

    注意,上面的 ‘qwerty’ 是明文密码,而 ‘hash’ 是密码被hash算法处理后的结果。

    6.1.5 创建角色

    基本语法:

    CREATE ROLE [IF NOT EXISTS | OR REPLACE] name

        [SETTINGS variable [= value] [MIN [=] min_value] [MAX [=] max_value] [READONLY|WRITABLE] | PROFILE 'profile_name'] [,...]

    6.2 删除

    这一节的内容来自官方手册中的DROP Statements 

    6.2.1 删除数据库

    基本语法:

    DROP DATABASE [IF EXISTS] db [ON CLUSTER cluster]

    6.2.2 删除表

    基本语法:

    DROP [TEMPORARYTABLE [IF EXISTS] [db.]name [ON CLUSTER cluster]

    6.2.3 删除视图

    基本语法:

    DROP VIEW [IF EXISTS] [db.]name [ON CLUSTER cluster]

    6.2.4 删除用户

    基本语法:

    DROP USER [IF EXISTS] name [,...] [ON CLUSTER cluster_name]

    6.2.5 删除角色

    基本语法:

    DROP ROLE [IF EXISTS] name [,...] [ON CLUSTER cluster_name]

    6.3 修改

    这一节的内容来自官方手册中的ALTER Statements

    6.3.1 修改表的字段

    基本语法:

    ALTER TABLE [db].name [ON CLUSTER clusterADD|DROP|CLEAR|COMMENT|MODIFY COLUMN ...

    支持以下操作:

    6.3.2 处理分区

    基本语法:

    ALTER TABLE [db].name [ON CLUSTER clusterDETACH|DROP|ATTACH|ATTACH|REPLACE|MOVE|CLEAR COLUMN IN|CLEAR INDEX IN|FREEZE|FETCH|MOVE PARTITION ...

     

    支持以下操作:

    8.1节有这些命令的使用案例。

    下面我们详细解释这些命令:

    ATTACH PART | PARTITION

    语法:

    ALTER TABLE table_name DETACH PARTITION|PART partition_expr

    将指定分区的所有数据移动到detached目录中。服务器会忘记分离的数据分区,就好像它不存在一样。在您进行ATTACH查询之前,服务器将不知道此数据。

        例如:

    ALTER TABLE mt DETACH PARTITION '2020-11-21';

    ALTER TABLE mt DETACH PART 'all_2_2_0';

    可以在如何指定分区表达式一节中阅读有关设置分区表达式的更多信息。

    执行上述查询后,您可以对detached目录中的数据执行任何操作-将其从文件系统中删除,或将其保留。

    此查询已复制将数据移动到detached所有副本上的目录中。请注意,你只能在领导者副本上执行此查询。若要确定副本是否为领导者,请查询system.replicas

    DROP PARTITION|PART

    语法:

    ALTER TABLE table_name DROP PARTITION|PART partition_expr

    从表中删除指定的分区。该查询将分区标记为非活动状态,并大约在10分钟内完全删除数据。

    可以在如何指定分区表达式一节中阅读有关设置分区表达式的更多信息。

    DROP DETACHED PARTITION|PART 

    语法:

    ALTER TABLE mt DROP PARTITION '2020-11-21';

    ALTER TABLE mt DROP PART 'all_4_4_0';

    detached的分区中删除指定分区或所有分区。

    可以在如何指定分区表达式一节中阅读有关设置分区表达式的更多信息。

    ATTACH PARTITION|PART

    语法:

    ALTER TABLE table_name ATTACH PARTITION|PART partition_expr

    detached目录将数据添加到表中。可以为整个分区或单独的部分添加数据。例子:

    ALTER TABLE visits ATTACH PARTITION 201901;

    ALTER TABLE visits ATTACH PART 201901_2_2_0;

    如何指定分区表达式一节中阅读有关设置分区表达式的更多信息。

    此查询被复制。复制启动器检查detached目录中是否有数据。如果数据存在,查询将检查其完整性。如果一切正确,则查询会将数据添加到表中。所有其他副本都从副本启动器下载数据。

    因此,您可以将数据detached放在一个副本上的目录中,然后使用ALTER ... ATTACH查询将其添加到所有副本上的表中。

    ATTACH PARTITION FROM

    语法:

    ALTER TABLE table2 ATTACH PARTITION partition_expr FROM table1

    此查询从复制数据分区,table1table2将数据添加到中存在的数据table2。请注意,不会从中删除数据table1

    为了使查询成功运行,必须满足以下条件:

    两个表必须具有相同的结构。

    两个表必须具有相同的分区键。

    REPLACE PARTITION

    语法:

    ALTER TABLE table2 REPLACE PARTITION partition_expr FROM table1

    此查询将的数据分区从复制table1到,table2并替换中的现有分区table2。请注意,不会从中删除数据table1

    为了使查询成功运行,必须满足以下条件:

    两个表必须具有相同的结构。

    两个表必须具有相同的分区键。

    MOVE PARTITION TO TABLE

    语法:

    ALTER TABLE table_source MOVE PARTITION partition_expr TO TABLE table_dest

    此查询将数据分区从table_source移至table_dest,并从table_source中删除这些数据。

    为了使查询成功运行,必须满足以下条件:

    两个表必须具有相同的结构。

    两个表必须具有相同的分区键。

    两个表都必须是相同的引擎系列(已复制或未复制)。

    两个表必须具有相同的存储策略。

    CLEAR COLUMN IN PARTITION

    语法:

    ALTER TABLE table_name CLEAR COLUMN column_name IN PARTITION partition_expr

    重置分区中指定列中的所有值。如果DEFAULT子句在创建表时已确定,则此查询会将列值设置为指定的默认值。

    例如:

    ALTER TABLE visits CLEAR COLUMN hour in PARTITION 201902;

    FREEZE PARTITION

    ALTER TABLE table_name FREEZE [PARTITION partition_expr]

    该查询创建指定分区的本地备份(冻结并不影响分区的使用)。如果PARTITION省略该子句,则查询将立即创建所有分区的备份。

    6.3.3 删除数据

    ALTER TABLE [db.]table [ON CLUSTER cluster] DELETE WHERE filter_expr

    删除与指定过滤表达式匹配的数据。

    6.3.4 修改表中数据

    修改数据在OLAP数据库中通常是不受欢迎的。ClickHouse也不例外。像其他一些OLAP产品一样,ClickHouse最初甚至不支持更新。后来,更新被ClickHouse支持了,但也是异步的,这使得它们很难在交互式应用程序中使用。因此不建议在应用中使用clickhouse的更新功能。

    语法:

    ALTER TABLE [db.]table UPDATE column1 = expr1 [, ...] WHERE filter_expr

    操作与指定表达式匹配的数据。

    6.4 查看各项系统信息

    ClickHouse 的系统表位于 system 数据库中。下列列举常用的系统表

    6.4.1 查看分布式集群信息

    select * from system.clusters;

    6.4.2 查看数据库版本信息等

    select * from system.build_options;

    6.4.3 查看有哪些进程

    select * from system.processes;

    6.4.4 查看有哪些表

    select * from system.tables;

    6.4.5 查看有哪些用户

    select * from system.users;

  • 相关阅读:
    iOS Graphics 编程
    如何用PHP/MySQL为 iOS App 写一个简单的web服务器(译) PART1
    Python服务器开发二:Python网络基础
    Access一些问题
    托管调试助手报错
    ConnectionString
    百度也开源
    Microsoft SQL Server 错误代号: 15535 解决方法
    临时表的一个用法
    类型初始值设定项引发异常
  • 原文地址:https://www.cnblogs.com/xianghuaqiang/p/14381110.html
Copyright © 2020-2023  润新知