Gegevens opnemen in uw warehouse met Behulp van Transact-SQL

Van toepassing op:✅ Warehouse in Microsoft Fabric

De Transact-SQL-taal biedt opties die u kunt gebruiken om gegevens op schaal te laden vanuit bestaande tabellen in uw lakehouse en magazijn in nieuwe tabellen in uw magazijn. Deze opties zijn handig als u nieuwe versies van een tabel wilt maken met geaggregeerde gegevens, versies van tabellen met een subset van de rijen of om een tabel te maken als gevolg van een complexe query. Laten we enkele voorbeelden bekijken.

Een nieuwe tabel maken met het resultaat van een query

Met Warehouse in Microsoft Fabric kunt u eenvoudig een nieuwe tabel maken op basis van een resultaat van T-SQL-query met behulp van de volgende T-SQL-instructies:

  • CREATE TABLE AS SELECT (CTAS)-instructie waarmee u een nieuwe tabel in uw magazijn kunt maken op basis van de uitvoer van een SELECT instructie.
  • SELECT INTO querycomponent waarmee u resultaten uit een tabelbron kunt selecteren en de resultaten omleidt naar een nieuwe tabel. Dit is een standaardfunctie in de T-SQL-taal.

Deze twee instructies zijn vergelijkbaar, dus de volgende voorbeelden zijn gericht op de CTAS-instructie.

De CTAS-instructie voert de opnamebewerking parallel uit in de nieuwe tabel, waardoor deze zeer efficiënt is voor gegevenstransformatie en het maken van nieuwe tabellen in uw werkruimte.

U kunt de volgende opties gebruiken voor het SELECT deel van de CTAS-statement:

  • Een magazijntabel lezen, zoals een faseringstabel.
  • Het lezen van een Lakehouse Delta Lake-directory met behulp van een automatisch gegenereerde tabel binnen het SQL Analytics-eindpunt voor Lakehouse.
  • CSV-, Parquet- of JSONL-bestanden rechtstreeks vanuit Azure Data Lake of Azure Blob Storage lezen met behulp van de OPENROWSET functie.

Als u een voorbeeldgegevensset wilt laden, volgt u de stappen in Gegevens in uw Warehouse laden met behulp van de COPY-instructie om de voorbeeldgegevens in uw Warehouse aan te maken.

Tabel maken vanuit magazijntabel

In het eerste voorbeeld ziet u hoe u een nieuwe tabel maakt die een kopie is van de bestaande dbo.TaxiTrips tabel, maar gefilterd om alleen gegevens uit het jaar 2023 op te nemen:

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

Tabel maken vanuit de map Delta Lake

De Delta Lake-mappen die in OneLake worden bewaard, worden automatisch weergegeven als tabellen als ze zijn opgeslagen in de map /Tables in een lakehouse. Met de volgende code wordt een nieuwe tabel TaxiTrips_2023 gemaakt op basis van de map /Tables/TaxiTrips Delta Lake in myLakehouse Lakehouse:

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

U kunt verwijzen naar de map Delta Lake met behulp van de driedelige naam notatie die verwijst naar het lakehouse waar de bestanden zijn opgeslagen. Alle voorbeelden die in de vorige sectie worden weergegeven, zijn van toepassing op Delta Lake-mappen.

Tabel maken vanuit CSV-/Parquet-/JSONL-bestand

U kunt ook rechtstreeks vanuit een extern bestand een nieuwe tabel maken met behulp van de OPENROWSET functie. In de volgende voorbeeld-T-SQL worden bijvoorbeeld tijdelijke aanduidingen gebruikt om te laten zien hoe u een openbaar Parquet-bestand kunt importeren.

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

U kunt een nieuwe tabel maken door gegevens te transformeren van een extern, openbaar beschikbaar CSV-bestand:

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

U kunt ook een nieuwe tabel maken door gegevens te transformeren van een extern, openbaar beschikbaar JSONL-bestand:

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

Gegevens opnemen in bestaande tabellen met T-SQL-query's

In de vorige voorbeelden worden nieuwe tabellen gemaakt op basis van het resultaat van een query. Als u de voorbeelden wilt repliceren, maar in bestaande tabellen, kan het INSERT ... SELECT patroon worden gebruikt.

Gegevens opnemen uit de magazijntabel

