【发布时间】:2018-02-06 12:01:47
【问题描述】:
在 u-sql 脚本中,我必须从文件中提取变量到数据集,然后使用它来形成输出文件的名称。如何从数据集中获取变量?
详细说明。
我有 2 个输入文件:带有一组字段的 csv 文件和一个字典文件。第一个文件的文件名类似于 ****ClintCode*****.csv。第二个文件字典有 2 个映射字段:ClientCode - ClintCode2。我的任务是从文件名中提取 ClientCode 值,从字典中获取 ClientCode2,将其作为字段插入到输出文件(已实现),此外,将输出文件的名称形成为 ****ClientCode2****。 .csv。
字典 csv 文件有以下内容:
旧代码新代码
6HAA 阿尔法
CCVV 测试版
CVXX 伽玛
?戴维斯
问题是如何将ClientCode2变成标量变量来为输出文件写表达式?
DECLARE @inputFile string = "D:/DFS_SSC_Automation/Tasks/FundInfo/ESP_FAD_GL_6HAA_20170930.txt"; // '6HAA' is ClientCode here that mapped to other code in ClientCode_KVP.csv
DECLARE @outputFile string = "D:/DFS_SSC_Automation/Tasks/FundInfo/ClientCode_sftp_" + // 'ClientCode' should be replaced with ClientCode from mapping in ClientCode_KVP.csv
DateTime.Now.ToString("yyyymmdd") + "_" +
DateTime.Now.ToString("HHmmss") + ".csv";
DECLARE @dictionaryFile string = "D:/DFS_SSC_Automation/ClientCode_KVP.csv";
@dict =
EXTRACT [OldCode] string,
[NewCode] string
FROM @dictionaryFile
USING Extractors.Text(skipFirstNRows : 1, delimiter : ',');
@theCode =
SELECT Path.GetFileNameWithoutExtension(@inputFile).IndexOf([OldCode]) >= 0 ? 1 : 3 AS [CodeExists],
[NewCode]
FROM @dict
UNION
SELECT *
FROM(
VALUES
(
2,
""
)) AS t([CodeExists],[NewCode]);
@code =
SELECT [NewCode]
FROM @theCode
ORDER BY [CodeExists]
FETCH 1 ROWS;
@GLdata =
EXTRACT [ASAT] string,
[ASOF] string,
[BASIS_INDICATOR] string,
[CALENDAR_DATE] string,
[CR_EOP_AMOUNT] string,
[DR_EOP_AMOUNT] string,
[FUND_ID] string,
[GL_ACCT_TYPE_IND] string,
[TRANS_CLIENT_FUND_NUM] string
FROM @inputFile
USING Extractors.Text(delimiter : '|', skipFirstNRows : 1);
// Prepare output dataset
@FundInfoGL =
SELECT "" AS [AccountPeriodEnd],
"" AS [ClientCode],
[FUND_ID] AS [FundCode],
SUM(GL_ACCT_TYPE_IND == "A"? System.Convert.ToDecimal(DR_EOP_AMOUNT) : 0) AS [NetValueOtherAssets],
SUM(GL_ACCT_TYPE_IND == "L"? System.Convert.ToDecimal(CR_EOP_AMOUNT) : 0) AS [NetValueOtherLiabilities],
0.0000 AS [NetAssetsOfSeries]
FROM @GLdata
GROUP BY FUND_ID;
// NetAssetsOfSeries calculation
@FundInfoGLOut =
SELECT [AccountPeriodEnd],
[NewCode] AS [ClientCode],
[FundCode],
Convert.ToString([NetValueOtherAssets]) AS [NetValueOtherAssets],
Convert.ToString([NetValueOtherLiabilities]) AS [NetValueOtherLiabilities],
Convert.ToString([NetValueOtherAssets] - [NetValueOtherLiabilities]) AS [NetAssetsOfSeries]
FROM @FundInfoGL
CROSS JOIN @code;
// Output
OUTPUT @FundInfoGLOut
TO @outputFile
USING Outputters.Text(outputHeader : true, delimiter : '|', quoting : false);
【问题讨论】:
-
你尝试过什么吗?如果是,请发布该代码。
-
什么数据集?什么变量?什么输出文件?显示一些关于你正在尝试做什么的信息。这太模糊了。
-
嗨@OksanaMikolenko,您能否编辑问题而不是在 cmets 中发布详细信息?这使它具有更好的可读性。您是否也可以发布 u-sql 代码,以便我们查看您的尝试并帮助您解决问题?
标签: u-sql