如何过滤 bigquery 的重复表行数据以删除重复行?
How can I filter duplicate TableRow data for big query to remove duplicate rows?
我是数据流的新手,如果我的问题很有趣,请原谅我,我有一个正在读取的 csv 文件,它有重复的行,我正在读取这些数据并写入大查询,但是我不想将重复数据写入我的 BQ table。
我想到了一种方法,但我不知道如何实现它,它涉及向模式添加某种标志以将其标记为唯一,但我不知道如何实现
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
如果我们将您读取 CSV 的输出视为 PCollection,那么我们可以通过 Distinct 转换传递 PCollection 来消除重复项。此转换的目的是采用输入 PCollection 并生成一个新的 PCollection,它是没有重复项的原始 PCollection。作为 Distinct pre-made 转换的一部分,有机会指定自己的函数,该函数将被调用以确定什么将两个 PCollection 对象分类为相等,从而确定要删除哪些对象。
您可以直接在 bigquery 中执行此操作,加载整个文件和 运行 如下查询,目标 table 源 table。不需要数据流。
WITH cte as (
SELECT
ROW_NUMBER() over (PARTITION BY column1,column2,column3,...) as idx,
*
FROM my_table
)
SELECT
*
FROM cte
WHERE idx = 1
我是数据流的新手,如果我的问题很有趣,请原谅我,我有一个正在读取的 csv 文件,它有重复的行,我正在读取这些数据并写入大查询,但是我不想将重复数据写入我的 BQ table。
我想到了一种方法,但我不知道如何实现它,它涉及向模式添加某种标志以将其标记为唯一,但我不知道如何实现
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
如果我们将您读取 CSV 的输出视为 PCollection,那么我们可以通过 Distinct 转换传递 PCollection 来消除重复项。此转换的目的是采用输入 PCollection 并生成一个新的 PCollection,它是没有重复项的原始 PCollection。作为 Distinct pre-made 转换的一部分,有机会指定自己的函数,该函数将被调用以确定什么将两个 PCollection 对象分类为相等,从而确定要删除哪些对象。
您可以直接在 bigquery 中执行此操作,加载整个文件和 运行 如下查询,目标 table 源 table。不需要数据流。
WITH cte as (
SELECT
ROW_NUMBER() over (PARTITION BY column1,column2,column3,...) as idx,
*
FROM my_table
)
SELECT
*
FROM cte
WHERE idx = 1