Copia y transformación de datos en Snowflake mediante Azure Data Factory o Azure Synapse Analytics (heredado)

SE APLICA A: Azure Data Factory Azure Synapse Analytics

Sugerencia

Pruebe Data Factory en Microsoft Fabric, una solución de análisis todo en uno para empresas. Microsoft Fabric abarca todo, desde el movimiento de datos hasta la ciencia de datos, el análisis en tiempo real, la inteligencia empresarial y los informes. Obtenga información sobre cómo iniciar una nueva evaluación gratuita.

En este artículo se explica cómo usar la actividad de copia en las canalizaciones de Azure Data Factory y Azure Synapse para copiar datos desde y hacia Snowflake, y también cómo usar Data Flow para transformar datos en Snowflake. Para obtener más información, vea el artículo introductorio de Data Factory o Azure Synapse Analytics.

Importante

El servicio ha publicado un nuevo conector de Snowflake que proporciona una mejor compatibilidad nativa con Snowflake; consulte el artículo del conector de Snowflake para más información.

Funcionalidades admitidas

Este conector Snowflake es compatible con las funcionalidades siguientes:

Funcionalidades admitidas IR
Actividad de copia (origen/receptor) ① ②
Flujo de datos de asignación (origen/receptor)
Actividad de búsqueda ① ②
Actividad de script ① ②

① Azure Integration Runtime ② Entorno de ejecución de integración autohospedado

Para la actividad de copia, este conector Snowflake admite las siguientes funciones:

  • Copie los datos de Snowflake que usan el comando COPY into [ubicación] de Snowflake para lograr el mejor rendimiento.
  • Copie los datos a Snowflake que aprovechan el comando [tabla] de Snowflake para lograr el mejor rendimiento. Es compatible con Snowflake en Azure.
  • Si se requiere un proxy para conectarse a Snowflake desde un entorno de ejecución de integración autohospedado, debe configurar las variables de entorno para HTTP_PROXY y HTTPS_PROXY en el host del entorno de ejecución de integración.

Prerrequisitos

Si el almacén de datos se encuentra en una red local, una red virtual de Azure o una nube privada virtual de Amazon, debe configurar un entorno de ejecución de integración autohospedado para conectarse a él. Asegúrese de agregar las direcciones IP que usa el entorno de ejecución de integración autohospedado para la lista de permitidos.

Si el almacén de datos es un servicio de datos en la nube administrado, puede usar Azure Integration Runtime. Si el acceso está restringido a las direcciones IP que están aprobadas en las reglas de firewall, puede agregar direcciones IP de Azure Integration Runtime a la lista de permitidos.

La cuenta de Snowflake que se usa para el origen o el receptor debe tener el acceso USAGE necesario en la base de datos, así como acceso de lectura y escritura en el esquema y las tablas o vistas en este. Además, también debe tener CREATE STAGE en el esquema para poder crear la fase externa con el URI de SAS.

Deben establecerse los valores de las propiedades de la cuenta siguientes:

Propiedad Descripción Necesario Valor predeterminado
REQUIRE_STORAGE_INTEGRATION_FOR_STAGE_CREATION Especifica si se debe requerir un objeto de integración de almacenamiento como credenciales de nube al crear una fase externa con nombre (mediante CREATE STAGE) para acceder a una ubicación de almacenamiento en la nube privada. false false
REQUIRE_STORAGE_INTEGRATION_FOR_STAGE_OPERATION Especifica si se debe requerir el uso de una fase externa con nombre que haga referencia a un objeto de integración de almacenamiento como credenciales de nube al cargar o descargar datos en una ubicación de almacenamiento en la nube privada. false false

Consulte Estrategias de acceso a datos para más información sobre los mecanismos de seguridad de red y las opciones que admite Data Factory.

Introducción

Para realizar la actividad de copia con una canalización, puede usar una de los siguientes herramientas o SDK:

Creación de un servicio vinculado en mediante la interfaz de usuario

Siga estos pasos para crear un servicio vinculado en Snowflake en la interfaz de usuario de Azure Portal.

  1. Vaya a la pestaña Administrar del área de trabajo de Azure Data Factory o Synapse y seleccione Servicios vinculados; luego haga clic en Nuevo:

  2. Busque Snowflake y seleccione el conector de Snowflake.

    Screenshot of the Snowflake connector.

  3. Configure los detalles del servicio, pruebe la conexión y cree el nuevo servicio vinculado.

    Screenshot of linked service configuration for Snowflake.

