feat: add get table api

This commit is contained in:
jeremyhi
2025-03-08 19:53:15 +08:00
parent 9f14edbb28
commit 457d2a620c
3 changed files with 63 additions and 0 deletions

4
Cargo.lock generated
View File

@@ -11207,10 +11207,14 @@ dependencies = [
name = "sst-convert"
version = "0.13.0"
dependencies = [
"catalog",
"common-meta",
"meta-client",
"mito2",
"object-store",
"snafu 0.8.5",
"store-api",
"table",
]
[[package]]

View File

@@ -5,10 +5,14 @@ edition.workspace = true
license.workspace = true
[dependencies]
catalog.workspace = true
common-meta.workspace = true
meta-client.workspace = true
mito2.workspace = true
object-store.workspace = true
snafu.workspace = true
store-api.workspace = true
table.workspace = true
[lints]
workspace = true

View File

@@ -13,3 +13,58 @@
// limitations under the License.
//! Utilities to get table metadata.
use std::sync::Arc;
use catalog::kvbackend::MetaKvBackend;
use common_meta::key::table_info::TableInfoValue;
use common_meta::key::table_name::TableNameKey;
use common_meta::key::{TableMetadataManager, TableMetadataManagerRef};
use meta_client::{MetaClientOptions, MetaClientType};
pub struct TableMetadataHelper {
table_metadata_manager: TableMetadataManagerRef,
}
impl TableMetadataHelper {
pub async fn new(meta_options: &MetaClientOptions) -> Self {
let backend = build_kv_backend(meta_options).await;
let table_metadata_manager = Arc::new(TableMetadataManager::new(Arc::new(backend)));
Self {
table_metadata_manager,
}
}
/// Get table info.
pub async fn get_table(
&self,
catalog: &str,
schema: &str,
table: &str,
) -> Option<TableInfoValue> {
let table_name = TableNameKey::new(catalog, schema, table);
let table_id = self
.table_metadata_manager
.table_name_manager()
.get(table_name)
.await
.unwrap()
.map(|v| v.table_id())
.unwrap();
self.table_metadata_manager
.table_info_manager()
.get(table_id)
.await
.unwrap()
.map(|v| v.into_inner())
}
}
async fn build_kv_backend(meta_options: &MetaClientOptions) -> MetaKvBackend {
let meta_client = meta_client::create_meta_client(MetaClientType::Frontend, meta_options)
.await
.unwrap();
MetaKvBackend::new(meta_client)
}