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 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. Ora si esamineranno 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 dbo.[bing_covid-19_data_2023]
esistente, 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 colonne year
, month
, dayofmonth
, con valori ottenuti dalla colonna updated
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 colonna month
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 gli Stati Uniti hanno registrato un maggior numero di casi 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;
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 su tabelle esistenti, è possibile utilizzare il criterio INSERT...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 eseguire 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 warehouse diversi dal warehouse in cui è archiviata la tabella di destinazione, usando query tra warehouse. A tale scopo, è possibile usare la convenzione di denominazione in tre parti [warehouse_or_lakehouse_name.][schema_name.]table_name
. Si supponga, ad esempio, di disporre delle risorse dell’area di lavoro seguenti:
- Una lakehouse denominata
cases_lakehouse
con i dati del caso più recenti. - Un 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.