Detalles de configuración del conector

En las secciones siguientes se proporcionan detalles sobre las propiedades que definen entidades específicas de un conector de Snowflake.

Propiedades del servicio vinculado

Este conector de Snowflake admite los tipos de autenticación siguientes. Consulte las secciones correspondientes para más información.

Autenticación básica

Las siguientes propiedades son compatibles con un servicio vinculado de Snowflake al usar la autenticación Básica.

Propiedad Descripción Obligatorio
type La propiedad type debe establecerse en Snowflake.
connectionString Especifica la información necesaria para conectarse a la instancia de Snowflake. Puede optar por colocar una contraseña o una cadena de conexión completa en Azure Key Vault. Consulte los ejemplos que aparecen debajo de la tabla y el artículo Almacenamiento de credenciales en Azure Key Vault para obtener información detallada.

Estos son algunos valores de configuración habituales:
- Nombre de cuenta: el nombre completo de la cuenta de Snowflake (incluidos los segmentos adicionales que identifican la región y la plataforma en la nube); por ejemplo, xy12345.east-us-2.azure.
- Nombre de usuario: el nombre de inicio de sesión del usuario para la conexión.
- Contraseña: Contraseña del usuario.
- Base de datos: la base de datos predeterminada que se va a usar una vez conectado. Debe ser una base de datos existente para la que el rol especificado tenga privilegios.
- Almacén: el almacén virtual que se va a usar una vez conectado. Debe ser un almacén existente para el que el rol especificado tenga privilegios.
- Rol: El rol de control de acceso predeterminado que se va a usar en la sesión de Snowflake. El rol especificado debe ser un rol existente que ya se haya asignado al usuario especificado. El rol predeterminado es PUBLIC.
authenticationType Establezca esta propiedad en Básico.
connectVia El entorno de ejecución de integración que se utiliza para conectarse al almacén de datos. Se puede usar Azure Integration Runtime o un entorno de ejecución de integración autohospedado (si el almacén de datos se encuentra en una red privada). Si no se especifica, se usará Azure Integration Runtime. No

Ejemplo:

