Formato de texto delimitado en Azure Data Factory

SE APLICA A: Azure Data Factory Azure Synapse Analytics

Siga este artículo cuando quiera analizar los archivos de texto delimitado o escribir los datos en formato de texto delimitado.

El formato de texto delimitado se admite para los conectores siguientes: Amazon S3, Azure Blob, Azure Data Lake Storage Gen1, Azure Data Lake Storage Gen2, Azure File Storage, File System, FTP, Google Cloud Storage, HDFS, HTTP y SFTP.

Propiedades del conjunto de datos

Si desea ver una lista completa de las secciones y propiedades disponibles para definir conjuntos de datos, consulte el artículo sobre conjuntos de datos. En esta sección se proporciona una lista de las propiedades que admite el conjunto de datos de texto delimitado.

Propiedad Descripción Obligatorio
type La propiedad type del conjunto de datos debe establecerse en DelimitedText.
ubicación Configuración de ubicación de los archivos. Cada conector basado en archivos tiene su propio tipo de ubicación y propiedades compatibles en location.
columnDelimiter Los caracteres usados para separar las columnas en un archivo.
El valor predeterminado es coma , . Cuando el delimitador de columna se define como cadena vacía (es decir, ningún delimitador), toda la línea se toma como una sola columna.
Actualmente, solo se admite el delimitador de columna como cadena vacía o de varios caracteres para el flujo de datos de asignación, pero no para la actividad de copia.
No
rowDelimiter El carácter único o "\r\n" usado para separar las filas en un archivo.
El valor predeterminado es cualquiera de los siguientes valores en lectura: ["\r\n", "\r", "\n"] , and "\n" o "\r\n" en escritura mediante el flujo de datos de asignación y la actividad de copia, respectivamente.
Cuando el delimitador de fila se establece en ningún delimitador (cadena vacía), también debe establecerse el delimitador de columna como ningún delimitador (cadena vacía), lo que significa que se trata todo el contenido como un valor único.
Actualmente, solo se admite el delimitador de fila como cadena vacía para el flujo de datos de asignación, pero no para la actividad de copia.
No
quoteChar El carácter único para entrecomillar los valores de columna si contiene el delimitador de columna.
El valor predeterminado es comillas dobles ".
Cuando quoteChar se define como una cadena vacía, significa que no hay ningún carácter de comillas y el valor de la columna no está entre comillas, y escapeChar se usa como carácter de escape para el delimitador de columna y para sí mismo.
No
escapeChar El carácter único para escapar las comillas dentro de un valor entre comillas.
El valor predeterminado es barra diagonal inversa\ .
Cuando escapeChar se define como una cadena vacía, quoteChar también debe establecerse como una cadena vacía. En este caso, asegúrese de que ninguno de los valores de columna contenga delimitadores.
No
firstRowAsHeader Especifica si se debe tratar o convertir la primera fila como una línea de encabezado con nombres de columnas.
Los valores permitidos son true y false (predeterminado).
Si la primera fila como encabezado es falsa, tenga en cuenta que la vista previa de los datos de la interfaz de usuario y la salida de la actividad de búsqueda generan automáticamente los nombres de columna como Prop_ {n} (a partir de 0) y la actividad de copia requiere una asignación explícita del origen al receptor y busca las columnas por ordinal (a partir de 1) y flujo de datos de asignación, y busca las columnas con el nombre Column_{n} (a partir de 1).
No
nullValue Especifica la representación de cadena del valor null.
El valor predeterminado es una cadena vacía.
No
encodingName El tipo de codificación usado para leer y escribir archivos de prueba.
Los valores permitidos son los siguientes: "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".
Tenga en cuenta que el flujo de datos de asignación no admite la codificación UTF-7.
No
compressionCodec El códec de compresión usado para leer y escribir archivos de texto.
Los valores permitidos son bzip2, gzip, deflate, ZipDeflate, TarGzip, Tar, snappy o Iz4. La opción predeterminada no se comprime.
Tenga en cuenta que actualmente la actividad de copia no admite "snappy" ni "lz4", y que el flujo de datos de asignación no admite "ZipDeflate", "TarGzip" ni "Tar".
Tenga en cuenta que, cuando se utiliza la actividad de copia para descomprimir archivos ZipDeflate/TarGzip/Tar y escribir en el almacén de datos receptor basado en archivos, los archivos se extraen de manera predeterminada en la carpeta: <path specified in dataset>/<folder named as source compressed file>/. Use preserveZipFileNameAsFolder/preserveCompressionFileNameAsFolder en el origen de la actividad de copia para controlar si se debe conservar el nombre de los archivos comprimidos como una estructura de carpetas.
No
compressionLevel La razón de compresión.
Los valores permitidos son Optimal o Fastest.
- Fastest: la operación de compresión debe completarse tan pronto como sea posible, incluso si el archivo resultante no se comprime de forma óptima.
- Optimal: la operación de compresión se debe comprimir óptimamente, incluso si tarda más tiempo en completarse. Para más información, consulte el tema Nivel de compresión .
No

