Module datafusion_table_providers::sql::arrow_sql_gen

source ·
Expand description

§Generate SQL statements from Arrow schemas

This module provides a set of functions to generate SQL statements (i.e. DML) from Arrow schemas.

The primary use case is for generating CREATE TABLE/INSERT INTO statements for SQL databases from Arrow schemas/values with given constraints.

§Example

§CREATE TABLE statement

use std::sync::Arc;
use arrow::datatypes::{DataType, Field, Schema};
use datafusion_table_providers::sql::arrow_sql_gen::statement::CreateTableBuilder;

let schema = Arc::new(Schema::new(vec![
    Field::new("id", DataType::Int32, false),
    Field::new("name", DataType::Utf8, false),
    Field::new("age", DataType::Int32, false),
]));

let sql = CreateTableBuilder::new(schema, "my_table").build_sqlite();

assert_eq!(r#"CREATE TABLE IF NOT EXISTS "my_table" ( "id" integer NOT NULL, "name" text NOT NULL, "age" integer NOT NULL )"#, sql);

With primary key constraints:

use std::sync::Arc;
use arrow::datatypes::{DataType, Field, Schema};
use datafusion_table_providers::sql::arrow_sql_gen::statement::CreateTableBuilder;

let schema = Arc::new(Schema::new(vec![
    Field::new("id", DataType::Int32, false),
    Field::new("name", DataType::Utf8, false),
    Field::new("age", DataType::Int32, false),
]));

let sql = CreateTableBuilder::new(schema, "my_table")
    .primary_keys(vec!["id"])
    .build_sqlite();

assert_eq!(r#"CREATE TABLE IF NOT EXISTS "my_table" ( "id" integer NOT NULL, "name" text NOT NULL, "age" integer NOT NULL, PRIMARY KEY ("id") )"#, sql);

Modules§