使用 Ruby Sequel 的硬编码值插入 select
Insert into select with a hard coded value with Ruby Sequel
我每天使用 Ruby Sequel 将数据移动到报告 table 中。我正在将来自三个 table 的数据整合到一个 table 中。我在 Redshift 中这样做,所以我必须使用 disable_insert_returning
。两个 table 中的列名相互匹配但结尾 table 不匹配,这意味着我使用的是 graph
和 set_graph_aliases
。
reports = db[:reports]
report_columns = [:user_id, :purchase_date, :sku]
spoons_select_graph = {
user_id: :users,
purchase_date: :spoon_receipts,
product_id: :spoon_receipts
}
spoons = db[:spoon_receipts]
spoons_select = spoons.graph(:users, user_id: :user_id).set_graph_aliases(spoons_select_graph)
forks_select_graph = {
user_id: :users,
purchase_date: :fork_receipts,
product_id: :fork_receipts
}
forks = db[:fork_receipts]
forks_select = forks.graph(:users, user_id: :user_id).set_graph_aliases(forks_select_graph)
reports.disable_insert_returning.insert(report_columns, spoons_select)
reports.where(channel: nil).update(channel: 'spoons')
reports.disable_insert_returning.insert(report_columns, forks_select)
reports.where(channel: nil).update(channel: 'forks')
更新一直在进行。我想做的是将频道添加到 insert select
,这样我就不必返回更新。
您没有提供可执行设置,所以我还没有对此进行测试,但我认为它会起作用。基本思想是只向 select.
添加一个常量结果列
reports = db[:reports]
report_columns = [:user_id, :purchase_date, :sku, :channel]
spoons_select_graph = {
user_id: :users,
purchase_date: :spoon_receipts,
product_id: :spoon_receipts,
channel: [:spoon_receipts, :channel, 'spoons']
}
spoons = db[:spoon_receipts]
spoons_select = spoons.graph(:users, user_id: :user_id).set_graph_aliases(spoons_select_graph)
reports.disable_insert_returning.insert(report_columns, spoons_select)
有关详细信息,请参阅 set_graph_aliases
的文档。
我每天使用 Ruby Sequel 将数据移动到报告 table 中。我正在将来自三个 table 的数据整合到一个 table 中。我在 Redshift 中这样做,所以我必须使用 disable_insert_returning
。两个 table 中的列名相互匹配但结尾 table 不匹配,这意味着我使用的是 graph
和 set_graph_aliases
。
reports = db[:reports]
report_columns = [:user_id, :purchase_date, :sku]
spoons_select_graph = {
user_id: :users,
purchase_date: :spoon_receipts,
product_id: :spoon_receipts
}
spoons = db[:spoon_receipts]
spoons_select = spoons.graph(:users, user_id: :user_id).set_graph_aliases(spoons_select_graph)
forks_select_graph = {
user_id: :users,
purchase_date: :fork_receipts,
product_id: :fork_receipts
}
forks = db[:fork_receipts]
forks_select = forks.graph(:users, user_id: :user_id).set_graph_aliases(forks_select_graph)
reports.disable_insert_returning.insert(report_columns, spoons_select)
reports.where(channel: nil).update(channel: 'spoons')
reports.disable_insert_returning.insert(report_columns, forks_select)
reports.where(channel: nil).update(channel: 'forks')
更新一直在进行。我想做的是将频道添加到 insert select
,这样我就不必返回更新。
您没有提供可执行设置,所以我还没有对此进行测试,但我认为它会起作用。基本思想是只向 select.
添加一个常量结果列reports = db[:reports]
report_columns = [:user_id, :purchase_date, :sku, :channel]
spoons_select_graph = {
user_id: :users,
purchase_date: :spoon_receipts,
product_id: :spoon_receipts,
channel: [:spoon_receipts, :channel, 'spoons']
}
spoons = db[:spoon_receipts]
spoons_select = spoons.graph(:users, user_id: :user_id).set_graph_aliases(spoons_select_graph)
reports.disable_insert_returning.insert(report_columns, spoons_select)
有关详细信息,请参阅 set_graph_aliases
的文档。