本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
联接数据
您可以使用 Amazon Quick Sight 中的联接界面来联接来自一个或多个数据源的对象。通过使用 Amazon Quick Sight 加入数据,您可以合并不同的数据,而无需复制来自不同来源的数据。
联接数据集的类型
在两个 Quick Sight 逻辑表之间执行联接,其中每个逻辑表都包含有关如何获取数据的信息。在 Quick Sight 中编辑数据集时,页面上半部分的联接图将每个逻辑表显示为矩形块。
Quick Sight 中有两种不同类型的联接数据集:同源数据集和跨源数据集。数据集没有任何联接或满足以下所有条件时,该数据集视为同源数据集:
-
如果任何逻辑表引用了 Quick Sight 数据源:
-
此数据集中的所有逻辑表都必须引用相同的 Quick Sight 数据源。如果两个单独的 Quick Sight 数据源引用同一个底层数据库,则不适用。它必须是完全相同的 Quick Sight 数据源。有关使用单个数据来源的更多信息,请参阅 使用现有的数据来源创建数据集。
-
-
如果任何逻辑表引用的是作为父数据集的 Quick Sight 数据集:
-
父数据集必须使用直接查询。
-
父数据集必须引用相同的 Quick Sight 数据源。
-
如果不满足上述条件,则数据集被视为跨源联接数据集。
关于联接数据集的事实
同源和跨源数据集联接都有以下限制。
联接数据集中可以包含的表数上限是多少?
所有联接数据集最多可以包含 32 个表。
联接数据能有多大?
允许的最大联接大小由所使用的查询模式和查询引擎决定。下表提供了有关要联接的表的不同大小限制的信息。大小限制适用于所有辅助表的总和。主表没有联接大小限制。
-
Same-source 表-当表源自单个查询数据源时,Quick Sight 对联接大小不施加任何限制。这不会覆盖源查询引擎可能存在的联接大小限制。
-
Cross-source 数据集-这种类型的联接包含来自不同数据源但未存储在中的表SPICE。对于这些类型的联接,Quick Sight 会自动识别数据集中最大的表。所有其他辅助表的总大小必须小于 1 GB。
-
存储在 SPICE 中的数据集 - 这种类型的联接包含全部提取到 SPICE 的表。此联接中所有辅助表的总大小不能超过 20 GB。
有关 SPICE 数据库大小计算的更多信息,请参阅 估计 SPICE 数据集的大小。
联接数据集可以使用直接查询吗?
Same-source 假设使用直接查询没有其他限制,则数据集支持直接查询。例如,S3 数据来源不支持直接查询,因此同源的 S3 数据集仍必须使用 SPICE。
Cross-source 数据集必须使用 SPICE。
联接中可以使用计算字段吗?
所有联接数据集都可以使用计算字段,但不能在任何 on 子句中使用计算字段。
联接中可以使用地理数据吗?
Same-source 数据集支持地理数据类型,但不能在任何条款中使用地理字段。
Cross-source 数据集不支持任何形式的地理数据。
有关跨数据源联接表的一些示例,请参阅 AWS 大数据博客上的 “在 Amazon Quick Sight 上跨数据源联接
创建联接
要联接表以便在数据集中使用,请按照以下过程操作。在开始之前,请导入或连接到您的数据。您可以在 Amazon Quick Sight 支持的任何数据源之间创建联接,但物联网 (IoT) 数据除外。例如,您可以在 Amazon S3 存储桶中添加逗号分隔值 (.csv) 文件、表、视图、SQL 查询或 JSON 对象。
添加一个或多个联接
-
打开您希望使用的数据集。
-
(可选)在开始之前,请根据数据样本决定是否要禁用自动生成的预览。要将其关闭,请选择右Auto-preview上角。默认情况下,此选项处于打开状态。
-
如果您尚未选择查询模式,请选择查询模式。
选择 SPICE 将您的数据集存储在 SPICE 中,或者选择直接查询以每次提取实时数据。如果您的数据集包含一个或多个手动上传的文件,则您的数据集将自动存储在 SPICE 中。
如果您愿意 SPICE,则数据会被提取到 Quick Sight 中。使用数据集的视觉对象在 SPICE 中运行查询,而不是在数据库上运行查询。
如果选择直接查询,则不会将数据摄取到 SPICE。使用数据集的视觉对象数据库上运行查询,而不是在 SPICE 中运行查询。
如果选择查询模式,请确保在联接中设置唯一键(如果适用),以提高加载视觉对象时的性能。
-
在数据准备页面上,选择添加数据。
-
在打开的添加数据页面中,选择以下选项之一,然后完成以下步骤:
-
从数据集中添加数据:
-
选择数据集。
-
从列表中选择一个数据集。
-
选定选择。
-
-
从数据来源添加数据:
-
选择数据来源。
-
从列表中选择一个数据来源。
-
选定选择。
-
从列表中选择一个表。
-
选定选择。
-
-
通过多次添加表来创建自联接。名称后面会出现一个计数器。例如 Product、Product (2) 和 Product (3)。字段或筛选条件部分中的字段名称包括相同的计数器,以便您查看字段来自表的哪个实例。
-
选择上传文件,然后选择要联接的文件以添加新文件。
-
-
(可选)选择使用自定义 SQL 打开查询编辑器并为 SQL 数据来源编写查询。
-
(可选)添加数据后,通过选择每个表格的菜单图标与其进行交互。通过拖放表来重新排列。
将出现一个带有红点的图标,以表示您需要配置此联接。对于尚未配置的联接,会出现两个红点。要创建联接,请选择第一个联接配置图标。
-
(可选)要更改现有联接,请通过选择两个表之间的联接图标来重新打开联接配置。
随即将打开联接配置窗格。在联接界面上,指定联接类型以及用于联接表的字段。
-
在屏幕的底部,您可以看到选项,用于将一个表中的字段设置为等于另一个表中的字段。
-
在 Join clauses (联接子句) 部分中,选择各个表的连接列。
(可选)如果您选择的表在多个列上联接,请选择 Add a new join clause (添加新的联接子句)。执行此操作会将另一行添加到联接子句,这样您可以指定下一组要联接的列。重复该过程,直到您指定了两个数据对象的所有联接列。
-
-
在联接配置窗格中,选择要应用的联接类型。如果联接字段是其中一个或两个表的唯一键,请启用唯一键设置。唯一键仅适用于直接查询,不适用于 SPICE 数据。
有关联接的更多信息,请参阅 联接类型。
-
选择 Apply (应用) 以确认您的选择。
要取消而不进行任何更改,请选择取消。
-
工作区中的联接图标会发生变化以显示新的关系。
-
(可选)在字段部分中,您可以使用每个字段的菜单执行以下一项或多项操作:
-
向地理空间字段添加层次结构。
-
包含或排除字段。
-
针对字段编辑名称和描述。
-
更改数据类型。
-
添加计算(计算字段)。
-
将访问权限限制为仅我可访问,因此只有您能看见。将字段添加到已在使用的数据集时,这会非常有用。
-
-
(可选)在筛选条件部分中,您可以添加或编辑筛选条件。有关更多信息,请参阅 使用 Amazon Quick Sight 筛选数据。
联接类型
Amazon Quick Sight 支持以下联接类型:
-
内部联接
-
左外部联接和右外部联接
-
完全外部联接
我们来深入了解一下这些联接类型对数据所执行的操作。对于示例数据,我们使用以下名为 widget 和 safety rating 表。
SELECT * FROM safety-rating rating_id safety_rating 1 A+ 2 A 3 A- 4 B+ 5 B SELECT * FROM WIDGET widget_id widget safety_rating_id 1 WidgetA 3 2 WidgetB 1 3 WidgetC 1 4 WidgetD 2 5 WidgetE 6 WidgetF 5 7 WidgetG
内部联接
如果您只想查看两个表之间存在匹配项的数据,请使用内部联接。例如,假设您对 safety-rating 和 widget 表执行内部联接。
在下面的结果集中,将删除没有安全评级的小部件,并删除没有关联小部件的安全评级。只包含完全匹配的行。
SELECT * FROM safety-rating INNER JOIN widget ON safety_rating.rating_id = widget.safety_rating_id rating_id safety_rating widget_id widget safety_rating_id 3 A- 1 WidgetA 3 1 A+ 2 WidgetB 1 1 A+ 3 WidgetC 1 2 A 4 WidgetD 2 5 B 6 WidgetF 5
左外部联接和右外部联接
这也称为左外部联接或右外部联接。如果要查看一个表中的所有数据,而只想查看另一个表中的匹配行,请使用向左或向右外连接。
在图形界面中,您可以查看哪个表位于左侧或右侧。在 SQL 语句中,第一个表被视为位于左侧。因此,选择左外部联接相对于右外部联接,仅取决于表在查询工具中的排列。
例如,假设您对(左表)和 safety-ratingwidgets(右表)执行左外连接。在这种情况下,将返回所有 safety-rating 行并仅返回匹配的 widget 行。在结果集中,您可以看到没有匹配数据的空白。
SELECT * FROM safety-rating LEFT OUTER JOIN widget ON safety_rating.rating_id = widget.safety_rating_id rating_id safety_rating widget_id widget safety_rating_id 1 A+ 2 WidgetB 1 1 A+ 3 WidgetC 1 2 A 4 WidgetD 2 3 A- 1 WidgetA 3 4 B+ 5 B 6 WidgetF 5
如果您改为使用右外连接,请按相同的顺序调用表,safety-rating因此在左边widgets,在右边。在这种情况下,只返回匹配的 safety-rating 行并返回所有 widget 行。在结果集中,您可以看到没有匹配数据的空白。
SELECT * FROM safety-rating RIGHT OUTER JOIN widget ON safety_rating.rating_id = widget.safety_rating_id rating_id safety_rating widget_id widget safety_rating_id 3 A- 1 WidgetA 3 1 A+ 2 WidgetB 1 1 A+ 3 WidgetC 1 2 A 4 WidgetD 2 5 WidgetE 5 B 6 WidgetF 5 7 WidgetG
完全外部联接
有时候也仅称为外部联接,不过此术语可以指代左外部联接、右外部联接或完全外部联接。为了定义含义,我们使用完整名称:完全外部联接。
使用完全外联接查看匹配的数据,以及两个表中不匹配的数据。联接的类型包括来自两个表中的所有行。例如,如果您对 safety-rating 和 widget 表执行完全外部联接,则会返回所有行。行在匹配的位置对齐,所有额外的数据包含在单独的行中。在结果集中,您可以看到没有匹配数据的空白。
SELECT * FROM safety-rating FULL OUTER JOIN widget ON safety_rating.rating_id = widget.safety_rating_id rating_id safety_rating widget_id widget safety_rating_id 1 A+ 2 WidgetB 1 1 A+ 3 WidgetC 1 2 A 4 WidgetD 2 3 A- 1 WidgetA 3 4 B+ 5 B 6 WidgetF 5 5 WidgetE 7 WidgetG