Fabric 数据仓库中的表

适用于:✅Microsoft Fabric 中的仓库

本文详细介绍了在 Microsoft Fabric 中设计表的关键概念。

在表中,数据按行和列的格式组织。 每一行代表一条唯一的记录,每一列代表记录中的一个字段。

  • 在仓库中,表是包含所有事务数据的数据库对象。

确定表类别

星型架构将数据组织成事实数据表维度表。 某些表在转移到事实数据表或维度表之前已用于集成或暂存数据。 设计某个表时,请确定该表的数据是属于事实数据表、维度表还是集成表。 此项决策可以明确相应的表结构。

  • 事实数据表包含定量数据,这些数据通常在事务系统中生成,然后加载到数据仓库中。 例如,零售企业每天会生成销售事务,然后将数据载入数据仓库事实数据表进行分析。

  • 维度表包含属性数据,这些数据可能会更改,但一般不会经常更改。 例如,客户的姓名和地址存储在维度表中,仅当客户的个人资料发生更改时,这些数据才会更新。 为了尽量缩小大型事实数据表的大小,不要求将客户的姓名和地址输入到事实数据表的每一行中。 事实数据表和维度表可以共享一个客户 ID。 查询可以联接两个表,以关联客户的个人资料和事务。

  • 集成表为集成或暂存数据提供位置。 例如,可将数据加载到临时表,在暂存位置对数据执行转换,然后将数据插入生产表中。

表将数据作为仓库的一部分存储在OneLake中。 不管是否打开了会话,表和数据都会持久保留。

仓库中的表

要在表中显示表的组织方式,可以使用factdimint作为表名称的前缀。 下表显示了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 数据类型。

排序规则

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。

#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_type1data_type2Fabric 数据仓库中支持的数据类型的占位符。

建议使用分布式 #temp 表,因为它们与普通用户表保持一致;它们具有无限的存储、数据类型支持和 T-SQL作。 数据操作和定义的语法与 Fabric 数据仓库中的用户表相同,表名称中添加了前缀 #

使源数据与数据仓库相符

从其他数据源加载数据可以填充仓库表。 若要成功加载,源数据中列的数量和数据类型必须与仓库中的表定义保持一致。

如果数据来自多个数据存储,则可以将数据移植到仓库并将其存储在集成表中。 数据进入集成表后,可以使用仓库的强大功能来实现转换作。 准备好数据后,可以将其插入到生产表中。

限制

仓库支持其他数据库所提供的许多(但不是全部)表功能。

  • 当前不支持全局临时表。

以下列表显示了当前不受支持的一些表功能。

  • 每个表 1024 个最大列数
  • 计算列
  • 索引视图
  • 分区表
  • 序列
  • 稀疏列
  • 具有标识列的数字序列上的代理键
  • 同义词
  • 触发器
  • 唯一索引
  • 用户定义类型
  • 外部表

重要

在使用带仓库的源控件时,添加表约束或列存在一些限制。