> Now I need to populate the watse_facts table. I am not sure how to go about
> it. How do I add waste_id which is a foreign key from waste_dimesions table.
There are a couple ways to do this I have found.
> Also I wanted to add additional information from wastes table to waste_facts
> table like co2e_factor (which I have not included in waste_dimensions table)
I think I can guess what you are trying to do here. You have one
table, wastes, which combines some general information about a waste,
such as the name and type, and then more specific facts, such as the
co2e_factor, where you might have many rows with the same waste name
and type_id (and other repeated information), but with a few fields
that vary. The common fields, you want to group and make a
waste_dimension, and the fields that vary you want to then make into
the fact table's values.
For the waste_dimension, that means you need to be doing a group by,
and probably generating a new key for each waste row, or using type_id
if there is a type per waste dimension row.
After that, when you create the fact table, you need to have some
unique value to lookup in the waste dimension (type_id?), and use a
transform in the fact etl script o get the id.
For example, if you want to lookup the date_id to link to a
date_dimension, you can use a date value in the fact data to lookup
the right date_dimension row by comparing with the date value in the
date_dimension. Here is an example of doing this using a transform in
an etl script:
transform :date_id, :foreign_key_lookup, { :resolver =>
SQLResolver.new('date_dimension', 'sql_date_stamp', 'foo_warehouse') }
Andrew Kuklewicz
On Tue, Apr 21, 2009 at 2:48 AM, Shikha Mohan <[email protected]> wrote:
> Hi,
>
> I am new to this datawarehouse concept. I am trying to create a dw. I have
> one dimension and one fact, namely: waste_dimension.rb, waste_fact.rb
>
> Location of elt is db/elt
>
> My database.yml is something like:
>
> etl_execution:
> adapter: mysql
> database: rails_warehouse_etl_execution
> username: root
> password: password
> host: localhost
>
> warehouse:
> adapter: mysql
> database: for_demo
> username: root
> password: password
> host: localhost
>
> I am using database for extract and load.
>
> I am able to create a simple dimension table using following code:
>
> source :in, {
> :database => "for_demo",
> :target => :warehouse,
> :table => "wastes",
> :select => "wastes.name, wastes.type_id",
> :order => "wastes.name"
> },
> [
> :name,
> :type_id
> ]
>
> transform :name, :default, :default_value => "No Name"
>
>
> destination :out, {
> :database => "rails_warehouse_etl_execution",
> :target => :etl_execution,
> :table => 'waste_dimension'
> },
> {
> :order => [
> :name,
> :type_id
> ]
> }
>
> Now I need to populate the watse_facts table. I am not sure how to go about
> it. How do I add waste_id which is a foreign key from waste_dimesions table.
> Also I wanted to add additional information from wastes table to waste_facts
> table like co2e_factor (which I have not included in waste_dimensions table)
>
> Structure for waste_dimension and waste_facts table is as follows:
>
> class CreateWasteDimension < ActiveRecord::Migration
> def self.up
> fields = {
> :name => :string,
> :type_id => :integer
> }
> create_table :waste_dimension do |t|
> fields.each do |name,type|
> t.column name, type
> end
> end
> fields.each do |name,type|
> add_index :waste_dimension, name unless type == :text
> end
> end
>
> def self.down
> drop_table :waste_dimension
> end
> end
>
>
> class CreateWasteFacts < ActiveRecord::Migration
> def self.up
> # you should add indexes for each foreign key, but don't add
> # the foreign key itself unless you really know what you are doing.
> create_table :waste_facts do |t|
> t.column :waste_id, :integer, :null => false
> t.column :co2e_factor, :integer, :default => 1
> end
> add_index :waste_facts, :waste_id
> end
>
> def self.down
> drop_table :waste_facts
> end
> end
>
> As I could not get any information on net hence mailing on this list. Please
> help me resolve this problem. Thanks!
>
> _______________________________________________
> Activewarehouse-discuss mailing list
> [email protected]
> http://rubyforge.org/mailman/listinfo/activewarehouse-discuss
>
>
_______________________________________________
Activewarehouse-discuss mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/activewarehouse-discuss