0.01
The project is in a healthy, maintained state
Red Arrow DuckDB is a library that provides Apache Arrow support to ruby-duckdb.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

Runtime

 Project Readme

README

Name

Red Arrow DuckDB

Description

Red Arrow DuckDB is a library that provides Apache Arrow support to ruby-duckdb.

Install

gem install red-arrow-duckdb

Usage

Receive result as Apache Arrow data

require "arrow-duckdb"

DuckDB::Database.open do |db|
  db.connect do |connection|
    connection.query('CREATE TABLE users (id INTEGER, name VARCHAR(30))')

    connection.query("INSERT into users VALUES(1, 'Alice')")
    connection.query("INSERT into users VALUES(2, 'Bob')")
    connection.query("INSERT into users VALUES(3, 'Cathy')")

    result = connection.query("SELECT * FROM users", output: :arrow)
    puts(result.to_table)
    # 	id	name
    # 0	 1	Alice
    # 1	 2	Bob 
    # 2	 3	Cathy
  end
end

Use Apache Arrow data as input

require "arrow-duckdb"

users = Arrow::Table.new("id" => [1, 2, 3],
                         "name" => ["Alice", "Bob", "Cathy"])
DuckDB::Database.open do |db|
  db.connect do |connection|
    connection.register("users", users) do
      connection.query("SELECT * FROM users").each do |row|
        p row
        # ["1", "Alice"]
        # ["2", "Bob"]
        # ["3", "Cathy"]
      end
    end
  end
end

Filter Apache Arrow data by DuckDB

require "arrow-duckdb"

users = Arrow::Table.new("id" => [1, 2, 3],
                         "name" => ["Alice", "Bob", "Cathy"])
DuckDB::Database.open do |db|
  db.connect do |connection|
    filtered_users = connection.register("users", users) do
      result = connection.query("SELECT * FROM users WHERE id > ?",
                                1,
                                output: :arrow)
      result.to_table
    end
    puts(filtered_users)
    # 	id	name
    # 0	 2	Bob 
    # 1	 3	Cathy

    # Use filtered data again
    connection.register("filtered_users", filtered_users) do
      result = connection.query("SELECT * FROM filtered_users",
                                output: :arrow)
      puts(result.to_table)
      # 	id	name
      # 0	 2	Bob 
      # 1	 3	Cathy
    end
  end
end

Dependencies

Authors

License

Apache License 2.0. See doc/text/apache-2.0.txt for details.

(Sutou Kouhei has a right to change the license including contributed patches.)