azure-data-lake - U-SQL 并行读取 SQL 表

标签 azure-data-lake u-sql

在我的场景中,我使用 U-SQL 将数据从 MS SQL DB 提取到 Azure Data Lake。我的表很大,有超过 1600 万条记录(很快就会更多)。我只是执行 SELECT a, b, c FROM dbo.myTable;

然而,我意识到只有一个顶点用于从表中读取数据。

enter image description here

我的问题是,在读取 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/

相关文章:

C#并行写入Azure Data Lake File

azure-storage - 看不到 ADLS Gen2 的 'Lifecycle management' 选项

unit-testing - U-SQL 过程的单元测试

unit-testing - 如何对 U-SQL 脚本进行单元测试?

azure - U-SQL 表与 SQL 数据仓库

u-sql - 组合空间数据的最佳方式

ADLS Gen2 资源的 Azure DevOps CI/CD 管道

r - 在 U-SQL 中执行 R

azure - Vertex 在 ADLA 中的准备时间过长

azure - 从哪里开始使用 Azure 数据工厂