当前位置:   article > 正文

StarRocks(四)StarRocks的使用_starrocks使用

starrocks使用

1、Colocate join

        shuffle join 和 broadcast join 中,参与 join 的两张表的数据行,若满足 join 条件,则需要将它们汇合在一个节点上,完成 join。这两种 join 方式,都无法避免节点间数据网络传输带来额外的延迟和其他开销。 而 colocation join 则可避免数据网络传输开销,核心思想是将同一个 Colocation Group 中表,采用一致的分桶键、一致的副本数量和一致副本放置方式,因此如果 join 列为分桶键,则计算节点只需做本地 join 即可,无须从其他节点获取数据。

        例如:创建两张测试表,并标记同一个group属性,让表与表join可以得到优化。并且两张表桶的个数保持一致。

  1. CREATE TABLE `tbl1` (
  2. `k1` date NOT NULL COMMENT "",
  3. `k2` int(11) NOT NULL COMMENT "",
  4. `v1` int(11) SUM NOT NULL COMMENT ""
  5. ) ENGINE=OLAP
  6. AGGREGATE KEY(`k1`, `k2`)
  7. DISTRIBUTED BY HASH(`k2`) BUCKETS 8
  8. PROPERTIES (
  9. "colocate_with" = "group1"
  10. );
  11. CREATE TABLE `tbl2` (
  12. `k1` date NOT NULL COMMENT "",
  13. `k2` int(11) NOT NULL COMMENT "",
  14. `v1` int(11) SUM NOT NULL COMMENT ""
  15. ) ENGINE=OLAP
  16. AGGREGATE KEY(`k1`, `k2`)
  17. DISTRIBUTED BY HASH(`k2`) BUCKETS 8
  18. PROPERTIES (
  19. "colocate_with" = "group1"
  20. );

        创建表之后再进行两表join,并可以使用explain进行分析。如果优化生效执行计划里可看到colocate为true。

explain SELECT * FROM tbl1 INNER JOIN tbl2 ON (tbl1.k2 = tbl2.k2);

2、外部表

        StarRocks支持以外部表的形式,接入其他数据源。外部表指的是保存在其他数据源中的数据表,而StartRocks只保存表对应的元数据,并直接向外部表所在数据源发起查询。目前StarRocks已支持的第三方数据源包括MySQL、ElasticSearch、Hive以及StarRocks。对于StarRocks数据源,现阶段只支持Insert写入,不支持读取,对于其他数据源,现阶段只支持读取,还不支持写入。

2.1、MySql外部表

        星型模型中,数据一般划分为维度表和事实表。维度表数据量少,但会涉及 UPDATE 操作。目前 StarRocks 中还不直接支持 UPDATE 操作(可以通过 Unique 数据模型实现),在一些场景下,可以把维度表存储在 MySQL 中,查询时直接读取维度表。

  1. -- 登录mysql,先创建测试表
  2. CREATE TABLE test_t1(
  3. id INT,
  4. `name` VARCHAR(20),
  5. age INT);
  6. -- 插入测试数据
  7. INSERT INTO test_t1 VALUES(1001,'张三',14),(1002,'李四',15),(1003,'王五',16);
  8. -- 登录starrocks,创建mysql外部表
  9. create external table mysql_t1(
  10. id int,
  11. name varchar(20),
  12. age int)
  13. ENGINE=mysql
  14. PROPERTIES
  15. (
  16. "host" = "hadoop2",
  17. "port" = "3306",
  18. "user" = "root",
  19. "password" = "123456",
  20. "database" = "mydb",
  21. "table" = "test_t1"
  22. );
  23. -- 查询mysql外部表,可以直接查询到数据
  24. select *from mysql_t1;

         当mysql表中的数据有做修改,会实时同步,并且当mysql中的数据发生修改时,starrocks也会实时同步。如下所示:

2.2、Hive外部表

3、数组

        字段类型,数组。在建表时指定字段类型。

        使用一维数组:

  1. -- 使用一维数组
  2. create table t0(
  3. c0 INT,
  4. c1 ARRAY<INT>
  5. )
  6. duplicate key(c0)
  7. distributed by hash(c0) buckets 3;
  8. -- 插入数据
  9. INSERT INTO t0 VALUES(1, [1,2,3]);
  10. -- 如果要查询数组列的具体某个值,可用下标的方式取值,注意下标从1开始。比如我要查询[1,2,3]中的2,sql语句如下
  11. select c1[2] from t0;

        使用嵌套数组:

  1. -- 创建测试表
  2. create table t1(
  3. c0 INT,
  4. c1 ARRAY<ARRAY<VARCHAR(10)>>
  5. )
  6. duplicate key(c0)
  7. distributed by hash(c0) buckets 3;
  8. -- 插入数据
  9. INSERT INTO t1 VALUES(1, [[1,2,3],[1,2,3],[4,5,6]]);
  10. -- 查询数据(3)查询数据,同样比如要查询[[1,2,3],[1,2,3],[4,5,6]]要查询其中的5,那就是下标为3中的数组下标为2的数值
  11. select c1[3][2] from t1;

        使用限制:

  1. 只能在duplicate table中定义数组列
  2. 数组列不能作为key列(以后可能支持)
  3. 数组列不能作为distribution列
  4. 数组列不能作为partition列
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/579504
推荐阅读
相关标签
  

闽ICP备14008679号