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 year
colonne , 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;
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_name
di 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.
Contenuto correlato
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per