Condividi tramite


Inserire dati in Warehouse usando Transact-SQL

Si applica a: Warehouse in Microsoft Fabric

Il linguaggio Transact-SQL offre opzioni che è possibile usare per caricare i dati su larga scala da tabelle esistenti nel lakehouse e nel warehouse in nuove tabelle del warehouse. Queste opzioni sono utili se è necessario creare nuove versioni di una tabella con dati aggregati, versioni di tabelle con un subset di righe o creare una tabella in seguito a una query complessa. Verranno ora esaminati alcuni esempi.

Creare una nuova tabella con il risultato di una query usando CREATE TABLE AS SELECT (CTAS)

L'istruzione CREATE TABLE AS SELECT (CTAS) consente di creare una nuova tabella nel warehouse dall'output di un'istruzione SELECT . Esegue l'operazione di inserimento nella nuova tabella in parallelo, rendendola estremamente efficiente per la trasformazione dei dati e la creazione di nuove tabelle nell'area di lavoro.

Nota

Gli esempi in questo articolo usano il set di dati di esempio BING COVID-19. Per caricare il set di dati di esempio, seguire la procedura descritta in Inserire i dati nel warehouse usando l'istruzione COPY per creare i dati di esempio nel warehouse.

Il primo esempio illustra come creare una nuova tabella che rappresenta una copia della tabella esistente dbo.[bing_covid-19_data_2023] , ma filtrata in base ai dati dell'anno 2023:

CREATE TABLE [dbo].[bing_covid-19_data_2023]
AS
SELECT * 
FROM [dbo].[bing_covid-19_data] 
WHERE DATEPART(YEAR,[updated]) = '2023';

È anche possibile creare una nuova tabella con nuove yearcolonne , month, dayofmonth con valori ottenuti dalla updated colonna nella tabella di origine. Questo può essere utile se si tenta di visualizzare i dati delle infezioni per anno o di vedere i mesi in cui si osservano i casi di COVID-19:

CREATE TABLE [dbo].[bing_covid-19_data_with_year_month_day]
AS
SELECT DATEPART(YEAR,[updated]) [year], DATEPART(MONTH,[updated]) [month], DATEPART(DAY,[updated]) [dayofmonth], * 
FROM [dbo].[bing_covid-19_data];

Come altro esempio, è possibile creare una nuova tabella che riepiloga il numero di casi osservati in ogni mese, indipendentemente dall'anno, per valutare l'impatto della stagionalità sulla diffusione in un determinato paese/area geografica. Usa la tabella creata nell'esempio precedente con la nuova month colonna come origine:

CREATE TABLE [dbo].[infections_by_month]
AS
SELECT [country_region],[month], SUM(CAST(confirmed as bigint)) [confirmed_sum]
FROM [dbo].[bing_covid-19_data_with_year_month_day]
GROUP BY [country_region],[month];

In base a questa nuova tabella, è possibile notare che il Stati Uniti osservato casi più confermati in tutti gli anni nel mese di January, seguito da December e October. April è il mese con il numero più basso di casi nel complesso:

SELECT * FROM [dbo].[infections_by_month]
WHERE [country_region] = 'United States'
ORDER BY [confirmed_sum] DESC;

Screenshot dei risultati della query che mostra il numero di infezioni per mese nel Stati Uniti, ordinato per mese, in ordine decrescente. Il numero di mese 1 viene visualizzato in alto.

Per altri esempi e informazioni di riferimento sulla sintassi, vedere CREATE TABLE AS SELECT (Transact-SQL).

Inserire dati in tabelle esistenti con query T-SQL

Gli esempi precedenti creano nuove tabelle in base al risultato di una query. Per replicare gli esempi ma nelle tabelle esistenti, l'istruzione INSERT... È possibile usare il criterio SELECT . Ad esempio, il codice seguente inserisce nuovi dati in una tabella esistente:

INSERT INTO [dbo].[bing_covid-19_data_2023]
SELECT * FROM [dbo].[bing_covid-19_data] 
WHERE [updated] > '2023-02-28';

I criteri di query per l'istruzione SELECT possono essere qualsiasi query valida, purché i tipi di colonna di query risultanti siano allineati alle colonne nella tabella di destinazione. Se vengono specificati i nomi di colonna e includono solo un subset delle colonne della tabella di destinazione, tutte le altre colonne vengono caricate come NULL. Per altre informazioni, vedere Uso di INSERT INTO... SELECT per l'importazione bulk dei dati con registrazione minima e parallelismo.

Inserire dati da tabelle in magazzini e lakehouse diversi

Per CREATE TABLE AS SELECT e INSERT... SELECT, l'istruzione SELECT può anche fare riferimento a tabelle in magazzini diversi dal magazzino in cui è archiviata la tabella di destinazione, usando query tra warehouse. A tale scopo, è possibile usare la convenzione [warehouse_or_lakehouse_name.][schema_name.]table_namedi denominazione in tre parti . Si supponga, ad esempio, di avere gli asset dell'area di lavoro seguenti:

  • Una lakehouse denominata cases_lakehouse con i dati del caso più recenti.
  • Warehouse denominato reference_warehouse con tabelle utilizzate per i dati di riferimento.
  • Magazzino denominato research_warehouse in cui viene creata la tabella di destinazione.

È possibile creare una nuova tabella che usa la denominazione in tre parti per combinare i dati delle tabelle in questi asset dell'area di lavoro:

CREATE TABLE [research_warehouse].[dbo].[cases_by_continent]
AS
SELECT 
FROM [cases_lakehouse].[dbo].[bing_covid-19_data] cases
INNER JOIN [reference_warehouse].[dbo].[bing_covid-19_data] reference
ON cases.[iso3] = reference.[countrycode];

Per altre informazioni sulle query tra data warehouse, vedere Scrivere una query SQL tra database.