Skip to content

bff: implement first 100 rows endpoint #1

@rampage644

Description

@rampage644
use std::collections::HashMap;
use std::sync::Arc;

use datafusion::prelude::*;
use iceberg_catalog_rest::{RestCatalog, RestCatalogConfig};
use iceberg_datafusion::IcebergCatalogProvider;

#[tokio::main]
pub async fn main() {
    println!("Hello, world?");
}

pub async fn get_catalog() -> IcebergCatalogProvider {
    let config = RestCatalogConfig::builder()
        .uri("https://catalog.embucket.com/catalog".to_string())
        .warehouse("primary_wh".to_string())
        .props(HashMap::default())
        .build();

    let catalog = RestCatalog::new(config);
    IcebergCatalogProvider::try_new(Arc::new(catalog))
        .await
        .unwrap()
}

#[cfg(test)]
mod tests {
    use super::*;

    #[tokio::test]
    async fn test_first_10_rows_feature() {
        let catalog = get_catalog().await;
        let ctx = SessionContext::new();
        ctx.register_catalog("catalog", Arc::new(catalog));

        let provider = ctx.catalog("catalog").unwrap();
        let schemas = provider.schema_names();
        println!("{schemas:?}");
        assert_eq!(schemas.len(), 6);

        let tables = provider.schema("engineering").unwrap().table_names();
        println!("{tables:?}");
        assert_eq!(tables.len(), 9);

        let table_name = "nyc-taxi-demo";
        let records = ctx
            .sql(&format!(
                "SELECT * FROM catalog.engineering.`{table_name}` LIMIT 10;"
            ))
            .await
            .unwrap()
            .collect()
            .await
            .unwrap();
        assert_eq!(records.len(), 1);
        let record = &records[0];
        assert_eq!(record.num_rows(), 10);

        arrow::util::pretty::print_batches(&records).unwrap();
    }
}

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions