+1 for timestamps are linear, in implementation, maybe the writer only
needs to look at the previous snapshot timestamp.

We're trying to think of iceberg as a message queue, Let's take the popular
queue Kafka as an example,
Iceberg has snapshotId and timestamp, corresponding, Kafka has offset and
timestamp:
- offset: It is used for incremental read, such as the state of a
checkpoint in a computing system.
- timestamp: It is explicitly specified by the user to specify the scope of
consumption. As start_timestamp of reading. Timestamp is a better user
aware interface. But offset/snapshotId is not human readable and friendly.

So there are scenarios where timestamp is used for incremental read.

Best,
Jingsong


On Wed, Sep 9, 2020 at 12:45 AM Sud <sudssf2...@gmail.com> wrote:

>
> We are using incremental read for iceberg tables which gets quite few
> appends ( ~500- 1000 per hour) . but instead of using timestamp we use
> snapshot ids and track state of last read snapshot Id.
> We are using timestamp as fallback when the state is incorrect, but as you
> mentioned if timestamps are linear then it works as expected.
> We also found that incremental reader might be slow when dealing with > 2k
> snapshots in range. we are currently testing a manifest based incremental
> reader which looks at manifest entries instead of scanning snapshot history
> and accessing each snapshot.
>
> Is there any reason you can't use snapshot based incremental read?
>
> On Tue, Sep 8, 2020 at 9:06 AM Gautam <gautamkows...@gmail.com> wrote:
>
>> Hello Devs,
>>                    We are looking into adding workflows that read data
>> incrementally based on commit time. The ability to read deltas between
>> start / end commit timestamps on a table and ability to resume reading from
>> last read end timestamp. In that regard, we need the timestamps to be
>> linear in the current active snapshot history (newer versions always have
>> higher timestamps). Although Iceberg commit flow ensures the versions are
>> newer, there isn't a check to ensure timestamps are linear.
>>
>> Example flow, if two clients (clientA and clientB), whose time-clocks are
>> slightly off (say by a couple seconds), are committing frequently, clientB
>> might get to commit after clientA even if it's new snapshot timestamps is
>> out of order. I might be wrong but I haven't found a check in
>> HadoopTableOperations.commit() to ensure this above case does not happen.
>>
>> On the other hand, restricting commits due to out-of-order timestamps can
>> hurt commit throughput so I can see why this isn't something Iceberg might
>> want to enforce based on System.currentTimeMillis(). Although if clients
>> had a way to define their own globally synchronized timestamps (using
>> external service or some monotonically increasing UUID) then iceberg could
>> allow an API to set that on the snapshot or use that instead of
>> System.currentTimeMillis(). Iceberg exposes something similar using
>> Sequence numbers in v2 format to track Deletes and Appends.
>>
>> Is this a concern others have? If so how are folks handling this today or
>> are they not exposing such a feature at all due to the inherent distributed
>> timing problem? Would like to hear how others are thinking/going about
>> this. Thoughts?
>>
>> Cheers,
>>
>> -Gautam.
>>
>

-- 
Best, Jingsong Lee

Reply via email to