联接数据 - 亚马逊 QuickSight
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

重要:我们已经重新设计了 Amazon QuickSight 分析工作空间。您可能会遇到无法反映 QuickSight 控制台新外观的屏幕截图或程序化文本。我们正在更新屏幕截图和过程文本。

要查找特征或项目,请使用快速搜索栏

有关新外观 QuickSight的更多信息,请参阅在 Amazon 上引入全新的分析体验 QuickSight

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

联接数据

您可以使用 Amazon 中的联接界面 QuickSight 来联接来自一个或多个数据源的对象。通过使用 Amazon QuickSight 加入数据,您可以合并不同的数据,而无需复制来自不同来源的数据。

联接数据集的类型

在两个 QuickSight 逻辑表之间执行联接,其中每个逻辑表都包含有关如何获取数据的信息。在中编辑数据集时 QuickSight,页面上半部分的联接图将每个逻辑表显示为矩形块。

中有两种不同类型的联接数据集 QuickSight:同源数据集和跨源数据集。数据集没有任何联接或满足以下所有条件时,该数据集视为同源数据集:

  • 如果任何逻辑表引用了 QuickSight 数据源:

    • 此数据集中的所有逻辑表都必须引用相同 QuickSight 的数据源。如果两个不同的 QuickSight 数据源引用同一个底层数据库,则不适用。它必须是完全相同 QuickSight 的数据源。有关使用单个数据来源的更多信息,请参阅 使用现有的数据来源创建数据集

  • 如果任何逻辑表引用的是父 QuickSight 数据集的数据集:

    • 父数据集必须使用直接查询。

    • 父数据集必须引用相同 QuickSight 的数据源。

如果不满足上述条件,则数据集被视为跨源联接数据集。

关于联接数据集的事实

同源和跨源数据集联接都有以下限制。

联接数据集中可以包含的表数上限是多少?

所有联接数据集最多可以包含 32 个表。

联接数据能有多大?

同源数据集对数据大小没有限制。

使用跨源数据集可 QuickSight 自动检测数据集中最大的逻辑表,而其他逻辑表的总大小必须小于 1 GB。每次将数据集刷新到 SPICE 时,都会重新计算这些表的逻辑大小。

请注意,联接期间计算的逻辑大小与 SPICE 使用的大小逻辑不同。大小为 1.5GB 的 SPICE 数据集的逻辑大小可能为 1GB。

此外,由于跨源数据集必须使用 SPICE,因此这些数据集必须符合 SPICE 的限额和限制。有关更多信息,请参阅 导入数据的 SPICE 限额

联接数据集可以使用直接查询吗?

假设使用直接查询没有其他限制,则同源数据集支持直接查询。例如,S3 数据来源不支持直接查询,因此同源的 S3 数据集仍必须使用 SPICE。

跨源数据集必须使用 SPICE。

联接中可以使用计算字段吗?

所有联接数据集都可以使用计算字段,但不能在任何 on 子句中使用计算字段。

联接中可以使用地理数据吗?

同源数据集支持地理数据类型,但不能在任何 on 子句中使用地理字段。

跨源数据集不支持任何形式的地理数据。

有关跨数据源联接表的一些示例,请参阅Amazon大数据博客上的 “在 Amazon QuickSight 上跨数据源联接” 一文。

创建联接

要联接表以便在数据集中使用,请按照以下过程操作。在开始之前,请导入或连接到您的数据。您可以在 Amazon 支持的任何数据源之间创建联接 QuickSight,但物联网 (IoT) 数据除外。例如,您可以在 Amazon S3 存储桶中添加逗号分隔值 (.csv) 文件、表、视图、SQL 查询或 JSON 对象。

添加一个或多个联接
  1. 打开您希望使用的数据集。

  2. (可选)在开始之前,请根据数据样本决定是否要禁用自动生成的预览。要将其关闭,请选择右上角的自动预览。默认情况下,此选项处于打开状态。

  3. 如果您尚未选择查询模式,请选择查询模式

    选择 SPICE 将您的数据集存储在 SPICE 中,或者选择直接查询以每次提取实时数据。如果您的数据集包含一个或多个手动上传的文件,则您的数据集将自动存储在 SPICE 中。

    如果您愿意 SPICE,则会将数据提取到 QuickSight。使用数据集的视觉对象在 SPICE 中运行查询,而不是在数据库上运行查询。

    如果选择直接查询,则不会将数据摄取到 SPICE。使用数据集的视觉对象数据库上运行查询,而不是在 SPICE 中运行查询。

    如果选择查询模式,请确保在联接中设置唯一键(如果适用),以提高加载视觉对象时的性能。

  4. 在数据准备页面上,选择添加数据

  5. 在打开的添加数据页面中,选择以下选项之一,然后完成以下步骤:

    • 从数据集中添加数据:

      1. 选择数据集

      2. 从列表中选择一个数据集。

      3. 选定选择

    • 从数据来源添加数据:

      1. 选择数据来源

      2. 从列表中选择一个数据来源。

      3. 选定选择

      4. 从列表中选择一个表。

      5. 选定选择

    • 通过多次添加表来创建自联接。名称后面会出现一个计数器。例如 ProductProduct (2)Product (3)字段筛选条件部分中的字段名称包括相同的计数器,以便您查看字段来自表的哪个实例。

    • 选择上传文件,然后选择要联接的文件以添加新文件。

  6. (可选)选择使用自定义 SQL 打开查询编辑器并为 SQL 数据来源编写查询。

  7. (可选)添加数据后,通过选择每个表格的菜单图标与其进行交互。通过拖放表来重新排列。

    将出现一个带有红点的图标,以表示您需要配置此联接。对于尚未配置的联接,会出现两个红点。要创建联接,请选择第一个联接配置图标。

  8. (可选)要更改现有联接,请通过选择两个表之间的联接图标来重新打开联接配置

    随即将打开联接配置窗格。在联接界面上,指定联接类型以及用于联接表的字段。

  9. 在屏幕的底部,您可以看到选项,用于将一个表中的字段设置为等于另一个表中的字段。

    1. Join clauses (联接子句) 部分中,选择各个表的连接列。

      (可选)如果您选择的表在多个列上联接,请选择 Add a new join clause (添加新的联接子句)。执行此操作会将另一行添加到联接子句,这样您可以指定下一组要联接的列。重复该过程,直到您指定了两个数据对象的所有联接列。

  10. 联接配置窗格中,选择要应用的联接类型。如果联接字段是其中一个或两个表的唯一键,请启用唯一键设置。唯一键仅适用于直接查询,不适用于 SPICE 数据。

    有关联接的更多信息,请参阅 联接类型

  11. 选择 Apply (应用) 以确认您的选择。

    要取消而不进行任何更改,请选择取消

  12. 工作区中的联接图标会发生变化以显示新的关系。

  13. (可选)在字段部分中,您可以使用每个字段的菜单执行以下一项或多项操作:

    • 向地理空间字段添加层次结构

    • 包含排除字段。

    • 针对字段编辑名称和描述

    • 更改数据类型

    • 添加计算(计算字段)。

    • 将访问权限限制为仅我可访问,因此只有您能看见。将字段添加到已在使用的数据集时,这会非常有用。

  14. (可选)在筛选条件部分中,您可以添加或编辑筛选条件。有关更多信息,请参阅 在 Amazon 中筛选数据 QuickSight

联接类型

Amazon QuickSight 支持以下联接类型:

  • 内部联接

  • 左外部联接和右外部联接

  • 完全外部联接

我们来深入了解一下这些联接类型对数据所执行的操作。对于示例数据,我们使用以下名为 widgetsafety 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-ratingwidget 表执行内部联接。

在下面的结果集中,将删除没有安全评级的小部件,并删除没有关联小部件的安全评级。只包含完全匹配的行。

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-rating(左侧表)和 widgets(右侧表)表执行左外部联接( )。在这种情况下,将返回所有 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-ratingwidget 表执行完全外部联接,则会返回所有行。行在匹配的位置对齐,所有额外的数据包含在单独的行中。在结果集中,您可以看到没有匹配数据的空白。

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