Integration
Algeon executes GPU plans through Apache DataFusion APIs while preserving standard SQL queries, DataFrame interfaces, and Arrow record batches. Embed Algeon in a Rust service, or connect remote clients through Arrow Flight SQL. Throughout these docs, "native" denotes Algeon's GPU execution path.
The session and server APIs use the same GPU backend. By default, Algeon selects supported
relational SQL for cuDF execution. Setting functions_only keeps ordinary SQL
on DataFusion CPU while explicit GPU UDTFs run on the GPU; native_required
rejects plans containing DataFusion CPU execution. See
Choose an execution mode.
The cugraph, cuvs, and cuml features make the matching UDTFs
executable; see Dependencies.
Iceberg support
A server built with the iceberg feature registers each
[[iceberg.catalogs]] entry as a
DataFusion catalog. Two catalog kinds connect: Iceberg REST catalogs that need
no SigV4 request signing, such as iceberg-rest-fixture, Polaris and
Lakekeeper (authentication none, OAuth2 client credentials or a bearer
token), and AWS Glue with the default AWS credential chain. Glue's Iceberg REST
endpoint and S3 Tables REST require SigV4, which iceberg-rust does not
implement, so they are not supported. GCP catalogs are out of scope.
Data files must be in S3. Native scans read them with KvikIO through the
server's [s3] table, and the catalog's
metadata files (table metadata, manifest lists and manifests) are read through
iceberg-rust's FileIO with the endpoint, region and path style of the same
table, which [[iceberg.catalogs]] therefore requires. A loaded table whose
FileIO endpoint differs from [s3], or whose region or path style differs
when both sides set one, fails with iceberg_storage_properties_mismatch.
Credentials a catalog returns for a table are neither requested nor used. An
embedded session uses AlgeonNativeExecutionConfig::with_s3_storage.
Access is read-only. Every scan loads the table again and plans its current snapshot; there is no time-travel syntax and no metadata table. A table without a snapshot scans as empty. Namespaces and table names are listed once, at server startup, and only single-level namespaces appear. A query loads a table by name, so a table created after startup can be queried but is missing from the listings.
Filters convert to Iceberg predicates that prune manifests and data files.
DataFusion keeps every filter in a FilterExec above the scan, so a filter
that does not convert only loses pruning. The scan is a standard Parquet
DataSourceExec with one whole-file entry per data file, the exact row count
from the manifest, and each footer placed in the session's file metadata
cache. Native lowering therefore sees a multi-object s3:// Parquet scan (see
Object storage and libcurl).
String and binary columns use the view types that a ListingTable infers.
Columns bind by name, after a per-file check that name and Iceberg field id
(or the table's name mapping) select the same column.
Rejected table features
A snapshot that a Parquet scan would read incorrectly fails with
unsupported_table_feature; the
error page lists its
metadata. The checks run in the provider's scan before native lowering, so
they apply in every execution mode, and no CPU fallback exists.
Catalog and storage failures keep the existing codes. A missing namespace or
table is object_not_found. Credential and access failures from the catalog or
metadata storage are source_unauthenticated or source_access_denied. A
retryable failure is source_temporary_failure, and any other is
source_dependency_failure. A table schema that changes between name
resolution and the scan fails with source_temporary_failure; a data file
whose size differs from its manifest entry fails with
source_dependency_failure.
Common flow
- Build the native libraries and the Rust stack with the features required for the deployment, following Build & Test. Every surface below starts from that build.
- Select an entry point. Embed a DataFusion session in a Rust service or start the Flight SQL server for remote clients. In each case, declare the GPUs the process may use before running queries. Server-side settings are documented in Configuration.
- Provide tables. In an embedded session, register tables as in plain
DataFusion (
CREATE EXTERNAL TABLE ... STORED AS PARQUETorregister_parquet). See Execute one attempt per query. The server reads Parquet tables that clients register withCREATE EXTERNAL TABLE, as in the citation table registration. When usingcugraph_*,cuvs_*, orcuml_*UDTFs, list and validate installed calls with Discover & Validate GPU UDTFs. - Verify whether a query runs on the GPU. Before shipping a query, inspect
its planned execution path and the reason for any part that remains on the
CPU using GPU coverage validation:
algeon_explain_coveragein embedded SQL,EXPLAIN GPUthrough Flight SQL, orvalidate_queryin Rust. With the defaultnative_preferredmode, relational candidates not selected for GPU execution stay in DataFusion. - Handle failures. A GPU execution failure returns an error with a stable
code, kind, and status. At the application boundary, inspect errors that
carry a typed Algeon identity and keep standard handlers for ordinary
DataFusion failures. See Handling Errors. Queries
that cannot acquire GPU execution capacity within configured deadlines
return
service_overloadedbackpressure; eligible waiters are served in first-in, first-out order.