Freigeben über


Benutzerdefinierte Schemas für dedizierte SQL-Pools in Azure Synapse Analytics

Dieser Artikel konzentriert sich auf die Bereitstellung mehrerer Tipps zur Verwendung von benutzerdefinierten T-SQL-Schemas zum Entwickeln von Lösungen in dediziertem SQL-Pool.

Schemas für Anwendungsgrenzen

Herkömmliche Data Warehouses verwenden häufig separate Datenbanken, um Anwendungsgrenzen basierend auf Arbeitsauslastung, Domäne oder Sicherheit zu erstellen.

Ein herkömmliches SQL Server-Data Warehouse kann beispielsweise eine Stagingdatenbank, eine Data Warehouse-Datenbank und einige Data Mart-Datenbanken umfassen. In dieser Topologie fungiert jede Datenbank als Workload- und Sicherheitsgrenze in der Architektur.

Im Gegensatz dazu führt ein dedizierter SQL-Pool die gesamte Data Warehouse-Workload in einer Datenbank aus. Datenbankübergreifende Verknüpfungen sind nicht zulässig. Der dedizierte SQL-Pool erwartet, dass alle vom Lager verwendeten Tabellen in der 1 Datenbank gespeichert werden.

Hinweis

Der SQL-Pool unterstützt keine datenbankübergreifenden Abfragen jeglicher Art. Folglich müssen Data Warehouse-Implementierungen, die dieses Muster nutzen, überarbeitet werden.

Empfehlungen

Nachfolgend werden Empfehlungen zum Konsolidieren von Workloads, Sicherheit, Domäne und funktionalen Grenzen mithilfe von benutzerdefinierten Schemas beschrieben:

  • Verwenden Sie eine Datenbank in einem dedizierten SQL-Pool, um Ihre gesamte Workload im Data Warehouse auszuführen.
  • Konsolidieren Sie Ihre vorhandene Data Warehouse-Umgebung, um eine dedizierte SQL-Pooldatenbank zu verwenden.
  • Nutzen Sie benutzerdefinierte Schemas , um die zuvor mithilfe von Datenbanken implementierte Grenze bereitzustellen.

Wenn zuvor keine benutzerdefinierten Schemas verwendet wurden, haben Sie einen Neuanfang. Verwenden Sie den alten Datenbanknamen als Grundlage für Ihre benutzerdefinierten Schemas in der dedizierten SQL-Pooldatenbank.

Wenn Schemas bereits verwendet wurden, haben Sie einige Optionen:

  • Entfernen Sie die Legacy-Schema-Namen und fangen Sie neu an.
  • Behalten Sie die alten Schemanamen bei, indem Sie diese vorab an den Tabellennamen anhängen.
  • Behalten Sie die älteren Schemanamen bei, indem Sie Ansichten über die Tabelle in einem zusätzlichen Schema implementieren, um die alte Schemastruktur neu zu erstellen.

Hinweis

Auf den ersten Blick mag Option 3 als die attraktivste erscheinen. Allerdings ist der Teufel im Detail. Sichten im dedizierten SQL-Pool sind schreibgeschützt. Jede Daten- oder Tabellenänderung muss für die Basistabelle ausgeführt werden. Option 3 führt auch eine Ansichtsebene in Ihr System ein. Sie sollten dies besonders berücksichtigen, wenn Sie in Ihrer Architektur bereits Sichten verwenden.

Beispiele

Implementieren von benutzerdefinierten Schemas basierend auf Datenbanknamen:

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
,       ...
);

Behalten Sie die alten Schemanamen bei, indem Sie diese vorab an den Tabellennamen anhängen. Verwenden Sie Schemas für die Workloadgrenze:

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
,       ...
);

Behalten Sie die alten Schemanamen mithilfe von Ansichten bei:

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
;

Hinweis

Jede Änderung der Schemastrategie erfordert eine Überprüfung des Sicherheitsmodells für die Datenbank. In vielen Fällen können Sie das Sicherheitsmodell vereinfachen, indem Sie Berechtigungen auf Schemaebene zuweisen. Wenn detailliertere Berechtigungen erforderlich sind, können Sie Datenbankrollen verwenden.

Nächste Schritte

Weitere Hinweise zur Entwicklung finden Sie in der Entwicklungsübersicht.