StarRocks(四)StarRocks的使用

StarRocks(四)StarRocks的使用,第1张

StarRocks(四)StarRocks的使用 1、Colocate join

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

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

CREATE TABLE `tbl1` (
    `k1` date NOT NULL COMMENT "",
    `k2` int(11) NOT NULL COMMENT "",
    `v1` int(11) SUM NOT NULL COMMENT ""
) ENGINE=OLAP
AGGREGATE KEY(`k1`, `k2`)
DISTRIBUTED BY HASH(`k2`) BUCKETS 8
PROPERTIES (
    "colocate_with" = "group1"
);

CREATE TABLE `tbl2` (
    `k1` date NOT NULL COMMENT "",
    `k2` int(11) NOT NULL COMMENT "",
    `v1` int(11) SUM NOT NULL COMMENT ""
) ENGINE=OLAP
AGGREGATE KEY(`k1`, `k2`)
DISTRIBUTED BY HASH(`k2`) BUCKETS 8
PROPERTIES (
    "colocate_with" = "group1"
);

        创建表之后再进行两表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 中,查询时直接读取维度表。

-- 登录mysql,先创建测试表

CREATE TABLE test_t1(
id INT,
`name` VARCHAr(20),
age INT);

-- 插入测试数据
INSERT INTO test_t1 VALUES(1001,'张三',14),(1002,'李四',15),(1003,'王五',16);

-- 登录starrocks,创建mysql外部表
create external table mysql_t1(
id int,
name varchar(20),
age int)
ENGINE=mysql
PROPERTIES
(
    "host" = "hadoop2",
    "port" = "3306",
    "user" = "root",
    "password" = "123456",
    "database" = "mydb",
    "table" = "test_t1"
);

-- 查询mysql外部表,可以直接查询到数据
select *from mysql_t1;

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

2.2、Hive外部表

3、数组

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

        使用一维数组:

-- 使用一维数组
create table t0(
  c0 INT,
  c1 ARRAY
)
duplicate key(c0)
distributed by hash(c0) buckets 3;

-- 插入数据
INSERT INTO t0 VALUES(1, [1,2,3]);

-- 如果要查询数组列的具体某个值,可用下标的方式取值,注意下标从1开始。比如我要查询[1,2,3]中的2,sql语句如下
select c1[2] from t0;

        使用嵌套数组:

-- 创建测试表
create table t1(
  c0 INT,
  c1 ARRAY>
)
duplicate key(c0)
distributed by hash(c0) buckets 3;

-- 插入数据
INSERT INTO t1 VALUES(1, [[1,2,3],[1,2,3],[4,5,6]]);

-- 查询数据(3)查询数据,同样比如要查询[[1,2,3],[1,2,3],[4,5,6]]要查询其中的5,那就是下标为3中的数组下标为2的数值
select c1[3][2] from t1;

        使用限制:

  1. 只能在duplicate table中定义数组列
  2. 数组列不能作为key列(以后可能支持)
  3. 数组列不能作为distribution列
  4. 数组列不能作为partition列

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5696222.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存