blob: d18ad0eca5552aa1a50059c0dca9757a86fa7dda [file] [log] [blame] [view]
---
sidebar_position: 3
---
# Admin Operations
## Get Admin Interface
```rust
let admin = conn.get_admin().await?;
```
## Database Operations
```rust
// Create database
admin.create_database("my_database", None, true).await?;
// List all databases
let databases = admin.list_databases().await?;
println!("Databases: {:?}", databases);
// Check if database exists
let exists = admin.database_exists("my_database").await?;
// Get database information
let db_info = admin.get_database_info("my_database").await?;
// Drop database
admin.drop_database("my_database", true, false).await?;
```
## Table Operations
```rust
use fluss::metadata::{DataTypes, Schema, TableDescriptor, TablePath};
let table_descriptor = TableDescriptor::builder()
.schema(
Schema::builder()
.column("id", DataTypes::int())
.column("name", DataTypes::string())
.column("amount", DataTypes::bigint())
.build()?,
)
.build()?;
let table_path = TablePath::new("my_database", "my_table");
// Create table
admin.create_table(&table_path, &table_descriptor, true).await?;
// Get table information
let table_info = admin.get_table_info(&table_path).await?;
println!("Table: {}", table_info);
// List tables in database
let tables = admin.list_tables("my_database").await?;
// Check if table exists
let exists = admin.table_exists(&table_path).await?;
// Drop table
admin.drop_table(&table_path, true).await?;
```
## Partition Operations
```rust
use fluss::metadata::PartitionSpec;
use std::collections::HashMap;
// List all partitions
let partitions = admin.list_partition_infos(&table_path).await?;
// List partitions matching a spec
let mut filter = HashMap::new();
filter.insert("year", "2024");
let spec = PartitionSpec::new(filter);
let partitions = admin.list_partition_infos_with_spec(&table_path, Some(&spec)).await?;
// Create partition
admin.create_partition(&table_path, &spec, true).await?;
// Drop partition
admin.drop_partition(&table_path, &spec, true).await?;
```
## Offset Operations
```rust
use fluss::rpc::message::OffsetSpec;
let bucket_ids = vec![0, 1, 2];
// Get earliest offsets
let earliest = admin.list_offsets(&table_path, &bucket_ids, OffsetSpec::Earliest).await?;
// Get latest offsets
let latest = admin.list_offsets(&table_path, &bucket_ids, OffsetSpec::Latest).await?;
// Get offsets for a specific timestamp
let timestamp_ms = 1704067200000; // 2024-01-01 00:00:00 UTC
let offsets = admin.list_offsets(
&table_path, &bucket_ids, OffsetSpec::Timestamp(timestamp_ms),
).await?;
// Get offsets for a specific partition
let partition_offsets = admin.list_partition_offsets(
&table_path, "partition_name", &bucket_ids, OffsetSpec::Latest,
).await?;
```
## Lake Snapshot
:::note
Lake snapshots require [lake integration](https://fluss.apache.org/docs/maintenance/tiered-storage/overview/) (e.g. Paimon or Iceberg) to be enabled on the server. Without it, `get_latest_lake_snapshot` will return an error.
:::
```rust
let snapshot = admin.get_latest_lake_snapshot(&table_path).await?;
println!("Snapshot ID: {}", snapshot.snapshot_id);
```