{
    "name": "SnowflakeLinkedService",
    "properties": {
        "type": "Snowflake",
        "typeProperties": {
            "authenticationType": "Basic",
            "connectionString": "jdbc:snowflake://<accountname>.snowflakecomputing.com/?user=<username>&password=<password>&db=<database>&warehouse=<warehouse>&role=<myRole>"
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

Contraseña en Azure Key Vault:

{
    "name": "SnowflakeLinkedService",
    "properties": {
        "type": "Snowflake",
        "typeProperties": {
            "authenticationType": "Basic",
            "connectionString": "jdbc:snowflake://<accountname>.snowflakecomputing.com/?user=<username>&db=<database>&warehouse=<warehouse>&role=<myRole>",
            "password": {
                "type": "AzureKeyVaultSecret",
                "store": { 
                    "referenceName": "<Azure Key Vault linked service name>",
                    "type": "LinkedServiceReference"
                }, 
                "secretName": "<secretName>"
            }
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

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.

Las siguientes propiedades son compatibles con el conjunto de datos de Snowflake.

Propiedad Descripción Obligatorio
type La propiedad type del conjunto de datos se debe establecer en SnowflakeTable.
esquema Nombre del esquema. Observe que el nombre del esquema distingue mayúsculas de minúsculas. No para el origen, sí para el receptor
table Nombre de la tabla o vista. Observe que el nombre de la tabla distingue mayúsculas de minúsculas. No para el origen, sí para el receptor

Ejemplo:

{
    "name": "SnowflakeDataset",
    "properties": {
        "type": "SnowflakeTable",
        "typeProperties": {
            "schema": "<Schema name for your Snowflake database>",
            "table": "<Table name for your Snowflake database>"
        },
        "schema": [ < physical schema, optional, retrievable during authoring > ],
        "linkedServiceName": {
            "referenceName": "<name of linked service>",
            "type": "LinkedServiceReference"
        }
    }
}

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 receptor y el origen de Snowflake.

Snowflake como origen.

El conector de Snowflake usa el comando COPY into [location] de Snowflake para lograr el mejor rendimiento.

Si el almacén de datos y el formato del receptor se admiten de forma nativa con el comando COPY de Snowflake, puede usar la actividad de copia para copiar directamente de Snowflake al receptor. Consulte Copia directa de Snowflake para obtener detalles. De lo contrario, use la Copia almacenada provisionalmente desde Snowflake.

Para copiar datos desde Snowflake, en la sección source de la actividad de copia se admiten las propiedades siguientes.

Propiedad Descripción Obligatorio
type La propiedad type del origen de la actividad de copia debe establecerse en SnowflakeSource.
Query Especifica la consulta SQL para leer datos de Snowflake. Si los nombres del esquema, la tabla y las columnas contienen minúsculas, indique el identificador de objeto en la consulta, por ejemplo, select * from "schema"."myTable".
No se admite la ejecución de procedimientos almacenados.
No
exportSettings Configuración avanzada utilizada para recuperar datos de Snowflake. Se pueden configurar los parámetros que admite el comando COPY into que el servicio pasará al invocar la instrucción.
En exportSettings:
type El tipo de comando de exportación, establecido en SnowflakeExportCopyCommand.
additionalCopyOptions Opciones de copia adicionales, proporcionadas como un diccionario de pares clave-valor. Ejemplos: MAX_FILE_SIZE, OVERWRITE. Para obtener más información consulte el documento sobre las opciones de copia de Snowflake. No
additionalFormatOptions Opciones adicionales de formato de archivo que se proporcionan al comando COPY como un diccionario de pares clave-valor. Ejemplos: DATE_FORMAT, TIME_FORMAT, TIMESTAMP_FORMAT. Para obtener más información consulte opciones de tipo de formato de Snowflake. No

Nota

Asegúrese de tener permiso para ejecutar el siguiente comando y acceder al esquema INFORMATION_SCHEMA y a la tabla COLUMNS.

  • COPY INTO <location>

Copia directa desde Snowflake

Si el almacén de datos y el formulario del receptor cumplen los criterios descritos en esta sección, puede usar la actividad de copia para copiar directamente de Snowflake al receptor. El servicio comprueba la configuración y no ejecuta la actividad de copia si no se cumplen los siguientes criterios:

  • El servicio vinculado al receptor es Azure Blob Storage con la autenticación de la firma de acceso de recurso compartido. Si quiere copiar los datos directamente en Azure Data Lake Storage Gen2 en el siguiente formato admitido, puede crear un servicio vinculado de blobs de Azure con la autenticación de SAS en la cuenta de ADLS Gen2, para evitar el uso de una copia almacenada provisionalmente desde Snowflake.

  • El formato de datos de receptor es de Parquet, texto delimitado o JSON con estas configuraciones:

    • Para el formato Parquet, el códec de compresión es None, Snappy, o Lzo.
    • Para el formato de texto delimitado:
      • rowDelimiter es \r\n o cualquier carácter individual.
      • compression puede ser no compression, gzip, bzip2, o deflate.
      • encodingName se deja con el valor predeterminado o se establece en utf-8.
      • quoteChar es double quote, single quote, o empty string (ningún carácter de comillas).
    • Para el formato JSON, la copia directa solo admite el caso en que el resultado de la consulta o la tabla Snowflake de origen solo tiene una columna y el tipo de datos de esta columna es VARIANT, OBJECT o ARRAY.
      • compression puede ser no compression, gzip, bzip2 o deflate.
      • encodingName se deja con el valor predeterminado o se establece en utf-8.
      • filePattern en el receptor de la actividad de copia se deja como el valor predeterminado o se establece en setOfObjects.
  • En el origen de la actividad de copia, no se especifica additionalColumns.

  • No se especifica la asignación de columnas.

Ejemplo:

"activities":[
    {
        "name": "CopyFromSnowflake",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<Snowflake input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "SnowflakeSource",
                "sqlReaderQuery": "SELECT * FROM MYTABLE",
                "exportSettings": {
                    "type": "SnowflakeExportCopyCommand",
                    "additionalCopyOptions": {
                        "MAX_FILE_SIZE": "64000000",
                        "OVERWRITE": true
                    },
                    "additionalFormatOptions": {
                        "DATE_FORMAT": "'MM/DD/YYYY'"
                    }
                }
            },
            "sink": {
                "type": "<sink type>"
            }
        }
    }
]

Copia almacenada provisionalmente desde Snowflake

Cuando el formato o el almacén de datos receptor no sea compatible de forma nativa con el comando COPY de Snowflake, como se mencionó en la última sección, habilite la copia preconfigurada integrada con una instancia intermedia de Azure Blob Storage. La característica de copia almacenada provisionalmente también proporciona un mejor rendimiento. El servicio exporta datos de Snowflake al almacenamiento provisional, copia los datos en el receptor y, por último, limpia los datos temporales del almacenamiento provisional. Consulte Copia almacenada provisionalmente para obtener más información sobre cómo copiar datos mediante el almacenamiento provisional.

Para utilizar esta característica, cree un servicio vinculado de Azure Blob Storage que haga referencia a la cuenta de Azure Storage como almacenamiento provisional temporal. Luego especifique las propiedades enableStaging y stagingSettings en la actividad de copia.

Nota

El servicio vinculado de almacenamiento provisional de Azure Blob debe usar la autenticación de la firma de acceso compartido, como requiere el comando COPY de Snowflake. Asegúrese de conceder el permiso de acceso adecuado a Snowflake en el almacenamiento provisional de Azure Blob Storage. Para más información sobre esto, consulte este artículo.

Ejemplo:

"activities":[
    {
        "name": "CopyFromSnowflake",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<Snowflake input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "SnowflakeSource",               
                "sqlReaderQuery": "SELECT * FROM MyTable",
                "exportSettings": {
                    "type": "SnowflakeExportCopyCommand"
                }
            },
            "sink": {
                "type": "<sink type>"
            },
            "enableStaging": true,
            "stagingSettings": {
                "linkedServiceName": {
                    "referenceName": "MyStagingBlob",
                    "type": "LinkedServiceReference"
                },
                "path": "mystagingpath"
            }
        }
    }
]

Snowflake como receptor

El conector de Snowflake utiliza el comando COPY into [location] de Snowflake para lograr un mejor rendimiento. Admite la escritura de datos de Snowflake en Azure.

Si el almacén de datos y el formato del origen se admiten de forma nativa con el comando COPY de Snowflake, puede usar la actividad de copia para copiar directamente del origen a Snowflake. Consulte Copia directa de Snowflake para obtener detalles. De lo contrario, use la Copia almacenada provisionalmente de Snowflake.

Para copiar datos a Snowflake, se admiten las siguientes propiedades en la sección sink de la actividad de copia.

Propiedad Descripción Obligatorio
type La propiedad type del receptor de la actividad de copia se establece en SnowflakeSink.
preCopyScript Especifique una consulta SQL para que la actividad de copia se ejecute antes de escribir datos en Snowflake en cada ejecución. Esta propiedad se usa para limpiar los datos cargados previamente. No
importSettings Configuración avanzada utilizada para escribir datos en Snowflake. Se pueden configurar los parámetros que admite el comando COPY into que el servicio pasará al invocar la instrucción.
En importSettings:
type El tipo de comando de importación, establecido en SnowflakeImportCopyCommand.
additionalCopyOptions Opciones de copia adicionales, proporcionadas como un diccionario de pares clave-valor. Ejemplos: ON_ERROR, FORCE, LOAD_UNCERTAIN_FILES. Para obtener más información, consulte el documento sobre las opciones de copia de Snowflake. No
additionalFormatOptions Opciones de formato de archivo adicionales que se proporcionan al comando COPY, que se proporciona como un diccionario de pares clave-valor. Ejemplos: DATE_FORMAT, TIME_FORMAT, TIMESTAMP_FORMAT. Para obtener más información consulte opciones de tipo de formato de Snowflake. No

Nota

Asegúrese de tener permiso para ejecutar el siguiente comando y acceder al esquema INFORMATION_SCHEMA y a la tabla COLUMNS.

  • SELECT CURRENT_REGION()
  • COPY INTO <table>
  • SHOW REGIONS
  • CREATE OR REPLACE STAGE
  • DROP STAGE

Copia directa a Snowflake

Si el almacén de datos y el formulario de origen cumplen los criterios descritos en esta sección, puede usar la actividad de copia para copiar directamente desde el origen a Snowflake. El servicio comprueba la configuración y no ejecuta la actividad de copia si no se cumplen los siguientes criterios:

  • El servicio vinculado al origen es Azure Blob Storage con la autenticación de la firma de acceso de recurso compartido. Si quiere copiar los datos directamente desde Azure Data Lake Storage Gen2 en el siguiente formato admitido, puede crear un servicio vinculado de blobs de Azure con la autenticación de SAS en la cuenta de ADLS Gen2, para evitar el uso de una copia almacenada provisionalmente en Snowflake.

  • El formato de datos de origen es Parquet, texto delimitado o JSON con estas configuraciones:

    • Para el formato Parquet, el códec de compresión es None o Snappy.

    • Para el formato de texto delimitado:

      • rowDelimiter es \r\n o cualquier carácter individual. Si el delimitador de fila no es "\r\n", firstRowAsHeader debe ser false y skipLineCount no se especifica.
      • compression puede ser no compression, gzip, bzip2 o deflate.
      • encodingName se deja como valor predeterminado o se establece en "UTF-8", "UTF-16", "UTF-16BE", "UTF-32", "UTF-32BE", "BIG5", "EUC-JP", "EUC-KR", "GB18030", "ISO-2022-JP", "ISO-2022-KR", "ISO-8859-1", "ISO-8859-2", "ISO-8859-5", "ISO-8859-6", "ISO-8859-7", "ISO-8859-8", "ISO-8859-9", "WINDOWS-1250", "WINDOWS-1251", "WINDOWS-1252", "WINDOWS-1253", "WINDOWS-1254", "WINDOWS-1255".
      • quoteChar es double quote, single quote, o empty string (ningún carácter de comillas).
    • Para el formato JSON, la copia directa solo admite el caso en que la tabla Snowflake de receptor solo tiene una columna y el tipo de datos de esta columna es VARIANT, OBJECT o ARRAY.

      • compression puede ser no compression, gzip, bzip2 o deflate.
      • encodingName se deja con el valor predeterminado o se establece en utf-8.
      • No se especifica la asignación de columnas.
  • En el origen de la actividad de copia:

    • additionalColumns no se especifica.
    • Si el origen es una carpeta, recursive se establece en true.
    • prefix, modifiedDateTimeStart, modifiedDateTimeEnd y enablePartitionDiscovery no se especifican.

Ejemplo:

"activities":[
    {
        "name": "CopyToSnowflake",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<Snowflake output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "<source type>"
            },
            "sink": {
                "type": "SnowflakeSink",
                "importSettings": {
                    "type": "SnowflakeImportCopyCommand",
                    "copyOptions": {
                        "FORCE": "TRUE",
                        "ON_ERROR": "SKIP_FILE"
                    },
                    "fileFormatOptions": {
                        "DATE_FORMAT": "YYYY-MM-DD"
                    }
                }
            }
        }
    }
]

Copia almacenada provisionalmente en Snowflake

Cuando el formato o el almacén de datos de origen no sea compatible de forma nativa con el comando COPY de Snowflake, como se mencionó en la última sección, habilite la copia preconfigurada integrada con una instancia intermedia de Azure Blob Storage. La característica de copia almacenada provisionalmente también proporciona un mejor rendimiento. El servicio convierte automáticamente los datos para satisfacer los requisitos del formato de datos de Snowflake. A continuación, invoca el comando COPY para cargar datos en Snowflake. Por último, limpia los datos temporales del almacenamiento de blobs. Consulte Copia almacenada provisionalmente para obtener más información sobre cómo copiar datos con el almacenamiento provisional.

Para utilizar esta característica, cree un servicio vinculado de Azure Blob Storage que haga referencia a la cuenta de Azure Storage como almacenamiento provisional temporal. Luego especifique las propiedades enableStaging y stagingSettings en la actividad de copia.

Nota

El servicio vinculado de almacenamiento provisional de Azure Blob necesita usar la autenticación de la firma de acceso compartido, como requiere el comando COPY de Snowflake.

Ejemplo:

"activities":[
    {
        "name": "CopyToSnowflake",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<Snowflake output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "<source type>"
            },
            "sink": {
                "type": "SnowflakeSink",
                "importSettings": {
                    "type": "SnowflakeImportCopyCommand"
                }
            },
            "enableStaging": true,
            "stagingSettings": {
                "linkedServiceName": {
                    "referenceName": "MyStagingBlob",
                    "type": "LinkedServiceReference"
                },
                "path": "mystagingpath"
            }
        }
    }
]

Propiedades de Asignación de instancias de Data Flow

Al transformar datos en un flujo de datos de asignación, puede leer y escribir en tablas de Snowflake. Para más información, vea la transformación de origen y la transformación de receptor en los flujos de datos de asignación. Puede optar por usar un conjunto de datos de Snowflake o un conjunto de datos en línea como tipo de origen y receptor.

Transformación de origen

En la tabla siguiente se indican las propiedades que admite el origen de Snowflake. Puede editar estas propiedades en la pestaña Opciones del origen. El conector emplea transferencia de datos interna de Snowflake.

Nombre Descripción Obligatorio Valores permitidos Propiedad de script de flujo de datos
Tabla Si selecciona Tabla como entrada, el flujo de datos captura todos los datos de la tabla especificada en el conjunto de datos de Snowflake o en las opciones del origen al usar un conjunto de datos en línea. No String (solo para conjunto de datos en línea)
tableName
schemaName
Consultar Si selecciona Consulta como entrada, escriba una consulta para capturar datos de Snowflake. Esta configuración invalida cualquier tabla que se haya elegido en el conjunto de datos.
Si los nombres del esquema, la tabla y las columnas contienen minúsculas, indique el identificador de objeto en la consulta, por ejemplo, select * from "schema"."myTable".
No String Query
Habilitar el extracto incremental (versión preliminar) Use esta opción para indicar a ADF que solo procese las filas que hayan cambiado desde la última vez que se ejecutó la canalización. No Booleano enableCdc
Columna incremental Si utiliza la función de extracción incremental, debe elegir la fecha, hora o columna numérica que desea utilizar como marca de agua en la tabla de origen. No String waterMarkColumn
Habilitar seguimiento de cambios de Snowflake (versión preliminar) Esta opción permite a ADF aprovechar la tecnología de captura de datos modificados de Snowflake para procesar solo los datos delta desde la ejecución de la canalización anterior. Esta opción carga automáticamente los datos delta con operaciones de inserción, actualización y eliminación de filas y no se necesita ninguna columna incremental. No Booleano enableNativeCdc
Cambios netos Si utiliza el seguimiento de cambios de Snowflake, puede usar esta opción para desduplicar las filas modificadas o cambios exhaustivos. Las filas modificadas desduplicadas mostrarán solo las versiones más recientes de las filas que han cambiado desde un momento dado, mientras que los cambios exhaustivos mostrarán todas las versiones de cada fila que haya cambiado, incluidas las que se han eliminado o actualizado. Por ejemplo, si actualiza una fila, verá una versión de eliminación y una versión de inserción en los cambios exhaustivos, pero solo verá la versión de inserción en la filas modificadas desduplicadas. Dependiendo del caso de uso, puede elegir la opción que se adapte a sus necesidades. La opción predeterminada es false, lo que significa cambios exhaustivos. No Booleano netChanges
Incluir columnas del sistema Si utiliza el seguimiento de cambios de Snowflake, puede usar la opción systemColumns para controlar si las columnas de flujo de metadatos que proporciona Snowflake se incluyen o excluyen en la salida del seguimiento de cambios. De forma predeterminada, systemColumns se establece en true, lo que significa que se incluyen las columnas de flujo de metadatos. Si desea excluirlas, puede establecer systemColumns en false. No Booleano systemColumns
Empezar a leer desde el principio Si se establece esta opción con el extracto incremental y el seguimiento de cambios, se indicará a ADF que lea todas las filas en la primera ejecución de una canalización con la extracción incremental activada. No Booleano skipInitialLoad

