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

本文涉及的产品
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
阿里云百炼推荐规格 ADB PostgreSQL,4核16GB 100GB 1个月
简介: 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列
相关实践学习
阿里云百炼xAnalyticDB PostgreSQL构建AIGC应用
通过该实验体验在阿里云百炼中构建企业专属知识库构建及应用全流程。同时体验使用ADB-PG向量检索引擎提供专属安全存储,保障企业数据隐私安全。
AnalyticDB PostgreSQL 企业智能数据中台:一站式管理数据服务资产
企业在数据仓库之上可构建丰富的数据服务用以支持数据应用及业务场景;ADB PG推出全新企业智能数据平台,用以帮助用户一站式的管理企业数据服务资产,包括创建, 管理,探索, 监控等; 助力企业在现有平台之上快速构建起数据服务资产体系
相关文章
|
16天前
|
存储 机器学习/深度学习 自然语言处理
LangChain与向量数据库:高效的信息检索方案
【8月更文第4天】随着自然语言处理技术的发展,特别是深度学习的进步,我们能够更加高效地处理大量的文本数据。LangChain 作为一种强大的工具链,旨在简化和加速构建复杂的自然语言处理应用程序。结合向量数据库,LangChain 可以实现高效且精准的信息检索功能。本文将探讨这一组合的工作原理,并通过一个具体的实现案例来展示其在实际应用中的效果。
57 2
|
30天前
|
存储 JSON Cloud Native
数据库ADB-PG问题之数据源处理如何解决
数据库ADB-PG问题之数据源处理如何解决
|
2月前
|
前端开发 Java Go
新一代数据库技术的崛起与应用前景
本文探讨了新一代数据库技术在不同领域的崛起和应用前景。通过对前端、后端、Java、Python、C、PHP、Go等多种类型的技术进行分析,我们揭示了新一代数据库技术的优势和特点,并展望了其在未来的发展趋势。本文旨在为读者全面了解新一代数据库技术提供参考和指导。
|
22天前
|
Cloud Native 关系型数据库 MySQL
云原生数据仓库使用问题之如何将ADB中的数据导出到自建的MySQL数据库
阿里云AnalyticDB提供了全面的数据导入、查询分析、数据管理、运维监控等功能,并通过扩展功能支持与AI平台集成、跨地域复制与联邦查询等高级应用场景,为企业构建实时、高效、可扩展的数据仓库解决方案。以下是对AnalyticDB产品使用合集的概述,包括数据导入、查询分析、数据管理、运维监控、扩展功能等方面。
|
27天前
|
开发框架 OLAP atlas
云原生数据仓库问题之LangChain支持向量数据库如何解决
云原生数据仓库问题之LangChain支持向量数据库如何解决
40 0
|
30天前
|
存储 Java 数据库
数据库ADB-PG问题之Chatbot可能无法回答某些问题如何解决
数据库ADB-PG问题之Chatbot可能无法回答某些问题如何解决
|
30天前
|
自然语言处理 数据库 计算机视觉
数据库ADB-PG问题之向量检索特点和应用场景如何解决
数据库ADB-PG问题之向量检索特点和应用场景如何解决
|
6天前
|
存储 关系型数据库 MySQL
MySQL——数据库备份上传到阿里云OSS存储
MySQL——数据库备份上传到阿里云OSS存储
23 0
|
1天前
|
SQL 存储 关系型数据库
数据库-MySQL-01(一)
数据库-MySQL-01(一)
13 4
|
6天前
|
缓存 NoSQL Redis
一天五道Java面试题----第九天(简述MySQL中索引类型对数据库的性能的影响--------->缓存雪崩、缓存穿透、缓存击穿)
这篇文章是关于Java面试中可能会遇到的五个问题,包括MySQL索引类型及其对数据库性能的影响、Redis的RDB和AOF持久化机制、Redis的过期键删除策略、Redis的单线程模型为何高效,以及缓存雪崩、缓存穿透和缓存击穿的概念及其解决方案。

热门文章

最新文章