Schemi definiti dall'utente in SQL Data WarehouseUser-defined schemas in SQL Data Warehouse

I data warehouse tradizionali spesso usano database separati per creare i limiti dell'applicazione in base a carico di lavoro, dominio o di sicurezza.Traditional data warehouses often use separate databases to create application boundaries based on either workload, domain or security. Ad esempio, un data warehouse di SQL Server tradizionale potrebbe includere un database di gestione temporanea, un database del data warehouse e alcuni database del data mart.For example, a traditional SQL Server data warehouse might include a staging database, a data warehouse database, and some data mart databases. In questa topologia ogni database funziona come carico di lavoro e limite di sicurezza nell'architettura.In this topology each database operates as a workload and security boundary in the architecture.

Al contrario, SQL Data Warehouse esegue tutto il carico di lavoro del data warehouse all'interno di un database.By contrast, SQL Data Warehouse runs the entire data warehouse workload within one database. I join tra database non sono consentiti.Cross database joins are not permitted. SQL Data Warehouse prevede pertanto che tutte le tabelle usate dal data warehouse siano archiviate all'interno di un database.Therefore SQL Data Warehouse expects all tables used by the warehouse to be stored within the one database.

Nota

SQL Data Warehouse non supporta query tra database di alcun tipo.SQL Data Warehouse does not support cross database queries of any kind. Di conseguenza, le implementazioni di data warehouse che usano questo modello dovranno essere modificate.Consequently, data warehouse implementations that leverage this pattern will need to be revised.

IndicazioniRecommendations

Si tratta di indicazioni per il consolidamento di carichi di lavoro, sicurezza, dominio e i limiti funzionali mediante l'uso di schemi definiti dall'utente.These are recommendations for consolidating workloads, security, domain and functional boundaries by using user defined schemas

  1. Usare un database SQL Data Warehouse per eseguire l'intero carico di lavoro del data warehouse.Use one SQL Data Warehouse database to run your entire data warehouse workload
  2. Consolidare l'ambiente data warehouse esistente per l'uso di un solo database di SQL Data Warehouse.Consolidate your existing data warehouse environment to use one SQL Data Warehouse database
  3. Sfruttare gli schemi definiti dall'utente per fornire il limite implementato in precedenza tramite database.Leverage user-defined schemas to provide the boundary previously implemented using databases.

Se gli schemi definiti dall'utente non sono stati usati in precedenza, si avrà uno slate pulito.If user-defined schemas have not been used previously then you have a clean slate. Usare semplicemente il nome del database precedente come base per gli schemi definiti dall'utente nel database di SQL Data Warehouse.Simply use the old database name as the basis for your user-defined schemas in the SQL Data Warehouse database.

Se gli schemi sono già stati usati, sono disponibili alcune opzioni:If schemas have already been used then you have a few options:

  1. Rimuovere i nomi degli schemi legacy e ricominciare dall'inizio.Remove the legacy schema names and start fresh
  2. Mantenere i nomi degli schemi legacy premettendo il nome dello schema legacy al nome della tabella.Retain the legacy schema names by pre-pending the legacy schema name to the table name
  3. Mantenere i nomi degli schemi legacy implementando viste sulla tabella in uno schema aggiuntivo per ricreare la struttura dello schema precedente.Retain the legacy schema names by implementing views over the table in an extra schema to re-create the old schema structure.

Nota

A prima vista, l'opzione 3 può sembrare quella più interessante.On first inspection option 3 may seem like the most appealing option. È tuttavia importante osservare i dettagli.However, the devil is in the detail. Le viste sono di sola lettura in SQL Data Warehouse.Views are read only in SQL Data Warehouse. Qualsiasi modifica di dati o tabelle dovrà essere eseguita sulla tabella di base.Any data or table modification would need to be performed against the base table. L'opzione 3 introduce anche un livello di viste nel sistema.Option 3 also introduces a layer of views into your system. È consigliabile valutare attentamente questo aspetto se si usano già viste nell'architettura.You might want to give this some additional thought if you are using views in your architecture already.

Esempi:Examples:

Implementare schemi definiti dall'utente in base ai nomi di database.Implement user-defined schemas based on database names

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

Mantenere nomi di schemi legacy premettendoli al nome della tabella.Retain legacy schema names by pre-pending them to the table name. Usare schemi per il limite del carico di lavoro.Use schemas for the workload boundary.

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

Mantenere i nomi di schemi legacy usando viste.Retain legacy schema names using views

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
;

Nota

Qualsiasi modifica nella strategia relativa agli schemi richiede una revisione del modello di sicurezza per il database.Any change in schema strategy needs a review of the security model for the database. In molti casi è possibile semplificare il modello di sicurezza assegnando le autorizzazioni a livello di schema.In many cases you might be able to simplify the security model by assigning permissions at the schema level. Se sono necessarie autorizzazioni più granulari, è possibile utilizzare i ruoli del database.If more granular permissions are required then you can use database roles.

Passaggi successiviNext steps

Per altri suggerimenti sullo sviluppo, vedere la panoramica dello sviluppo.For more development tips, see development overview.