在大查询和python中,如何使用关键字limit获取数据时不重复的行

在大查询和python中,如何使用关键字limit获取数据时不重复的行,python,google-bigquery,google-cloud-datalab,Python,Google Bigquery,Google Cloud Datalab,我有数百万行,日志作为唯一id。 处理数据并保存到另一个表 我正在做这样的事情 action = """select ID_log, ID_send_message, ID_send, ID_message, ID_recipient,email, action, action_date from `internal.actions` where ID_log > {} limit 10000""".format(Id_log_n

我有数百万行,日志作为唯一id。 处理数据并保存到另一个表 我正在做这样的事情

action = """select ID_log, ID_send_message, ID_send, ID_message, ID_recipient,email, action, action_date from `internal.actions` where ID_log > {} limit 10000""".format(Id_log_number)
actions_full = pandas_gbq.read_gbq(action, project_id='mt-int') 
处理完数据后,我会将其保存在单独的表中
ID日志将是生成的表操作日志的最后一个ID日志。现在,在多次运行上述代码后,我一次又一次地得到相同的行集。是否有一种方法可以获取特定模式下的行,这样我就不会获得相同的数据集。我使用time.sleep来避免从缓存中提取数据。

您得到的是相同的数据,因为您的
WHERE
语句找到了与条件匹配的第一行,然后您使用了
LIMIT
,它将结果限制在前10000行,无论您还有多少行。尝试删除
限制10000
,每次更新表时都会得到不同的结果

若要从数据库中获取最后n行,只需将结果按降序排序,然后应用限制以仅获取所需数量的结果,如:

action = "SELECT ID_log, ID_send_message, ID_send, ID_message, ID_recipient,email, action, action_date FROM `internal.actions` WHERE ID_log > {} ORDER BY ID_log DESC LIMIT 10000".format(Id_log_number)

由于
WHERE
语句找到与条件匹配的第一行,然后使用
LIMIT
将结果限制在前10000行,而不管还有多少行。尝试删除
限制10000
,每次更新表时都会得到不同的结果

若要从数据库中获取最后n行,只需将结果按降序排序,然后应用限制以仅获取所需数量的结果,如:

action = "SELECT ID_log, ID_send_message, ID_send, ID_message, ID_recipient,email, action, action_date FROM `internal.actions` WHERE ID_log > {} ORDER BY ID_log DESC LIMIT 10000".format(Id_log_number)

它应该给出相同的结果,因为相同的查询和相同的条件,
如果您想从google bigquery表中以块的形式读取数据,这样就不会使服务器的内存过载,请尝试google对bigquery()进行分页()

它应该会给您相同的结果,因为相同的查询和相同的条件,
如果您想从google bigquery表中以块的形式读取数据,这样就不会使服务器的内存过载,请尝试google对bigquery()进行分页()

,但我无法一次推送100万行进行处理。。有没有一种方法可以在不使用限制的情况下获取批量数据或样本数据。如果我使用max(ID_log)而不是第一批的最后一个ID日志,它会有所帮助。为什么你不能处理一百万行?如果您的数据库和表设置正确,应该不会有太大问题。。。我还更新了我的答案,尽管我现在还不确定我是否理解了你的问题所在:)我正在用python处理数据帧中的数据,并将其保存在单独的表中,返回到bigquery。随着时间的推移,数据将增加,我必须处理相同的数据。。从某种意义上说,它是不可伸缩的,这就是为什么我们要把爪子和限制放在哪里。我将使用一批10k数据处理它并保存它,而ID_日志将用作标志。我还注意到日志ID是随机出现的,而不是在生成时以有组织的方式出现的。在我看来,您的查询本身没有问题,它可以正常工作,但看起来您在这里遇到了不同的问题。也许可以问一个不同的问题,并更好地描述它?但我不能一次推100万行去处理。。有没有一种方法可以在不使用限制的情况下获取批量数据或样本数据。如果我使用max(ID_log)而不是第一批的最后一个ID日志,它会有所帮助。为什么你不能处理一百万行?如果您的数据库和表设置正确,应该不会有太大问题。。。我还更新了我的答案,尽管我现在还不确定我是否理解了你的问题所在:)我正在用python处理数据帧中的数据,并将其保存在单独的表中,返回到bigquery。随着时间的推移,数据将增加,我必须处理相同的数据。。从某种意义上说,它是不可伸缩的,这就是为什么我们要把爪子和限制放在哪里。我将使用一批10k数据处理它并保存它,而ID_日志将用作标志。我还注意到日志ID是随机出现的,而不是在生成时以有组织的方式出现的。在我看来,您的查询本身没有问题,它可以正常工作,但看起来您在这里遇到了不同的问题。也许可以问一个不同的问题,并更好地描述它?