首页 文章

如何在Azure Data Factory 2中处理双管分隔符

提问于
浏览
2

我正在使用双管分隔文件,我想通过Data Factory(2)在Azure SQL DB中进行摄取:

列1 ||列2 ||栏3

在我的输入数据集中,我在typeProperties的format部分中将double pipe分隔符指定为columnDelimiter:

"format": {
            "type": "TextFormat",
            "rowDelimiter": "\n",
            "columnDelimiter": "||",
            "skipLineCount": 2
        }

不幸的是,这不起作用 . 所有行都标记为“不兼容”,并且我的SQL表中没有数据被摄取 . 接下来,我尝试了一些事情 . 如果未指定任何columnDelimiter,则会在SQL表的第一列中提取完整行,因此根本不会考虑分隔符 . 这是不正确的,逻辑上每个数据项必须在单独的列中摄取 . 脚本编写||在Unicode中也没有修复它 . 将我的输入文件转换为单个管道分隔时,它可以正常工作 . 但是,在最终状态中,我无法更改输入文件,因此处理双管分隔符至关重要 .

有什么想法吗?提前致谢!

2 回答

  • 1

    您可以要求输入文件的创建者使用单个分隔符(就像大多数人一样),否则您必须进行一些预处理 . 例如,您可以使用U-SQL步骤更正文件,然后将该文件导入SQL DB,例如一些简单的U-SQL:

    // Multiple column delimiters
    @input =
        EXTRACT 
            col1 string
        FROM "/input/input91.txt"
        USING Extractors.Text(delimiter:'~', skipFirstNRows:1);
    
    
    // Do some other processing here?
    @output  = SELECT col1.Replace("||", "|") AS col2 FROM @input;
    
    
    OUTPUT @output
    TO "/output/output.txt"
    USING Outputters.Text(delimiter : '|', quoting : false);
    

    NB我在这里使用了一个分隔符(代字号“〜”),我知道它不会出现在输入文件中,无法将所有列有效地导入为一列,然后将其修复 .

    您使用两个分隔符是否有特殊原因?

    此外,如果您的文件位于blob存储上,那么您现在可以_____82967_进入Azure SQL DB,并且刚刚给出了一个快速测试,BULK INSERT可以处理多个分隔符,例如

    DROP TABLE IF EXISTS #tmp
    
    CREATE TABLE #tmp (
        a VARCHAR(50),
        b VARCHAR(50),
        c VARCHAR(50),
    )
    GO
    
    BULK INSERT #tmp
    FROM 'D:\Data Lake\USQLDataRoot\input\input91.txt'
    WITH ( FIELDTERMINATOR  = '||', DATA_SOURCE = '<yourDataSource>' );
    

    有关涉及创建外部数据源和凭据的步骤的详细信息,请参阅here . 然后,您可以让Data Factory使用Stored Proc任务来执行 .

  • 1

    基于text format allowed rules,只允许一个字符 . 我甚至想使用转义分隔符来避免它,但它也被禁止 .

    enter image description here

    因此,似乎您需要在复制活动之前处理您的数据 . 因为ADF支持从HTTP endpoint复制数据,所以我建议您按照以下步骤操作:

    • 使用Azure功能逐行通过流方式读取文件 .

    2.更换所有'||'用'|'并在响应中设置它 . (别忘了'\ n')

    3.ADF将列分隔符设置为“|”并从HTTP endpoints 复制数据 .

    此解决方案可以处理大尺寸数据,当然,如果您不想执行此类复杂工作,您可以直接处理数据并将其另存为ADF的临时文件 .

    希望它能帮到你 .

相关问题