目录
-
- [1️⃣ 前言](#1️⃣ 前言)
- [2️⃣ 分享者集群操作](#2️⃣ 分享者集群操作)
-
- [2.1 连接数据库](#2.1 连接数据库)
- [2.2 创建Datashare](#2.2 创建Datashare)
- [3️⃣ 使用者集群操作](#3️⃣ 使用者集群操作)
-
- [3.1 创建数据库](#3.1 创建数据库)
- [3.2 使用共享数据](#3.2 使用共享数据)
1️⃣ 前言
使用 Amazon Redshift 数据共享,您可以在 Amazon Redshift 集群、工作组、AWS 账户和 AWS 区域之间安全地共享对实时数据的访问权限,而无需手动移动或复制数据。由于数据是实时的,只要进行了更新,所有用户就都可以在 Amazon Redshift 中看到最新、最一致的信息。
- 性能:对共享数据的查询性能取决于使用者集群的计算容量,即用共享数据时并不会使用分享者集群的资源。
利用AWS Redshift数据分享,我们可以实现数据实时接入(zero-etl)和跑批任务分离,互不影响,而且使用Serverless版本时可以降低成本。
- 分享者集群:本文中指源集群,即提供分享数据的集群。
- 使用者集群:本文中指使用分享数据的集群。
2️⃣ 分享者集群操作
2.1 连接数据库
在Redshift Namespace下找到Datashares,点击连接数据库,填写分享者集群。

需要先在AWS Secrets Manager创建好

2.2 创建Datashare
可以在页面创建,也可以使用SQL创建

创建测试表
sql
SELECT * FROM sales_test;
CREATE TABLE IF NOT EXISTS sales_test (
sale_id INT PRIMARY KEY,
sale_date DATE NOT NULL,
product_id VARCHAR(50) NOT NULL,
amount DECIMAL(10,2) NOT NULL,
region VARCHAR(20),
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
INSERT INTO sales_test (sale_id, sale_date, product_id, amount, region)
VALUES
(1, '2026-01-01', 'P001', 199.99, 'west'),
(2, '2026-01-01', 'P002', 299.50, 'west'),
(3, '2026-01-02', 'P001', 199.99, 'west'),
(4, '2026-01-03', 'P003', 499.00, 'west'),
(5, '2026-01-03', 'P002', 299.50, 'west');
创建数据分享
sql
-- 注意在要数据分享的数据库创建
CREATE DATASHARE dev_share set PUBLICACCESSIBLE TRUE;
ALTER DATASHARE dev_share ADD SCHEMA public;
-- ALTER DATASHARE dev_share OWNER TO "IAM:max";
ALTER DATASHARE dev_share ADD ALL TABLES IN SCHEMA public;
GRANT USAGE ON DATASHARE dev_share TO NAMESPACE '填使用者集群Namespace ID';
-- GRANT SELECT ON ALL TABLES IN SCHEMA public TO DATASHARE dev_share;
如果有新增表,需要加进去
sql
ALTER DATASHARE dev_share ADD ALL TABLES IN SCHEMA public;
3️⃣ 使用者集群操作
3.1 创建数据库
sql
SHOW DATASHARES LIKE '%share';
-- CREATE DATABASE dev_share WITH PERMISSIONS FROM DATASHARE dev_share OF NAMESPACE '填分享者集群Namespace ID'; 配置更细粒度权限
CREATE DATABASE dev_share FROM DATASHARE dev_share OF NAMESPACE '填分享者集群Namespace ID';
GRANT USAGE ON DATABASE dev_share TO xx_user;
GRANT USAGE ON DATABASE dev_share TO group xx_group;
3.2 使用共享数据
sql
select * from dev_share.public.sales_test;