Inserire dati nel 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 dalle tabelle esistenti nel lakehouse e nel warehouse in nuove tabelle nel magazzino. Queste opzioni sono utili se è necessario creare nuove versioni di una tabella con dati aggregati, versioni di tabelle con un subset delle righe o creare una tabella come risultato di una query complessa. Esaminiamo alcuni esempi.

Importante

Microsoft Fabric è in anteprima.

Creazione di 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 di 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 ai dati solo dall'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 , , monthdayofmonth con valori ottenuti dalla updated colonna nella tabella di origine. Questo può essere utile se si sta tentando di visualizzare i dati sull'infezione per anno o per vedere i mesi in cui vengono osservati i casi più 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 un altro esempio, è possibile creare una nuova tabella che riepiloga il numero di casi osservati in ogni mese, indipendentemente dall'anno, per valutare come la stagionalità può influire 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 la 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 complessivamente:

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 riferimenti alla sintassi, vedere CREATE TABLE AS SELECT (Transact-SQL).

Inserimento di 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, insert ... È possibile usare il modello 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 della tabella di destinazione. Se i nomi di colonna vengono specificati 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 importare in blocco i dati con registrazione minima e parallelismo.

Inserimento di dati da tabelle in diversi warehouse e lakehouse

Per CREATE TABLE AS SELECT e INSERT... SELECT, l'istruzione SELECT può anche fare riferimento alle tabelle nei warehouse diversi dal magazzino in cui viene archiviata la tabella di destinazione usando query cross-warehouse. Ciò può essere ottenuto usando la convenzione [warehouse_or_lakehouse_name.][schema_name.]table_namedi denominazione di tre parti . Si supponga, ad esempio, di avere gli asset dell'area di lavoro seguenti:

  • Una lakehouse denominata cases_lakehouse con i dati più recenti sui case.
  • Un warehouse denominato reference_warehouse con tabelle usate per i dati di riferimento.
  • Un magazzino denominato research_warehouse dove viene creata la tabella di destinazione.

È possibile creare una nuova tabella che usa la denominazione in tre parti per combinare i dati dalle 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 cross-warehouse, vedere Scrivere una query SQL tra database.

Passaggi successivi