适用于:✅Microsoft Fabric 中的仓库
本文详细介绍了在 Microsoft Fabric 中设计表的关键概念。
在表中,数据按行和列的格式组织。 每一行代表一条唯一的记录,每一列代表记录中的一个字段。
- 在仓库中,表是包含所有事务数据的数据库对象。
确定表类别
星型架构将数据组织成事实数据表和维度表。 某些表在转移到事实数据表或维度表之前已用于集成或暂存数据。 设计某个表时,请确定该表的数据是属于事实数据表、维度表还是集成表。 此项决策可以明确相应的表结构。
事实数据表包含定量数据,这些数据通常在事务系统中生成,然后加载到数据仓库中。 例如,零售企业每天会生成销售事务,然后将数据载入数据仓库事实数据表进行分析。
维度表包含属性数据,这些数据可能会更改,但一般不会经常更改。 例如,客户的姓名和地址存储在维度表中,仅当客户的个人资料发生更改时,这些数据才会更新。 为了尽量缩小大型事实数据表的大小,不要求将客户的姓名和地址输入到事实数据表的每一行中。 事实数据表和维度表可以共享一个客户 ID。 查询可以联接两个表,以关联客户的个人资料和事务。
集成表为集成或暂存数据提供位置。 例如,可将数据加载到临时表,在暂存位置对数据执行转换,然后将数据插入生产表中。
表将数据作为仓库的一部分存储在OneLake中。 不管是否打开了会话,表和数据都会持久保留。
仓库中的表
要在表中显示表的组织方式,可以使用fact
、dim
或int
作为表名称的前缀。 下表显示了WideWorldImportersDW示例数据仓库的一些架构和表名称。
WideWorldImportersDW 源表名称 | 表类型 | 数据仓库表名称 |
---|---|---|
城市 | 维度 | wwi.DimCity |
订单 | 事实 | wwi.FactOrder |
- 表单名称不能包含
/
或\
,或以.
结尾。
创建表
可以为仓库创建一个新的空表。 还可以创建一个表并在其中填充 select 语句的结果。 下面是用于创建表的 T-SQL 命令。
T-SQL 语句 | 说明 |
---|---|
创建表格 | 通过定义所有表列和选项来创建空表。 |
CREATE TABLE AS SELECT | 在新表中填充 select 语句的结果。 表列和数据类型基于 select 语句的结果。 若要导入数据,此语句可从外部表中进行选择。 |
此示例创建包含两个列的表:
CREATE TABLE MyTable (col1 int, col2 int );
架构名称
仓库支持创建自定义架构。 与在 SQL Server 中类似,可通过架构将以相似方式使用的对象组合在一起。 以下代码创建名为 的wwi
。
- 架构名称区分大小写。
- 架构名称不能包含
/
或\
,或以.
结尾。
CREATE SCHEMA wwi;
数据类型
Microsoft Fabric 支持最常用的 T-SQL 数据类型。
- 有关数据类型的详细信息,请参阅 Fabric 数据仓库中的数据类型。
- 在仓库中创建表时,请查看CREATE TABLE (Transact-SQL)中的数据类型引用。
- 有关在 Warehouse 中创建表的指南,请参阅创建表。
排序规则
Latin1_General_100_BIN2_UTF8
是表和元数据的默认排序规则。
可以使用不区分大小写 (CI) 排序 Latin1_General_100_CI_AS_KS_WS_SC_UTF8
规则创建仓库。 有关详细信息,请参阅 如何:创建不区分大小写(CI)排序规则的仓库。
API 中支持的排序规则包括:
-
Latin1_General_100_BIN2_UTF8
(默认值) Latin1_General_100_CI_AS_KS_WS_SC_UTF8
在创建数据库期间设置排序规则后,所有后续对象(表、列等)都将继承此默认排序规则。
统计信息
查询优化器在创建用于执行查询的计划时,使用列级统计信息。 若要提高查询性能,必须有基于各个列(尤其是查询联接中使用的列)的统计信息。 仓库支持自动创建统计信息。
不会自动进行统计信息更新。 添加或更改了大量的行之后更新统计信息。 例如,在执行加载后更新统计信息。 有关详细信息,请参阅 Fabric 数据仓库中的统计信息。
主键、外键和唯一键
对于仓库,仅当同时使用 NONCLUSTERED 和 NOT ENFORCED 时,才支持 PRIMARY KEY 和 UNIQUE 约束。
仅在使用 NOT ENFORCED 时才支持 FOREIGN KEY。
- 有关语法,请查看 ALTER TABLE。
- 有关详细信息,请参阅 主键、外键和唯一键。
#temp临时表
可以在 Fabric 数据仓库中创建会话范围的临时表(#temp)。
这些表只在它们被创建的会话中存在,并且只在该会话持续的时间内有效。 它们对其他用户或会话不可见,在会话结束后或删除 #temp 表后,系统会自动从系统中删除它们。 这些表可供所有用户访问,而无需特定的项级权限。
可以根据特定用例、非分布式和分布式创建两种类型的 #temp 表。
非分布式 #temp 表(mdf 支持)是默认类型。 在 Fabric 数据仓库中创建和使用非分布式 #temp 表的语法类似于用户表,但需要为临时表名称
#
加上前缀。CREATE TABLE #table_name ( Col1 data_type1, Col2 data_type2 );
使用
DISTRIBUTION=ROUND_ROBIN
关键字可以创建基于 Parquet 的分布式临时表:CREATE TABLE #table_name ( Col1 data_type1, Col2 data_type2 ) WITH (DISTRIBUTION=ROUND_ROBIN);
在前面的脚本中,data_type1
和 data_type2
是 Fabric 数据仓库中支持的数据类型的占位符。
建议使用分布式 #temp 表,因为它们与普通用户表保持一致;它们具有无限的存储、数据类型支持和 T-SQL作。 数据操作和定义的语法与 Fabric 数据仓库中的用户表相同,表名称中添加了前缀 #
。
使源数据与数据仓库相符
从其他数据源加载数据可以填充仓库表。 若要成功加载,源数据中列的数量和数据类型必须与仓库中的表定义保持一致。
如果数据来自多个数据存储,则可以将数据移植到仓库并将其存储在集成表中。 数据进入集成表后,可以使用仓库的强大功能来实现转换作。 准备好数据后,可以将其插入到生产表中。
限制
仓库支持其他数据库所提供的许多(但不是全部)表功能。
- 当前不支持全局临时表。
以下列表显示了当前不受支持的一些表功能。
- 每个表 1024 个最大列数
- 计算列
- 索引视图
- 分区表
- 序列
- 稀疏列
- 具有标识列的数字序列上的代理键
- 同义词
- 触发器
- 唯一索引
- 用户定义类型
- 外部表
重要
在使用带仓库的源控件时,添加表约束或列存在一些限制。