Compartir a través de

Azure 数据工厂和 Azure Synapse Analytics 中带分隔符的文本格式

适用于:Azure 数据工厂 Azure Synapse Analytics

若要分析带分隔符的文本文件或以带分隔符的文本格式写入数据,请遵循此文章中的说明。

以下连接器支持带分隔符的文本格式:

数据集属性

有关可用于定义数据集的各部分和属性的完整列表,请参阅数据集一文。 本部分提供带分隔符的文本数据集支持的属性列表。

属性 描述 必需
type 数据集的类型属性必须设置为 DelimitedText
location 文件的位置设置。 每个基于文件的连接器在 location 下都有其自己的位置类型和支持的属性。
columnDelimiter 用于分隔文件中的列的字符。
默认值为“逗号(,)”。 当列分隔符定义为空字符串(意味着没有分隔符)时,整行将被视为单个列。
目前,只有映射数据流支持使用空字符串作为列分隔符,而复制活动则不支持。
rowDelimiter 对于复制活动,是用于分隔文件中的行的单个字符或“\r\n”。 默认值为以下任何一项:[“\r\n”、“\r”、“\n”](读取时);“\r\n”(写入时)。 “\r\n”仅在复制命令中受支持。
对于映射数据流,是用于分隔文件中的行的单个或两个字符。 默认值为以下任何一项:[“\r\n”、“\r”、“\n”](读取时);“\n”(写入时)。
当行分隔符设置为“无分隔符”(空字符串)时,列分隔符也必须设置为“无分隔符”(空字符串),这意味着将整个内容视为单个值。
目前,只有映射数据流支持使用空字符串作为行分隔符,而复制活动则不支持。
quoteChar 当列包含列分隔符时,用于括住列值的单个字符。
默认值为双引号 "
quoteChar 定义为空字符串时,它表示不使用引号字符且不用引号括住列值,escapeChar 用于转义列分隔符和值本身。
escapeChar 用于转义括住值中的引号的单个字符。
默认值为反斜杠\
escapeChar 定义为空字符串时,quoteChar 也必须设置为空字符串。在这种情况下,应确保所有列值不包含分隔符。
firstRowAsHeader 指定是否要将第一行视为/设为包含列名称的标头行。
允许的值为 truetrue(默认值)。
当“将第一行用作标题”为 false 时,请注意,UI 数据预览和查找活动输出会自动以 Prop_{n} 格式(从 0 开始)生成列名称,复制活动需要使用从源到接收器的显式映射,并且按序号(从 1 开始)定位各个列,映射数据流以 Column_{n} 格式(从 1 开始)的名称列出和定位各个列。
nullValue 指定 null 值的字符串表示形式。
默认值为空字符串
encodingName 用于读取/写入测试文件的编码类型。
允许的值如下所示:“UTF-8”、“不带 BOM 的 UTF-8”、“UTF-16”、“UTF-16BE”、“UTF-32”、“UTF-32BE”、“US-ASCII”、“UTF-7”“BIG5”、“EUC-JP”、“EUC-KR”、“GB2312”、“GB18030”、“JOHAB”、“SHIFT-JIS”、“CP875”、“CP866”、“IBM00858”、“IBM037”、“IBM273”、“IBM437”、“IBM500”、“IBM737”、“IBM775”、“IBM850”、“IBM852”、“IBM855”、“IBM857”、“IBM860”、“IBM861”、“IBM863”、“IBM864”、“IBM865”、“IBM869”、“IBM870”、“IBM01140”、“IBM01141”、“IBM01142”、“IBM01143”、“IBM01144”、“IBM01145”、“IBM01146”、“IBM01147”、“IBM01148”、“IBM01149”、“ISO-2022-JP”、“ISO-2022-KR”、“ISO-8859-1”、“ISO-8859-2”、“ISO-8859-3”、“ISO-8859-4”、“ISO-8859-5”、“ISO-8859-6”、“ISO-8859-7”、“ISO-8859-8”、“ISO-8859-9”、“ISO-8859-13”、“ISO-8859-15”、“WINDOWS-874”、“WINDOWS-1250”、“WINDOWS-1251”、“WINDOWS-1252”、“WINDOWS-1253”、“WINDOWS-1254”、“WINDOWS-1255”、“WINDOWS-1256”、“WINDOWS-1257”、“WINDOWS-1258”。
注意,映射数据流不支持 UTF-7 编码。
请注意,映射数据流不支持使用字节顺序标记 (BOM) 进行 UTF-8 编码。
compressionCodec 用于读取/写入文本文件的压缩编解码器。
允许的值为 bzip2、gzip、deflate、ZipDeflate、TarGzip、Tar、snappy 或 lz4 。 默认设置是不压缩。
注意:目前,复制活动不支持“snappy”和“lz4”,映射数据流不支持“ZipDeflate”、“TarGzip”和“Tar”。
注意,使用复制活动解压缩 ZipDeflate/TarGzip/Tar 文件并将其写入基于文件的接收器数据存储时,默认情况下文件将提取到 <path specified in dataset>/<folder named as source compressed file>/ 文件夹,对复制活动源使用 preserveZipFileNameAsFolder/preserveCompressionFileNameAsFolder 来控制是否以文件夹结构形式保留压缩文件名 。
compressionLevel 压缩率。
允许的值为 OptimalFastest
- Fastest:尽快完成压缩操作,不过,无法以最佳方式压缩生成的文件。
- 最佳:以最佳方式完成压缩操作,不过,需要耗费更长的时间。 有关详细信息,请参阅 Compression Level(压缩级别)主题。

