Skip to main content

从 RisingWave 导出数据到 Redis

本文描述了如何将数据从 RisingWave 导出到 Redis。

Redis 是一个开源的、基于内存的数据结构存储系统,通常被称为数据结构服务器。RisingWave 以字符串形式将键值对存储在指定格式(JSONTEMPLATE)中导出数据到 Redis,因此必须始终提供主键。

您可以通过使用 RisingWave 仓库中 integration_test 目录redis-sink Demo,在您自己的设备上测试此过程。

开始之前

在从 RisingWave 导出数据到 Redis 之前,请确保满足以下条件:

  • 目标 Redis 数据库可以从 RisingWave 访问。
  • 确保您有一个可以从中导出数据的上游物化视图或 Source。

句法

CREATE SINK [ IF NOT EXISTS ] sink_name
[FROM sink_from | AS select_query]
WITH (
connector='redis',
connector_parameter = 'value', ...
)
FORMAT data_format ENCODE data_encode [ (
format_parameter = 'value' ) ]
;

参数

参数名称描述
redis.url必填。Redis 数据库的地址。
primary_key必填。Sink 的主键。如有必要,使用 ',' 分隔主键列。

Sink 参数

字段注释
data_format数据格式。允许的格式:
  • PLAIN: 以插入操作输出数据。
  • UPSERT: 作为变更日志流输出数据。
data_encode数据编码。支持的编码:
  • JSON
    • date: 公元以来的天数。
    • interval: P<years>Y<months>M<days>DT<hours>H<minutes>M<seconds>S 格式字符串。
    • time without time zone: 自上一个午夜以来的毫秒数。
    • timestamp: 自 Epoch 以来的毫秒数。
  • TEMPLATE: 将数据转换为由 redis_key_format/redis_value_format 指定的字符串。
force_append_only如果为 true,即使不能做到也会强制 Sink 为 PLAIN(即 append-only)。
redis_key_format如果 data_encodeTEMPLATE,则必填。指定键的格式为字符串。
redis_value_format如果 data_encodeTEMPLATE,则必填。指定值的格式为字符串。

示例

假设我们从一个 Source 创建了一个物化视图:bhv_mv

CREATE MATERIALIZED VIEW bhv_mv AS
SELECT
user_id,
target_id,
event_timestamp
FROM
source_1;

我们可以通过创建一个 Sink,从 bhv_mv 导出数据到 Redis。这里,data_encodeJSON

CREATE SINK redis_sink
FROM bhv_mv WITH (
connector = 'redis',
primary_key = 'user_id',
redis.url= 'redis://127.0.0.1:6379/'
) FORMAT PLAIN ENCODE JSON (
force_append_only='true'
);

我们可以通过创建一个 Sink,从 bhv_mv 导出数据到 Redis。这里,data_encodeTEMPLATE,因此必须定义 redis_key_formatredis_value_format

CREATE SINK redis_sink_2
FROM bhv_mv WITH (
primary_key = 'user_id',
connector = 'redis',
redis.url= 'redis://127.0.0.1:6379/',
) FORMAT PLAIN ENCODE TEMPLATE (
force_append_only='true',
redis_key_format = 'UserID:{user_id}',
redis_value_format = 'TargetID:{target_id},EventTimestamp{event_timestamp}'
);