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 einer neuen Tabelle mit dem Ergebnis einer Abfrage

Warehouse in Microsoft Fabric ermöglicht Ihnen das einfache Erstellen einer neuen Tabelle basierend auf einem Ergebnis einer T-SQL-Abfrage mithilfe der folgenden T-SQL-Anweisungen:

  • CREATE TABLE AS SELECT (CTAS)-Anweisung, mit der Sie aus der Ausgabe einer SELECT Anweisung eine neue Tabelle in Ihrem Lager erstellen können.
  • SELECT INTO Abfrageklausel, mit der Sie Ergebnisse aus einer beliebigen Tabellenquelle auswählen und die Ergebnisse in eine neue Tabelle umleiten können. Dies ist ein Standardfeature in der T-SQL-Sprache.

Diese beiden Anweisungen sind ähnlich, daher konzentrieren sich die folgenden Beispiele auf die CTAS-Anweisung.

Die CTAS-Anweisung führt den Aufnahmevorgang parallel in die neue Tabelle aus, wodurch sie für die Datentransformation und das Erstellen neuer Tabellen in Ihrem Arbeitsbereich sehr effizient ist.

Sie können die folgenden Optionen für den SELECT Abschnitt der CTAS-Anweisung verwenden:

  • Lesen einer Lagertabelle, z. B. einer Stagingtabelle.
  • Lesen eines Lakehouse Delta Lake-Ordners mithilfe einer automatisch generierten Tabelle im SQL-Analyseendpunkt für Lakehouse.
  • Lesen von CSV-, Parquet- oder JSONL-Dateien direkt aus Azure Data Lake oder Azure Blob Storage mithilfe der OPENROWSET Funktion.

Um einen Beispieldatensatz zu laden, folgen Sie den Schritten unter Daten mithilfe der COPY-Anweisung in Ihr Warehouse laden, um die Beispieldaten in Ihr Warehouse zu laden.

Tabelle aus Lagertabelle erstellen

Das erste Beispiel zeigt, wie Sie eine neue Tabelle erstellen, die eine Kopie der vorhandenen dbo.TaxiTrips Tabelle ist, aber gefiltert, um nur Daten aus dem Jahr 2023 einzuschließen:

CREATE TABLE dbo.TaxiTrips_2023
AS
SELECT * 
FROM dbo.TaxiTrips 
WHERE DATEPART(YEAR, tpep_pickup_datetime) = '2023';

Tabelle aus dem Ordner "Delta Lake" erstellen

Die In OneLake gespeicherten Delta Lake-Ordner werden automatisch als Tabellen dargestellt, wenn sie in einem Seehaus im Ordner "/Tables " gespeichert sind. Der folgende Code erstellt eine neue Tabelle TaxiTrips_2023 aus dem Ordner /Tables/TaxiTrips "Delta Lake" im MyLakehouse Lakehouse :

CREATE TABLE dbo.TaxiTrips_2023
AS
SELECT * 
FROM MyLakehouse.dbo.TaxiTrips 
WHERE DATEPART(YEAR, tpep_pickup_datetime) = '2023';

Sie können auf den Ordner Delta Lake verweisen, indem Sie die dreiteilige Schreibweise verwenden, die auf das Seehaus verweist, in dem die Dateien gespeichert sind. Alle Beispiele im vorherigen Abschnitt gelten für Delta Lake-Ordner.

Erstellen einer Tabelle aus der CSV-/Parkett-/JSONL-Datei

Mithilfe der OPENROWSET Funktion können Sie auch eine neue Tabelle direkt aus einer externen Datei erstellen. Im folgenden T-SQL-Beispiel werden Platzhalter verwendet, um zu zeigen, wie Sie eine öffentliche Parquet-Datei importieren können.

CREATE TABLE dbo.<table_name>
AS
SELECT *
FROM OPENROWSET(BULK 'https://<storage account>.blob.core.windows.net/public/<subfolder>/<file name>.parquet') AS data;

Sie können eine neue Tabelle erstellen, indem Sie Daten aus einer externen, öffentlich verfügbaren CSV-Datei transformieren:

CREATE TABLE dbo.<table name>
AS
SELECT *
FROM OPENROWSET(BULK 'https://<storage account>.blob.core.windows.net/public/<subfolder>/<file name>.csv') AS data;

Sie können auch eine neue Tabelle erstellen, indem Sie Daten aus einer externen, öffentlich verfügbaren JSONL-Datei transformieren:

CREATE TABLE dbo.<table name>
AS
SELECT *
FROM OPENROWSET(BULK 'https://<storage account>.blob.core.windows.net/public/<subfolder>/<file name>.jsonl') AS data;

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, aber in vorhandenen Tabellen zu replizieren, kann das INSERT ... SELECT Muster verwendet werden.

Importieren von Daten aus der Lager-Tabelle

Mit dem folgenden Code werden neue Daten aus einer Lagertabelle in eine vorhandene Tabelle aufgenommen:

INSERT INTO dbo.TaxiTrips_2023
SELECT *
FROM dbo.TaxiTrips
WHERE DATEPART(YEAR, tpep_pickup_datetime) = '2023';

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.

Daten aus dem Ordner "Delta Lake" einlesen

Die in OneLake gespeicherten Delta Lake-Ordner werden automatisch als Tabellen dargestellt, wenn sie in einem /Tables-Ordner in einem Lakehouse gespeichert sind.

Der folgende Code liest neue Daten aus dem Abschnitt /Tables/TaxiTrips des Delta Lake-Ordners im MyLakehouse* Lakehouse ein.

INSERT INTO dbo.TaxiTrips_2023
SELECT *
FROM MyLakehouse.dbo.TaxiTrips 
WHERE DATEPART(YEAR, tpep_pickup_datetime) = '2023';

Importieren von Daten aus einer CSV-/Parquet-/JSONL-Datei

Sie können die OPENROWSET Funktion als Quelle verwenden, um Parquet-, CSV- oder JSON-Dateien aus dem Speicher zu laden:

INSERT INTO dbo.<table name>
SELECT *
FROM OPENROWSET(BULK 'https://<storage account>.blob.core.windows.net/public/<subfolder>/<file name>') AS data
WHERE DATEPART(YEAR, tpep_pickup_datetime) = '2023';

Sie können mehrere Dateien mithilfe von Wildcards wie *.parquet lesen oder partitionierte Verzeichnisse wie /year=*/month=* gezielt ansprechen. Um die Leistung zu optimieren, wenden Sie Filter in der WHERE-Klausel an, um unnötige Zeilen und Partitionen während der Abfrageausführung zu beseitigen.

Dieses Beispiel ähnelt denjenigen, die bei der Aufnahme mit COPY INTO verwendet werden. Der BEFEHL "KOPIEREN IN" ist einfacher zu verwenden, insbesondere für einfache Laden von Quell-zu-Ziel-Daten. Wenn Sie Jedoch Quelldaten transformieren müssen (z. B. Konvertieren von Werten oder Verknüpfen mit anderen Tabellen), bietet Ihnen die INSERT ... SELECT Verwendung der Flexibilität, Transformationen während der Aufnahme durchzuführen.

Eingabe von Daten aus OneLake

Sie können die OPENROWSET Funktion als Quelle verwenden, um Daten aus Fabric OneLake-Speicher aufzunehmen. Ersetzen Sie {workspaceId} und {lakehouseId} durch die entsprechenden Arbeitsbereichs- und Lakehouse-GUIDs im folgenden Beispiel.

INSERT INTO dbo.TaxiTrips_2023
SELECT *
FROM OPENROWSET(BULK 'https://onelake.dfs.fabric.microsoft.com/{workspaceId}/{lakehouseId}/Files/year=*/month=*/*.parquet') AS data
WHERE data.filepath(1) = '2023'

Dieses Beispiel basiert auf dem vorherigen, das Daten aus Azure Data Lake Storage liest. Verwenden Sie diesen Ansatz, wenn Sie Quelldaten transformieren müssen, z. B. indem Sie Werte konvertieren, mit anderen Tabellen verknüpfen oder bestimmte Partitionen lesen. In solchen Fällen bietet die Verwendung INSERT ... SELECT die Flexibilität, Transformationen während der Datenaufnahme anzuwenden.

Erfassen Sie Daten aus Tabellen in verschiedenen Warehouses und Lakehouses

Sowohl CREATE TABLE AS SELECT als auch INSERT ... SELECT können in der SELECT-Anweisung auf Tabellen in anderen Lagerhäusern als demjenigen verweisen, in dem Ihre Zieltabelle gespeichert ist, indem lagerübergreifende Abfragen verwendet werden. Das kann mithilfe der dreiteiligen Namenskonvention [warehouse_or_lakehouse_name.][schema_name.]table_name erreicht werden. Nehmen wir zum Beispiel an, dass Sie die folgenden Arbeitsbereichsressourcen haben:

  • Ein Lakehouse namens taxi_lakehouse mit den neuesten Daten.
  • Ein Warehouse namens reference_warehouse mit Tabellen für Verweisdaten
  • Ein Warehouse namens research_warehouse, in dem die Zieltabelle erstellt wird.

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.taxi_trips
AS
SELECT *
FROM taxi_lakehouse.dbo.TaxiTrips AS latest
INNER JOIN reference_warehouse.dbo.TaxiTrips AS reference
ON latest.vendorId_lpep = reference.vendorId_lpep;

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

Prüfen und Überwachen der T-SQL-Erfassung

Sowohl CTAS als auch INSERT ... SELECT Vorgänge, die über T-SQL ausgeführt werden, erscheinen im Lagerabfrageverlauf/-aktivität und können zusammen mit anderen Lagervorgängen überwacht werden.

Optionen für die Datenerfassung

Weitere Möglichkeiten zum Aufnehmen von Daten in Ihr Lager sind: