2020-08-18 15:49发布
点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)我正在为必须将视图中的数据加载到... 显示全部
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
我正在为必须将视图中的数据加载到平面文件中的情况而苦苦挣扎。
视图将是动态的,其中列名称中的列数据类型将不时更改。 我有SAP Data Services可以将此视图加载到单个平面文件中。 有没有一种方法可以将这些数据动态加载到平面文件中,而无需定义列名称和列数据类型?
我已创建视图以读取并加载符合HANA中某些条件的多个表,现在想将数据加载到平面文件中
TL; DR
您正在尝试使用静态类型语言(SQL)解决动态类型问题(任意表结构)。 那不可能 使用动态SQL 可能有帮助,但不能解决整个问题。
相反,您需要一个程序来检查数据库目录并为您创建SELECT语句。
是的,当然,首先,整个想法很可能是垃圾。
----
我假设这与您的 /img/questions/13054093/duplicate-column-headers-hana.html 。
因此,本质上 ,您知道一些条件,并且知道与该条件匹配的数据在数据库中。 现在,您希望将这些数据导出到单个平面文件中。
这是一个非常具体的问题描述。
一种方法是只浏览数据库中的每个表,将其内容写到文件中,然后将每个表的内容添加到同一文件中。
以某种方式有用吗? 可能不会,因为从不同表保存的每个数据块中文件中存储的数据结构都会改变。
您的其他问题暗示应该通过匹配某些ID将数据连接在一起 柱。 通过使用FULL OUTER JOIN,您基本上会说:我不在乎是否存在匹配项,如果存在则将数据彼此相邻。
听起来正确吗?
综合考虑,您似乎希望的数据结构如下所示:
(表1:col_ID,col_1,col_2,...)+(表2: col_ID,col_1,col_23)...
我在这里用'+'表示"粘在一起"。
在此讨论中,您应该意识到 您尝试在与SELECT或CREATE VIEW所提供的级别不同的级别上解决问题。 SQL是一种静态语言,这意味着它所使用的数据结构已明确指定。 它从不是"像这样的表",而总是"这个特定的表/列/视图" ...
要实现您似乎想做的事情,您需要创建一个创建静态表的过程 数据库的SQL命令。 这些静态SQL命令将创建列的"粘在一起"转储。
幸运的是,您可以编写这样的程序。
生成的SQL(非动态)
SQL数据库带有数据库目录,该目录允许检查哪些表可用以及所有这些表具有哪些列。
您的程序现在将需要遍历所有表(您认为与此相关),并找出在何处多次使用了列名。 对于每种冲突,您都需要决定如何处理(更改输出名称,只需使用其中一列,就完全忽略它)。
此处理阶段会生成一个列表 具有唯一列名的投影列(加上源表引用)和连接的表。
下一步是将其转换为有效的SQL(这应该很简单,因为语句的通用结构就是SELECT ... <所有列> FROM
应用语句
现在,您已经创建了输出结构,并且 选择SELECT来填充它-您又回到了"静态类型"状态,并且所有SQL工具又可以正常工作。
也许您对Java和OO很熟悉,如果可以,可以将其视为
DB2FlatFileStatementFactory(输入db_catalog,输出sql_statement)
种类。
注意事项
1)接下来要粘贴所有数据 彼此之间,您强烈假设数据模型实际上只是一组 独立的表,每个表中每个ID最多一个记录。 尽管这可能是一种非常罕见的数据库设计(通常是错误的/错误的)。
由于您的方法严重依赖于此假设,因此您可能需要考虑检查每个表是否都适用(例如,通过检查 (所有ID列实际上都是表的完整主键)。
2)谁或什么将消耗生成的平面文件,必须能够了解该平面的当前结构 文件。 鉴于问题描述的含糊不清,我想这将归结为常规和猜测的混合。 交换有意义的信息不是很好的组合。
无论如何,现在您知道了该怎么做。
最多设置5个标签!
TL; DR
您正在尝试使用静态类型语言(SQL)解决动态类型问题(任意表结构)。 那不可能 使用动态SQL 可能有帮助,但不能解决整个问题。
相反,您需要一个程序来检查数据库目录并为您创建SELECT语句。
是的,当然,首先,整个想法很可能是垃圾。
----
我假设这与您的 /img/questions/13054093/duplicate-column-headers-hana.html 。
因此,本质上 ,您知道一些条件,并且知道与该条件匹配的数据在数据库中。 现在,您希望将这些数据导出到单个平面文件中。
这是一个非常具体的问题描述。
一种方法是只浏览数据库中的每个表,将其内容写到文件中,然后将每个表的内容添加到同一文件中。
以某种方式有用吗? 可能不会,因为从不同表保存的每个数据块中文件中存储的数据结构都会改变。
您的其他问题暗示应该通过匹配某些ID将数据连接在一起 柱。 通过使用FULL OUTER JOIN,您基本上会说:我不在乎是否存在匹配项,如果存在则将数据彼此相邻。
听起来正确吗?
综合考虑,您似乎希望的数据结构如下所示:
我在这里用'+'表示"粘在一起"。
在此讨论中,您应该意识到 您尝试在与SELECT或CREATE VIEW所提供的级别不同的级别上解决问题。 SQL是一种静态语言,这意味着它所使用的数据结构已明确指定。 它从不是"像这样的表",而总是"这个特定的表/列/视图" ...
要实现您似乎想做的事情,您需要创建一个创建静态表的过程 数据库的SQL命令。 这些静态SQL命令将创建列的"粘在一起"转储。
幸运的是,您可以编写这样的程序。
生成的SQL(非动态)
SQL数据库带有数据库目录,该目录允许检查哪些表可用以及所有这些表具有哪些列。
您的程序现在将需要遍历所有表(您认为与此相关),并找出在何处多次使用了列名。
对于每种冲突,您都需要决定如何处理(更改输出名称,只需使用其中一列,就完全忽略它)。
此处理阶段会生成一个列表 具有唯一列名的投影列(加上源表引用)和连接的表。
下一步是将其转换为有效的SQL(这应该很简单,因为语句的通用结构就是SELECT ... <所有列> FROM
应用语句
现在,您已经创建了输出结构,并且 选择SELECT来填充它-您又回到了"静态类型"状态,并且所有SQL工具又可以正常工作。
也许您对Java和OO很熟悉,如果可以,可以将其视为
种类。
注意事项
1)接下来要粘贴所有数据 彼此之间,您强烈假设数据模型实际上只是一组 独立的表,每个表中每个ID最多一个记录。 尽管这可能是一种非常罕见的数据库设计(通常是错误的/错误的)。
由于您的方法严重依赖于此假设,因此您可能需要考虑检查每个表是否都适用(例如,通过检查 (所有ID列实际上都是表的完整主键)。
2)谁或什么将消耗生成的平面文件,必须能够了解该平面的当前结构 文件。 鉴于问题描述的含糊不清,我想这将归结为常规和猜测的混合。 交换有意义的信息不是很好的组合。
无论如何,现在您知道了该怎么做。
一周热门 更多>
相关问答
采纳回答
编辑标签
举报内容
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
付费偷看金额在0.1-10元之间