Aan de slag met de U-SQL-catalogus in Azure Data Lake Analytics
Belangrijk
Azure Data Lake Analytics op 29 februari 2024 buiten gebruik gesteld. Meer informatie over deze aankondiging.
Voor gegevensanalyse kan uw organisatie gebruikmaken van Azure Synapse Analytics of Microsoft Fabric.
Een TVF maken
In het vorige U-SQL-script hebt u het gebruik van EXTRACT herhaald om uit hetzelfde bronbestand te lezen. Met de U-SQL-functie tabelwaarde (TVF) kunt u de gegevens inkapselen voor toekomstig hergebruik.
Met het volgende script maakt u een TVF met de naam Searchlog()
in de standaarddatabase en het standaardschema:
DROP FUNCTION IF EXISTS Searchlog;
CREATE FUNCTION Searchlog()
RETURNS @searchlog TABLE
(
UserId int,
Start DateTime,
Region string,
Query string,
Duration int?,
Urls string,
ClickedUrls string
)
AS BEGIN
@searchlog =
EXTRACT UserId int,
Start DateTime,
Region string,
Query string,
Duration int?,
Urls string,
ClickedUrls string
FROM "/Samples/Data/SearchLog.tsv"
USING Extractors.Tsv();
RETURN;
END;
In het volgende script ziet u hoe u de TVF gebruikt die in het vorige script is gedefinieerd:
@res =
SELECT
Region,
SUM(Duration) AS TotalDuration
FROM Searchlog() AS S
GROUP BY Region
HAVING SUM(Duration) > 200;
OUTPUT @res
TO "/output/SearchLog-use-tvf.csv"
ORDER BY TotalDuration DESC
USING Outputters.Csv();
Weergaven maken
Als u één query-expressie hebt, kunt u in plaats van een TVF een U-SQL VIEW gebruiken om die expressie in te kapselen.
Met het volgende script maakt u een weergave met de naam SearchlogView
in de standaarddatabase en het standaardschema:
DROP VIEW IF EXISTS SearchlogView;
CREATE VIEW SearchlogView AS
EXTRACT UserId int,
Start DateTime,
Region string,
Query string,
Duration int?,
Urls string,
ClickedUrls string
FROM "/Samples/Data/SearchLog.tsv"
USING Extractors.Tsv();
Het volgende script demonstreert het gebruik van de gedefinieerde weergave:
@res =
SELECT
Region,
SUM(Duration) AS TotalDuration
FROM SearchlogView
GROUP BY Region
HAVING SUM(Duration) > 200;
OUTPUT @res
TO "/output/Searchlog-use-view.csv"
ORDER BY TotalDuration DESC
USING Outputters.Csv();
Tabellen maken
Net als bij relationele databasetabellen kunt u met U-SQL een tabel maken met een vooraf gedefinieerd schema of een tabel maken die het schema afdekent uit de query waarmee de tabel wordt gevuld (ook wel CREATE TABLE AS SELECT of CTAS genoemd).
Maak een database en twee tabellen met behulp van het volgende script:
DROP DATABASE IF EXISTS SearchLogDb;
CREATE DATABASE SearchLogDb;
USE DATABASE SearchLogDb;
DROP TABLE IF EXISTS SearchLog1;
DROP TABLE IF EXISTS SearchLog2;
CREATE TABLE SearchLog1 (
UserId int,
Start DateTime,
Region string,
Query string,
Duration int?,
Urls string,
ClickedUrls string,
INDEX sl_idx CLUSTERED (UserId ASC)
DISTRIBUTED BY HASH (UserId)
);
INSERT INTO SearchLog1 SELECT * FROM master.dbo.Searchlog() AS s;
CREATE TABLE SearchLog2(
INDEX sl_idx CLUSTERED (UserId ASC)
DISTRIBUTED BY HASH (UserId)
) AS SELECT * FROM master.dbo.Searchlog() AS S; // You can use EXTRACT or SELECT here
Querytabellen
U kunt query's uitvoeren op tabellen, zoals de tabellen die in het vorige script zijn gemaakt, op dezelfde manier als waarop u een query uitvoert op de gegevensbestanden. In plaats van een rijenset te maken met behulp van EXTRACT, kunt u nu verwijzen naar de tabelnaam.
Als u uit de tabellen wilt lezen, wijzigt u het transformatiescript dat u eerder hebt gebruikt:
@rs1 =
SELECT
Region,
SUM(Duration) AS TotalDuration
FROM SearchLogDb.dbo.SearchLog2
GROUP BY Region;
@res =
SELECT *
FROM @rs1
ORDER BY TotalDuration DESC
FETCH 5 ROWS;
OUTPUT @res
TO "/output/Searchlog-query-table.csv"
ORDER BY TotalDuration DESC
USING Outputters.Csv();
Notitie
Op dit moment kunt u een SELECT niet uitvoeren op een tabel in hetzelfde script als het script waarin u de tabel hebt gemaakt.