Met de volgende code worden nieuwe gegevens uit een magazijntabel opgenomen in een bestaande tabel:

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

De querycriteria voor de SELECT instructie kunnen elke geldige query zijn, zolang de resulterende querykolomtypen overeenkomen met de kolommen in de doeltabel. Als kolomnamen zijn opgegeven en alleen een subset van de kolommen uit de doeltabel bevatten, worden alle andere kolommen geladen als NULL. Voor meer informatie, zie Gebruik van INSERT INTO...SELECT om gegevens bulkgewijs te importeren met minimale logboekregistratie en parallelisme.

Gegevens opnemen uit de map Delta Lake

De Delta Lake-mappen die in OneLake worden bewaard, worden automatisch weergegeven als tabellen als ze zijn opgeslagen in /Tables een map in een lakehouse.

Met de volgende code worden nieuwe gegevens opgenomen uit de sectie /Tables/TaxiTrips van de Delta Lake-map in het lakehouse MyLakehouse*.

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

Gegevens opnemen uit CSV-/Parquet-/JSONL-bestand

U kunt de OPENROWSET functie als bron gebruiken om Parquet-, CSV- of JSON-bestanden op te nemen uit de opslag:

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

U kunt meerdere bestanden lezen met wildcards zoals *.parquet, of door zich te richten op gepartitioneerde mappen zoals /year=*/month=*. Als u de prestaties wilt optimaliseren, past u filters toe in de WHERE-component om onnodige rijen en partities te elimineren tijdens het uitvoeren van query's.

Deze voorbeelden zijn vergelijkbaar met die gebruikt in opname met COPY INTO. De opdracht COPY INTO is eenvoudiger te gebruiken, met name voor eenvoudige bron-naar-doelgegevensbelastingen. Als u echter brongegevens wilt transformeren (zoals het converteren van waarden of het samenvoegen met andere tabellen), geeft INSERT ... SELECT u de flexibiliteit om transformaties uit te voeren tijdens de invoer.

Gegevens opnemen uit OneLake

U kunt de OPENROWSET functie als bron gebruiken om gegevens op te nemen uit Fabric OneLake-opslag. Vervang {workspaceId} en {lakehouseId} door de bijbehorende werkruimte- en lakehouse-GUID's in het volgende voorbeeld:

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'

Dit voorbeeld is gebaseerd op het vorige voorbeeld dat gegevens leest uit Azure Data Lake Storage. Gebruik deze methode wanneer u brongegevens wilt transformeren, bijvoorbeeld door waarden te converteren, door samen te voegen met andere tabellen of door specifieke partities te lezen. In dergelijke gevallen biedt het gebruik INSERT ... SELECT van de flexibiliteit om transformaties toe te passen tijdens gegevensopname.

Gegevens opnemen uit tabellen in verschillende magazijnen en lakehouses

Voor beide CREATE TABLE AS SELECT en INSERT ... SELECTkan de SELECT instructie ook verwijzen naar tabellen in magazijnen die verschillen van het magazijn waar uw doeltabel wordt opgeslagen, met behulp van query's voor meerdere magazijnen. Dit kan worden bereikt met behulp van de driedelige naamconventie [warehouse_or_lakehouse_name.][schema_name.]table_name. Stel dat u de volgende werkruimte-elementen hebt:

  • Een lakehouse genaamd taxi_lakehouse met de meest recente gegevens.
  • Een magazijn genaamd reference_warehouse met tabellen die worden gebruikt voor referentiegegevens.
  • Een magazijn met de naam research_warehouse waar de doeltabel wordt aangemaakt.

Er kan een nieuwe tabel worden gemaakt die gebruikmaakt van driedelige naamgeving om gegevens uit tabellen op deze werkruimteassets te combineren:

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;

Voor meer informatie over query's over magazijnen heen, zie Een database-overschrijdende SQL-query schrijven.

T-SQL-opname controleren en bewaken

Zowel CTAS als INSERT ... SELECT bewerkingen die via T-SQL worden uitgevoerd, worden weergegeven in de querygeschiedenis en -activiteit van het magazijn en kunnen naast andere magazijnbewerkingen worden bewaakt.

Opties voor gegevensopname

Andere manieren om gegevens op te nemen in uw magazijn zijn: