U-SQL Inner Join创建了一个巨大的大写文件

时间:2017-04-09 16:52:03

标签: u-sql

全部 -

我在使用ADLA连接表并将它们加载到Azure SQL DW时遇到了一些问题。

我遇到了其中一个加载过程而不确定如何解决该问题。我有一些购买信息,当我从本地系统拉入ADLS时,会创建每个大约25 MB的输出文件,当我尝试将它们加入到ADLA作业中使用“INNER JOIN”时,它会长时间运行。在运行时我看到输出文件继续超过5 GB以上。我觉得这对于一个25 MB的文件来说太多了,并且不确定是否有任何错误(从VS运行时附加了屏幕截图以供参考)。

我所做的过程是 - 使用ADF 2-运行ADLA作业将数据从本地数据库加载到云ADLS存储,将ADLS文件拉入ADLA表并使用ROUND ROBIN选项进行分区以避免数据偏差问题3- ADLA job将在ADLS store 4 ADF管道中创建聚合文件,以将#3文件加载到Azure SQL DW中

任何指针或帮助都可能非常有用。

谢谢,Shabbir

这是代码(我删除了所有字段名称和客户端信息)。希望这会有所帮助。

DECLARE @dir = "/{date:yyyy}/{date:MM}/{date:dd}/<FILE PATH>/";
DECLARE @in_1 string = <FILE #1>;
DECLARE @in_2 string = <FILE #2>;
DECLARE @out string = <OUTPUT FILE>;

@file1 =
    EXTRACT 
        <25 COL. WITH ALL NULLABLE>
        date DateTime
    FROM @in_1
    USING Extractors.Text(delimiter : '|');

@file2 =
    EXTRACT 
        <40 COL. WITH ALL NULLABLE>
        date DateTime
    FROM @in_2
    USING Extractors.Text(delimiter : '|');

@output =
    SELECT 
        <25 + 40 COL. FROM INPUT FILES>
    FROM @file1 AS f1
        INNER JOIN @file2 AS f2
        ON f1.join1 == f2.join2;

OUTPUT @purchase
TO @out
USING Outputters.Text(delimiter : '|');

这将运行抛出ADF管道并使用外部参数作为日期和文件路径。

enter image description here

2 个答案:

答案 0 :(得分:0)

看起来您没有使用ADLA表,只是直接在U-SQL中处理文件。这很好,但我只是想检查,因为你提到了表格。此外,代码输出了脚本中不存在的@purchase - 我假设您实际上是在实际脚本中输出正确的行集。

几个问题:

  • 您是否检查过ADLS中输入文件的格式/内容?你有没有输出@ file1和@ file2来检查它们是否创造了你所期望的结果?
  • 您如何知道输出文件增长到5 GB?从工作图?你能附上吗?
  • 您是否正在使用“日期”列?
  • 您的加入列是一列,它是什么类型的?

答案 1 :(得分:0)

如果f1.join1 == f2.join2实际上正在比较(或多或少)唯一键与另一个(或多或少)唯一键,那么您应该获得合理的行数。

但很多人使用相同的语法实现CROSS JOIN。例如,f1.join1在整个表f1中可以是1,而f2.join2在整个表f2中也可以是1。这些数据值会使您的输出为两个表中的CROSS JOIN