我正在Data Fusion中开发一个管道,该管道必须从Google Cloud Storage读取JSON,转换一些字段(擦除或重命名其中一些字段(,然后将信息发送到BigQuery表中。
我在兰格尔做改造。我的问题是,有些列在输入JSON文档中没有值,并且我不能在输出模式中包括这些字段。我尝试过使用";保留列";指令失败。
此外,这些空列没有类型,尽管它是在导入输入文件时定义模式的json中定义的。
我应该如何处理空字段,以便它们出现在输出模式中?
感谢并问候
错误告诉您,您正试图将一个整数放入一个需要整数的列中。这是因为您试图使用空字符串作为映射文档中的类型。当您映射到输出模式中的非空字段时,它不会给您带来错误,这并不意味着没有错误。
从Wrangle导出时,当字段为空时,需要指定每个字段的类型。例如,假设我想清空一个类型为int64的字段。我会做以下事情。
# empty int64 fields for (i in 1:length(x)){for (j in 1:length(x[i])) {if (length(x[i][j])) {x[i][j] = ""}} x[i]}
注意:我在这里使用长度来表明它实际上只是一个长度的问题,长度基本上是x[I][j]=="用于空字段。
你需要小心地按照你想要的方式获得你的价值观。以Wrangle为例,看看我在博客文章中写的内容可能会有所帮助。
我已经解决了你的问题,看看你为什么不想使用";空的";作为您的列类型。
看起来您要做的是创建一个管道,其中有一个您可以看到的输入模式,然后将一些内容输出到一个包含更多列的新表。
但是,您似乎不想保留未使用的列的列名,因此您可能需要更改源架构中列的类型。
在Wrangle中,可以有两个映射——一个取空值,另一个不取空值。
空值的情况很容易。使用空字符串作为值。
对于想要创建一个字符串字段但字段值为"0"的情况&";,这非常简单——只需使用"作为值。
我发现了两种可能的解决方案,以防有人遇到同样的问题:
1.:我在输入文件中添加了一行,所有字段都已填充。通过这样做,所有字段的类型都在wrappe中,并在应用其余策略后填充到输出模式中。
2.:导出管道并编辑其JSON,将缺失的字段添加到争吵步骤的输出模式中
在任何情况下,我都觉得奇怪的是,有一个输入模式,其中每个字段的类型都定义为wrappe,其行为是这样的。我希望当我进一步了解这个工具时能找到答案。