Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Это важно
Azure Data Lake Analytics вышел из эксплуатации 29 февраля 2024 года. Дополнительные сведения см. в этом объявлении.
Для аналитики данных ваша организация может использовать Azure Synapse Analytics или Microsoft Fabric.
U-SQL — это язык, который объединяет декларативный SQL с императивным C# для обработки данных в любом масштабе. С помощью масштабируемого распределенного запроса U-SQL можно эффективно анализировать данные в реляционных хранилищах, таких как База данных SQL Azure. С помощью U-SQL можно обрабатывать неструктурированные данные, применяя схему на чтение, пользовательскую логику и определяемые пользователем функции. Кроме того, U-SQL включает расширяемость, которая дает возможность тонкого управления выполнением в масштабе.
Учебные ресурсы
- Руководство по U-SQL содержит пошаговое руководство по большинству языка U-SQL. Этот документ рекомендуется прочитать для всех разработчиков, желающих узнать U-SQL.
- Подробные сведения о синтаксисе языка U-SQL см. в справочнике по языку U-SQL.
- Чтобы понять философию проектирования U-SQL, ознакомьтесь с записью блога Visual Studio о вводе U-SQL — язык, который упрощает обработку больших данных.
Давайте создадим некоторые данные
Следующий скрипт U-SQL прост и позволяет создать пример файла данных, на который можно ссылаться в других сценариях U-SQL. Мы обсудим ключевые понятия, которые обеспечивают работу этого скрипта, в следующем разделе.
USE DATABASE master;
USE SCHEMA dbo;
@a =
SELECT * FROM
(VALUES
(399266, "2/15/2012 11:53:16 AM", "en-us", "microsoft", 73, "microsoft.com;xbox.com", "NULL"),
(382045, "2/15/2012 11:53:18 AM", "en-gb", "azure data lake analytics", 614, "microsoft.com;portal.azure.com", "portal.azure.com"),
(382045, "2/16/2012 11:53:20 AM", "en-gb", "usql", 74, "microsoft.com;github.com", "NULL"),
(106479, "2/16/2012 11:53:50 AM", "en-ca", "xbox", 24, "xbox.com;xbox.com/xbox360", "xbox.com/xbox360"),
(906441, "2/16/2012 11:54:01 AM", "en-us", "machine learning", 1213, "microsoft.com;github.com", "NULL"),
(304305, "2/16/2012 11:54:03 AM", "en-us", "outlook", 60, "microsoft.com;office.com;live.com","microsoft.com"),
(460748, "2/16/2012 11:54:04 AM", "en-us", "azure storage", 1270, "microsoft.com;portal.azure.com", "portal.azure.com"),
(354841, "2/16/2012 11:59:01 AM", "en-us", "azure", 610, "microsoft.com;portal.azure.com", "portal.azure.com"),
(354068, "2/16/2012 12:00:33 PM", "en-mx", "key vault", 422, "microsoft.com;portal.azure.com", "portal.azure.com"),
(347413, "2/16/2012 12:11:55 PM", "en-gr", "github", 305, "github.com", "NULL"),
(840614, "2/16/2012 12:13:56 PM", "en-us", "surface", 1220, "microsoft.com", "NULL"),
(656666, "2/16/2012 12:15:55 PM", "en-us", "visual studio", 691, "microsoft.com;code.visualstudio.com", "NULL"),
(951513, "2/16/2012 12:17:00 PM", "en-us", "power bi", 63, "microsoft.com;app.powerbi.com", "powerbi.com"),
(350350, "2/16/2012 12:18:17 PM", "en-us", "data factory", 30, "microsoft.com;portal.azure.com", "NULL"),
(641615, "2/16/2012 12:19:55 PM", "en-us", "event hubs", 119, "microsoft.com;portal.azure.com", "NULL")
) AS
D( UserId, Start, Region, Query, Duration, Urls, ClickedUrls );
OUTPUT @a
TO "Samples/Data/SearchLog.tsv"
USING Outputters.Tsv();
Чтение данных из файла
Теперь, когда у нас есть некоторые данные, давайте считываем его из созданного файла.
@searchlog =
EXTRACT UserId int,
Start DateTime,
Region string,
Query string,
Duration int?,
Urls string,
ClickedUrls string
FROM "/Samples/Data/SearchLog.tsv"
USING Extractors.Tsv();
OUTPUT @searchlog
TO "/output/SearchLog-first-u-sql.csv"
USING Outputters.Csv();
Этот скрипт не имеет никаких шагов преобразования. Он считывает из исходного файла, который называется SearchLog.tsv
, схематизирует его и записывает набор строк обратно в файл под названием SearchLog-first-u-sql.csv.
Обратите внимание на вопросительный знак рядом с типом данных в Duration
поле. Это означает, что Duration
поле может иметь значение NULL.
Основные понятия
-
Переменные набора строк: каждое выражение запроса, создающее набор строк, можно назначить переменной. U-SQL следует шаблону именования переменных T-SQL (
@searchlog
например, в скрипте). - Ключевое слово EXTRACT считывает данные из файла и определяет схему при чтении.
Extractors.Tsv
— это встроенный экстрактор U-SQL для файлов с разделителями табуляции. Вы можете разрабатывать пользовательские средства извлечения. -
Выходные данные записываются из набора строк в файл.
Outputters.Csv()
— это встроенный экспортёр U-SQL для создания файла с разделителями-запятыми. Вы можете разрабатывать пользовательские механизмы вывода.
Пути к файлу
Инструкции EXTRACT и OUTPUT используют пути к файлам. Пути к файлам могут быть абсолютными или относительными:
Следующий абсолютный путь к файлу относится к файлу в Data Lake Store с именем mystore
:
adl://mystore.azuredatalakestore.net/Samples/Data/SearchLog.tsv
Следующий путь к файлу начинается с "/"
. Он ссылается на файл в учетной записи Data Lake Store по умолчанию:
/output/SearchLog-first-u-sql.csv
Использование скалярных переменных
Скалярные переменные также можно использовать, чтобы упростить обслуживание скриптов. Предыдущий скрипт U-SQL также можно записать следующим образом:
DECLARE @in string = "/Samples/Data/SearchLog.tsv";
DECLARE @out string = "/output/SearchLog-scalar-variables.csv";
@searchlog =
EXTRACT UserId int,
Start DateTime,
Region string,
Query string,
Duration int?,
Urls string,
ClickedUrls string
FROM @in
USING Extractors.Tsv();
OUTPUT @searchlog
TO @out
USING Outputters.Csv();
Преобразование наборов строк
Используйте SELECT для преобразования наборов строк. Этот скрипт выберет столбцы "Пуск", "Регион" и "Длительность" и записывает эти строки в файл, если в регионе имеется значение "en-gb":
@searchlog =
EXTRACT UserId int,
Start DateTime,
Region string,
Query string,
Duration int?,
Urls string,
ClickedUrls string
FROM "/Samples/Data/SearchLog.tsv"
USING Extractors.Tsv();
@rs1 =
SELECT Start, Region, Duration
FROM @searchlog
WHERE Region == "en-gb";
OUTPUT @rs1
TO "/output/SearchLog-transform-rowsets.csv"
USING Outputters.Csv();
Предложение WHERE использует логическое выражение C#. Язык выражений C# можно использовать для выполнения собственных выражений и функций. Вы даже можете выполнить более сложную фильтрацию, сочетая их с логическими сочетаниями (AND) и дисъюнкциями (OR).
В следующем скрипте используется метод DateTime.Parse() и сочетание. столбцы Start, Region и Duration, где регион имеет значение "en-gb". Затем он проверяет значения столбца Duration между определенными датами и записывает эти значения в файл:
@searchlog =
EXTRACT UserId int,
Start DateTime,
Region string,
Query string,
Duration int?,
Urls string,
ClickedUrls string
FROM "/Samples/Data/SearchLog.tsv"
USING Extractors.Tsv();
@rs1 =
SELECT Start, Region, Duration
FROM @searchlog
WHERE Region == "en-gb";
@rs1 =
SELECT Start, Region, Duration
FROM @rs1
WHERE Start >= DateTime.Parse("2012/02/16") AND Start <= DateTime.Parse("2012/02/17");
OUTPUT @rs1
TO "/output/SearchLog-transform-datetime.csv"
USING Outputters.Csv();
Замечание
Второй запрос работает с результатом первого набора строк, который создает состав двух фильтров. Можно также повторно использовать имя переменной, а область действия имен определяется лексически.
Агрегированные наборы строк
U-SQL предоставляет знакомые инструкции ORDER BY, GROUP BY и операции агрегации.
Следующий запрос находит общую длительность для каждого региона, а затем отображает первые пять длительности в порядке.
Наборы строк U-SQL не сохраняют их порядок для следующего запроса. Таким образом, чтобы упорядочить выходные данные, необходимо добавить ORDER BY в инструкцию OUTPUT:
DECLARE @outpref string = "/output/Searchlog-aggregation";
DECLARE @out1 string = @outpref+"_agg.csv";
DECLARE @out2 string = @outpref+"_top5agg.csv";
@searchlog =
EXTRACT UserId int,
Start DateTime,
Region string,
Query string,
Duration int?,
Urls string,
ClickedUrls string
FROM "/Samples/Data/SearchLog.tsv"
USING Extractors.Tsv();
@rs1 =
SELECT
Region,
SUM(Duration) AS TotalDuration
FROM @searchlog
GROUP BY Region;
@res =
SELECT *
FROM @rs1
ORDER BY TotalDuration DESC
FETCH 5 ROWS;
OUTPUT @rs1
TO @out1
ORDER BY TotalDuration DESC
USING Outputters.Csv();
OUTPUT @res
TO @out2
ORDER BY TotalDuration DESC
USING Outputters.Csv();
Предложение U-SQL ORDER BY требует использования предложения FETCH в выражении SELECT.
Предложение U-SQL HAVING можно использовать для ограничения выходных данных группами, удовлетворяющими условию HAVING:
@searchlog =
EXTRACT UserId int,
Start DateTime,
Region string,
Query string,
Duration int?,
Urls string,
ClickedUrls string
FROM "/Samples/Data/SearchLog.tsv"
USING Extractors.Tsv();
@res =
SELECT
Region,
SUM(Duration) AS TotalDuration
FROM @searchlog
GROUP BY Region
HAVING SUM(Duration) > 200;
OUTPUT @res
TO "/output/Searchlog-having.csv"
ORDER BY TotalDuration DESC
USING Outputters.Csv();
Дополнительные сценарии агрегирования см. в справочной документации по U-SQL для агрегатных, аналитических и справочных функций.