有没有办法创建动态平面文件?

2020-08-18 15:49发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)我正在为必须将视图中的数据加载到...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


我正在为必须将视图中的数据加载到平面文件中的情况而苦苦挣扎。

视图将是动态的,其中列名称中的列数据类型将不时更改。 我有SAP Data Services可以将此视图加载到单个平面文件中。 有没有一种方法可以将这些数据动态加载到平面文件中,而无需定义列名称和列数据类型?

我已创建视图以读取并加载符合HANA中某些条件的多个表,现在想将数据加载到平面文件中

付费偷看设置
发送
1条回答
打一壶酱油
1楼-- · 2020-08-18 16:15

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

OUTER JOIN
...)。

应用语句

现在,您已经创建了输出结构,并且 选择SELECT来填充它-您又回到了"静态类型"状态,并且所有SQL工具又可以正常工作。

也许您对Java和OO很熟悉,如果可以,可以将其视为

 DB2FlatFileStatementFactory(输入db_catalog,输出sql_statement)

种类。

注意事项

1)接下来要粘贴所有数据 彼此之间,您强烈假设数据模型实际上只是一组 独立的表,每个表中每个ID最多一个记录。 尽管这可能是一种非常罕见的数据库设计(通常是错误的/错误的)。

由于您的方法严重依赖于此假设,因此您可能需要考虑检查每个表是否都适用(例如,通过检查 (所有ID列实际上都是表的完整主键)。

2)谁或什么将消耗生成的平面文件,必须能够了解该平面的当前结构 文件。 鉴于问题描述的含糊不清,我想这将归结为常规和猜测的混合。 交换有意义的信息不是很好的组合。

无论如何,现在您知道了该怎么做。

一周热门 更多>

向帮助了您的网友说句感谢的话吧!