加载临时表
加载数据仓库的最常见模式之一是将数据从源系统传输到数据湖中的文件,将文件数据引入到临时表中,然后使用 SQL 语句将数据从临时表加载到维度表和事实数据表中。 通常,数据加载是作为一个周期性的批处理过程来执行的,对数据仓库的插入和更新以固定的时间间隔(例如,每天、每周或每月)进行协调。
创建临时表
许多井然有序的仓库都有用于暂存数据库的标准结构,甚至可能使用特定的架构来暂存数据。 下面的代码示例为最终加载到维度表中的产品数据创建了一个临时表:
注意
此示例在默认 dbo 架构中创建一个临时表。 还可为临时表创建单独的架构并采用有意义的名称(如暂存),以便架构师和用户了解该架构的用途。
CREATE TABLE dbo.StageProduct
(
ProductID NVARCHAR(10) NOT NULL,
ProductName NVARCHAR(200) NOT NULL,
ProductCategory NVARCHAR(200) NOT NULL,
Color NVARCHAR(10),
Size NVARCHAR(10),
ListPrice DECIMAL NOT NULL,
Discontinued BIT NOT NULL
)
WITH
(
DISTRIBUTION = ROUND_ROBIN,
CLUSTERED COLUMNSTORE INDEX
);
使用 COPY 命令
可使用 COPY 语句从数据湖加载数据,如下例所示:
注意
这通常是加载临时表的推荐方法,因为它具有高性能吞吐量。
COPY INTO dbo.StageProduct
(ProductID, ProductName, ...)
FROM 'https://mydatalake.../data/products*.parquet'
WITH
(
FILE_TYPE = 'PARQUET',
MAXERRORS = 0,
IDENTITY_INSERT = 'OFF'
);
提示
要详细了解 COPY 语句,请参阅 Transact-SQL 文档中的 COPY (Transact-SQL)。
使用外部表
在某些情况下,如果要加载的数据存储在具有适当结构的文件中,则创建用于引用文件位置的外部表可能更有效。 这样,数据就可以直接从源文件读取,而不是被加载到关系存储中。 以下示例展示了如何创建一个外部表,该表引用与 Azure Synapse Analytics 工作区关联的数据湖中的文件:
CREATE EXTERNAL TABLE dbo.ExternalStageProduct
(
ProductID NVARCHAR(10) NOT NULL,
ProductName NVARCHAR(10) NOT NULL,
...
)
WITH
(
DATE_SOURCE = StagedFiles,
LOCATION = 'folder_name/*.parquet',
FILE_FORMAT = ParquetFormat
);
GO
提示
有关使用外部表的详细信息,请参阅 Azure Synapse Analytics 文档中的通过 Synapse SQL 使用外部表。