You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在U-SQL中为文件夹下各文件添加列?遇E_CSC_USER_DATAPARTITIONEDOUTPUTNOTSUPPORTED错误

解决U-SQL的E_CSC_USER_DATAPARTITIONEDOUTPUTNOTSUPPORTED错误

错误原因分析

你碰到的E_CSC_USER_DATAPARTITIONEDOUTPUTNOTSUPPORTED错误,核心问题在于:当你从输入路径里提取了分区列(也就是代码里的filename和extension字段),又尝试直接把这些提取来的分区列用于输出分区时,U-SQL引擎目前不支持这种操作逻辑。引擎会把从输入路径解析出的字段标记为特殊的分区元数据,没法直接复用成输出分区的键。

解决方案

根据你的实际需求,分三种场景给出解决办法:

1. 不需要按原文件信息分区输出

如果你的目标只是把所有文件的数据合并输出,不需要按原filename/extension拆分文件,直接正常输出就行,完全避开分区输出逻辑:

@q = EXTRACT OrderID int, 
             OrderDate DateTime?, 
             CustomerName string, 
             PhoneNumber string, 
             DeliveryAddressLine1 string, 
             DeliveryAddressLine2 string, 
             CityName string, 
             StockItemID int?, 
             Quantity int?, 
             UnitPrice float?, 
             filename string, 
             extension string 
      FROM "/Orders/{filename}.{extension}" 
      USING Extractors.Tsv(skipFirstNRows:1);

-- 直接输出到单个文件(数据量大时引擎会自动拆分为多文件)
OUTPUT @q
TO "/Output/CombinedOrders.tsv"
USING Outputters.Tsv(quoting:false);

2. 需要按原文件信息分区输出

如果必须按原filename/extension拆分输出文件,你可以通过重命名分区列的方式,让引擎把这些列当成普通计算列,而非输入分区元数据:

@q = EXTRACT OrderID int, 
             OrderDate DateTime?, 
             CustomerName string, 
             PhoneNumber string, 
             DeliveryAddressLine1 string, 
             DeliveryAddressLine2 string, 
             CityName string, 
             StockItemID int?, 
             Quantity int?, 
             UnitPrice float?, 
             filename string, 
             extension string 
      FROM "/Orders/{filename}.{extension}" 
      USING Extractors.Tsv(skipFirstNRows:1);

-- 给原分区列起别名,转换为普通可操作列
@q_renamed =
    SELECT *,
           filename AS OriginalFileName,
           extension AS OriginalFileExtension
    FROM @q;

-- 使用别名作为输出分区键,绕开引擎限制
OUTPUT @q_renamed
TO "/Output/Orders/{OriginalFileName}.{OriginalFileExtension}"
USING Outputters.Tsv(skipFirstNRows:0);

这个方法的核心是避开引擎对输入分区列的特殊标记,让别名列成为普通的可用于分区的字段。

3. 替代方案:将原文件信息作为普通列写入

如果你的需求只是保留原文件的命名信息,而非拆分输出文件,也可以把filename和extension作为普通数据列写入输出,这样既满足需求又不会触发分区错误:

OUTPUT @q
TO "/Output/Orders_WithFileInfo.tsv"
USING Outputters.Tsv(skipFirstNRows:0);

输出的文件中会包含每一行数据对应的原文件名和扩展名。


内容的提问来源于stack exchange,提问作者NSS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:54:29