Erfassen von Daten in Ihrem Warehouse mithilfe von Transact-SQL

Gilt für: Warehouse in Microsoft Fabric

Die Transact-SQL-Sprache bietet Optionen, mit denen Sie Daten im großen Stil aus vorhandenen Tabellen in Ihrem Lakehouse und Warehouse in neue Tabellen in Ihrem Warehouse laden können. Diese Optionen sind praktisch, wenn Sie neue Versionen einer Tabelle mit aggregierten Daten, Versionen von Tabellen mit einer Teilmenge der Zeilen oder eine Tabelle als Ergebnis einer komplexen Abfrage erstellen müssen. Lassen Sie uns einige Beispiele näher betrachten.

Erstellen Sie eine neue Tabelle mit dem Ergebnis einer Abfrage mithilfe von CREATE TABLE AS SELECT (CTAS)

Mit der Anweisung CREATE TABLE AS SELECT (CTAS) können Sie aus der Ausgabe einer SELECT-Anweisung eine neue Tabelle in Ihrem Warehouse erstellen. Sie führt den Erfassungsvorgang parallel in die neue Tabelle aus, wodurch die Datentransformation und die Erstellung neuer Tabellen in Ihrem Arbeitsbereich äußerst effizient erfolgt.

Hinweis

Für die Beispiele in diesem Artikel wird das Beispieldataset „Bing COVID-19“ verwendet. Führen Sie zum Laden des Beispieldatasets die Schritte unter Erfassen von Daten in Ihrem Warehouse mithilfe der COPY-Anweisung aus, um die Beispieldaten in Ihrem Warehouse zu erstellen.

Im ersten Beispiel wird veranschaulicht, wie eine neue Tabelle erstellt wird, die eine Kopie der vorhandenen dbo.[bing_covid-19_data_2023] Tabelle ist, aber nur nach Daten aus dem Jahr 2023 gefiltert wurde:

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

Sie können auch eine neue Tabelle mit den neuen Spalten year, month und dayofmonth erstellen, die aus der updated-Spalte der Quelltabelle abgerufene Werte enthält. Das kann hilfreich sein, wenn Sie versuchen, Infektionsdaten nach Jahr zu visualisieren oder herauszufinden, in welchen Monaten die meisten COVID-19-Fälle beobachtet wurden:

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];

Weiteres Beispiel: Sie können eine neue Tabelle erstellen, in der die Anzahl der in jedem Monat beobachteten Fälle unabhängig vom Jahr zusammengefasst wird, um zu bewerten, wie sich die Saisonalität auf die Ausbreitung in einem bestimmten Land oder einer bestimmten Region auswirken kann. Hierfür wird die im vorherigen Beispiel erstellte Tabelle mit der neuen month-Spalte als Quelle verwendet:

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];

Anhand dieser neuen Tabelle können wir sehen, dass in den USA in allen Jahren die meisten bestätigten Fälle im Monat January beobachtet wurden, gefolgt von December und October. April ist der Monat mit den insgesamt niedrigsten Fallzahlen:

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

Screenshot: Abfrageergebnisse mit den absteigenden Infektionszahlen nach Monat in den USA, nach Monat sortiert. Der Monat mit der Nummer 1 steht ganz oben.

Weitere Beispiele und Syntaxreferenzen finden Sie unter CREATE TABLE AS SELECT (Transact-SQL).

Erfassen Sie Daten in vorhandenen Tabellen mit T-SQL-Abfragen

In den vorherigen Beispielen werden neue Tabellen basierend auf dem Ergebnis einer Abfrage erstellt. Um die Beispiele in vorhandenen Tabellen zu replizieren, kann das Muster INSERT...SELECT verwendet werden. Der folgende Code erfasst beispielsweise neue Daten in einer vorhandenen Tabelle:

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

Die Abfragekriterien für die SELECT-Anweisung können eine beliebige gültige Abfrage sein, sofern die resultierenden Abfragespaltentypen mit den Spalten in der Zieltabelle übereinstimmen. Wenn Spaltennamen angegeben sind und nur eine Teilmenge der Spalten aus der Zieltabelle enthalten ist, werden alle anderen Spalten als NULL geladen. Weitere Informationen finden Sie unter Verwenden von INSERT INTO…SELECT für den Massenimport von Daten mit minimaler Protokollierung und Parallelität.

Erfassen Sie Daten aus Tabellen in verschiedenen Warehouses und Lakehouses

Sowohl für CREATE TABLE AS SELECT als auch für INSERT... SELECT kann die SELECT-Anweisung auch auf Tabellen in Warehouses verweisen, die sich von dem Warehouse unterscheiden, in dem Ihre Zieltabelle gespeichert ist, wenn Sie warehouseübergreifende Abfragen verwenden. Das kann mithilfe der dreiteiligen Namenskonvention [warehouse_or_lakehouse_name.][schema_name.]table_name erreicht werden. Gehen wir beispielsweise von den folgenden Arbeitsbereichressourcen aus:

  • Ein Lakehouse namens cases_lakehouse mit den neuesten Falldaten
  • Ein Warehouse namens reference_warehouse mit Tabellen für Verweisdaten
  • Ein Warehouse namens research_warehouse mit der Zieltabelle

Eine neue Tabelle kann erstellt werden, die die dreiteilige Namenskonvention verwendet, um Daten aus Tabellen in diesen Arbeitsbereichsressourcen zu kombinieren:

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];

Weitere Informationen zu warehouseübergreifenden Abfragen finden Sie unter Schreiben einer datenbankübergreifenden SQL-Abfrage.