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 nuevo conector Snowflake proporciona compatibilidad nativa mejorada con Snowflake. Si va a usar el conector de Snowflake heredado en la solución, actualice el conector de Snowflake antes del 31 de octubre de 2024. Consulte esta sección para más información sobre la diferencia entre la versión heredada y la versión más reciente.
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:
- La herramienta Copiar datos
- Azure Portal
- El SDK de .NET
- El SDK de Python
- Azure PowerShell
- API REST
- La plantilla de Azure Resource Manager
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.
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:
Busque Snowflake y seleccione el conector de Snowflake.
Configure los detalles del servicio, pruebe la conexión y cree el nuevo servicio vinculado.
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. | Sí |
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. |
Sí |
authenticationType | Establezca esta propiedad en Básico. | Sí |
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. | Sí |
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. | Sí |
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. | Sí |
En exportSettings : |
||
type | El tipo de comando de exportación, establecido en SnowflakeExportCopyCommand. | Sí |
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",
"query": "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",
"query": "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. | Sí |
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. | Sí |
En importSettings : |
||
type | El tipo de comando de importación, establecido en SnowflakeImportCopyCommand. | Sí |
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 yskipLineCount
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
yenablePartitionDiscovery
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 des duplicadas. 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. |
Sí | 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.
Contenido relacionado
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.