我正在尝试读取Excel文件,并且必须在Azure Datalake中写入一个csv文件。 当我尝试这样做时,它显示错误。
U-SQL脚本:
DECLARE @ExcelFile = @"/Output/demog_data_Merged_08022017.xlsx";
@result01 = EXTRACT Id string,
UNIQUE_ID long,
SOL_ID int,
EMAIL_ID string,
mobilenumber string,
CUST_OPN_DATE DateTime,
gender char,
age int,
CUR_CITY string,
CUR_COUNTRY string,
CUR_PIN string,
NRE_CNTRY string,
MARITAL_STATUS char,
FREZ_CODE char,
UNFREEZ_DATE DateTime,
LAST_FREZ_DATE DateTime,
DORMANCY_STATUS char,
AVAILABLE_AMOUNT double,
ACCOUNT_OPEN_DATE DateTime,
nullcol string,
Salaried_account_flag char,
ACCOUNT_TYPE string
FROM @ExcelFile
USING new oh22is.Analytics.Formats.ExcelExtractor("result01");
@result02 = SELECT * FROM @result01;
OUTPUT @result02 TO "/output/demog_for_report.csv"
USING Outputters.Csv();
错误:
{
"errorCode": "2703",
"message": "Error Id: E_CSC_USER_INVALIDCSHARP, Error Message: C# error CS0246: The type or namespace name 'oh22is' could not be found (are you missing a using directive or an assembly reference?). ",
"failureType": "UserError",
"target": "U-SQL1"
}
答案 0 :(得分:0)
如果没有程序集引用,则无法读取Excel文件。您需要在数据湖目录中包含文件DocumentFormat.OpenXml.dll
和oh22is.Analytics.Formats.dll
,以及excel文件(不一定在同一文件夹中)。
程序集引用拥有文件读取逻辑,并充当u-sql内部数据表示形式与文件格式之间的网关,从而产生可以处理的数据。
据我所知,这些文件没有单独分发,Microsoft似乎要求您使用from source和this repository在Visual Studio中手动进行编译。使用VS的好处是,您可以直接引用程序集以加快开发速度(但是我发现它没有意义,因为我仅将其用于excel提取,并且只需要生成一次文件)。编译过程还应该为您提供documentformat.openxml
package中的动态链接库,这样您就不必下载它或从.nupkg
文件中提取它了,如果您确实更喜欢使用/lib/net40/DocumentFormat.OpenXml.dll
上的版本,该版本适用于我的xlsx文件(2007-2019格式)。
将程序集文件(两个.dll
文件)放入数据湖后,记下它们的路径,并像以下u-sql脚本一样使用它们:
// Register the dependency to the analytics assembly (xml file reader)
DROP ASSEMBLY IF EXISTS openxml;
CREATE ASSEMBLY openxml FROM @"/MyProject/Assemblies/DocumentFormat.OpenXml.dll";
REFERENCE ASSEMBLY openxml;
// Register the analytics assembly that read our excel file
DROP ASSEMBLY IF EXISTS analytics;
CREATE ASSEMBLY analytics FROM @"/MyProject/Assemblies/oh22is.Analytics.Formats.dll";
REFERENCE ASSEMBLY analytics;
// Define a local variable for the excel file
DECLARE @ExcelFile = @"/MyProject/MyFolder/test-file.xlsx";
@sheet = EXTRACT
A string,
B string,
C string
FROM @ExcelFile
USING new oh22is.Analytics.Formats.ExcelExtractor("Sheet1");
//And you can save, transform, select it like you would use any other data:
OUTPUT (SELECT * FROM @sheet) TO "/MyProject/output.csv" USING Outputters.Csv();