如何构建用于查询Redshift数据库的前端(希望与Rails一起使用)

约翰科瑟

因此,我有一个Redshift数据库,其中包含足够的表,这值得花我的时间来构建前端,以使其比仅键入SQL命令更容易查询。

理想情况下,我可以通过将数据库连接到Rails应用程序来做到这一点(因为我对Rails有一定的经验)。我不确定如何将远程Redshift数据库连接到本地Rails应用程序,或者如何使activerecord与redshift一起使用。

有人有任何建议/资源来帮助我入门吗?如果有一些预制的选项比Rails容易,我可以使用其他选项将Redshift数据库连接到前端。

哈里斯
#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

请注意,我们连接的是5439,而不是默认的5432,因此我指定了端口此外,我指定了一个模式beta,这是我们用于不稳定聚合的功能,您可以在每个环境中使用如上所述的不同数据库,或者使用各种模式,并将其包含在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 

### OPTION 2,直接PG连接

  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'>   

更新:

我最终选择了选项1,但是出于多种原因现在使用此适配器:

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

原因1:ActiveRecord postgresql适配器设置client_min_messages原因2:适配器还尝试设置时区,redshift不允许(http://docs.aws.amazon.com/redshift/latest/dg/c_redshift-and-postgres- sql.html)原因3:即使您更改ActiveRecord中前两个错误的代码,也会遇到其他错误,这些错误抱怨Redshift正在使用Postgresql 8.0,这时我继续使用适配器,它将重新访问并更新以后我会发现更好的东西。

我将表重命名为base_aggregate_redshift_tests(注意复数),因此ActiveRecord可以轻松连接,如果您无法在redshift中使用set_table方法更改表名,请在下面注释掉

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

选项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

在控制台中使用self.table_name-注意它查询正确的表,因此您可以根据需要命名模型

[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            

选项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 
                                                }

祝你好运@johncorser!

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Elasticsearch如何与Titan数据库一起使用

来自分类Dev

Rails API:as_json与include一起查询数据库,尽管先前包含

来自分类Dev

哪个数据库更适合与电子窗口构建一起使用

来自分类Dev

将OPENQUERY与Oracle数据库一起使用以查询日期范围

来自分类Dev

Rails应用程序可与远程Heroku数据库一起使用

来自分类Dev

如何在飞行中将BLOB数据类型与不同的数据库一起使用?

来自分类常见问题

将recyclerview与数据库一起使用

来自分类Dev

与peewee一起使用多个数据库

来自分类Dev

与PhoneGap一起使用的数据库

来自分类Dev

与数据库中的单词一起使用包含

来自分类Dev

将MSChart与Access数据库一起使用

来自分类Dev

将 RecyclerView 与数据库一起使用

来自分类Dev

将 arrayList 与数据库一起使用?

来自分类常见问题

如何将Room Persistence Library与预填充的数据库一起使用?

来自分类Dev

了解PDO /预准备语句如何与多种数据库类型一起使用

来自分类Dev

如何将Spring Boot与MySQL数据库和JPA一起使用?

来自分类Dev

如何配置Hibernate ORM数据库属性以与Docker一起使用

来自分类Dev

如何使Titan图形数据库与Python一起使用?

来自分类Dev

与JPA一起使用时,如何让Hibernate在数据库中自动创建表?

来自分类Dev

如何使Schemacrawler与Informix 11.70数据库一起使用

来自分类Dev

Flask-SQLAlchemy-会话如何与多个数据库一起使用?

来自分类Dev

如何在.select语句中将pgcrypto与knex一起使用?(Postgres数据库)

来自分类Dev

如何将单个dbml文件与不同的数据库一起使用

来自分类Dev

如何将Asp.net身份与数据库一起使用

来自分类Dev

如何将 SQL Server 数据库与编码的 UI 测试一起使用?

来自分类Dev

PDO插入MySQL数据库无法与另一个PDO查询一起使用

来自分类Dev

JSP和Python可以一起用于同一数据库吗?

来自分类Dev

使用for循环构建数据库查询

来自分类Dev

Java-将数据库实例与SQL Server一起用于XLS导出

Related 相关文章

  1. 1

    Elasticsearch如何与Titan数据库一起使用

  2. 2

    Rails API:as_json与include一起查询数据库,尽管先前包含

  3. 3

    哪个数据库更适合与电子窗口构建一起使用

  4. 4

    将OPENQUERY与Oracle数据库一起使用以查询日期范围

  5. 5

    Rails应用程序可与远程Heroku数据库一起使用

  6. 6

    如何在飞行中将BLOB数据类型与不同的数据库一起使用?

  7. 7

    将recyclerview与数据库一起使用

  8. 8

    与peewee一起使用多个数据库

  9. 9

    与PhoneGap一起使用的数据库

  10. 10

    与数据库中的单词一起使用包含

  11. 11

    将MSChart与Access数据库一起使用

  12. 12

    将 RecyclerView 与数据库一起使用

  13. 13

    将 arrayList 与数据库一起使用?

  14. 14

    如何将Room Persistence Library与预填充的数据库一起使用?

  15. 15

    了解PDO /预准备语句如何与多种数据库类型一起使用

  16. 16

    如何将Spring Boot与MySQL数据库和JPA一起使用?

  17. 17

    如何配置Hibernate ORM数据库属性以与Docker一起使用

  18. 18

    如何使Titan图形数据库与Python一起使用?

  19. 19

    与JPA一起使用时,如何让Hibernate在数据库中自动创建表?

  20. 20

    如何使Schemacrawler与Informix 11.70数据库一起使用

  21. 21

    Flask-SQLAlchemy-会话如何与多个数据库一起使用?

  22. 22

    如何在.select语句中将pgcrypto与knex一起使用?(Postgres数据库)

  23. 23

    如何将单个dbml文件与不同的数据库一起使用

  24. 24

    如何将Asp.net身份与数据库一起使用

  25. 25

    如何将 SQL Server 数据库与编码的 UI 测试一起使用?

  26. 26

    PDO插入MySQL数据库无法与另一个PDO查询一起使用

  27. 27

    JSP和Python可以一起用于同一数据库吗?

  28. 28

    使用for循环构建数据库查询

  29. 29

    Java-将数据库实例与SQL Server一起用于XLS导出

热门标签

归档