在我的数据融合管道中, 我首先将 GCS 文件作为 blob 读取。 由于文件采用 UTF-16 编码,因此我在转换步骤中将字符集设置为 UTF-16。牧马人没有表明任何问题。
出于测试目的,我创建了一个具有各种格式错误的文件,并针对它运行了我的管道。整个输入将作为单行输出,而不是按预期单独处理每个发出的记录。没有写入正确的行(在我的例子中写入 BigQuery)。
当我手动将 Sublime Text 中的文件字符集更改为 UTF-8 并将 GCS 文件作为文本读取时,管道的行为符合预期,正确地将每一行视为错误输出中的单独记录,并将正确的行写入其目标。
我什至尝试添加另一个转换步骤,再次设置字符集和输出字节,但每次都会产生相同的结果 - 输出上没有正确的记录,所有错误都被视为 1。
这是否给任何人敲响了警钟?
最好的方法之一是在数据到达数据融合之前对其进行预处理。这可以更好地控制数据质量,并避免 Data Fusion 中自定义解析的复杂性,例如字符集转换,通过在上传到 GCS 之前将文件转换为
UTF-8
,您可以消除 Data Fusion 中的 UTF-16
解码问题。
您还可以尝试使用带有 JavaScript UDF 的 Wrangler 转换在 Data Fusion 中创建自定义解析器。该解析器需要处理
UTF-16
blob 的原始字节,仔细解码它,并实施错误处理来管理无效字符或格式问题。
function parseUTF16Blob(blob) {
try {
const decoder = new TextDecoder('utf-16');
const text = decoder.decode(blob);
return parsedRecords;
} catch (error) {
return { error: error.message, blob: blob };
}
}