StarRocks 【新一代MPP数据库】(5)

本文涉及的产品
阿里云百炼推荐规格 ADB PostgreSQL,4核16GB 100GB 1个月
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
简介: StarRocks 【新一代MPP数据库】

StarRocks 【新一代MPP数据库】(4)https://developer.aliyun.com/article/1534284

4.1.1、创建 Colocate 表

在建表时,需要在 PROPERTIES 中指定属性 "colocate_with" = "group_name" 以创建一个 Colocate Join 表,并且指定其归属于特定的 Colocation Group。

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" -- 指定为同一组
);

要想达到优化查询的目的,必须满足下面这些条件:

  • 同一 CG 内的表的分桶键的类型、数量和顺序完全一致,并且桶数一致,从而保证多张表的数据分片能够一一对应地进行分布控制。
  • 同 CG 的表的分桶键的名字可以不相同,分桶列的定义在建表语句中的出现次序可以不一致,但是在 DISTRIBUTED BY HASH(col1, col2, ...) 的对应数据类型的顺序要完全一致。
  • 同一个 CG 内所有表的所有分区的副本数必须一致(默认都是 3)。
  • 同一个 CG 内所有表的分区键,分区数量可以不同。

查询是否得到优化:

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

4.2、外部表

       StarRocks 不支持修改(update)功能的,所以如果 StarRocks 要修改数据的话,要么把数据模型设置为主键模型或者更新模型,同时 StarRocks 也提供了一种方案——外部表,也就是可以让 StarRocks 对接外部表,当外部表发生变化的时候,StarRocks 自己也会发生变化。当前 StarRocks 已支持的第三方数据源包括 MySQL、Elasticsearch、Apache Hive™、StarRocks、Apache Iceberg 和 Apache Hudi。对于 StarRocks 数据源(StarRocks类型的外部表),现阶段只支持 Insert 写入,不支持读取;对于其他数据源(其它类型外部表),现阶段只支持读取,还不支持写入。

4.2.1、MySQL 外部表

首先在 MySQL 创建一张测试表:

插入测试数据:

在 StarRocks 中创建外部表:

CREATE EXTERNAL TABLE mysql_external_table
(
    id int,
    name varchar(20),
    age int
)
ENGINE=mysql
PROPERTIES
(
    "host" = "hadoop102",
    "port" = "3306",
    "user" = "root",
    "password" = "123456",
    "database" = "starrocks",
    "table" = "test_t1"
);

查询外部表:

需要注意的是,StarRocks 是不支持修改数据的(不管是外部表还是内部表):

但是可以通过修改外部数据源来更新 StarRocks 的外部表:

4.2.2、Hive 外部表

启动 Hadoop、Hive(这里很可能遇到 Yarn 启动失败,因为 StarRocks 会占用 Yarn 的 8030、8040 端口)

通过 tail -500 xxx-resourcemanager.log 查看日志

查看端口是否被占用:

netstat -tnlp | grep :8040

监听日志文件:

tail -f 日志文件.log

Yarn 官方默认配置文档(yarn-site.xml)

修改被占用的端口:

创建 Hive 表:

use test;
 
create table test_t1(
id int ,
name string,
age int);

向 Hive 表中插入数据(这里用的是 Spark 引擎):

在 StarRocks 中创建 Hive 数据源:

CREATE EXTERNAL RESOURCE "hive0"
PROPERTIES (
  "type" = "hive",
  "hive.metastore.uris" = "thrift://hadoop102:9083");

创建 Hive 外部表:

create external table hive_t1(
id int,
name varchar(20),
age int)
ENGINE=HIVE
PROPERTIES (
  "resource" = "hive0",
  "database" = "test",
  "table" = "test_t1"
);

去 hadoop102:8030 的 WebUI 去查看日志:

去官网查询解决方案:

还是查询失败,尝试换 csv 数据源的 Hive 表作为外部表还是不行(可能是版本的问题?之后解决再来更新)。

4.3、数组

StarRocks 是支持数组类型字段的,建表的时候使用。

CREATE TABLE student(
id INT,
hobbies ARRAY<INT>
)
DUPLICATE KEY(id)
DISTRIBUTED BY HASH(id) BUCKETS 3;