下面是 Azure Blob 存储上的带分隔符的文本数据集的示例:

{
    "name": "DelimitedTextDataset",
    "properties": {
        "type": "DelimitedText",
        "linkedServiceName": {
            "referenceName": "<Azure Blob Storage linked service name>",
            "type": "LinkedServiceReference"
        },
        "schema": [ < physical schema, optional, retrievable during authoring > ],
        "typeProperties": {
            "location": {
                "type": "AzureBlobStorageLocation",
                "container": "containername",
                "folderPath": "folder/subfolder",
            },
            "columnDelimiter": ",",
            "quoteChar": "\"",
            "escapeChar": "\"",
            "firstRowAsHeader": true,
            "compressionCodec": "gzip"
        }
    }
}

复制活动属性

有关可用于定义活动的各部分和属性的完整列表,请参阅管道一文。 本部分提供带分隔符的文本源和接收器支持的属性列表。

带分隔符的文本作为源

复制活动的 *source* 部分支持以下属性。

属性 描述 必需
type 复制活动源的 type 属性必须设置为 DelimitedTextSource
formatSettings 一组属性。 请参阅下面的“带分隔符的文本读取设置”表。
storeSettings 有关如何从数据存储读取数据的一组属性。 每个基于文件的连接器在 storeSettings 下都有其自己支持的读取设置。

formatSettings 下支持的带分隔符的文本读取设置

