如何过滤大型查询的重复TableRow数据以删除重复的行?

时间:2019-07-10 14:44:27

标签: google-bigquery apache-beam dataflow

我是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

2 个答案:

答案 0 :(得分:2)

如果我们将读取CSV的输出视为PCollection,则可以通过将PCollection通过Distinct转换来消除重复项。此转换的目的是获取输入的PCollection并生成一个新的PCollection,它是没有重复的原始PCollection。作为Distinct预制转换的一部分,可以指定一个自己的函数,该函数将被调用以确定将两个PCollection对象分类为相等的对象,从而确定要删除的对象。

答案 1 :(得分:1)

您可以直接在bigquery中执行此操作,加载整个文件,然后使用目标表和源表运行以下查询。无需数据流。

_CFNonObjCEqual