查询数组字段指定索引的值:

同时 StarRocks 也支持嵌套数组

create table t1(
  c0 INT,
  c1 ARRAY<ARRAY<VARCHAR(10)>>
)
duplicate key(c0)
distributed by hash(c0) buckets 3;
 
INSERT INTO t1 VALUES(1, [[1,2,3],[1,2,3],[4,5,6]]);
 

数组的使用有以下限制

  • 只能在duplicate table(明细模型)中定义数组列
  • 数组列不能作为key列(以后可能支持)
  • 数组列不能作为distribution列
  • 数组列不能作为partition列
相关实践学习
AnalyticDB PostgreSQL 企业智能数据中台:一站式管理数据服务资产
企业在数据仓库之上可构建丰富的数据服务用以支持数据应用及业务场景;ADB PG推出全新企业智能数据平台,用以帮助用户一站式的管理企业数据服务资产,包括创建, 管理,探索, 监控等; 助力企业在现有平台之上快速构建起数据服务资产体系
相关文章
|
28天前
|
前端开发 Java Go
新一代数据库技术的崛起与应用前景
本文探讨了新一代数据库技术在不同领域的崛起和应用前景。通过对前端、后端、Java、Python、C、PHP、Go等多种类型的技术进行分析,我们揭示了新一代数据库技术的优势和特点,并展望了其在未来的发展趋势。本文旨在为读者全面了解新一代数据库技术提供参考和指导。
|
1月前
|
消息中间件 存储 JSON
StarRocks 【新一代MPP数据库】(4)
StarRocks 【新一代MPP数据库】
|
1月前
|
存储 数据库 Android开发
StarRocks 【新一代MPP数据库】(3)
StarRocks 【新一代MPP数据库】
|
8天前
|
存储 关系型数据库 MySQL
探索MySQL:关系型数据库的基石
MySQL,作为全球最流行的开源关系型数据库管理系统(RDBMS)之一,广泛应用于各种Web应用、企业级应用和数据仓库中
|
6天前
|
关系型数据库 MySQL 网络安全
Mysql 数据库主从复制
在MySQL主从复制环境中,配置了两台虚拟机:主VM拥有IP1,从VM有IP2。主VM的`my.cnf`设置server-id为1,启用二进制日志;从VM设置server-id为2,开启GTID模式。通过`find`命令查找配置文件,编辑`my.cnf`,在主服务器上创建复制用户,记录二进制日志信息,然后锁定表并备份数据。备份文件通过SCP传输到从服务器,恢复数据并配置复制源,启动复制。检查复制状态确认运行正常。最后解锁表,完成主从同步,新用户在从库中自动更新。
879 6
Mysql 数据库主从复制
|
6天前
|
缓存 运维 关系型数据库
数据库容灾 | MySQL MGR与阿里云PolarDB-X Paxos的深度对比
经过深入的技术剖析与性能对比,PolarDB-X DN凭借其自研的X-Paxos协议和一系列优化设计,在性能、正确性、可用性及资源开销等方面展现出对MySQL MGR的多项优势,但MGR在MySQL生态体系内也占据重要地位,但需要考虑备库宕机抖动、跨机房容灾性能波动、稳定性等各种情况,因此如果想用好MGR,必须配备专业的技术和运维团队的支持。 在面对大规模、高并发、高可用性需求时,PolarDB-X存储引擎以其独特的技术优势和优异的性能表现,相比于MGR在开箱即用的场景下,PolarDB-X基于DN的集中式(标准版)在功能和性能都做到了很好的平衡,成为了极具竞争力的数据库解决方案。
|
12天前
|
XML Java 关系型数据库
Action:Consider the following: If you want an embedde ,springBoot配置数据库,补全springBoot的xml和mysql配置信息就好了
Action:Consider the following: If you want an embedde ,springBoot配置数据库,补全springBoot的xml和mysql配置信息就好了
|
12天前
|
关系型数据库 MySQL 数据库
关系型数据库mysql数据增量恢复
【7月更文挑战第3天】
126 2
|
12天前
|
关系型数据库 MySQL Shell
关系型数据库mysql数据完全恢复
【7月更文挑战第3天】
83 2
|
12天前
|
存储 关系型数据库 MySQL