我是Dataflow的新手,所以如果我的问题很有趣,请原谅我,我正在读取一个csv文件,并且该文件具有重复的行,我正在读取此数据并写入大查询,但是我不想写重复的数据到我的BQ表中。
我已经考虑过一种方法,但是我不知道如何实现它,它涉及在架构中添加某种标记以将其标记为唯一,但是我不知道如何实现
Lists.newArrayList(
new TableFieldSchema()
.setName("person_id")
.setMode("NULLABLE").setType("STRING"),
new TableFieldSchema()
.setName("person_name")
.setMode("NULLABLE")
.setType("STRING") // Cant I add another unique property here?
)
不知道该方法是否有效,但是我所需要的只是过滤从
这样的转换中检索到的行PCollection<TableRow> peopleRows =
pipeline
.apply(
"Convert to BiqQuery Table Row",
ParDo.of(new FormatForBigquery())
// Next step to filter duplicates
答案 0 :(得分:2)
如果我们将读取CSV的输出视为PCollection,则可以通过将PCollection通过Distinct转换来消除重复项。此转换的目的是获取输入的PCollection并生成一个新的PCollection,它是没有重复的原始PCollection。作为Distinct预制转换的一部分,可以指定一个自己的函数,该函数将被调用以确定将两个PCollection对象分类为相等的对象,从而确定要删除的对象。
答案 1 :(得分:1)
您可以直接在bigquery中执行此操作,加载整个文件,然后使用目标表和源表运行以下查询。无需数据流。
_CFNonObjCEqual