共用方式為


Azure Synapse Analytics 中專用 SQL 集區的使用者定義架構

本文著重於提供數個秘訣,以使用 T-SQL 使用者定義架構在專用 SQL 集區中開發解決方案。

應用程式界限的架構

傳統數據倉儲通常會使用個別的資料庫,根據工作負載、網域或安全性來建立應用程式界限。

例如,傳統的 SQL Server 數據倉儲可能包含預備資料庫、數據倉儲資料庫,以及一些數據超市資料庫。 在此拓撲中,每個資料庫都會作為架構中的工作負載和安全性界限運作。

相反地,專用 SQL 集區會在一個資料庫內執行整個數據倉儲工作負載。 不允許跨資料庫聯結。 專用 SQL 集區預期倉儲所使用的所有數據表都會儲存在一個資料庫內。

備註

SQL 集區不支援任何類型的跨資料庫查詢。 因此,需要修訂運用此模式的數據倉儲實作。

建議

以下是使用使用者定義的架構來合併工作負載、安全性、網域和功能界限的建議:

  • 使用專用 SQL 集區中的一個資料庫來執行整個數據倉儲工作負載。
  • 合併現有的數據倉儲環境,以使用一個專用 SQL 集區資料庫。
  • 利用 使用者定義的架構 來提供先前使用資料庫實作的界限。

如果先前尚未使用使用者定義的架構,那麼您可以從頭開始。 使用舊資料庫名稱作為專用 SQL 集區資料庫中使用者定義架構的基礎。

如果已經使用架構,則您有幾個選項:

  • 拿掉舊版架構名稱並重新開始。
  • 將舊版架構名稱加在數據表名稱之前,以保留舊版架構名稱。
  • 藉由在額外的架構中實作數據表上的檢視,以重新建立舊的架構結構,以保留舊版架構名稱。

備註

第一次看到選項三時,它可能看起來是最有吸引力的選擇。 魔鬼藏在細節中。 在專用 SQL 集區中,檢視是唯讀的。 任何數據或數據表修改都必須針對基表執行。 選項 3 也會在您的系統中引入一層視圖。 如果您使用架構中的檢視,您可能會想要提供一些額外的想法。

範例:

根據資料庫名稱實作使用者定義的架構:

CREATE SCHEMA [stg]; -- stg previously database name for staging database
GO
CREATE SCHEMA [edw]; -- edw previously database name for the data warehouse
GO
CREATE TABLE [stg].[customer] -- create staging tables in the stg schema
(       CustKey BIGINT NOT NULL
,       ...
);
GO
CREATE TABLE [edw].[customer] -- create data warehouse tables in the edw schema
(       CustKey BIGINT NOT NULL
,       ...
);

在數據表名稱前面加上舊版架構名稱,以保留這些名稱。 針對工作負載界限使用架構:

CREATE SCHEMA [stg]; -- stg defines the staging boundary
GO
CREATE SCHEMA [edw]; -- edw defines the data warehouse boundary
GO
CREATE TABLE [stg].[dim_customer] --pre-pend the old schema name to the table and create in the staging boundary
(       CustKey BIGINT NOT NULL
,       ...
);
GO
CREATE TABLE [edw].[dim_customer] --pre-pend the old schema name to the table and create in the data warehouse boundary
(       CustKey BIGINT NOT NULL
,       ...
);

使用檢視保留舊版架構名稱:

CREATE SCHEMA [stg]; -- stg defines the staging boundary
GO
CREATE SCHEMA [edw]; -- stg defines the data warehouse boundary
GO
CREATE SCHEMA [dim]; -- edw defines the legacy schema name boundary
GO
CREATE TABLE [stg].[customer] -- create the base staging tables in the staging boundary
(       CustKey    BIGINT NOT NULL
,       ...
)
GO
CREATE TABLE [edw].[customer] -- create the base data warehouse tables in the data warehouse boundary
(       CustKey    BIGINT NOT NULL
,       ...
)
GO
CREATE VIEW [dim].[customer] -- create a view in the legacy schema name boundary for presentation consistency purposes only
AS
SELECT  CustKey
,       ...
FROM    [edw].customer
;

備註

架構策略中的任何變更都需要檢閱資料庫的安全性模型。 在許多情況下,您可以藉由在架構層級指派許可權來簡化安全性模型。 如果需要更細微的許可權,您可以使用資料庫角色。

後續步驟

如需更多開發秘訣,請參閱開發概觀