在 ssis 中加载大一行扁平 json 文件

Load big one line flat json file in ssis

我正在尝试使用 SSIS 从我的本地驱动器加载一个基本上是 json 格式平面文件的大文件到 SQL 服务器。这是一个单行文件,我不需要指定列和行,因为我将在 SQL Server by OPENJSON 中立即解析它。

但是当我尝试在 Visual Studio SSIS 中创建平面文件源时,我无法做到这一点,因为即使我根据此处的解决方案使用 'fixed width' 格式:,作为最大宽度似乎是 32000,而 json 文件可能更大。

这是我的设置:

还有其他选项可以通过 t-sql 加载数据,例如 OPENROWSET,但我们 SQL 服务器实例安装在另一台服务器上,而不是我们正在进行开发工作的同一台服务器上。所以它们之间有一些安全限制。

所以只是想知道这是平面文件源在 SSIS 中的限制还是我没有做对?

您可能正在寻找导入列转换。 https://docs.microsoft.com/en-us/sql/integration-services/data-flow/transformations/import-column-transformation?view=sql-server-ver15

将数据流定义为 OLE 源 -> 导入列 -> OLE 目标。

OLE 源

真的,任何来源,但这是最容易复制的

SELECT 'C:\curl\output\source_data.txt' AS SourceFilePath;

这将添加名为 SourceFilePath 的单行列。

导入列

参考 Import Column Transformation 上的文章,但摘要是

  1. 检查将提供路径的列
  2. 向导入列集合添加一列以保存文件内容。根据您的 unicode-ness 将数据类型更改为 DT_TEXT/DT_NTEXT 并记下 LineageID 值
  3. 单击返回“导入列输入”并找到列名。向下滚动到自定义属性并使用上面的 LineageID 作为 FileDataColumnID,其中显示 0。 否则,您会收到
  4. 的错误

The "Import Column.Outputs[Import Column Output].Columns[FileContent]" is not referenced by any input column. Each output column must be referenced by exactly one input column.

OLE DB 目标

任何数据接收器都可以,但重要的是将我们的列从上一步映射到数据库中的 n/varchar(max)。