Začínáme s katalogem U-SQL v Azure Data Lake Analytics
Vytvoření TVF
V předchozím skriptu U-SQL se pokusíte použít EXTRAKCi pro čtení ze stejného zdrojového souboru. Funkce vracející tabulku U-SQL (TVF) umožňuje zapouzdřit data pro budoucí opakované použití.
Následující skript vytvoří TVF s názvem Searchlog() ve výchozí databázi a schématu:
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;
Následující skript vám ukáže, jak používat TVF, které jste definovali v předchozím skriptu:
@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();
Vytváření zobrazení
Pokud máte jeden výraz dotazu místo TVF, můžete k zapouzdření tohoto výrazu použít zobrazení U-SQL.
Následující skript vytvoří zobrazení nazvané SearchlogView ve výchozí databázi a schématu:
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();
Následující skript demonstruje použití definovaného zobrazení:
@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();
Vytváření tabulek
Stejně jako u tabulek relačních databází můžete pomocí U-SQL vytvořit tabulku s předdefinovaným schématem nebo vytvořit tabulku, která bude toto schéma odvodit z dotazu, který tuto tabulku naplní (označovaný také jako CREATE TABLE jako SELECT nebo CTAS).
Pomocí následujícího skriptu vytvořte databázi a dvě tabulky:
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
Dotazy na tabulky
Můžete zadávat dotazy na tabulky, například ty, které byly vytvořeny v předchozím skriptu, stejně jako datové soubory. Místo vytvoření sady řádků pomocí EXTRAKCe teď můžete odkazovat na název tabulky.
Chcete-li číst z tabulek, upravte transformační skript, který jste použili dříve:
@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();
Poznámka
V současné době nemůžete spustit příkaz SELECT na tabulce ve stejném skriptu jako ten, ve kterém jste tabulku vytvořili.