• 大数据Hadoop之——DorisDB核心概念介绍与简单使用(StarRocks)


    一、前言

    DorisDB的介绍与环境部署(StarRocks)可以参考我之前的文章哦:大数据Hadoop之——DorisDB介绍与环境部署(StarRocks)

    官方文档:https://docs.starrocks.com/zh-cn/main/loading/Loading_intro

    二、简单使用

    1)连接 StarRocks

    在成功 部署 StarRocks 集群 后,您可以通过 MySQL 客户端连接任意一个 FE 节点的 query_port(默认为 9030)以连接 StarRocks。StarRocks 内置 root 用户,密码默认为空。

    cd $STARROCKS_HOME
    # 启动FE
    ./fe/bin/start_fe.sh --daemon
    # 启动BE
    ./be/bin/start_be.sh --daemon
    # 启动broker
    ./apache_hdfs_broker/bin/start_broker.sh --daemon
    # 连接
    mysql -h 127.0.0.1 -P9030 -uroot
    
    show proc '/frontends'\G;
    show proc '/backends'\G;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    web UI:http://192.168.182.110:8030/system

    2)创建数据库

    使用 root 用户创建 example_db 数据库。

     CREATE DATABASE example_db;
    show databases;
    
    • 1
    • 2

    说明:与 MySQL 的表结构类似,Information_schema 包含当前 StarRocks 集群的元数据信息。

    3)创建表

    use example_db;
    CREATE TABLE IF NOT EXISTS detailDemo (
        recruit_date  DATE           NOT NULL COMMENT "YYYY-MM-DD",
        region_num    TINYINT        COMMENT "range [-128, 127]",
        num_plate     SMALLINT       COMMENT "range [-32768, 32767] ",
        tel           INT            COMMENT "range [-2147483648, 2147483647]",
        id            BIGINT         COMMENT "range [-2^63 + 1 ~ 2^63 - 1]",
        password      LARGEINT       COMMENT "range [-2^127 + 1 ~ 2^127 - 1]",
        name          CHAR(20)       NOT NULL COMMENT "range char(m),m in (1-255) ",
        profile       VARCHAR(500)   NOT NULL COMMENT "upper limit value 65533 bytes",
        hobby         STRING         NOT NULL COMMENT "upper limit value 65533 bytes",
        leave_time    DATETIME       COMMENT "YYYY-MM-DD HH:MM:SS",
        channel       FLOAT          COMMENT "4 bytes",
        income        DOUBLE         COMMENT "8 bytes",
        account       DECIMAL(12,4)  COMMENT "",
        ispass        BOOLEAN        COMMENT "true/false"
    ) ENGINE=OLAP
    DUPLICATE KEY(recruit_date, region_num)
    DISTRIBUTED BY HASH(recruit_date, region_num) BUCKETS 8;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    【错误】ERROR 1064 (HY000): Failed to find enough host in all backends. need: 3

    【原因】这是因为默认需要3个副本,副本数必须是<=BE数,需要带上PROPERTIES,设置副本数。

    use example_db;
    CREATE TABLE IF NOT EXISTS detailDemo (
        recruit_date  DATE           NOT NULL COMMENT "YYYY-MM-DD",
        region_num    TINYINT        COMMENT "range [-128, 127]",
        num_plate     SMALLINT       COMMENT "range [-32768, 32767] ",
        tel           INT            COMMENT "range [-2147483648, 2147483647]",
        id            BIGINT         COMMENT "range [-2^63 + 1 ~ 2^63 - 1]",
        password      LARGEINT       COMMENT "range [-2^127 + 1 ~ 2^127 - 1]",
        name          CHAR(20)       NOT NULL COMMENT "range char(m),m in (1-255) ",
        profile       VARCHAR(500)   NOT NULL COMMENT "upper limit value 65533 bytes",
        hobby         STRING         NOT NULL COMMENT "upper limit value 65533 bytes",
        leave_time    DATETIME       COMMENT "YYYY-MM-DD HH:MM:SS",
        channel       FLOAT          COMMENT "4 bytes",
        income        DOUBLE         COMMENT "8 bytes",
        account       DECIMAL(12,4)  COMMENT "",
        ispass        BOOLEAN        COMMENT "true/false"
    ) ENGINE=OLAP
    DUPLICATE KEY(recruit_date, region_num)
    DISTRIBUTED BY HASH(recruit_date, region_num) BUCKETS 8
    PROPERTIES("replication_num" = "2");
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    在这里插入图片描述

    【温馨提示】注意:在 StarRocks 中,字段名不区分大小写,表名区分大小写。

    4)建表语句说明

    1、排序键

    StarRocks 表内部组织存储数据时会按照指定列排序,这些列为排序列(Sort Key)。明细模型中由 DUPLICATE KEY 指定排序列。以上示例中的 recruit_date 以及 region_num 两列为排序列。

    【温馨提示】排序列在建表时应定义在其他列之前。排序键详细描述以及不同数据模型的表的设置方法请参考 排序键。

    2、字段类型

    StarRocks 表中支持多种字段类型,除以上示例中已经列举的字段类型,还支持 BITMAP 类型,HLL 类型,ARRAY 类型,字段类型介绍详见官方文档 数据类型章节

    【温馨提示】在建表时,您应尽量使用精确的类型。例如,整形数据不应使用字符串类型,INT 类型即可满足的数据不应使用 BIGINT 类型。精确的数据类型能够更好的发挥数据库的性能。

    3、分区分桶

    • 分区的定义: 对数据进行水平切分,水平切分之后数据是完全物理隔离的,每个分区即为一个物理文件夹。
    • 分桶的定义: 对数据进行垂直切分,各个分桶相互独立,每个分桶即为一个文件。
    • PARTITION 关键字用于给表 创建分区,StarRocks 支持动态生成分区,详见 动态分区管理
    • DISTRIBUTED 关键字用于给表 创建分桶,以上示例中使用 recruit_date 以及 region_num 两个字段通过 Hash 算法创建 8 个桶。
    • 创建表时合理的分区和分桶设计可以优化表的查询性能。有关分区分桶列如何选择,详见 数据分布

    4、数据模型

    DUPLICATE 关键字表示当前表为明细模型KEY 中的列表示当前表的排序列。StarRocks 支持多种数据模型,分别为 明细模型聚合模型更新模型主键模型。不同模型的适用于多种业务场景,合理选择可优化查询效率。

    5、索引

    StarRocks 默认会给 Key 列创建稀疏索引加速查询,具体规则见 排序键。支持的索引类型有 Bitmap 索引Bloomfilter 索引 等。

    6、ENGINE 类型

    默认 ENGINE(引擎) 类型为 OLAP,对应 StarRocks 集群内部表。其他可选项包括 mysql,elasticsearch,hive,以及 ICEBERG,分别代表所创建的表为相应类型的 外部表。

    7、修改表结构

    您可以通过 ALTER TABLE 命令可以修改表的 Schema,包括增加列,删除列,修改列类型(暂不支持修改列名称),改变列顺序。

    【增加列】

    ALTER TABLE detailDemo ADD COLUMN uv BIGINT DEFAULT '0' after ispass;
    
    • 1

    【查看修改表结构作业状态】

    SHOW ALTER TABLE COLUMN\G;
    
    • 1

    当作业状态为 FINISHED,则表示作业完成,新的表结构修改已生效。
    【取消修改表结构】
    您可以通过以下命令取消当前正在执行的作业。

    CANCEL ALTER TABLE COLUMN FROM table_name\G;
    
    • 1

    【创建用户并授权】
    example_db 数据库创建完成之后,您可以使用 root 账户创建 test 账户,并授予其 example_db 的读写权限 。

    CREATE USER 'test' IDENTIFIED by '123456';
    GRANT ALL on example_db to test;
    
    • 1
    • 2

    通过登录被授权的 test 账户,其他用户就可以操作 example_db 数据库了。

    mysql -h 127.0.0.1 -P9030 -utest -p
    输入密码:123456
    show databases;
    show tables from example_db;
    
    • 1
    • 2
    • 3
    • 4

    三、表设计

    1)列式存储

    在这里插入图片描述

    • StarRocks 中的表和关系型数据相同,由行和列构成
    • 每行数据对应用户一条记录,每列数据具有相同的数据类型。
    • 所有数据行的列数相同,可以动态增删列。
    • 在 StarRocks 中,一张表的列可以分为维度列(也称为 Key 列)和指标列(也称为 Value 列)。
    • 在 StarRocks 中,表的数据按列存储。物理上,一列数据会经过分块编码、压缩等操作,然后持久化存储到非易失设备上。
    • 维度列用于分组和排序,指标列的值可以通过聚合函数 SUM、COUNT、MIN、MAX、REPLACE、HLL_UNION 和 BITMAP_UNION 等累加起来。因此,StarRocks 中的表也可以认为是多维的 Key 到多维指标的映射。

    2)稀疏索引

    范围查找时,使用前缀索引 (Prefix Index),如下图所示。

    在这里插入图片描述
    一张表中的数据组织主要由三部分构成:

    • 前缀索引:表中每 1024 行数据构成一个逻辑数据块 (Data Block)。每个逻辑数据块在前缀索引表中存储一项索引,内容为表的维度列的前缀,并且长度不超过 36 字节前缀索引是一种稀疏索引,使用某行数据的维度列的前缀查找索引表,可以确定该行数据所在逻辑数据块的起始行号。
    • Per-column data block:表中每列数据都按 64 KB 分块存储。数据块作为一个单位单独编码、压缩,也作为 I/O 单位,整体写回设备或者读出。
    • Per-column cardinal index:表中每列数据都有各自的行号索引表列的数据块和行号索引一一对应,索引由数据块的起始行号及数据块的位置和长度信息构成。用数据行的行号查找行号索引表,可以获取包含该行号的数据块所在的位置,读取目标数据块后,可以进一步查找数据。

    由此可见,查找维度列的前缀的过程包含以下五个步骤:

    1. 先查找前缀索引,获得逻辑数据块的起始行号。
    2. 查找维度列的行号索引,定位到维度列的数据块。
    3. 读取数据块。
    4. 解压、解码数据块。
    5. 从数据块中找到维度列前缀对应的数据项。

    3)列级索引

    StarRocks 支持布隆过滤器 (Bloom Filter)ZoneMap 索引位图 (Bitmap) 索引等列级别的索引技术:

    • 布隆过滤器有助于快速判断数据块中不含所查找的值。

    • ZoneMap 索引有助于通过数据范围快速过滤出待查找的值。

    • 位图索引有助于快速计算出枚举类型的列满足一定条件的行。

    4)数据模型

    • 建表时,您需要指定数据模型 (Data Model),这样数据导入至数据模型时,StarRocks 会按照排序健对数据进行排序、处理和存储。

    • StarRocks 支持四种数据模型,分别是明细模型 (Duplicate Key Model)聚合模型 (Aggregate Key Model)更新模型 (Unique Key Model)主键模型 (Primary Key Model)。这四种数据模型能够支持多种数据分析场景,例如日志分析、数据汇总分析、实时分析等。

    1、明细模型 (Duplicate Key Model)

    明细模型是默认的建表模型。创建表时,支持定义排序键。如果查询的过滤条件包含排序键,则 StarRocks 能够快速地过滤数据,提高查询效率明细模型适用于分析日志数据等,支持追加新数据,不支持修改历史数据

    【适用场景】

    • 分析原始数据,例如原始日志、原始操作记录等。

    • 查询方式灵活,不需要局限于预聚合的分析方式。

    • 导入日志数据或者时序数据,主要特点是旧数据不会更新,只会追加新的数据。

    【示例】
    例如,需要分析某时间范围的某一类事件的数据,则可以将事件时间(event_time)和事件类型(event_type)作为排序键。

    CREATE TABLE IF NOT EXISTS detail (
        event_time DATETIME NOT NULL COMMENT "datetime of event",
        event_type INT NOT NULL COMMENT "type of event",
        user_id INT COMMENT "id of user",
        device_code INT COMMENT "device code",
        channel INT COMMENT ""
    )
    DUPLICATE KEY(event_time, event_type)
    DISTRIBUTED BY HASH(user_id) BUCKETS 8
    PROPERTIES("replication_num" = "2");
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    2、聚合模型 (Aggregate Key Model)

    建表时,支持定义排序键和指标列并为指标列指定聚合函数。当多条数据具有相同的排序键时,指标列会进行聚合。在分析统计和汇总数据时,聚合模型能够减少查询时所需要处理的数据,提升查询效率。

    【适用场景】
    适用于分析统计和汇总数据。比如:

    • 通过分析网站或 APP 的访问流量,统计用户的访问总时长、访问总次数。

    • 广告厂商为广告主提供的广告点击总量、展示总量、消费统计等。

    • 通过分析电商的全年交易数据,获得指定季度或者月份中,各类消费人群的爆款商品。

    【示例】
    例如某一段时间内,来自不同城市的用户,访问不同网页的总次数。则可以将网页地址 site_id、日期 date 和城市代码 city_code 作为排序键,将访问次数 pv 作为指标列,并为指标列 pv 指定聚合函数为 SUM。

    CREATE TABLE IF NOT EXISTS example_db.aggregate_tbl (
        site_id LARGEINT NOT NULL COMMENT "id of site",
        date DATE NOT NULL COMMENT "time of event",
        city_code VARCHAR(20) COMMENT "city_code of user",
        pv BIGINT SUM DEFAULT "0" COMMENT "total page views"
    )
    DISTRIBUTED BY HASH(site_id) BUCKETS 8
    PROPERTIES("replication_num" = "2");
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    3、更新模型 (Unique Key Model)

    建表时,支持定义主键和指标列查询时返回主键相同的一组数据中的最新数据。相对于明细模型,更新模型简化了数据导入流程,能够更好地支撑实时和频繁更新的场景。

    【适用场景】

    实时和频繁更新的业务场景,例如分析电商订单。在电商场景中,订单的状态经常会发生变化,每天的订单更新量可突破上亿。

    【示例】
    在电商订单分析场景中,经常按照日期对订单状态进行统计分析,则可以将经常使用的过滤字段订单创建时间 create_time、订单编号 order_id 作为主键,其余列订单状态 order_state 和订单总价 total_price 作为指标列。这样既能够满足实时更新订单状态的需求,又能够在查询中进行快速过滤。

    CREATE TABLE IF NOT EXISTS orders (
        create_time DATE NOT NULL COMMENT "create time of an order",
        order_id BIGINT NOT NULL COMMENT "id of an order",
        order_state INT COMMENT "state of an order",
        total_price BIGINT COMMENT "price of an order"
    )
    UNIQUE KEY(create_time, order_id)
    DISTRIBUTED BY HASH(order_id) BUCKETS 8
    PROPERTIES("replication_num" = "2");
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    4、主键模型 (Primary Key Model)

    StarRocks 1.19 版本推出了主键模型 (Primary Key Model) 。建表时,支持定义主键和指标列,查询时返回主键相同的一组数据中的最新数据。相对于更新模型,主键模型在查询时不需要执行聚合操作,并且支持谓词下推和索引使用,能够在支持实时和频繁更新等场景的同时,提供高效查询。

    【适用场景】
    主键模型适用于实时和频繁更新的场景,例如:

    • 主实时对接事务型数据至 StarRocks。事务型数据库中,除了插入数据外,一般还会涉及较多更新和删除数据的操作,因此事务型数据库的数据同步至 StarRocks 时,建议使用主键模型。
    • 利用部分列更新轻松实现多流 JOIN。在用户画像等分析场景中,一般会采用大宽表方式来提升多维分析的性能,同时简化数据分析师的使用模型。

    【示例】
    例如,需要实时分析用户情况,则可以将用户 ID user_id 作为主键,其余为指标列。建表语句如下:

    create table orders (
        dt date NOT NULL,
        order_id bigint NOT NULL,
        user_id int NOT NULL,
        merchant_id int NOT NULL,
        good_id int NOT NULL,
        good_name string NOT NULL,
        price int NOT NULL,
        cnt int NOT NULL,
        revenue int NOT NULL,
        state tinyint NOT NULL
    ) PRIMARY KEY (dt, order_id)
    PARTITION BY RANGE(`dt`) (
        PARTITION p20210820 VALUES [('2021-08-20'), ('2021-08-21')),
        PARTITION p20210821 VALUES [('2021-08-21'), ('2021-08-22')),
        PARTITION p20210929 VALUES [('2021-09-29'), ('2021-09-30')),
        PARTITION p20210930 VALUES [('2021-09-30'), ('2021-10-01'))
    ) DISTRIBUTED BY HASH(order_id) BUCKETS 4
    PROPERTIES("replication_num" = "2");
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    【温馨提示】enable_persistent_index:是否持久化主键索引,同时使用磁盘和内存存储主键索引,避免主键索引占用过大内存空间。取值为 true 或者 false。如果磁盘为固态硬盘 SSD,则建议设置为 true。自 2.3.0 版本起,StarRocks 支持配置该参数。

    5)数据分布

    1、常见的四种数据分布方式

    现代分布式数据库中,常见的数据分布方式有如下四种:Round-RobinRangeListHash。如下图所示:

    在这里插入图片描述

    • Round-Robin:以轮询的方式把数据逐个放置在相邻节点上。

    • Range:按区间进行数据分布。如上图所示,区间 [1-3]、[4-6] 分别对应不同的范围 (Range)。

    • List:直接基于离散的各个取值做数据分布,性别、省份等数据就满足这种离散的特性。每个离散值会映射到一个节点上,多个不同的取值可能也会映射到相同节点上。

    • Hash:通过哈希函数把数据映射到不同节点上。

    为了更灵活地划分数据,除了单独采用上述四种数据分布方式之一以外,您还可以根据具体的业务场景需求组合使用这些数据分布方式。常见的组合方式有 Hash+HashRange+HashHash+List

    2、StarRocks 的数据分布方式

    StarRocks 支持如下两种数据分布方式:

    • Hash 数据分布方式:一张表为一个分区,分区按照分桶键和分桶数量进一步进行数据划分。采用 Hash 分布的建表语句如下,其中分桶键为 site_id:
    CREATE TABLE site_access(
    site_id INT DEFAULT '10',
    city_code SMALLINT,
    user_name VARCHAR(32) DEFAULT '',
    pv BIGINT SUM DEFAULT '0'
    )
    AGGREGATE KEY(site_id, city_code, user_name)
    DISTRIBUTED BY HASH(site_id) BUCKETS 10
    PROPERTIES("replication_num" = "2");
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • Range+Hash 数据分布方式:一张表拆分成多个分区,每个分区按照分桶键和分桶数量进一步进行数据划分。采用Range+Hash组合分布的建表语句如下,其中分区键为 event_day,分桶键为 site_id:
    CREATE TABLE site_access2(
    event_day DATE,
    site_id INT DEFAULT '10',
    city_code VARCHAR(100),
    user_name VARCHAR(32) DEFAULT '',
    pv BIGINT SUM DEFAULT '0'
    )
    AGGREGATE KEY(event_day, site_id, city_code, user_name)
    PARTITION BY RANGE(event_day)
    (
    PARTITION p1 VALUES LESS THAN ("2020-01-31"),
    PARTITION p2 VALUES LESS THAN ("2020-02-29"),
    PARTITION p3 VALUES LESS THAN ("2020-03-31")
    )
    DISTRIBUTED BY HASH(site_id) BUCKETS 10
    PROPERTIES("replication_num" = "2");
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    6)排序键和前缀索引

    • 为加速查询,StarRocks 在内部组织和存储数据时,会把表中数据按照指定的一个或多个列进行排序。这些用于排序的列,称之为排序健 (Sort Key)
    • 为减少内存开销,StarRocks 在排序健的基础上又引入了前缀索引 (Prefix Index)
    • 表中每 1024 行数据构成一个逻辑数据块 (Data Block)
    • 每个逻辑数据块在前缀索引表中存储一项索引,内容为表的维度列的前缀,并且长度不超过 36 字节。
    • 前缀索引是一种稀疏索引,使用某行数据的维度列的前缀查找索引表,可以确定该行数据所在逻辑数据块的起始行号。
    • 前缀索引的大小会比数据量少 1024 倍,因此会全量缓存在内存中,在实际查找的过程中可以有效加速查询。

    四、数据导入

    StarRocks 支持两种导入模式:同步导入异步导入
    在这里插入图片描述

    1)同步导入

    同步导入是指用户创建导入作业,StarRocks 同步执行,执行完成后返回导入结果。您可以通过返回的导入结果判断导入作业是否成功

    支持同步模式的导入方式有 Stream LoadINSERT INTO

    导入过程如下:

    • 创建导入作业。

    • 查看 StarRocks 返回的导入结果。

    • 判断导入结果。如果导入结果为失败,可以重试导入作业。

    【示例】Stream Load

    先创建测试库表

    create database testDb;
    CREATE TABLE testDb.testTbl(
    id INT DEFAULT '10',
    city VARCHAR(32) DEFAULT ''
    )
    DISTRIBUTED BY HASH(id) BUCKETS 10
    PROPERTIES("replication_num" = "2");
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    样例数据:

    cat>jsontest.json<<EOF
    {"name": "北京", "code": 2}
    EOF
    
    • 1
    • 2
    • 3

    执行数据导入

    # 语法
    #curl --location-trusted -u user:passwd [-H ""...] -T data.file -XPUT http://fe_host:http_port/api/{db}/{table}/_stream_load
    
    # 导入json
    curl -v --location-trusted -u root: \
    -H "format: json" -H "jsonpaths: [\"$.name\", \"$.code\"]" \
    -H "columns: city,tmp_id, id = tmp_id * 100" \
    -T jsontest.json \
    http://127.0.0.1:8030/api/testDb/testTbl/_stream_load
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在这里插入图片描述

    在这里插入图片描述
    【示例】INSERT INTO

    创建导入任务

    CREATE DATABASE IF NOT EXISTS load_test;
    USE load_test;
    CREATE TABLE insert_wiki_edit
    (
        event_time DATETIME,
        channel VARCHAR(32) DEFAULT '',
        user VARCHAR(128) DEFAULT '',
        is_anonymous TINYINT DEFAULT '0',
        is_minor TINYINT DEFAULT '0',
        is_new TINYINT DEFAULT '0',
        is_robot TINYINT DEFAULT '0',
        is_unpatrolled TINYINT DEFAULT '0',
        delta INT SUM DEFAULT '0',
        added INT SUM DEFAULT '0',
        deleted INT SUM DEFAULT '0'
    )
    AGGREGATE KEY(event_time, channel, user, is_anonymous, is_minor, is_new, is_robot, is_unpatrolled)
    PARTITION BY RANGE(event_time)
    (
        PARTITION p06 VALUES LESS THAN ('2015-09-12 06:00:00'),
        PARTITION p12 VALUES LESS THAN ('2015-09-12 12:00:00'),
        PARTITION p18 VALUES LESS THAN ('2015-09-12 18:00:00'),
        PARTITION p24 VALUES LESS THAN ('2015-09-13 00:00:00')
    )
    DISTRIBUTED BY HASH(user) BUCKETS 3
    PROPERTIES("replication_num" = "1");
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    通过values导入数据

    INSERT INTO insert_wiki_edit VALUES
        ("2015-09-12 00:00:00","#en.wikipedia","GELongstreet",0,0,0,0,0,36,36,0),
        ("2015-09-12 00:00:00","#ca.wikipedia","PereBot",0,1,0,1,0,17,17,0);
    
    • 1
    • 2
    • 3

    在这里插入图片描述
    通过select导入数据

    # 指定label
    INSERT INTO insert_wiki_edit
        WITH LABEL insert_load_wikipedia_1
        SELECT * FROM routine_wiki_edit;
    
    # 指定分区导入,只导入到p06和p12分区
    INSERT INTO insert_wiki_edit PARTITION(p06, p12)
        WITH LABEL insert_load_wikipedia_2
        SELECT * FROM routine_wiki_edit;
    
    # 指定部分列导入,只导入event_time和channel字段
    INSERT INTO insert_wiki_edit
        WITH LABEL insert_load_wikipedia_3 (event_time, channel)
        SELECT event_time, channel FROM routine_wiki_edit;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    2)异步导入

    异步导入是指创建导入作业以后,StarRocks 直接返回创建成功,但创建成功不代表数据已经导入成功。StarRocks 会异步执行导入作业。在导入作业创建成功以后,您需要通过轮询的方式查看导入作业的状态。如果导入作业创建失败,可以根据失败信息,判断是否需要重试。

    支持异步模式的导入方式有 Broker LoadRoutine LoadSpark Load

    导入过程如下:

    • 创建导入作业。

    • 查看 StarRocks 返回的作业创建结果。

    • 判断作业创建结果。如果作业创建成功,进入步骤 4;如果作业创建失败,可以回到步骤 1,尝试重试导入作业。

    • 轮询查看导入作业的状态,直到状态变为 FINISHED 或 CANCELLED。

    在异步的导入方式 Broker Load 和 Spark Load 中,一个导入作业的执行流程主要分为 5 个阶段,如下图所示:
    在这里插入图片描述
    每个阶段的描述如下:

    • PENDING 该阶段是指提交导入作业后,等待 FE 调度执行。

    • ETL 该阶段执行数据的预处理,包括清洗、分区、排序、聚合等。

    说明:如果是 Broker Load 作业,该阶段会直接完成。

    • LOADING 该阶段先对数据进行清洗和转换,然后将数据发送给 BE 处理。当数据全部导入后,进入等待生效过程,此时,导入作业的状态依旧是 LOADING。

    • FINISHED 在导入作业涉及的所有数据均生效后,作业的状态变成 FINISHED,此时,导入的数据均可查询。FINISHED 是导入作业的最终状态。

    • CANCELLED 在导入作业的状态变为 FINISHED 之前,您可以随时取消作业。另外,如果导入出现错误,StarRocks 系统也会自动取消导入作业。作业取消后,进入 CANCELLED 状态。CANCELLED 也是导入作业的一种最终状态。

    3)导入方式

    StarRocks 提供 Stream LoadBroker LoadRoutine LoadSpark Load INSERT INTO 多种导入方式,满足您在不同业务场景下的数据导入需求。

    在这里插入图片描述
    下图详细展示了在各种数据源场景下,应该选择哪一种导入方式:

    在这里插入图片描述
    StarRocks 支持导入如下数据类型:

    • 整型类:包括 TINYINT、SMALLINT、INT、BIGINT 和 LARGEINT。举例: 1 | 1000 | 1234。

    • 浮点类:包括 FLOAT、DOUBLE 和 DECIMAL。举例:1.1、0.23、.356。

    • 日期类:包括 DATE 和 DATETIME。举例:2017-10-03、2017-06-13 12:34:03。

    • 字符串类:包括 CHAR 和 VARCHAR。举例:I am a student、a。

    • NULL 值:举例:\N。

    五、数据提取

    StarRocks 拥有 Export 一种将数据导出并存储到其他介质上的功能。该功能可以将用户指定的表或分区的数据,以文本的格式,通过 Broker 进程导出到远端存储上,如 HDFS/阿里云OSS/AWS S3(或者兼容S3协议的对象存储) 等。

    导出作业的执行流程
    在这里插入图片描述
    上图描述的处理流程主要包括:

    • 用户提交一个 Export 作业到 FE。

    • PENDING阶段:FE 生成一个 ExportPendingTask,向 BE 发送 snapshot 命令,对所有涉及到的 Tablet 做一个快照,并生成多个查询计划。

    • EXPORTING阶段:FE 生成一个 ExportExportingTask,BE和Broker会根据FE生成的查询计划配合完成数据导出工作。

    其实这里只是稍微介绍了StarRocks核心概念,想要了解更多StarRocks,请查看官方文档,https://docs.starrocks.com/zh-cn/main/introduction/StarRocks_intro,有什么疑问也欢迎给我留言哦~

  • 相关阅读:
    Vue.js核心技术解析与uni-app跨平台实战开发学习笔记 第9章 axios发送HTTP请求 9.2 axios传递参数
    BootLoader为什么要分阶段?
    DX 的 HLSL 和 GL 的 GLSL的 矩阵构建的行列区别
    初学者看 “图“
    图书管理系统 数据结构先导课暨C语言大作业复习 | JorbanS
    CA周记 2022年的第一课 - Rust
    含文档+PPT+源码等]精品微信小程序spring boot批发零售业商品管理系统[包运行成功]小程序毕业设计Java项目源码
    在线工具推荐!能在线解决的问题,何必下载软件呢?
    使用高德地图api实现拖动地图后重新回到原处
    15:00面试,15:06就出来了,问的问题有点变态。。。
  • 原文地址:https://blog.csdn.net/qq_35745940/article/details/125815300