Ejemplos de script de origen de Snowflake

Cuando se usa un conjunto de datos de Snowflake como tipo de origen, el script de flujo de datos asociado es:

source(allowSchemaDrift: true,
	validateSchema: false,
	query: 'select * from MYTABLE',
	format: 'query') ~> SnowflakeSource

Si se usa un conjunto de datos en línea, el script de flujo de datos asociado es:

source(allowSchemaDrift: true,
	validateSchema: false,
	format: 'query',
	query: 'select * from MYTABLE',
	store: 'snowflake') ~> SnowflakeSource

Seguimiento de cambios nativo

Azure Data Factory ahora admite una característica nativa en Snowflake, que se conoce como seguimiento de cambios, lo que implica el seguimiento de los cambios en forma de registros. Esta característica de Snowflake nos permite hacer un seguimiento de los cambios en los datos a lo largo del tiempo, lo que hace que sea útil para la carga y auditoría incrementales de los datos. Para usar esta característica, al habilitar Captura de datos modificados y seleccionar el seguimiento de cambios de Snowflake, creamos un objeto Stream para la tabla de origen que habilita el seguimiento de cambios en la tabla de Snowflake de origen. Posteriormente, usamos la cláusula CHANGES en nuestra consulta para capturar solo los datos nuevos o actualizados de la tabla de origen. Además, se recomienda programar la canalización de forma que los cambios se consuman en el intervalo de tiempo de retención de datos establecido para la tabla de origen de copo de nieve; de lo contrario, el usuario podría ver un comportamiento incoherente en los cambios capturados.