A continuación encontrará un ejemplo de un conjunto de datos de texto delimitado en Azure Blob Storage:

{
    "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"
        }
    }
}

Propiedades de la actividad de copia

Si desea ver una lista completa de las secciones y propiedades disponibles para definir actividades, consulte el artículo sobre canalizaciones. En esta sección se proporciona una lista de las propiedades que admiten el origen y el receptor de texto delimitado.

Texto delimitado como origen

En la sección *source* de la actividad de copia se admiten las siguientes propiedades.

Propiedad Descripción Obligatorio
type La propiedad type del origen de la actividad de copia debe establecerse en DelimitedTextSource.
formatSettings Un grupo de propiedades. Consulte la tabla Configuración de lectura de texto delimitado a continuación. No
storeSettings Un grupo de propiedades sobre cómo leer datos de un almacén de datos. Cada conector basado en archivos tiene su propia configuración de lectura admitida en storeSettings. No

Configuración de lectura de texto delimitado admitida en formatSettings:

Propiedad Descripción Obligatorio
type La propiedad type de formatSettings debe establecerse en DelimitedTextReadSettings.
skipLineCount Indica el número de filas no vacías que se omitirán al leer datos de archivos de entrada.
Si se especifican ambos valores skipLineCount y firstRowAsHeader, las líneas se omiten primero y, luego, la información del encabezado se lee a partir del archivo de entrada.
No
compressionProperties Un grupo de propiedades sobre cómo descomprimir datos para un códec de compresión determinado. No
preserveZipFileNameAsFolder
(en compressionProperties->type como ZipDeflateReadSettings )
Se aplica cuando el conjunto de datos de entrada se configura con compresión ZipDeflate. Indica si se debe conservar el nombre del archivo ZIP de origen como estructura de carpetas durante la copia.
- Cuando se establece en true (valor predeterminado) , Data Factory escribe archivos descomprimidos en <path specified in dataset>/<folder named as source zip file>/.
- Cuando se establece en false, Data Factory escribe los archivos descomprimidos directamente en <path specified in dataset>. Asegúrese de que no tenga nombres de archivo duplicados en distintos archivos ZIP de origen para evitar comportamientos acelerados o inesperados.
No
preserveCompressionFileNameAsFolder
(en compressionProperties->type como TarGZipReadSettings o TarReadSettings )
Se aplica cuando el conjunto de datos de entrada está configurado con la compresión TarGzip/Tar. Indica si se debe conservar el nombre del archivo de origen comprimido como estructura de carpetas durante la copia.
- Cuando se establece en true (valor predeterminado) , Data Factory escribe los archivos descomprimidos en <path specified in dataset>/<folder named as source compressed file>/.
- Cuando se establece en false, Data Factory escribe los archivos descomprimidos directamente en <path specified in dataset>. Asegúrese de que no haya nombres de archivo duplicados en distintos archivos de origen para evitar comportamientos acelerados o inesperados.
No
"activities": [
    {
        "name": "CopyFromDelimitedText",
        "type": "Copy",
        "typeProperties": {
            "source": {
                "type": "DelimitedTextSource",
                "storeSettings": {
                    "type": "AzureBlobStorageReadSettings",
                    "recursive": true
                },
                "formatSettings": {
                    "type": "DelimitedTextReadSettings",
                    "skipLineCount": 3,
                    "compressionProperties": {
                        "type": "ZipDeflateReadSettings",
                        "preserveZipFileNameAsFolder": false
                    }
                }
            },
            ...
        }
        ...
    }
]

Texto delimitado como receptor

En la sección *sink* de la actividad de copia se admiten las siguientes propiedades.

Propiedad Descripción Obligatorio
type La propiedad type del origen de la actividad de copia debe establecerse en DelimitedTextSink.
formatSettings Un grupo de propiedades. Consulte la tabla Configuración de escritura de texto delimitado a continuación. No
storeSettings Un grupo de propiedades sobre cómo escribir datos en un almacén de datos. Cada conector basado en archivos tiene su propia configuración de escritura admitida en storeSettings. No

Configuración de escritura de texto delimitado admitida en formatSettings:

Propiedad Descripción Obligatorio
type La propiedad type de formatSettings debe establecerse en DelimitedTextWriteSettings.
fileExtension La extensión de archivo que se usa para denominar los archivos de salida, por ejemplo: .csv, .txt. Debe especificarse cuando no se especifica fileName en el conjunto de datos DelimitedText de salida. Cuando el nombre de archivo se configure en el conjunto de resultados de salida, se usará como nombre de archivo receptor y se omitirá la configuración de la extensión de archivo. Sí, cuando no se especifica el nombre de archivo en el conjunto de datos de salida
maxRowsPerFile Al escribir datos en una carpeta, puede optar por escribir en varios archivos y especificar el número máximo de filas por archivo. No
fileNamePrefix Se aplica cuando se configura maxRowsPerFile.
Especifique el prefijo de nombre de archivo al escribir datos en varios archivos, lo que da como resultado este patrón: <fileNamePrefix>_00000.<fileExtension>. Si no se especifica, el prefijo de nombre de archivo se generará automáticamente. Esta propiedad no se aplica cuando el origen es un almacén basado en archivos o un almacén de datos habilitado para la opción de partición.
No

Propiedades de Asignación de instancias de Data Flow

En los flujos de datos de asignación, puede leer y escribir en formato de texto delimitado en los siguientes almacenes de datos: Azure Blob Storage, Azure Data Lake Storage Gen1 y Azure Data Lake Storage Gen2.

Propiedades de origen

En la tabla siguiente se enumeran las propiedades que un origen de texto delimitado admite. Puede editar estas propiedades en la pestaña Source options (Opciones de origen).

Nombre Descripción Obligatorio Valores permitidos Propiedad de script de flujo de datos
Rutas de acceso comodín Se procesarán todos los archivos que coincidan con la ruta de acceso comodín. Reemplaza a la carpeta y la ruta de acceso del archivo establecidas en el conjunto de datos. no String[] wildcardPaths
Ruta de acceso raíz de la partición En el caso de datos de archivos con particiones, puede especificar una ruta de acceso raíz de la partición para leer las carpetas con particiones como columnas. no String partitionRootPath
Lista de archivos Si el origen apunta a un archivo de texto que enumera los archivos que se van a procesar. no true o false fileList
Filas de varias líneas El archivo de código fuente contiene filas que abarcan varias líneas. Los valores de varias líneas deben estar entre comillas. no true ni false multiLineRow
Columna para almacenar el nombre de archivo Se crea una nueva columna con el nombre y la ruta de acceso del archivo de origen. no String rowUrlColumn
Después de finalizar Se eliminan o mueven los archivos después del procesamiento. La ruta de acceso del archivo comienza en la raíz del contenedor. no Borrar: true o false
Mover: ['<from>', '<to>']
purgeFiles
moveFiles
Filtrar por última modificación Elija si desea filtrar los archivos en función de cuándo se modificaron por última vez. no Timestamp modifiedAfter
modifiedBefore
No permitir que se encuentren archivos Si es true, no se devuelve un error si no se encuentra ningún archivo. no true o false ignoreNoFilesFound

Ejemplo de origen

En la imagen siguiente se presenta un ejemplo de una configuración de origen de texto delimitado en flujos de datos de asignación.

Origen DelimitedText

El script de flujo de datos asociado es:

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

Nota

Los orígenes de flujo de datos admiten un conjunto limitado de globalidad de Linux que es compatible con los sistemas de archivos de Hadoop

Propiedades del receptor

En la tabla siguiente se enumeran las propiedades que un receptor de texto delimitado admite. Puede editar estas propiedades en la pestaña Configuración.

Nombre Descripción Obligatorio Valores permitidos Propiedad de script de flujo de datos
Borrar la carpeta Si la carpeta de destino se borra antes de escribir. no true o false truncate
Opción de nombre de archivo El formato de nombre de los datos escritos. De forma predeterminada, un archivo por partición en formato part-#####-tid-<guid>. no Patrón: String
Por partición: String[]
Asignar nombre al archivo como datos de columna: cadena
Salida en un solo archivo: ['<fileName>']
Asignar nombre a la carpeta como datos de columna: cadena
filePattern
partitionFileNames
rowUrlColumn
partitionFileNames
rowFolderUrlColumn
Entrecomillar todo Incluye todos los valores entre comillas. no true o false quoteAll
Encabezado Agrega encabezados de cliente a archivos de salida. no [<string array>] header

Ejemplo de receptor

En la imagen siguiente se presenta un ejemplo de una configuración de receptor de texto delimitado en flujos de datos de asignación.

Receptor DelimitedText

El script de flujo de datos asociado es:

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

Pasos siguientes