Advertisement
Guest User

Untitled

a guest
Oct 16th, 2016
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.90 KB | None | 0 0
  1. # You are going to need to use jruby and install the jdbc-teradata gem
  2.  
  3. # Create a file named database.yml and fill it out. It will look something like this:
  4. # production:
  5. # adapter: jdbc
  6. # driver: com.teradata.jdbc.TeraDriver
  7. # url: jdbc:teradata://localhost/DATABASE=ods,DBS_PORT=1025,COP=OFF
  8. # username: your_username
  9. # password: your_password
  10.  
  11. require 'jdbc/teradata'
  12. Jdbc::Teradata::load_driver
  13. require 'active_record'
  14. require 'pp'
  15.  
  16. dbconfig = YAML::load(File.open('database.yml'))
  17.  
  18. ActiveRecord::Base.establish_connection(dbconfig['production'])
  19.  
  20. def get_index_data(table_name, index_number, index_type)
  21. sql = []
  22. sql << "SELECT DatabaseName, TableName, IndexNumber, IndexType, IndexName, ColumnName"
  23. sql << "FROM dbc.indices"
  24. sql << "WHERE databasename = 'ods'"
  25. sql << "AND TableName = '#{table_name}'"
  26. sql << "AND IndexNumber = #{index_number}"
  27. sql << "AND IndexType = '#{index_type}'"
  28. sql << "AND indextype in ('P','S','Q','K','V','I')"
  29.  
  30. ActiveRecord::Base.connection.execute(sql.join(' '))
  31. end
  32.  
  33. sql = []
  34. sql << "SELECT DatabaseName, TableName, IndexNumber, IndexType, IndexName"
  35. sql << "FROM dbc.indices"
  36. sql << "WHERE databasename = 'ods'"
  37. sql << "and indextype in ('P','S','Q','K','V','I')"
  38. sql << "GROUP BY 1,2,3,4,5"
  39. sql << "ORDER BY 1,2,3,4,5"
  40.  
  41. items = ActiveRecord::Base.connection.execute(sql.join(' '))
  42.  
  43. items.each do |item|
  44.  
  45. sql = []
  46.  
  47. if item['IndexType'].strip == 'I'
  48. sql << "collect statistics on"
  49. sql << "#{item['DatabaseName'].strip}.#{item['TableName'].strip}"
  50. sql << "column"
  51. else
  52. sql << "collect statistics on"
  53. sql << "#{item['DatabaseName'].strip}.#{item['TableName'].strip}"
  54. sql << "index"
  55. end
  56.  
  57. data = get_index_data(item['TableName'].strip, item['IndexNumber'], item['IndexType'].strip)
  58.  
  59. columns = data.map { |d| d['ColumnName'].strip }.join(", ")
  60.  
  61. sql << "(#{columns})"
  62.  
  63. puts sql.join(' ')
  64.  
  65. ActiveRecord::Base.connection.execute(sql.join(' '))
  66. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement