我正在SSIS中创建一个进程,用于导入从供应商处收到的数据并将其导入表中。导入完成后,它将继续执行下一步,以创建固定宽度文件,以准备发送到另一个位置进行处理。我完全解析了第一行,但我需要在每行之间使用固定值99添加第二行作为预告记录。
当前行:
Col1 Col2 Col3 Col4 Col5
C1 AHS X000501787 0477802 20180410
C1 AHS Y000501832 0477805 20180410
C1 AHS Z000501844 0477803 20180410
C1 AHS E000501801 0477804 20180410
以下所需结果:
Col1 Col2 Col3 Col4 Col5
C1 AHS X000501787 0477802 20180410
99
C1 AHS Y000501832 0477805 20180410
99
C1 AHS Z000501844 0477803 20180410
99
C1 AHS E000501801 0477804 20180410
任何输入赞赏!
答案 0 :(得分:0)
您将遇到的问题是您正在尝试构建多条记录输出,而SSIS不会这样做。它期望每行中每列的格式相同。
我见过人们使用的两种方法是每行连接所有列,将SSIS中的格式定义为一列文件,并处理查询中的所有字符串格式。这是一种非常脆弱的做事方式。如果您正在构建真正不同的线路,则需要这种方法。即。
val dbUrl = "jdbc:mysql://..."
import akka.NotUsed
import akka.actor.ActorSystem
import akka.stream.alpakka.slick.scaladsl.SlickSession
import akka.stream.alpakka.slick.scaladsl.Slick
import akka.stream.scaladsl.Source
import akka.stream.{ActorMaterializer, Materializer}
import com.typesafe.config.ConfigFactory
import slick.jdbc.GetResult
import scala.concurrent.Await
import scala.concurrent.duration.Duration
val slickDbConfig = s"""
|profile = "slick.jdbc.MySQLProfile$$"
|db {
| dataSourceClass = "slick.jdbc.DriverDataSource"
| properties = {
| driver = "com.mysql.jdbc.Driver",
| url = "$dbUrl"
| }
|}
|""".stripMargin
implicit val actorSystem: ActorSystem = ActorSystem()
implicit val materializer: Materializer = ActorMaterializer()
implicit val slickSession: SlickSession = SlickSession.forConfig(ConfigFactory.parseString(slickDbConfig))
import slickSession.profile.api._
val responses: Source[String, NotUsed] = Slick.source(
sql"select my_text from my_table".as(GetResult(r => r.nextString())) // limit 100
)
val future = responses.runForeach((myText: String) =>
println("my_text: " + myText.length)
)
Await.result(future, Duration.Inf)
另一种方法是制作每个列字符串,然后为“关闭”行,只是不提供值。
您将遇到的另一个问题是如何定义分组。你的情况比较简单,因为它只是“每一排”。同样,您要么在查询中执行此操作,要么以异步方式使用脚本组件,因为1行= 2行。