【问题标题】:Writing .dsv file in dynamic folders in U-SQL script在 U-SQL 脚本的动态文件夹中写入 .dsv 文件
【发布时间】:2021-10-28 16:51:23
【问题描述】:

我是 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:表达式不能被常量折叠。

详情:

在标记 '"/test/"' 处,靠近 ###:

输出@结果 到 ### "/test/"+@Code+"/"+@Year+"/"+@Month+"/"+@File_Date+"/STAY_REVENUES.dsv" 使用 Outputters.Text(分隔符:'|',引用:false)

任何帮助将不胜感激。提前致谢。

【问题讨论】:

  • 您使用哪个服务来运行 U-SQL 脚本?
  • 我正在使用数据湖分析第一代

标签: c# .net azure azure-data-lake u-sql


【解决方案1】:

你得到的错误是因为 OUTPUT 语句。

U-SQL 的 OUTPUT 语句将指定的行集写入提供的文件路径 URI。 文件路径 URI 必须在 OUTPUT 表达式的 TO 子句中作为静态字符串表达式(可以常量折叠的表达式)提供。

试试这个:当您在 SELECT 语句中使用 @result 时,应该在 OUTPUT 语句中使用相同的 official page 中提到的语句。

OUTPUT @result
TO "test/"+@Code+"/"+@Year+"/"+@Month+"/"+@File_Date+"/File_Data.CSV"
USING Outputters.Csv(outputHeader: false, quoting: false);

【讨论】:

  • 我这里的代码可能有错字。我正在运行的脚本具有用于选择和输出表达式的数据集。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多