Data Fusion UTF-8 与 UTF-16 编码文件处理问题

问题描述 投票:0回答:1

在我的数据融合管道中, 我首先将 GCS 文件作为 blob 读取。 由于文件采用 UTF-16 编码,因此我在转换步骤中将字符集设置为 UTF-16。牧马人没有表明任何问题。

出于测试目的,我创建了一个具有各种格式错误的文件,并针对它运行了我的管道。整个输入将作为单行输出,而不是按预期单独处理每个发出的记录。没有写入正确的行(在我的例子中写入 BigQuery)。

当我手动将 Sublime Text 中的文件字符集更改为 UTF-8 并将 GCS 文件作为文本读取时,管道的行为符合预期,正确地将每一行视为错误输出中的单独记录,并将正确的行写入其目标。

我什至尝试添加另一个转换步骤,再次设置字符集和输出字节,但每次都会产生相同的结果 - 输出上没有正确的记录,所有错误都被视为 1。

这是否给任何人敲响了警钟?

Visualisation of the pipeline that goes not as expected

google-cloud-platform google-cloud-data-fusion
1个回答
0
投票

最好的方法之一是在数据到达数据融合之前对其进行预处理。这可以更好地控制数据质量,并避免 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 };
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.