在我的场景中,我使用 U-SQL 将数据从 MS SQL DB 提取到 Azure Data Lake。我的表很大,有超过 1600 万条记录(很快就会更多)。我只是执行 SELECT a, b, c FROM dbo.myTable;
然而,我意识到只有一个顶点用于从表中读取数据。
我的问题是,在读取 SQL 表时是否有任何方法可以利用并行性?
最佳答案
我认为 U-SQL 尚不支持外部数据源的并行性(尽管很高兴得到更正)。如果您觉得这是一项重要的缺失功能,您可以在此处创建请求并为其投票:
https://feedback.azure.com/forums/327234-data-lake
作为解决方法,您可以根据数据源中可用的列手动并行化查询。例如按日期
// External query working
USE DATABASE yourADLADB;
// Create the external query for year 2016
@results2016 =
SELECT *
FROM EXTERNAL yourSQLDBDataSource EXECUTE
@"SELECT * FROM dbo.yourBigTable WITH (NOLOCK) WHERE yourDateCol Between '1 Jan 2016 and 31 Dec 2016'";
// Create the external query for year 2017
@results2017 =
SELECT *
FROM EXTERNAL yourSQLDBDataSource EXECUTE
@"SELECT * FROM dbo.yourBigTable WITH (NOLOCK) WHERE yourDateCol Between '1 Jan 2017 and 31 Dec 2017";
// Output 2016 results
OUTPUT @results2016
TO "/output/bigTable/results2016.csv"
USING Outputters.Csv();
// Output 2017 results
OUTPUT @results2017
TO "/output/bigTable/results2017.csv"
USING Outputters.Csv();
现在,我通过将文件分成多个部分创建了一个不同的问题。但是,您可以使用也将并行化的文件集来读取这些内容,例如:
@input =
EXTRACT
... // your column list
FROM "/output/bigTable/results{year}.csv"
USING Extractors.Csv();
鉴于 ADLA 和 U-SQL 为您提供了在数据所在位置查询数据的能力,我想问您为什么选择将如此大的文件移动到您的数据湖中。你能进一步解释一下吗?
关于azure-data-lake - U-SQL 并行读取 SQL 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45794356/