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!
ruby gem apache arrow mariadb parquet
Commentami!