我是U-SQL的新手,我试图从一个文件夹中读取多个。dsv文件,并将输出写入动态文件夹/子文件夹中的。dsv文件。到目前为止,我已经成功地读取了多个。dsv文件,并且能够在单个位置(预定义位置)写入文件,但无法将。dsv文件写入多个文件夹/子文件夹。根据文件名定义文件夹和子文件夹。举个例子,如果文件名为ABC_20200421@015814.dsv,它应该从.dsv文件中读取数据,并将其写入文件夹系统:test/ABC/2020/04/21/File_Data.dsv
到目前为止,我的代码是:DECLARE @ImportFile string = "*.dsv"; -- To read all the .dsv files and move them to folder locations
DECLARE @Code String = @ImportFile.Substring(0, 3);
DECLARE @CommanName String = @ImportFile.Substring(4, 14); File_Contents
DECLARE @Year String = @ImportFile.Substring(18, 4);
DECLARE @Month String = @ImportFile.Substring(22, 2);
DECLARE @File_Date String = @ImportFile.Substring(24, 2);
@result=
SELECT col1,col2,col3
FROM Table1
//Writing to dsv file:
OUTPUT @result
TO "test/"+@Code+"/"+@Year+"/"+@Month+"/"+@File_Date+"/File_Data.dsv"
USING Outputters.Text(delimiter : '|', quoting: false);
在运行代码时,我得到一个错误:
E_CSC_USER_EXPRESSIONNOTCONSTANTFOLDABLE:表达式不能被常量折叠。
细节:
在令牌"/测试/",在# # #:
@result输出# # #"/测试/"+ @Code +"/"+ @Year +"/"+ @Month +"/"+ @File_Date +"/STAY_REVENUES.dsv"使用输出。文本(分隔符:'|',引号:false)
任何帮助都会很感激。提前谢谢。
您得到的错误是由于OUTPUT语句。
U-SQL的OUTPUT语句将指定的行集写入提供的文件路径URI。文件路径URI必须在OUTPUT
表达式的TO
子句中作为静态字符串表达式(可以常量折叠的表达式)提供。
试试这个:当你在SELECT语句中使用@result
时,同样应该在OUTPUT
语句中使用,如本官方页面所述。
OUTPUT @result
TO "test/"+@Code+"/"+@Year+"/"+@Month+"/"+@File_Date+"/File_Data.CSV"
USING Outputters.Csv(outputHeader: false, quoting: false);