【问题标题】:Relational Data to Flat File关系数据到平面文件
【发布时间】:2010-12-25 05:25:28
【问题描述】:

我希望您能帮助找到一个问题的答案,该问题将成为工作中反复出现的主题。这涉及将 RDBMS 表中的数据非规范化为具有跨列重复组(共享域和含义)的平面文件格式。不幸的是,这是不可避免的。

这是我需要的一个非常简化的转换示例:

表 A 表 B ------------------- 1 -> 许多 --------------- - A_KEY FIELD_A B_KEY A_KEY FIELD_B A_KEY_01 A_VALUE_01 B_KEY_01 A_KEY_01 B_VALUE_01 A_KEY_02 A_VALUE_02 B_KEY_02 A_KEY_01 B_VALUE_02 B_KEY_03 A_KEY_02 B_VALUE_03

这将变成:

A_KEY FIELD_A B_KEY1 FIELD_B1 B_KEY2 FIELD_B2 A_KEY_01 A_VALUE_01 B_KEY_01 B_VALUE_01 B_KEY_02 B_VALUE_02 A_KEY_02 A_VALUE_02 B_KEY_03 B_VALUE_03

TABLE A 中的每个条目将在输出平面文件中有一行,TABLE B 中的每个相关字段有一列。对于从TABLE B 获取的字段,输出文件中的列可以具有空值。

我意识到这将创建一个非常的文件,但这是一个要求。我看过 MapForce 和 Apatar,但我认为这个问题太离奇或者我无法正确使用它们。

我的问题:是否已经有一种工具可以做到这一点,还是我应该从头开发一个(我不想重新发明轮子)?

【问题讨论】:

  • 这是标准的“表中的行到结果中的列”的问题吗?这并不奇怪,这很常见。在 SO 和 Google 上搜索“表行到结果列”。根据您阅读的内容,用任何具体问题更新此内容。
  • 谢谢,我环顾四周并没有发现同样的问题 - 我可能只是没有让自己说清楚。我会考虑如何让这个问题的微妙之处更加明显。

标签: rdbms flat-file denormalization


【解决方案1】:

我很确定你不能用普通的 SQL 来解决这个问题,但是根据你的 RDBMS,可能会创建一个存储过程或类似的东西。否则,在脚本语言中是一件相当容易的事情。您使用的是哪种技术?

【讨论】:

  • 对于 RDBMS,解决方案必须尽可能与技术无关。我可以在不将我的代码耦合到数据库供应商的情况下对其进行编码。开始看起来有些解决方案几乎就在那里,但并非一直如此。
  • 在这种情况下,您可以使用通用脚本语言,例如 Python 或类似语言。大概有 20 行代码。
【解决方案2】:

这有帮助吗?

using-pivot-in-sql-server-2008

【讨论】:

  • 谢谢,pivot 很接近,但与我需要的略有不同。
【解决方案3】:

感谢您的所有帮助。事实证明,关系是 ONE -> MAX of 3 并且此约束不会改变,因为数据现在是静态的,因此以下普通 SQL 起作用:

选择 A.A_KEY、A.FIELD_A、B.B_KEY、B.FIELD_B、B2.B_KEY、B2.FIELD_B、B3.B_KEY、 B3.FIELD_B 从 A 左连接 B on (A.A_KEY = B.A_KEY) 在(A.A_KEY = B2.A_KEY 和 B2.B_KEY != B.B_KEY)上左加入 B B2 在 (A.A_KEY = B3.A_KEY 和 B3.B_KEY != B.B_KEY 上左加入 B B3 和 B3.B_KEY != B2.B_KEY) 按 A.A_KEY 分组 由 A.A_KEY 订购

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-22
    相关资源
    最近更新 更多