属性 描述 必需
type formatSettings 的类型必须设置为 DelimitedTextReadSettings
skipLineCount 指示从输入文件读取数据时要跳过的非空行数 。
如果同时指定了 skipLineCount 和 firstRowAsHeader,则先跳过行,然后从输入文件读取标头信息。
compressionProperties 一组属性,指示如何为给定的压缩编解码器解压缩数据。
preserveZipFileNameAsFolder
(在 compressionProperties->type 下为 ZipDeflateReadSettings
当输入数据集配置了 ZipDeflate 压缩时适用。 指示是否在复制过程中以文件夹结构形式保留源 zip 文件名。
- 如果设置为“true(默认)”,服务会将解压缩的文件写入 <path specified in dataset>/<folder named as source zip file>/
- 如果设置为“false”,服务会将解压缩的文件直接写入 <path specified in dataset>。 请确保不同的源 zip 文件中没有重复的文件名,以避免产生冲突或出现意外行为。
preserveCompressionFileNameAsFolder
(在 compressionProperties->type 下为 TarGZipReadSettingsTarReadSettings
当输入数据集配置了 TarGzip/Tar 压缩时适用 。 指示是否在复制过程中以文件夹结构形式保留源压缩文件名。
- 如果设置为“true(默认)”,服务会将解压缩文件写入 <path specified in dataset>/<folder named as source compressed file>/
- 如果设置为“false”,服务会将解压文件直接写入 <path specified in dataset>。 请确保不同的源文件中没有重复的文件名,以避免产生冲突或出现意外行为。
"activities": [
    {
        "name": "CopyFromDelimitedText",
        "type": "Copy",
        "typeProperties": {
            "source": {
                "type": "DelimitedTextSource",
                "storeSettings": {
                    "type": "AzureBlobStorageReadSettings",
                    "recursive": true
                },
                "formatSettings": {
                    "type": "DelimitedTextReadSettings",
                    "skipLineCount": 3,
                    "compressionProperties": {
                        "type": "ZipDeflateReadSettings",
                        "preserveZipFileNameAsFolder": false
                    }
                }
            },
            ...
        }
        ...
    }
]

带分隔符的文本作为接收器

复制活动的 *sink* 部分支持以下属性。

属性 描述 必需
type 复制活动源的 type 属性必须设置为 DelimitedTextSink
formatSettings 一组属性。 请参阅下面的“带分隔符的文本写入设置”表。
storeSettings 有关如何将数据写入到数据存储的一组属性。 每个基于文件的连接器在 storeSettings 下都有其自身支持的写入设置。

formatSettings 下支持的带分隔符的文本写入设置

属性 描述 必需
type formatSettings 的类型必须设置为 DelimitedTextWriteSettings
fileExtension 用来为输出文件命名的扩展名,例如 .csv.txt。 未在 DelimitedText 输出数据集中指定 fileName 时,必须指定该扩展名。 如果在输出数据集中配置了文件名,则它将其用作接收器文件名,并且将忽略文件扩展名设置。 未在输出数据集中指定文件名时为“是”
maxRowsPerFile 在将数据写入到文件夹时,可选择写入多个文件,并指定每个文件的最大行数。
fileNamePrefix 配置 maxRowsPerFile 时适用。
在将数据写入多个文件时,指定文件名前缀,生成的模式为 <fileNamePrefix>_00000.<fileExtension>。 如果未指定,将自动生成文件名前缀。 如果源是基于文件的存储或已启用分区选项的数据存储,则此属性不适用。

映射数据流属性

在映射数据流时,可以在以下数据存储中读取和写入分隔文本格式:Azure Blob 存储Azure Data Lake Storage Gen2SFTP

内联数据集

映射数据流支持将“内联数据集”作为定义源和接收器的选项。 内联分隔式数据集直接在源和接收器转换中定义,并且不会在定义的数据流外部共享。 该数据集对直接在数据流中参数化数据集属性非常有用,并且可以从共享 ADF 数据集的性能改进中获益。

读取大量源文件夹和文件时,可以通过在“投影 | 架构”选项对话框中设置选项“用户投影架构”来提升数据流文件发现的性能。 此选项会关闭 ADF 的默认架构自动发现,并将极大地提升文件发现的性能。 在设置此选项前,请务必导入投影,以便 ADF 具有用于投影的现有架构。 此选项不适用于架构偏差。

源属性

下表列出了带分隔符的文本源支持的属性。 你可以在“源选项”选项卡中编辑这些属性。

名称 说明 必需 允许的值 数据流脚本属性
通配符路径 将处理与通配符路径匹配的所有文件。 重写数据集中设置的文件夹和文件路径。 String[] wildcardPaths
分区根路径 对于已分区的文件数据,可以输入分区根路径,以便将已分区的文件夹读取为列 字符串 partitionRootPath
文件列表 源是否指向某个列出待处理文件的文本文件 truefalse fileList
多行行 源文件是否包含跨多个行的行。 多行值必须用引号引起来。 truefalse multiLineRow
用于存储文件名的列 使用源文件名称和路径创建新列 字符串 rowUrlColumn
完成后 在处理后删除或移动文件。 文件路径从容器根开始 删除:truefalse
Move:['<from>', '<to>']
purgeFiles
moveFiles
按上次修改时间筛选 选择根据上次更改时间筛选文件 时间戳 modifiedAfter
modifiedBefore
允许找不到文件 如果为 true,则找不到文件时不会引发错误 truefalse ignoreNoFilesFound
最大列数 默认值为 20480。 当列号超出 20480 时自定义此值 Integer maxColumns

注意

文件列表的数据流源支持仅限文件中的 1024 项。 若要包含更多文件,请在文件列表中使用通配符。

源示例

下图是映射数据流中带分隔符的文本源配置的示例。

DelimitedText 源

关联的数据流脚本为:

source(
    allowSchemaDrift: true,
        validateSchema: false,
        ignoreNoFilesFound: false,
        multiLineRow: true,
        wildcardPaths:['*.csv']) ~> CSVSource

注意

数据流源支持 Hadoop 文件系统支持的一组有限的 Linux 通配

接收器属性

下表列出了带分隔符的文本接收器支持的属性。 可以在“设置”选项卡中编辑这些属性。

名称 说明 必需 允许的值 数据流脚本属性
清除文件夹 如果在写入前目标文件夹已被清除 truefalse truncate
文件名选项 写入的数据的命名格式。 默认情况下,每个分区有一个 part-#####-tid-<guid> 格式的文件 模式:字符串
每分区:String[]
将文件命名为列数据:字符串
输出到单个文件:['<fileName>']
将文件夹命名为列数据:字符串
filePattern
partitionFileNames
rowUrlColumn
partitionFileNames
rowFolderUrlColumn
全部引用 将所有值括在引号中 truefalse quoteAll
标头 向输出文件添加客户标头 [<string array>] 标头的值开始缓存响应

接收器示例

下图是映射数据流中带分隔符的文本接收器配置的示例。

DelimitedText 接收器

关联的数据流脚本为:

CSVSource sink(allowSchemaDrift: true,
    validateSchema: false,
    truncate: true,
    skipDuplicateMapInputs: true,
    skipDuplicateMapOutputs: true) ~> CSVSink

下面是与带分隔符的文本格式相关的一些常见连接器和格式: