本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
定义主题中数据集之间的关系
| 适用于:企业版 |
| 目标受众:Amazon Quick 管理员和作者 |
当问题或视觉对象跨越多个表时,关系告诉 Quick Sight 如何连接数据集。您可以通过使用 JSON 配置文件指定数据集对之间的连接键来定义关系。
关系图必须是有向无环图 (DAG) ——不支持循环关系。我们建议使用星型架构对数据集进行建模,将一个或多个中央事实表连接到共享维度表。
定义数据集之间的关系
-
打开要配置的主题。
-
导航到 “关系” 选项卡。
-
选择 “上传文件” 或 “手动创建”。
-
上传定义关系的 JSON 文件(参见以下示例)。上传后,关系图在左侧直观地显示,联接密钥详细信息显示在右侧。选择联接以验证关系映射。
-
要编辑关系,请选择编辑,使用下拉选择器更新联接列,然后选择保存。
关系 JSON 格式
以下示例显示了将中央 SALES_FACT 表连接到维度表的星型架构配置:
{ "datasetPairs": [ { "datasetLeft": { "datasetName": "SALES_FACT", "joinColumnNames": ["CUSTOMER_ID"] }, "datasetRight": { "datasetName": "CUSTOMER_DIM", "joinColumnNames": ["CUSTOMER_ID"] } }, { "datasetLeft": { "datasetName": "SALES_FACT", "joinColumnNames": ["PRODUCT_ID"] }, "datasetRight": { "datasetName": "PRODUCT_DIM", "joinColumnNames": ["PRODUCT_ID"] } }, { "datasetLeft": { "datasetName": "SALES_FACT", "joinColumnNames": ["STORE_ID"] }, "datasetRight": { "datasetName": "STORE_DIM", "joinColumnNames": ["STORE_ID"] } } ] }
中的每个条目都datasetPairs指定一对数据集和用于连接它们的列。通过在joinColumnNames数组中包含多个列名来支持复合键。
人际关系最佳实践
-
从星型架构开始。由维度表包围的中央事实表可最大限度地降低联接复杂性并最大限度地提高查询性能。
-
使用干净的加入密钥。尽可能使用整数代理密钥。确认双方的数据类型相匹配。从联接键列中移除空值(内部连接中空值永远不匹配)。
-
验证参照完整性。事实表中的每个外键都应存在于维度表中。
-
避免循环连接。关系图必须是非循环的。如果您的模型创建了一个循环,则通过移除一条腿并对冗余路径进行非规范化来打破循环。
-
Pre-join 在可行的情况下使用雪花链。如果维度有子维度(例如,客户 → 地理 → 区域),可以考虑将其展平为单一维度数据集以减少联接跳数。
目前的局限性
以下限制适用于已定义的关系:
-
关系对分析表使用内部联接语义。只有两个数据集中键匹配的行才会出现在结果中。
-
关系图必须是非循环的(没有循环连接)。
-
Self-relationships (与其本身相关的数据集)不受支持。
-
主题中的所有数据集必须使用相同的查询模式(SPICE或直接查询)。
-
一个主题不能超过 12 个数据集。
注意
在 Amazon Quick 聊天中使用主题时, LLM-powered 聊天代理不限于内部连接。它可以根据您的自定义指令生成带有左连接、外连接、并集和子查询的 SQL。这些联接类型限制仅适用于分析表消耗路径。