Sql 删除Bigquery中的重复数据

Sql 删除Bigquery中的重复数据,sql,google-bigquery,Sql,Google Bigquery,我正在Bigquery中优化一个显示非重复数据的查询,目前它是这样的,可以正常工作 从选择中选择* 按id作为num的分区上的行数, 身份证件 创建于, 操作员id, 描述 从NAME_表 在>='2018-01-01'处创建,其中num=1 我想问的是,是否有可能以一种简单的方式对所有列进行分组,这是不可能的,因为clarated_at不可能对其进行分组,并且不可能保留为每个id显示的created_at的第一个数据 PD:DISTINCT不起作用,因为有超过8000万条记录,它们每天增加20

我正在Bigquery中优化一个显示非重复数据的查询,目前它是这样的,可以正常工作

从选择中选择* 按id作为num的分区上的行数, 身份证件 创建于, 操作员id, 描述 从NAME_表 在>='2018-01-01'处创建,其中num=1

我想问的是,是否有可能以一种简单的方式对所有列进行分组,这是不可能的,因为clarated_at不可能对其进行分组,并且不可能保留为每个id显示的created_at的第一个数据


PD:DISTINCT不起作用,因为有超过8000万条记录,它们每天增加200万条,并返回重复的数据

您的查询应该没问题。但您可以在不使用子查询的情况下执行此操作:

select array_agg(nt order by created_at desc limit 1)[ordinal(1)].*
from name_table nt
where created_at >='2018-01-01'
group by id

下面是BigQuery标准SQL

#standardSQL
SELECT AS VALUE ARRAY_AGG(t ORDER BY created_at LIMIT 1)[OFFSET(0)]
FROM `project.dataset.NAME_TABLE` t
WHERE created_at >='2018-01-01'
GROUP BY id
您可以指定所需的确切列表,而不是处理/返回所有列,如下面的示例所示

#standardSQL
SELECT AS VALUE ARRAY_AGG(STRUCT(id,created_at,operator_id,description) ORDER BY created_at LIMIT 1)[OFFSET(0)]
FROM `project.dataset.NAME_TABLE`
WHERE created_at >='2018-01-01'
GROUP BY id   

谢谢你的回答。我想我只试了一天,我会尝试所有的记录并再次检查。AS值在select中的作用是什么?老实说,我从来没有机会看到被记录的值,但我用了很长时间来平坦数组[OFFSET]的输出。也许现在它已经被记录在某个地方了——不确定你能看到它所处理的内容——只需从上面的查询中删除作为值的内容——它仍然可以工作,但它会将整个内容作为一个结构而不是单独的列来处理。如果它为你工作-考虑投票回答和接受它,查询花费三倍的时间和处理两倍的数据。我正在尝试优化我已经拥有的。我想我的问题拼错了。我不确定我是否明白你们的意思。你们问了一个相对简单明了的问题,你们找到了答案。你提到你实际上没有你的解决方案-那么你比较的是哪一个?我想我知道你的意思-检查我的答案在一分钟内更新我得到错误:点星不支持的类型ARRAY@francopina . . . 当然这是一个数组。我修正了答案。