Bagaimana saya bisa membangun front end untuk menanyakan database Redshift (semoga dengan Rails)

Jadi saya memiliki database Redshift dengan tabel yang cukup sehingga saya merasa sepadan dengan waktu saya untuk membangun front end untuk membuat kuerinya sedikit lebih mudah daripada hanya mengetikkan perintah SQL.

Idealnya, saya dapat melakukan ini dengan menghubungkan database ke aplikasi Rails (karena saya memiliki sedikit pengalaman dengan Rails). Saya tidak yakin bagaimana cara menghubungkan database Redshift jarak jauh ke aplikasi Rails lokal, atau bagaimana membuat rekaman aktif berfungsi dengan redshift.

Adakah yang punya saran/sumber daya untuk membantu saya memulai? Saya terbuka untuk opsi lain untuk menghubungkan database Redshift ke front end jika ada opsi yang dibuat sebelumnya lebih mudah daripada Rails.


person johncorser    schedule 15.07.2014    source sumber
comment
lihat di bawah, hanya perlu melakukan hal yang sama untuk proyek saya sendiri   -  person harrisjb    schedule 18.07.2014


Jawaban (3)


#app/models/data_warehouse.rb
class DataWarehouse < ActiveRecord::Base                      
  establish_connection "redshift_staging"
  #or, if you want to have a db per environment
  #establish_connection "redshift_#{Rails.env}"
end

Perhatikan bahwa kami terhubung pada 5439, bukan default 5432 jadi saya tentukan portnya. Juga, saya tentukan skema, beta, yang kami gunakan untuk agregat tidak stabil kami, Anda bisa memiliki db berbeda per lingkungan seperti yang disebutkan di atas, atau gunakan berbagai skema dan sertakan dalam jalur pencarian untuk ActiveRecord

#config/database.yml
redshift_staging:                                                          
  adapter: postgresql                                                      
  encoding: utf8                                                           
  database: db03                                                         
  port: 5439                                                               
  pool: 5                                                                  
  schema_search_path: 'beta'                                                                                          
  username: admin                                                        
  password: supersecretpassword                                               
  host: db03.myremotehost.us  #your remote host here, might be an aws url from Redshift admin console 

###OPSI 2, Koneksi PG langsung

  class DataWarehouse < ActiveRecord::Base                      

    attr_accessor :conn                                                       

    def initialize                                                            
      @conn = PG.connect(                                                     
       database: 'db03',                                                   
       port: 5439,                                                           
       pool: 5,                                                              
       schema_search_path: 'beta',                                           
       username: 'admin',                                                  
       password: 'supersecretpassword',                                         
       host: 'db03.myremotehost.us'                                               
      )                                                                       
    end    
  end


[DEV] main:0> redshift = DataWarehouse
E, [2014-07-17T11:09:17.758957 #44535] ERROR -- : PG::InsufficientPrivilege: ERROR:  permission denied to set parameter "client_min_messages" to "notice" : SET client_min_messages TO 'notice'
(pry) output error: #<ActiveRecord::StatementInvalid: PG::InsufficientPrivilege: ERROR:  permission denied to set parameter "client_min_messages" to "notice" : SET client_min_messages TO 'notice'>   

PEMBARUAN:

Saya akhirnya memilih opsi 1, tetapi menggunakan adaptor ini untuk saat ini karena beberapa alasan:

https://github.com/fiksu/activerecord-redshift-adapter

Alasan 1: Adaptor postgresql ActiveRecord menyetel client_min_messages Alasan 2: adaptor juga mencoba menyetel Zona Waktu, yang tidak diizinkan oleh pergeseran merah (http://docs.aws.amazon.com/redshift/latest/dg/c_redshift-and-postgres-sql.html) Alasan 3: Meskipun Anda mengubah kode di ActiveRecord untuk dua kesalahan pertama, Anda mengalami kesalahan tambahan yang mengeluh bahwa Redshift menggunakan Postgresql 8.0, pada saat itu saya beralih ke adaptor, akan mengunjungi kembali dan memperbarui jika saya menemukan sesuatu yang lebih baik nanti.

Saya mengganti nama tabel saya menjadi base_aggregate_redshift_tests (pemberitahuan jamak) sehingga ActiveRecord dapat dengan mudah terhubung, jika Anda tidak dapat mengubah nama tabel Anda dalam pergeseran merah gunakan metode set_table yang saya komentari di bawah

#Gemfile:
gem 'activerecord4-redshift-adapter', github: 'aamine/activerecord4-redshift-adapter'

Pilihan 1

#config/database.yml
redshift_staging:                                                                                                             
  adapter: redshift                                                                                                           
  encoding: utf8                                                                                                              
  database: db03                                                                                                           
  port: 5439                                                                                                                  
  pool: 5                                                                                                                     
  username: admin                                                                                                
  password: supersecretpassword                                                                                                  
  host: db03.myremotehost.us                                                                                                       
  timeout: 5000   

#app/models/base_aggregates_redshift_test.rb
#Model named to match my tables in Redshift, if you want you can set_table like I have commented out below

class BaseAggregatesRedshiftTest < ActiveRecord::Base
  establish_connection "redshift_staging"
  self.table_name = "beta.base_aggregates_v2"
end

di konsol menggunakan self.table_name -- perhatikan ia menanyakan tabel yang tepat, sehingga Anda dapat memberi nama model apa pun yang Anda inginkan

[DEV] main:0> redshift = BaseAggregatesRedshiftTest.first                                                                    
D, [2014-07-17T15:31:58.678103 #43776] DEBUG -- :   BaseAggregatesRedshiftTest Load (45.6ms)  SELECT "beta"."base_aggregates_v2".* FROM "beta"."base_aggregates_v2" LIMIT 1            

pilihan 2

#app/models/base_aggregates_redshift_test.rb
class BaseAggregatesRedshiftTest < ActiveRecord::Base
  set_table "beta.base_aggregates_v2"

  ActiveRecord::Base.establish_connection(
    adapter: 'redshift',
    encoding: 'utf8',
    database: 'staging',
    port: '5439',
    pool: '5',
    username: 'admin',
    password: 'supersecretpassword',
    search_schema: 'beta',
    host: 'db03.myremotehost.us',
    timeout: '5000'
  )

end

#in console, abbreviated example of first record, now it's using the new name for my redshift table, just assuming I've got the record at base_aggregates_redshift_tests because I didn't set the table_name

[DEV] main:0> redshift = BaseAggregatesRedshiftTest.first
D, [2014-07-17T15:09:39.388918 #11537] DEBUG -- :   BaseAggregatesRedshiftTest Load (45.3ms)  SELECT "base_aggregates_redshift_tests".* FROM "base_aggregates_redshift_tests" LIMIT 1
#<BaseAggregatesRedshiftTest:0x007fd8c4a12580> {
                                                :truncated_month => Thu, 31 Jan 2013 19:00:00 EST -05:00,
                                                :dma => "Cityville",
                                                :group_id => 9712338,
                                                :dma_id => 9999 
                                                }

Semoga beruntung @johncorser!

person harrisjb    schedule 17.07.2014
comment
Bagus. Bekerja dengan baik dengan Intisari yang saya temukan, yang mengubah URI menjadi database.yml. Disalin hampir persis, ubah adaptor menjadi redshift: gist.github.com/mptre/1654167 - person Peter Ehrlich; 29.01.2015

Tutorial ini membantu Anda menyiapkan aplikasi Rails dengan adaptor redshift:

https://www.credible.com/code/setting-up-a-data-warehouse-with-aws-redshift-and-ruby/

Pendeknya:

Kloning contoh aplikasi:

git clone [email protected]:tuesy/redshift-ruby-tutorial.git
cd redshift-ruby-tutorial

Siapkan Variabel ENV melalui ~/.bashrc (atau dotenv):

export REDSHIFT_HOST=redshift-ruby-tutorial.ccmj2nxbsay7.us-east-1.redshift.amazonaws.com
export REDSHIFT_PORT=5439
export REDSHIFT_USER=deploy
export REDSHIFT_PASSWORD=<your password here>
export REDSHIFT_DATABASE=analytics
export REDSHIFT_BUCKET=redshift-ruby-tutorial

Gunakan permata activerecord4-redshift-adapter, di Gemfile:

'activerecord4-redshift-adapter', '~> 0.2.0' # For Rails 4.2
'activerecord4-redshift-adapter', '~> 0.1.1' # For Rails 4.1

Kemudian Anda dapat melakukan kueri ke pergeseran merah seperti yang Anda lakukan dengan model AR normal:

bundle exec rails c
RedshiftUser.count

(Pengungkapan: Saya belum mencoba metode ini, tapi mungkin akan segera)

person Benjamin Crouzier    schedule 24.02.2016

Anda mungkin ingin mempertimbangkan http://www.looker.com/. Ini adalah frontend untuk menjelajahi DB Anda, memungkinkan kueri yang mudah disimpan dan GUI yang juga dapat digunakan oleh para pebisnis.

person SAR622    schedule 30.11.2014