Complete API reference for the Fluss C++ client.
Result
| 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) |
Configuration
| 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 |
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") |
Connection
| 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 |
Admin
Database Operations
| 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 |
Table Operations
| 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 |
Partition Operations
| 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 |
Offset Operations
| 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 |
Lake Operations
| Method | Description |
|---|
GetLatestLakeSnapshot(const TablePath& path, LakeSnapshot& out) -> Result | Get the latest lake snapshot |
Cluster Operations
| Method | Description |
|---|
GetServerNodes(std::vector<ServerNode>& out) -> Result | Get all alive server nodes (coordinator + tablets) |
ServerNode
| 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") |
Table
| 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 |
TableAppend
| Method | Description |
|---|
CreateWriter(AppendWriter& out) -> Result | Create an append writer |
TableUpsert
| 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 |
TableLookup
| Method | Description |
|---|
CreateLookuper(Lookuper& out) -> Result | Create a lookuper for point lookups |
TableScan
| 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 |
AppendWriter
| 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 |
UpsertWriter
| 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 |
WriteResult
| Method | Description |
|---|
Wait() -> Result | Wait for server acknowledgment of the write |
Lookuper
| Method | Description |
|---|
Lookup(const GenericRow& pk_row, LookupResult& out) -> Result | Lookup a row by primary key |
LogScanner
| 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
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.
Index-Based Setters
| 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 |
Name-Based Setters
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 |
RowView
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.
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.
Index-Based Getters
| 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 |
Name-Based Getters
| 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
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) |
ScanRecords
Flat Access
| 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;
}
Per-Bucket Access
| 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)) |
BucketRecords
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 |
TableBucket
| 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 |
LookupResult
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 |
Index-Based Getters
| 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 |
Name-Based Getters
| 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 |
ArrowRecordBatch
| 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 |
ArrowRecordBatches
| 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 |
Schema
| Method | Description |
|---|
NewBuilder() -> Schema::Builder | Create a new schema builder |
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 |
TableDescriptor
| Method | Description |
|---|
NewBuilder() -> TableDescriptor::Builder | Create a new table descriptor builder |
TableDescriptor::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 |
DataType
Factory Methods
| 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 |
Accessors
| Method | Description |
|---|
id() -> TypeId | Get the type ID |
precision() -> int | Get precision (for Decimal/Timestamp types) |
scale() -> int | Get scale (for Decimal type) |
TablePath
| 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 |
TableInfo
| 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 |
Temporal Types
Date
| 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 |
Time
| 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) |
Timestamp
| 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 |
PartitionInfo
| Field | Type | Description |
|---|
partition_id | int64_t | Partition ID |
partition_name | std::string | Partition name |
DatabaseDescriptor
| Field | Type | Description |
|---|
comment | std::string | Database comment |
properties | std::unordered_map<std::string, std::string> | Custom properties |
DatabaseInfo
| 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 |
LakeSnapshot
| Field | Type | Description |
|---|
snapshot_id | int64_t | Snapshot ID |
bucket_offsets | std::vector<BucketOffset> | All bucket offsets |
BucketOffset
| 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 |
OffsetSpec
| 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 |
Constants
| 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]);
Enums
ChangeType
| 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");
}
TypeId
| 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 |
ChangeType
| 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) |
OffsetSpec
| Value | Description |
|---|
Earliest | Earliest available offset |
Latest | Latest offset |
Timestamp | Offset at a specific timestamp |