Complete API reference for the Fluss C++ client.
| Field / Method |
Type |
Description |
error_code |
int32_t |
0 for success, non-zero for errors |
error_message |
std::string |
Human-readable error description |
Ok() |
bool |
Returns true if operation succeeded (error_code == 0) |
| Field |
Type |
Default |
Description |
bootstrap_servers |
std::string |
"127.0.0.1:9123" |
Coordinator server address |
writer_request_max_size |
int32_t |
10485760 (10 MB) |
Maximum request size in bytes |
writer_acks |
std::string |
"all" |
Acknowledgment setting ("all", "0", "1", or "-1") |
writer_retries |
int32_t |
INT32_MAX |
Number of retries on failure |
writer_batch_size |
int32_t |
2097152 (2 MB) |
Batch size for writes in bytes |
writer_batch_timeout_ms |
int64_t |
100 |
Maximum time in ms to wait for a writer batch to fill up before sending |
writer_bucket_no_key_assigner |
std::string |
"sticky" |
Bucket assignment strategy for tables without bucket keys: "sticky" or "round_robin" |
scanner_remote_log_prefetch_num |
size_t |
4 |
Number of remote log segments to prefetch |
remote_file_download_thread_num |
size_t |
3 |
Number of threads for remote log downloads |
scanner_remote_log_read_concurrency |
size_t |
4 |
Streaming read concurrency within a remote log file |
scanner_log_max_poll_records |
size_t |
500 |
Maximum number of records returned in a single Poll() |
scanner_log_fetch_max_bytes |
int32_t |
16777216 (16 MB) |
Maximum bytes per fetch response for LogScanner |
scanner_log_fetch_min_bytes |
int32_t |
1 |
Minimum bytes the server must accumulate before returning a fetch response |
scanner_log_fetch_wait_max_time_ms |
int32_t |
500 |
Maximum time (ms) the server may wait to satisfy min-bytes |
scanner_log_fetch_max_bytes_for_bucket |
int32_t |
1048576 (1 MB) |
Maximum bytes per fetch response per bucket for LogScanner |
connect_timeout_ms |
uint64_t |
120000 |
TCP connect timeout in milliseconds |
request_timeout_ms |
uint64_t |
30000 |
Timeout in ms while waiting for an RPC response after the request is sent (request write/send can take longer) |
security_protocol |
std::string |
"PLAINTEXT" |
"PLAINTEXT" (default) or "sasl" for SASL auth |
security_sasl_mechanism |
std::string |
"PLAIN" |
SASL mechanism (only "PLAIN" is supported) |
security_sasl_username |
std::string |
(empty) |
SASL username (required when protocol is "sasl") |
security_sasl_password |
std::string |
(empty) |
SASL password (required when protocol is "sasl") |
| Method |
Description |
static Create(const Configuration& config, Connection& out) -> Result |
Create a connection to a Fluss cluster |
GetAdmin(Admin& out) -> Result |
Get the admin interface |
GetTable(const TablePath& table_path, Table& out) -> Result |
Get a table for read/write operations |
Available() -> bool |
Check if the connection is valid and initialized |
| Method |
Description |
CreateDatabase(const std::string& database_name, const DatabaseDescriptor& descriptor, bool ignore_if_exists) -> Result |
Create a database |
DropDatabase(const std::string& name, bool ignore_if_not_exists, bool cascade) -> Result |
Drop a database |
ListDatabases(std::vector<std::string>& out) -> Result |
List all databases |
DatabaseExists(const std::string& name, bool& out) -> Result |
Check if a database exists |
GetDatabaseInfo(const std::string& name, DatabaseInfo& out) -> Result |
Get database metadata |
| Method |
Description |
CreateTable(const TablePath& path, const TableDescriptor& descriptor, bool ignore_if_exists) -> Result |
Create a table |
DropTable(const TablePath& path, bool ignore_if_not_exists) -> Result |
Drop a table |
GetTableInfo(const TablePath& path, TableInfo& out) -> Result |
Get table metadata |
ListTables(const std::string& database_name, std::vector<std::string>& out) -> Result |
List tables in a database |
TableExists(const TablePath& path, bool& out) -> Result |
Check if a table exists |
| Method |
Description |
CreatePartition(const TablePath& path, const std::unordered_map<std::string, std::string>& partition_spec, bool ignore_if_exists) -> Result |
Create a partition |
DropPartition(const TablePath& path, const std::unordered_map<std::string, std::string>& partition_spec, bool ignore_if_not_exists) -> Result |
Drop a partition |
ListPartitionInfos(const TablePath& path, std::vector<PartitionInfo>& out) -> Result |
List partition metadata |
| Method |
Description |
ListOffsets(const TablePath& path, const std::vector<int32_t>& bucket_ids, const OffsetSpec& query, std::unordered_map<int32_t, int64_t>& out) -> Result |
Get offsets for buckets |
ListPartitionOffsets(const TablePath& path, const std::string& partition_name, const std::vector<int32_t>& bucket_ids, const OffsetSpec& query, std::unordered_map<int32_t, int64_t>& out) -> Result |
Get offsets for a partition's buckets |
| Method |
Description |
GetLatestLakeSnapshot(const TablePath& path, LakeSnapshot& out) -> Result |
Get the latest lake snapshot |
| Method |
Description |
GetServerNodes(std::vector<ServerNode>& out) -> Result |
Get all alive server nodes (coordinator + tablets) |
| Field |
Type |
Description |
id |
int32_t |
Server node ID |
host |
std::string |
Hostname of the server |
port |
uint32_t |
Port number |
server_type |
std::string |
Server type ("CoordinatorServer" or "TabletServer") |
uid |
std::string |
Unique identifier (e.g. "cs-0", "ts-1") |
| Method |
Description |
NewRow() -> GenericRow |
Create a schema-aware row for this table |
NewAppend() -> TableAppend |
Create an append builder for log tables |
NewUpsert() -> TableUpsert |
Create an upsert builder for PK tables |
NewLookup() -> TableLookup |
Create a lookup builder for PK tables |
NewScan() -> TableScan |
Create a scan builder |
GetTableInfo() -> TableInfo |
Get table metadata |
GetTablePath() -> TablePath |
Get the table path |
HasPrimaryKey() -> bool |
Check if the table has a primary key |
| Method |
Description |
CreateWriter(AppendWriter& out) -> Result |
Create an append writer |
| Method |
Description |
PartialUpdateByIndex(std::vector<size_t> column_indices) -> TableUpsert& |
Configure partial update by column indices |
PartialUpdateByName(std::vector<std::string> column_names) -> TableUpsert& |
Configure partial update by column names |
CreateWriter(UpsertWriter& out) -> Result |
Create an upsert writer |
| Method |
Description |
CreateLookuper(Lookuper& out) -> Result |
Create a lookuper for point lookups |
| Method |
Description |
ProjectByIndex(std::vector<size_t> column_indices) -> TableScan& |
Project columns by index |
ProjectByName(std::vector<std::string> column_names) -> TableScan& |
Project columns by name |
CreateLogScanner(LogScanner& out) -> Result |
Create a record-based log scanner |
CreateRecordBatchLogScanner(LogScanner& out) -> Result |
Create an Arrow RecordBatch-based log scanner |
| Method |
Description |
Append(const GenericRow& row) -> Result |
Append a row (fire-and-forget) |
Append(const GenericRow& row, WriteResult& out) -> Result |
Append a row with write acknowledgment |
Flush() -> Result |
Flush all pending writes |
| Method |
Description |
Upsert(const GenericRow& row) -> Result |
Upsert a row (fire-and-forget) |
Upsert(const GenericRow& row, WriteResult& out) -> Result |
Upsert a row with write acknowledgment |
Delete(const GenericRow& row) -> Result |
Delete a row by primary key (fire-and-forget) |
Delete(const GenericRow& row, WriteResult& out) -> Result |
Delete a row with write acknowledgment |
Flush() -> Result |
Flush all pending operations |
| Method |
Description |
Wait() -> Result |
Wait for server acknowledgment of the write |
| Method |
Description |
Lookup(const GenericRow& pk_row, LookupResult& out) -> Result |
Lookup a row by primary key |
| Method |
Description |
Subscribe(int32_t bucket_id, int64_t offset) -> Result |
Subscribe to a single bucket at an offset |
Subscribe(const std::vector<BucketSubscription>& bucket_offsets) -> Result |
Subscribe to multiple buckets |
SubscribePartitionBuckets(int64_t partition_id, int32_t bucket_id, int64_t start_offset) -> Result |
Subscribe to a single partition bucket |
SubscribePartitionBuckets(const std::vector<PartitionBucketSubscription>& subscriptions) -> Result |
Subscribe to multiple partition buckets |
Unsubscribe(int32_t bucket_id) -> Result |
Unsubscribe from a non-partitioned bucket |
UnsubscribePartition(int64_t partition_id, int32_t bucket_id) -> Result |
Unsubscribe from a partition bucket |
Poll(int64_t timeout_ms, ScanRecords& out) -> Result |
Poll individual records |
PollRecordBatch(int64_t timeout_ms, ArrowRecordBatches& out) -> Result |
Poll Arrow RecordBatches |
GenericRow is a write-only row used for append, upsert, delete, and lookup key construction. For reading field values from scan or lookup results, see RowView and LookupResult.
| Method |
Description |
SetNull(size_t idx) |
Set field to null |
SetBool(size_t idx, bool value) |
Set boolean value |
SetInt32(size_t idx, int32_t value) |
Set 32-bit integer |
SetInt64(size_t idx, int64_t value) |
Set 64-bit integer |
SetFloat32(size_t idx, float value) |
Set 32-bit float |
SetFloat64(size_t idx, double value) |
Set 64-bit float |
SetString(size_t idx, const std::string& value) |
Set string value |
SetBytes(size_t idx, const std::vector<uint8_t>& value) |
Set binary data |
SetDate(size_t idx, const Date& value) |
Set date value |
SetTime(size_t idx, const Time& value) |
Set time value |
SetTimestampNtz(size_t idx, const Timestamp& value) |
Set timestamp without timezone |
SetTimestampLtz(size_t idx, const Timestamp& value) |
Set timestamp with timezone |
SetDecimal(size_t idx, const std::string& value) |
Set decimal from string |
When using table.NewRow(), the Set() method auto-routes to the correct type based on the schema:
| Method |
Description |
Set(const std::string& name, std::nullptr_t) |
Set field to null by column name |
Set(const std::string& name, bool value) |
Set boolean by column name |
Set(const std::string& name, int32_t value) |
Set integer by column name |
Set(const std::string& name, int64_t value) |
Set big integer by column name |
Set(const std::string& name, float value) |
Set float by column name |
Set(const std::string& name, double value) |
Set double by column name |
Set(const std::string& name, const std::string& value) |
Set string/decimal by column name |
Set(const std::string& name, const Date& value) |
Set date by column name |
Set(const std::string& name, const Time& value) |
Set time by column name |
Set(const std::string& name, const Timestamp& value) |
Set timestamp by column name |
Read-only row view for scan results. Provides zero-copy access to string and bytes data. RowView shares ownership of the underlying scan data via reference counting, so it can safely outlive the ScanRecords that produced it.
:::note string_view Lifetime
GetString() returns std::string_view that borrows from the underlying data. The string_view is valid as long as any RowView (or ScanRecord) referencing the same poll result is alive. Copy to std::string if you need the value after all references are gone.
:::
| Method |
Description |
FieldCount() -> size_t |
Get the number of fields |
GetType(size_t idx) -> TypeId |
Get the type at index |
IsNull(size_t idx) -> bool |
Check if field is null |
GetBool(size_t idx) -> bool |
Get boolean value at index |
GetInt32(size_t idx) -> int32_t |
Get 32-bit integer at index |
GetInt64(size_t idx) -> int64_t |
Get 64-bit integer at index |
GetFloat32(size_t idx) -> float |
Get 32-bit float at index |
GetFloat64(size_t idx) -> double |
Get 64-bit float at index |
GetString(size_t idx) -> std::string_view |
Get string at index (zero-copy) |
GetBytes(size_t idx) -> std::pair<const uint8_t*, size_t> |
Get binary data at index (zero-copy) |
GetDate(size_t idx) -> Date |
Get date at index |
GetTime(size_t idx) -> Time |
Get time at index |
GetTimestamp(size_t idx) -> Timestamp |
Get timestamp at index |
IsDecimal(size_t idx) -> bool |
Check if field is a decimal type |
GetDecimalString(size_t idx) -> std::string |
Get decimal as string at index |
| Method |
Description |
IsNull(const std::string& name) -> bool |
Check if field is null by name |
GetBool(const std::string& name) -> bool |
Get boolean by column name |
GetInt32(const std::string& name) -> int32_t |
Get 32-bit integer by column name |
GetInt64(const std::string& name) -> int64_t |
Get 64-bit integer by column name |
GetFloat32(const std::string& name) -> float |
Get 32-bit float by column name |
GetFloat64(const std::string& name) -> double |
Get 64-bit float by column name |
GetString(const std::string& name) -> std::string_view |
Get string by column name |
GetBytes(const std::string& name) -> std::pair<const uint8_t*, size_t> |
Get binary data by column name |
GetDate(const std::string& name) -> Date |
Get date by column name |
GetTime(const std::string& name) -> Time |
Get time by column name |
GetTimestamp(const std::string& name) -> Timestamp |
Get timestamp by column name |
GetDecimalString(const std::string& name) -> std::string |
Get decimal as string by column name |
ScanRecord is a value type that can be freely copied, stored, and accumulated across multiple Poll() calls. It shares ownership of the underlying scan data via reference counting.
| Field |
Type |
Description |
offset |
int64_t |
Record offset in the log |
timestamp |
int64_t |
Record timestamp |
change_type |
ChangeType |
Change type (AppendOnly, Insert, UpdateBefore, UpdateAfter, Delete) |
row |
RowView |
Row data (value type, shares ownership via reference counting) |
| Method |
Description |
Count() -> size_t |
Total number of records across all buckets |
IsEmpty() -> bool |
Check if empty |
begin() / end() |
Iterator support for range-based for loops |
Flat iteration over all records (regardless of bucket):
for (const auto& rec : records) {
std::cout << "offset=" << rec.offset << std::endl;
}
| Method |
Description |
BucketCount() -> size_t |
Number of distinct buckets |
Buckets() -> std::vector<TableBucket> |
List of distinct buckets |
Records(const TableBucket& bucket) -> BucketRecords |
Records for a specific bucket (empty if bucket not present) |
BucketAt(size_t idx) -> BucketRecords |
Records by bucket index (0-based, O(1)) |
A bundle of scan records belonging to a single bucket. Obtained from ScanRecords::Records() or ScanRecords::BucketAt(). BucketRecords is a value type — it shares ownership of the underlying scan data via reference counting, so it can safely outlive the ScanRecords that produced it.
| Method |
Description |
Size() -> size_t |
Number of records in this bucket |
Empty() -> bool |
Check if empty |
Bucket() -> const TableBucket& |
Get the bucket |
operator[](size_t idx) -> ScanRecord |
Access record by index within this bucket |
begin() / end() |
Iterator support for range-based for loops |
| Field / Method |
Description |
table_id -> int64_t |
Table ID |
bucket_id -> int32_t |
Bucket ID |
partition_id -> std::optional<int64_t> |
Partition ID (empty if non-partitioned) |
operator==(const TableBucket&) -> bool |
Equality comparison |
Read-only result for lookup operations. Provides zero-copy access to field values.
| Method |
Description |
Found() -> bool |
Whether a matching row was found |
FieldCount() -> size_t |
Get the number of fields |
| Method |
Description |
GetType(size_t idx) -> TypeId |
Get the type at index |
IsNull(size_t idx) -> bool |
Check if field is null |
GetBool(size_t idx) -> bool |
Get boolean value at index |
GetInt32(size_t idx) -> int32_t |
Get 32-bit integer at index |
GetInt64(size_t idx) -> int64_t |
Get 64-bit integer at index |
GetFloat32(size_t idx) -> float |
Get 32-bit float at index |
GetFloat64(size_t idx) -> double |
Get 64-bit float at index |
GetString(size_t idx) -> std::string_view |
Get string at index (zero-copy) |
GetBytes(size_t idx) -> std::pair<const uint8_t*, size_t> |
Get binary data at index (zero-copy) |
GetDate(size_t idx) -> Date |
Get date at index |
GetTime(size_t idx) -> Time |
Get time at index |
GetTimestamp(size_t idx) -> Timestamp |
Get timestamp at index |
IsDecimal(size_t idx) -> bool |
Check if field is a decimal type |
GetDecimalString(size_t idx) -> std::string |
Get decimal as string at index |
| Method |
Description |
IsNull(const std::string& name) -> bool |
Check if field is null by name |
GetBool(const std::string& name) -> bool |
Get boolean by column name |
GetInt32(const std::string& name) -> int32_t |
Get 32-bit integer by column name |
GetInt64(const std::string& name) -> int64_t |
Get 64-bit integer by column name |
GetFloat32(const std::string& name) -> float |
Get 32-bit float by column name |
GetFloat64(const std::string& name) -> double |
Get 64-bit float by column name |
GetString(const std::string& name) -> std::string_view |
Get string by column name |
GetBytes(const std::string& name) -> std::pair<const uint8_t*, size_t> |
Get binary data by column name |
GetDate(const std::string& name) -> Date |
Get date by column name |
GetTime(const std::string& name) -> Time |
Get time by column name |
GetTimestamp(const std::string& name) -> Timestamp |
Get timestamp by column name |
GetDecimalString(const std::string& name) -> std::string |
Get decimal as string by column name |
| Method |
Description |
GetArrowRecordBatch() -> std::shared_ptr<arrow::RecordBatch> |
Get the underlying Arrow RecordBatch |
Available() -> bool |
Check if the batch is valid |
NumRows() -> int64_t |
Number of rows in the batch |
GetTableId() -> int64_t |
Table ID |
GetPartitionId() -> int64_t |
Partition ID |
GetBucketId() -> int32_t |
Bucket ID |
GetBaseOffset() -> int64_t |
First record offset |
GetLastOffset() -> int64_t |
Last record offset |
| Method |
Description |
Size() -> size_t |
Number of batches |
Empty() -> bool |
Check if empty |
operator[](size_t idx) |
Access batch by index |
begin() / end() |
Iterator support for range-based for loops |
| Method |
Description |
NewBuilder() -> Schema::Builder |
Create a new schema builder |
| Method |
Description |
AddColumn(const std::string& name, const DataType& type) -> Builder& |
Add a column |
SetPrimaryKeys(const std::vector<std::string>& keys) -> Builder& |
Set primary key columns |
Build() -> Schema |
Build the schema |
| Method |
Description |
NewBuilder() -> TableDescriptor::Builder |
Create a new table descriptor builder |
| Method |
Description |
SetSchema(const Schema& schema) -> Builder& |
Set the table schema |
SetPartitionKeys(const std::vector<std::string>& keys) -> Builder& |
Set partition key columns |
SetBucketCount(int32_t count) -> Builder& |
Set the number of buckets |
SetBucketKeys(const std::vector<std::string>& keys) -> Builder& |
Set bucket key columns |
SetProperty(const std::string& key, const std::string& value) -> Builder& |
Set a table property |
SetCustomProperty(const std::string& key, const std::string& value) -> Builder& |
Set a custom property |
SetComment(const std::string& comment) -> Builder& |
Set a table comment |
Build() -> TableDescriptor |
Build the table descriptor |
| Method |
Description |
DataType::Boolean() |
Boolean type |
DataType::TinyInt() |
8-bit signed integer |
DataType::SmallInt() |
16-bit signed integer |
DataType::Int() |
32-bit signed integer |
DataType::BigInt() |
64-bit signed integer |
DataType::Float() |
32-bit floating point |
DataType::Double() |
64-bit floating point |
DataType::String() |
UTF-8 string |
DataType::Bytes() |
Binary data |
DataType::Date() |
Date (days since epoch) |
DataType::Time() |
Time (milliseconds since midnight) |
DataType::Timestamp(int precision) |
Timestamp without timezone |
DataType::TimestampLtz(int precision) |
Timestamp with timezone |
DataType::Decimal(int precision, int scale) |
Decimal with precision and scale |
| Method |
Description |
id() -> TypeId |
Get the type ID |
precision() -> int |
Get precision (for Decimal/Timestamp types) |
scale() -> int |
Get scale (for Decimal type) |
| Method / Field |
Description |
TablePath(const std::string& database, const std::string& table) |
Create a table path |
database_name -> std::string |
Database name |
table_name -> std::string |
Table name |
ToString() -> std::string |
String representation |
| Field |
Type |
Description |
table_id |
int64_t |
Table ID |
schema_id |
int32_t |
Schema ID |
table_path |
TablePath |
Table path |
created_time |
int64_t |
Creation timestamp |
modified_time |
int64_t |
Last modification timestamp |
primary_keys |
std::vector<std::string> |
Primary key columns |
bucket_keys |
std::vector<std::string> |
Bucket key columns |
partition_keys |
std::vector<std::string> |
Partition key columns |
num_buckets |
int32_t |
Number of buckets |
has_primary_key |
bool |
Whether the table has a primary key |
is_partitioned |
bool |
Whether the table is partitioned |
properties |
std::unordered_map<std::string, std::string> |
Table properties |
custom_properties |
std::unordered_map<std::string, std::string> |
Custom properties |
comment |
std::string |
Table comment |
schema |
Schema |
Table schema |
| Method |
Description |
Date::FromDays(int32_t days) |
Create from days since epoch |
Date::FromYMD(int year, int month, int day) |
Create from year, month, day |
Year() -> int |
Get year |
Month() -> int |
Get month |
Day() -> int |
Get day |
| Method |
Description |
Time::FromMillis(int32_t millis) |
Create from milliseconds since midnight |
Time::FromHMS(int hour, int minute, int second) |
Create from hour, minute, second |
Hour() -> int |
Get hour |
Minute() -> int |
Get minute |
Second() -> int |
Get second |
Millis() -> int64_t |
Get sub-second millisecond component (0-999) |
| Method |
Description |
Timestamp::FromMillis(int64_t millis) |
Create from milliseconds since epoch |
Timestamp::FromMillisNanos(int64_t millis, int32_t nanos) |
Create from milliseconds and nanoseconds |
Timestamp::FromTimePoint(std::chrono::system_clock::time_point tp) |
Create from a time point |
| Field |
Type |
Description |
partition_id |
int64_t |
Partition ID |
partition_name |
std::string |
Partition name |
| Field |
Type |
Description |
comment |
std::string |
Database comment |
properties |
std::unordered_map<std::string, std::string> |
Custom properties |
| Field |
Type |
Description |
database_name |
std::string |
Database name |
comment |
std::string |
Database comment |
properties |
std::unordered_map<std::string, std::string> |
Custom properties |
created_time |
int64_t |
Creation timestamp |
modified_time |
int64_t |
Last modification timestamp |
| Field |
Type |
Description |
snapshot_id |
int64_t |
Snapshot ID |
bucket_offsets |
std::vector<BucketOffset> |
All bucket offsets |
| Field |
Type |
Description |
table_id |
int64_t |
Table ID |
partition_id |
int64_t |
Partition ID |
bucket_id |
int32_t |
Bucket ID |
offset |
int64_t |
Offset value |
| Method |
Description |
OffsetSpec::Earliest() |
Query for the earliest available offset |
OffsetSpec::Latest() |
Query for the latest offset |
OffsetSpec::Timestamp(int64_t timestamp_ms) |
Query offset at a specific timestamp |
| Constant |
Value |
Description |
fluss::EARLIEST_OFFSET |
-2 |
Start reading from the earliest available offset |
To start reading from the latest offset (only new records), resolve the current offset via ListOffsets before subscribing:
std::unordered_map<int32_t, int64_t> offsets;
admin.ListOffsets(table_path, {0}, fluss::OffsetSpec::Latest(), offsets);
scanner.Subscribe(0, offsets[0]);
| Value |
Short String |
Description |
AppendOnly |
+A |
Append-only record |
Insert |
+I |
Inserted row |
UpdateBefore |
-U |
Previous value of an updated row |
UpdateAfter |
+U |
New value of an updated row |
Delete |
-D |
Deleted row |
You may refer to the following example to convert ChangeType enum to its short string representation.
inline const char* ChangeTypeShortString(ChangeType ct) {
switch (ct) {
case ChangeType::AppendOnly: return "+A";
case ChangeType::Insert: return "+I";
case ChangeType::UpdateBefore: return "-U";
case ChangeType::UpdateAfter: return "+U";
case ChangeType::Delete: return "-D";
}
throw std::invalid_argument("Unknown ChangeType");
}
| Value |
Description |
Boolean |
Boolean type |
TinyInt |
8-bit signed integer |
SmallInt |
16-bit signed integer |
Int |
32-bit signed integer |
BigInt |
64-bit signed integer |
Float |
32-bit floating point |
Double |
64-bit floating point |
String |
UTF-8 string |
Bytes |
Binary data |
Date |
Date |
Time |
Time |
Timestamp |
Timestamp without timezone |
TimestampLtz |
Timestamp with timezone |
Decimal |
Decimal |
| Value |
Description |
AppendOnly |
Append-only record (log tables) |
Insert |
Inserted row (PK tables) |
UpdateBefore |
Row value before an update (PK tables) |
UpdateAfter |
Row value after an update (PK tables) |
Delete |
Deleted row (PK tables) |
| Value |
Description |
Earliest |
Earliest available offset |
Latest |
Latest offset |
Timestamp |
Offset at a specific timestamp |