我正在使用自定义IOutputter将我的U-SQL脚本的结果写入本地数据库:
OUTPUT @dataset
TO "/path/somefilename_{*}.file"
USING new CustomOutputter()
public class CustomOutputter: IOutputter
{
public CustomOutputter()
{
myCustomDatabase.Open("databasefile.database");
}
public override void Output(IRow input, IUnstructuredWriter output)
{
}
}
是否有可能用指定的输出文件路径“/path/somefilename_{*}.file”替换“databasefile.database”?
由于我无法将output.BaseStream
传递给数据库,因此无法找到正确写入正确文件名的方法。
更新我如何将本地数据库文件复制到ADLA提供的输出流:
public override void Close()
{
using (var fs = File.Open("databasefile.database", FileMode.Open))
{
byte[] buffer = new byte[65536];
int read;
while ((read = fs.Read(buffer, 0, buffer.Length)) > 0)
{
this.output.BaseStream.Write(buffer, 0, read);
this.output.BaseStream.Flush();
}
}
}
答案 0 :(得分:1)
我不确定你想要达到的目的。
输出器(以及一般的UDO)在ADLA中执行时不能保留其容器(VM)(此时本地执行没有此限制)。因此,连接到容器外部的数据库将被阻止,我不确定将数据写入瞬态VM /容器中的数据库有什么帮助。
UDO模型有一个明确定义的模型,可以通过将input
行(集)中的数据写入output
来写入存在于ADLS或WASB中的文件流。您可以写入本地文件,但在顶点完成执行后,这些文件将不再存在。
鉴于这些信息,请你改写一下吗?
根据澄清评论进行更新
您有两种方法可以从行集生成数据库: