Da MariaDB a Parquet con Ruby e Apache Arrow

Mattepuffo's logo
Da MariaDB a Parquet con Ruby e Apache Arrow

Da MariaDB a Parquet con Ruby e Apache Arrow

In questo articolo vediamo come creare un file Parquet con Ruby e Apache Arrow.

I dati li prenderemo da un database MariaDB.

Possiamo installare queste dipendenze direttamente con gem:

gem install mysql2 parquet

Qui sotto un pò di codice:

require 'mysql2'
require 'parquet'

DB_CONFIG = {
  host: 'localhost',
  username: 'root',
  password: '9211',
  database: 'Sql592686_5'
}

OUTPUT_FILE = 'movimenti.parquet'

def export_to_parquet
  client = nil

  begin
    client = Mysql2::Client.new(DB_CONFIG)

    schema = Parquet::Schema.new([
      Parquet::Field.new('mov_tipo', :string),
      Parquet::Field.new('mov_valore', :double),
      Parquet::Field.new('mov_data', :string),
      Parquet::Field.new('causale_nome', :string)
    ])

    writer = Parquet::Writer.new(OUTPUT_FILE, schema, compression: :snappy)

    query = <<-SQL
      SELECT mov_tipo,
             mov_valore,
             mov_data,
             causale_nome
      FROM movimenti
      INNER JOIN causali ON causale_id = mov_causale_fk
    SQL

    results = client.query(query)

    record_count = 0

    results.each do |row|
      writer.write({
        'mov_tipo' => row['mov_tipo'],
        'mov_valore' => row['mov_valore'],
        'mov_data' => row['mov_data'].strftime('%Y-%m-%d'),
        'causale_nome' => row['causale_nome']
      })

      record_count += 1

      if record_count % 1000 == 0
        puts "Scritti #{record_count} record..."
      end
    end

    writer.close

    puts "Totale record esportati: #{record_count}"

  rescue => e
    puts "Errore: #{e.message}"
  ensure
    client.close if client
  end
end

export_to_parquet

Enjoy!


Condividi

Commentami!