亚马逊AWS官方博客
Amazon Redshift 跨数据库查询入门指南(预览版)
Amazon Redshift是一套快速、可扩展且安全的全托管云数据仓库,能够以简单、经济、高效的方式,使用标准SQL以及现有ETL、商务智能(BI)和报告工具对你的数据进行分析。每一天,成千上万的客户使用Amazon Redshift处理EB级别的数据,并为商务智能、预测分析与实时流分析等强大的分析工作负载提供支持。
现在我们高兴地宣布,Redshift新的跨数据库查询功能(公共预览版)已经发布,可帮助您跨Amazon Redshift集群内的多个数据库进行查询。在本文中,我们将共同了解跨数据库进行查询的基本概述,以及介绍各项关键功能是如何帮助您在组织内进行大规模数据管理和分析工作。
跨数据库查询是什么?
借助跨数据库查询,不管您连接到Amazon Redshift集群下的哪一个数据库,都可以查询该Amazon Redshift集群下任何数据库中的数据。跨数据库查询能够消除数据副本需求,并简化了数据组织体系,从而支持到多个业务组使用同一个Amazon Redshift集群。跨数据库查询功能在Amazon Redshift RA3节点类型中提供支持。
数据跨Amazon Redshift集群中的多个数据库进行组织,并可支持多租户配置。但是,您通常需要批准读取访问以查询并联接这些数据集。例如,数据仓库内各特定数据库中的数据集往往由不同的业务团队所拥有和管理,且各部门之间需要相互协作。您可能需要执行通用的ETL流程来对分布在多个数据库内的原始数据进行处理。在从传统数据仓库系统迁移至云端之后,很多用户还经常在多个Amazon Redshift数据库内来分析数据。
通过跨数据库查询,您现在可以通过Amazon Redshift集群上的任意数据库访问数据,而不必接入特定数据库。您还可以在单一查询内联接来自多个数据库的数据集。您可以使用简单的三段式符号<database>.<schema>.<object>
来访问表、视图等数据库对象,并使用商务智能(BI)或者分析工具进行数据分析。您可以继续使用标准Amazon Redshift SQL命令为用户设置细粒度访问控制,并确保用户只能看到他们有权访问的数据中的相关子集。
演练概述
在本文中,我们将端到端通过案例展示如何使用跨数据库查询功能,包括了以下几个步骤:
- 设置数据权限。
- 访问数据并执行多项跨数据库查询。
- 通过工具连接。
在本次演练中,我们使用SQL Workbench(一款SQL查询工具)在Amazon Redshift上执行查询。关于将SQL Workbench接入Amazon Redshift集群的更多详细信息,请参阅使用SQL Workbench/J接入您的集群。
为跨数据库查询设置权限
您可以使用标准的Redshift SQL GRANT与REVOKE命令为用户及用户组配置适当的权限。为了配置权限,我们以管理员身份连接名为TPCH_100G的Redshift数据库,在此数据库上,我们建立了标准的数据集TPC-H。您可以使用GitHub上提供的数据集代码及脚本,配合托管在 Amazon Simple Storage Service (Amazon S3)存储桶上的数据集在本地环境中设置这套数据集。下面的截屏展示了连接的具体配置信息。
其中 TPCH_100G
数据库由8个加载至schema PUBLIC
当中的表组成,具体如以下截屏所示。
以下截屏所示,为对TPC-H
数据库中的customer
表进行查询。
数据库管理员向名为demouser
的Amazon Redshift用户授予对3个表的读取权限,分别为customer
, orders
以及lineitem
。用户通常会连接到其团队管理的数据库TPCH_CONSUMERDB
内进行操作。
使用三段式表示法执行跨数据库查询
在本节中,我们将了解跨数据库查询如何使用。使用跨数据库查询,您可以在连接任意数据库后,对集群内的所有其他数据库执行查询,期间无需重新连接。在本用例中,用户demouser
将接入其对应的数据库TPCH_CONSUMERDB
(详见以下截屏)。
在连接数据库TPCH_CONSUMERDB
之后, demouser
可以通过简单直观的三段式表示法TPCH_100G.PUBLIC.CUSTOMER
对TPCH_100gG
数据库内其有权限的对象执行查询(详见以下截屏)。
您可以使用此<database>.<schema>.<object>
表示引用并查询集群内任何其他数据库中的对象,只需具备相应权限即可。查询的对象可以是表或者视图(包括常规视图、后期绑定视图以及物化视图)。
除了针对对象执行查询之外,您也可以在其他数据库内的对象之上创建视图,并应用相关细粒度访问控制机制。
跨数据库联接数据
使用跨数据库查询,您可以实现跨数据库的数据集联接。在以下截屏中,demouser
就跨TPCH_100G
数据库内的customer
, lineitem
以及orders
表执行了查询与联接。
您也可以跨数据库对各对象实现联接。在以下查询中,demouser
以无缝方式将 TPCH_100G
中的数据集(customer
, lineitem
以及 orders
表) 与TPCH_CONSUMERDB
中的数据集(nation
与 supplier
表)进行了联接。
使用跨数据库查询,无论接入哪个数据库,您都可以得到统一的数据视图。
通过工具连接安全访问相关数据集
为了支持对跨数据库查询时引入的数据库层级结构进行导航与探索,Amazon Redshift提供一组新的元数据视图,外加JDBC与ODBC驱动程序的修改版本。
此外,您也可以创建从某一数据库访问Amazon Redshift集群上任意其他数据库内schema的别名。例如,您可以使用CREATE EXTERNAL SCHEMA命令创建别名,借此通过两段式表示<external schema name>.<object>
实现跨数据库的对象查询。例如,在以下截屏中,数据库管理员会接入TPCH_CONSUMERDB
并为TPC_100G
数据库内的PUBLIC
schema创建一个别名为TPC_100G_PUBLIC
的外部schema,并在此schema上为demouser
授予使用访问权限。
现在,当demouser
连接到TPCH_CONSUMERDB
后,即可看到对象结构中的外部schema(如以下截屏所示),且其中仅包含其有权访问的CUSTOMER
, LINEITEM
以及 ORDERS
等相关对象。
现在,用户可以使用schema别名执行查询(无需使用三段式表示),就如同查询本地数据一样。
总结与后续步骤
在本文中,我们简单了解了如何在Amazon Redshift中执行跨数据库查询及其相关效果。跨数据库查询可帮助您跨数据库对数据进行组织与管理,借此有效地支持多租户数据仓库部署体系,以满足多种不同的用户案例。您可以体验本次发布的预览版,将跨数据库查询功能引入您的用例。关于更多详细信息,请参阅跨数据库查询说明文档。