Transformación de receptor

En la tabla siguiente se indican las propiedades que admite el receptor de Snowflake. Puede editar estas propiedades en la pestaña Configuración. Al usar un conjunto de datos insertado, verá opciones adicionales, que son las mismas que las propiedades descritas en la sección Propiedades del conjunto de datos. El conector emplea transferencia de datos interna de Snowflake.

Nombre Descripción Obligatorio Valores permitidos Propiedad de script de flujo de datos
Método de actualización Especifique qué operaciones se permiten en el destino de Snowflake.
Para actualizar, upsert o eliminar filas, se requiere una transformación de alteración de fila a fin de etiquetar filas para esas acciones.
true o false deletable
insertable
updateable
upsertable
Columnas de clave En el caso de las actualizaciones, upserts y eliminaciones, se debe establecer una o varias columnas de clave para determinar la fila que se va a modificar. No Array claves
Acción Table determina si se deben volver a crear o quitar todas las filas de la tabla de destino antes de escribir.
- Ninguno: no se realizará ninguna acción en la tabla.
- Volver a crear: se quitará la tabla y se volverá a crear. Obligatorio si se crea una nueva tabla dinámicamente.
- Truncar: se quitarán todas las filas de la tabla de destino.
No true o false recreate
truncate

Ejemplos de script de receptor de Snowflake

Cuando se usa un conjunto de datos de Snowflake como tipo de receptor, el script de flujo de datos asociado es:

IncomingStream sink(allowSchemaDrift: true,
	validateSchema: false,
	deletable:true,
	insertable:true,
	updateable:true,
	upsertable:false,
	keys:['movieId'],
	format: 'table',
	skipDuplicateMapInputs: true,
	skipDuplicateMapOutputs: true) ~> SnowflakeSink

Si se usa un conjunto de datos en línea, el script de flujo de datos asociado es:

IncomingStream sink(allowSchemaDrift: true,
	validateSchema: false,
	format: 'table',
	tableName: 'table',
	schemaName: 'schema',
	deletable: true,
	insertable: true,
	updateable: true,
	upsertable: false,
	store: 'snowflake',
	skipDuplicateMapInputs: true,
	skipDuplicateMapOutputs: true) ~> SnowflakeSink

Optimización de la delegación de consultas

Al establecer el nivel de registro de la canalización en Ninguno, se excluye la transmisión de métricas de transformación intermedias, lo que evita que puedan aparecer obstáculos en las optimizaciones de Spark y habilita la optimización de la delegación de consultas proporcionada por Snowflake. Esta optimización permite realizar mejoras de rendimiento considerables en tablas de Snowflake de gran tamaño con grandes conjuntos de datos.

Nota:

En Snowflake no se admiten tablas temporales, ya que son locales para la sesión o el usuario que los crea, lo que hace que otras sesiones no puedan acceder a ellas y que sean propensas a que Snowflake las sobrescriba como tablas normales. Aunque Snowflake ofrece la alternativa de las tablas transitorias, a las que se puede acceder globalmente, requieren la eliminación manual, lo que va en contra de nuestro objetivo principal cuando usamos tablas temporales, que es evitar las operaciones de eliminación en el esquema de origen.

Propiedades de la actividad de búsqueda

Para más información sobre las propiedades, consulte Actividad de búsqueda.

Consulte los formatos y almacenes de datos compatibles para ver una lista de los almacenes de datos que la actividad de copia admite como orígenes y receptores.