Data Lake Analytics: 以SQL方式查询Redis数据

简介: Data Lake Analytics 作为云上数据处理的枢纽,最近加入了对于Redis 的支持, 这篇教程带你玩转 DLA 的 Redis 支持。创建数据库在 DLA 里面创建一个底层映射到 Redis 的数据库的语法如下:CREATE DATABASE `redis_test`WIT...

dla_plus_redis

Data Lake Analytics 作为云上数据处理的枢纽,最近加入了对于Redis 的支持, 这篇教程带你玩转 DLA 的 Redis 支持。

创建数据库

在 DLA 里面创建一个底层映射到 Redis 的数据库的语法如下:

CREATE DATABASE `redis_test`
WITH DBPROPERTIES (
    catalog = 'redis',
    location = 'r-xxxxx.redis.rds.aliyuncs.com:6379/hello_',
    password = 'xxxxx',
    vpc_id = 'vpc-xxxxx',
    instance_id = 'r-xxxxxx'
)

这里要特别说明一下这个 location 属性,前面 r-xxxxx.redis.rds.aliyuncs.com:6379 是redis服务器的域名和端口,最后的 hello_ 是一个前缀,具体的用途后面再细说,redis服务的域名和端口你可以从阿里云控制直接查询到:

域名和端口

跟普通的建库语法不同的是这里多了两个属性: VPC_IDINSTANCE_ID , 这是因为现在用户的 Redis 数据库都是处于用户自己的VPC内部,默认情况下 DLA 是访问不了用户 VPC 里面的资源的,为了让DLA能够访问到用户RDS里面的数据,我们需要利用阿里云的VPC反向访问技术。

权限声明: 当您通过上述方式建库,就视为您同意我们利用VPC反向访问的技术去读写您的 Redis 。

另外您还需要把 100.104.0.0/16 加入你的 Redis 的白名单列表,这是我们VPC反向访问的IP地段,如下图:

ip_whitelist

创建表

数据库建完之后,我们可以建表了,我们先在你的 Redis 里初始化一些数据用来测试, 因为Redis是没有schema信息的,我们必须往里面插入数据才能生效,所以我们插入一些测试数据:

# CSV格式的数据
set hello_world_1 1,james,10
set hello_world_2 2,bond,20
set hello_world_3 3,lily,30
set hello_world_4 4,lucy,20

# JSON格式的数据
set hello_foo_1 '{"id":1,"name":"james","age":110}'
set hello_foo_2 '{"id": 2, "name": "bond", "age": 210}'
set hello_foo_3 '{"id": 3, "name": "lily", "age": 310}'
set hello_foo_4 '{"id": 3, "name": "lucy", "age": 210}'

我们插入了两种格式的数据,一种是CSV格式的,一种是JSON格式的,这是我们目前支持的两种格式,后面会分别演示。

然后就可以在 DLA 的数据库里面建立相应的映射表了:

CREATE EXTERNAL TABLE dla_person (
    id int,
    name varchar,
    age int
) TBLPROPERTIES (
    COLUMN_MAPPING = 'id,2;name,1;age,0',
    TABLE_MAPPING = 'world_',
    format = 'csv'
);

这里几个字段详细说明一下:

TABLE_MAPPING 让我们可以让DLA层面的表名映射到底层Redis里面指定模式的的一组key。回忆一下我们前面在建库的时候指过前缀 hello_ , 再与这里的 world_ 相结合,表达的意思就是:

dla_person 里面的数据映射到Redis数据库里面所有key的前缀为 hello_world_ 的数据。

这里,你也可以省略这个设置,默认的前缀跟表名一致,在上面的例子里面省略 TABLE_MAPPING, 那么最终查询的key的前缀为 hello_dla_person

下一个我们关注一下参数 format, 这里指定Redis里面数据的格式,目前支持: csv, json 两种格式。

COLUMN_MAPPING 的作用是把DLA层面的列映射到底层的数据上,由于Redis底层没有column的概念,因此具体映射的方法根据 format 的不同而不同, 比如这里的 CSV, 我们知道CSV的数据被解析之后会形成一个string数组,对应的column_mapping就映射到底层这个数组的index(下标)。比如这里把 id 映射到下标 2, 把 name 映射到下标 1 等等。

column_mapping 也可以不设置,对于CSV格式来说会按照column声明的顺序依次映射到0, 1, 2等等。

这样我们就可以通过MySQL客户端连接到 DLA 数据库上面,就可以对 Redis 数据库里面的数据进行查询了:

mysql> select * from dla_person;
+-------+------+------+
| name  | id   | age  |
+-------+------+------+
| bond  |   20 |    2 |
| lily  |   30 |    3 |
| lucy  |   20 |    4 |
| james |   10 |    1 |
+-------+------+------+
4 rows in set (0.18 sec)

熟悉SQL的同学一定觉得很爽吧,可以去熟悉的SQL语法去操作 Redis 数据库了。

JSON

上面演示的是CSV格式的数据,下面我们再来试试JSON格式的数据,我们再来创建一个新表:

CREATE EXTERNAL TABLE dla_person_json (
    id int,
    name varchar,
    age int
) TBLPROPERTIES (
    COLUMN_MAPPING = 'id,age;name,name;age,id',
    TABLE_MAPPING = 'foo_',
    format = 'json'
);

注意这里我们指定了 TABLE_MAPPINGfoo_,结合数据库的前缀 hello_, 因此它最终查询的是Redis里面所有前缀为 hello_foo_ 的数据; 另外这里还指定了 COLUMN_MAPPING, 因为JSON数据里面是有字段名字的,因此DLA的层面的column的名字是映射到JSON数据里面字段的名字的,这里为了演示的需要故意把DLA的 id column映射到了 Redis的 age, 我们来查询看看结果:

mysql> select * from dla_person_json;
+-------+------+------+
| name  | id   | age  |
+-------+------+------+
| lucy  |  210 |    3 |
| james |  110 |    1 |
| bond  |  210 |    2 |
| lily  |  310 |    3 |
+-------+------+------+
4 rows in set (0.12 sec)

如我们所愿,id column显示的是Redis里面对应的 age 字段的值。

总结

我们今天介绍了DLA对于Redis的支持,目前DLA支持的数据源已经包括: OSS, OTS, RDS(MySQL, SQLServer, Postgres), MongoDB, Redis等等 数据可以在这些数据源之间进行联合JOIN、流转,更多详细的介绍可以直接去我们的官网试用。

Happy DLAing!

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
17天前
|
SQL 运维 监控
MSSQL性能调优实战:索引优化、SQL查询效率提升与并发控制策略
在Microsoft SQL Server(MSSQL)的日常运维与性能优化中,精准的策略与技巧是实现高效数据库管理的关键
|
17天前
|
SQL 监控 数据库
MSSQL性能调优实战技巧:索引优化策略、SQL查询重构与并发控制详解
在Microsoft SQL Server(MSSQL)的管理与优化过程中,性能调优是确保数据库高效运行的关键环节
|
3天前
|
SQL 数据库
SQL查询
【7月更文挑战第22天】SQL查询
12 4
|
6天前
|
SQL 机器学习/深度学习 分布式计算
MaxCompute产品使用合集之怎么使用SQL查询来获取ODPS中所有的表及字段信息
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
7天前
|
SQL 运维 分布式计算
DataWorks产品使用合集之ODPPS中如何使用SQL查询从表中获取值并将其赋值给临时变量以供后续使用
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
7天前
|
SQL DataWorks 关系型数据库
DataWorks产品使用合集之数据集成时源头提供数据库自定义函数调用返回数据,数据源端是否可以写自定义SQL实现
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
5天前
|
SQL 分布式计算 DataWorks
MaxCompute操作报错合集之使用sql查询一个表的分区数据时遇到报错,该如何解决
MaxCompute是阿里云提供的大规模离线数据处理服务,用于大数据分析、挖掘和报表生成等场景。在使用MaxCompute进行数据处理时,可能会遇到各种操作报错。以下是一些常见的MaxCompute操作报错及其可能的原因与解决措施的合集。
|
8天前
|
SQL 分布式计算 DataWorks
DataWorks操作报错合集之在执行SQL查询时遇到报错,代码为[XX000],该怎么解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
7天前
|
SQL DataWorks NoSQL
DataWorks操作报错合集之在执行带with语句的SQL查询时出现了错误,是什么原因
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
17天前
|
SQL 监控 数据库