如何使用 Python 从 Google Sheets 电子表格中仅获取新行?

问题描述 投票:0回答:1

假设我有一个包含数据的电子表格和一个手动启动的 Python 脚本,该脚本加载它并将其发送到 Google BigQuery。

假设在 11:00 我有 10 行,我的脚本读取它们并将其发送到 GBQ。

然后在18:00,我有15排。我只想读取并发送这 5 个新行。 使用 Python 实现此目的的最佳方法是什么?

我的想法是:

  1. 保存最后加载的行的索引并在下次启动脚本时读取它。虽然做起来相当简单,但我不认为这是解决问题的正确且最佳的解决方案。
  2. 以某种方式获取脚本运行的最后时间,并仅加载插入时间大于脚本运行时间的那些行。虽然这对我来说听起来更好,但我还没有找到方法。

您能提出您的想法或对我的一些评估吗?

python google-sheets etl
1个回答
0
投票

您的想法走在正确的轨道上!

使用索引或标记行: 此方法涉及使用 Google 表格电子表格中的索引或标记行来跟踪最后处理的行。当您的脚本运行时,它会从标记行之后的下一行开始读取数据。此方法简单有效,但确实需要通过添加索引或标记行来修改电子表格。

基于时间戳的方法: 此方法涉及向电子表格添加时间戳列。每当添加新行时,该行的时间戳就会自动设置为当前时间。当您的脚本运行时,它可以在电子表格中查询时间戳大于脚本上次运行时间的行。此方法不需要修改现有行,但需要您有时间戳列。

这是基于时间戳的方法的更详细实现:

添加时间戳列: 在您的 Google 表格电子表格中添加一列来存储时间戳。每当添加新行时,该行的时间戳应自动设置为当前时间。您可以使用 Google Sheets 公式来实现此目的。

记录上次运行时间: 在 Python 脚本中,您可以保存上次运行脚本的时间戳。您可以将此时间戳存储在文件或配置设置中。这将用作识别新行的参考点。

查询新行: 当脚本再次运行时,它可以在 Google Sheets 电子表格中查询时间戳大于记录的上次运行时间的行。这可以通过使用 Google Sheets API 和 Python 来实现。

更新上次运行时间: 处理完新行后,将记录的上次运行时间更新为当前时间。这可确保下次运行脚本时,它将仅处理在此更新的时间戳之后添加的行。

这种方法非常强大,不需要修改电子表格中的现有数据。它还确保您根据插入时间准确捕获新行。

就效率而言,两种方法都有其权衡。基于时间戳的方法对于准确捕获新数据可能更可靠,特别是在可以在脚本运行之间添加行的情况下。但是,它确实涉及更多的 API 调用,因为您需要根据时间戳进行查询。索引/标记行方法更简单,但需要对电子表格中的标记行进行额外管理。

希望我能帮忙:)

© www.soinside.com 2019 - 2024. All rights reserved.