亚马逊AWS官方博客

Amazon Redshift 跨数据库查询入门指南(预览版)

原文链接:https://aws.amazon.com/cn/blogs/big-data/get-started-with-amazon-redshift-cross-database-queries-preview/

 

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命令为用户设置细粒度访问控制,并确保用户只能看到他们有权访问的数据中的相关子集。

演练概述

在本文中,我们将端到端通过案例展示如何使用跨数据库查询功能,包括了以下几个步骤:

  1. 设置数据权限。
  2. 访问数据并执行多项跨数据库查询。
  3. 通过工具连接。

在本次演练中,我们使用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个表的读取权限,分别为customerorders以及lineitem。用户通常会连接到其团队管理的数据库TPCH_CONSUMERDB内进行操作。

使用三段式表示法执行跨数据库查询

在本节中,我们将了解跨数据库查询如何使用。使用跨数据库查询,您可以在连接任意数据库后,对集群内的所有其他数据库执行查询,期间无需重新连接。在本用例中,用户demouser将接入其对应的数据库TPCH_CONSUMERDB(详见以下截屏)。

在连接数据库TPCH_CONSUMERDB 之后, demouser 可以通过简单直观的三段式表示法TPCH_100G.PUBLIC.CUSTOMERTPCH_100gG数据库内其有权限的对象执行查询(详见以下截屏)。

您可以使用此<database>.<schema>.<object>表示引用并查询集群内任何其他数据库中的对象,只需具备相应权限即可。查询的对象可以是表或者视图(包括常规视图、后期绑定视图以及物化视图)。

除了针对对象执行查询之外,您也可以在其他数据库内的对象之上创建视图,并应用相关细粒度访问控制机制。


跨数据库联接数据

使用跨数据库查询,您可以实现跨数据库的数据集联接。在以下截屏中,demouser 就跨TPCH_100G数据库内的customer, lineitem 以及orders表执行了查询与联接。

您也可以跨数据库对各对象实现联接。在以下查询中,demouser 以无缝方式将 TPCH_100G 中的数据集(customer, lineitem 以及 orders 表) 与TPCH_CONSUMERDB 中的数据集(nationsupplier表)进行了联接。

使用跨数据库查询,无论接入哪个数据库,您都可以得到统一的数据视图。

通过工具连接安全访问相关数据集

为了支持对跨数据库查询时引入的数据库层级结构进行导航与探索,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中执行跨数据库查询及其相关效果。跨数据库查询可帮助您跨数据库对数据进行组织与管理,借此有效地支持多租户数据仓库部署体系,以满足多种不同的用户案例。您可以体验本次发布的预览版,将跨数据库查询功能引入您的用例。关于更多详细信息,请参阅跨数据库查询说明文档。

本篇作者

Neeraja Rentachintala

Amazon Redshift首席产品经理。Neeraja是一位经验丰富的产品管理与GTM领导者,在数据产品与平台发展愿景、战略以及领导岗位上拥有超过20年从业经验。Neeraja负责的产品涵盖分析、数据库、数据集成、应用程序集成、人工智能/机器学习、内部部署、以及跨越本地与云端的大规模分布式系统等,曾为包括MapR(已被HPE收购)、微软SQL Server、甲骨文、Informatica以及Expedia.com等全球财富五百强企业提供服务。

Jenny Chen

Amazon Redshift高级数据库工程师,专注于Redshift性能研究,包括查询处理、并发性、分布式系统、存储以及操作系统等等。她与开发团队通力合作,保证为客户提供性能最强、具有良好可扩展性与易用性的数据库。在参与云数据仓库工作之前,她在IBM公司的企业数据库DB2 for z/OS项目组拥有10年工作经验,专注于查询优化、查询性能以及系统性能等议题。

Sushim Mitra

Amazon Redshift查询处理团队软件开发工程师。他热衷于探索查询优化问题、SQL语言功能以及数据库安全性。在业余时间,他喜欢阅读世界各国的小说作品。

Suzhen Lin

Amazon Redshift事务处理与存储团队高级软件开发工程师。Suzhen Lin在行业领先的各类分析数据库产品领域拥有15年以上的从业经验,曾先后担任AWS Redshift、Gauss MPPDB、Azure SQL Data Warehouse以及Teradata的高级架构师与开发者职务。她在本地/云数据库管理系统中的存储、事务处理、查询处理、内存/磁盘缓存等领域拥有丰富经验。