Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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 conector Snowflake V2 proporciona compatibilidad nativa mejorada con Snowflake. Si usa el conector Snowflake V1 en la solución, se recomienda actualizar el conector de Snowflake antes del 30 de junio de 2025. Consulte esta sección para obtener más información sobre la diferencia entre V2 y V1.
Funcionalidades admitidas
Este conector Snowflake es compatible con las funcionalidades siguientes:
Funcionalidades admitidas | IR |
---|---|
Actividad de copia (origen/receptor) | 1 2 |
Mapeo de flujo de datos (fuente/destino) | (1) |
Actividad de búsqueda | 1 2 |
Actividad de script (aplicar la versión 1.1 (versión preliminar) al usar el parámetro de script) | 1 2 |
① 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 use el comando COPY de la de Snowflake en [ubicación] para lograr el mejor rendimiento.
- Copie los datos en Snowflake aprovechando el comando COPY into [table] 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 a 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 origen o receptor debe tener el acceso USAGE
necesario en la base de datos y acceso de lectura y escritura en el esquema y las tablas o vistas en ella. 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 | Requerido | Valor predeterminado |
---|---|---|---|
REQUIRE_STORAGE_INTEGRATION_FOR_STAGE_CREATION (Requiere integración de almacenamiento para la creación de etapas) | 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. | FALSO | FALSO |
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. | FALSO | FALSO |
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.
Comenzar
Para realizar la actividad de copia con una canalización, puede usar una de las 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
Crear un servicio vinculado a Snowflake 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
Estas propiedades genéricas son compatibles con el servicio vinculado de Snowflake:
Propiedad | Descripción | Requerido |
---|---|---|
tipo | La propiedad type debe establecerse en SnowflakeV2. | Sí |
versión | Versión que especifique. Se recomienda actualizar a la versión más reciente para aprovechar las mejoras más recientes. | Sí para la versión 1.1 (versión preliminar) |
Identificador de cuenta | Nombre de la cuenta junto con su organización. Por ejemplo, myorg-account123. | Sí |
base de datos | Base de datos predeterminada que se usa para la sesión después de conectarse. | Sí |
almacén | El almacenamiento virtual predeterminado que se usa para la sesión después de conectarse. | Sí |
tipo de autenticación | Tipo de autenticación que se usa para conectarse al servicio Snowflake. Los valores permitidos son: Basic (Valor predeterminado) y KeyPair. Haga referencia a las siguientes secciones correspondientes para obtener más información sobre propiedades y ejemplos, respectivamente. | No |
rol | Rol de seguridad predeterminado que se usa para la sesión después de conectarse. | No |
anfitrión | Nombre de host de la cuenta de Snowflake. Por ejemplo: contoso.snowflakecomputing.com .
.cn también está soportado. |
No |
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á la integración predeterminada de Azure Integration Runtime. | No |
Este conector de Snowflake admite los tipos de autenticación siguientes. Consulte las secciones correspondientes para más información.
Autenticación básica
Para usar autenticación básica, además de las propiedades genéricas que se describen en la sección anterior, especifique las siguientes propiedades:
Propiedad | Descripción | Requerido |
---|---|---|
usuario | Nombre de inicio de sesión del usuario de Snowflake. | Sí |
contraseña | Contraseña del usuario de Snowflake. Marque este campo como un tipo SecureString para almacenarlo de forma segura. También puede hacer referencia a un secreto almacenado en Azure Key Vault. | Sí |
Ejemplo:
{
"name": "SnowflakeV2LinkedService",
"properties": {
"type": "SnowflakeV2",
"typeProperties": {
"accountIdentifier": "<accountIdentifier>",
"database": "<database>",
"warehouse": "<warehouse>",
"authenticationType": "Basic",
"user": "<username>",
"password": {
"type": "SecureString",
"value": "<password>"
},
"role": "<role>"
},
"connectVia": {
"referenceName": "<name of Integration Runtime>",
"type": "IntegrationRuntimeReference"
}
}
}
Contraseña en Azure Key Vault:
{
"name": "SnowflakeV2LinkedService",
"properties": {
"type": "SnowflakeV2",
"typeProperties": {
"accountIdentifier": "<accountIdentifier>",
"database": "<database>",
"warehouse": "<warehouse>",
"authenticationType": "Basic",
"user": "<username>",
"password": {
"type": "AzureKeyVaultSecret",
"store": {
"referenceName": "<Azure Key Vault linked service name>",
"type": "LinkedServiceReference"
},
"secretName": "<secretName>"
}
},
"connectVia": {
"referenceName": "<name of Integration Runtime>",
"type": "IntegrationRuntimeReference"
}
}
}
Autenticación del par de claves
Para usar la autenticación de par de claves, debe configurar y crear un usuario de autenticación de par de claves en Snowflake haciendo referencia a Autenticación de par de claves y rotación de pares de claves. Después, anote la clave privada y la frase de contraseña (opcional), que se usa para definir el servicio vinculado.
Además de las propiedades genéricas descritas en las secciones anteriores, especifique las siguientes:
Propiedad | Descripción | Requerido |
---|---|---|
usuario | Nombre de inicio de sesión del usuario de Snowflake. | Sí |
clave privada | Clave privada usada para la autenticación del par de claves. Para garantizar que la clave privada sea válida al enviarla a Azure Data Factory, y considerando que el archivo privateKey incluye caracteres de nueva línea (\n), es esencial formatear correctamente el contenido de la clavePrivada en su forma literal de cadena. Este proceso implica agregar \n explícitamente a cada nueva línea. |
Sí |
privateKeyPassphrase | Frase de contraseña que se usa para descifrar la clave privada, si está cifrada. | No |
Ejemplo:
{
"name": "SnowflakeV2LinkedService",
"properties": {
"type": "SnowflakeV2",
"typeProperties": {
"accountIdentifier": "<accountIdentifier>",
"database": "<database>",
"warehouse": "<warehouse>",
"authenticationType": "KeyPair",
"user": "<username>",
"privateKey": {
"type": "SecureString",
"value": "<privateKey>"
},
"privateKeyPassphrase": {
"type": "SecureString",
"value": "<privateKeyPassphrase>"
},
"role": "<role>"
},
"connectVia": {
"referenceName": "<name of Integration Runtime>",
"type": "IntegrationRuntimeReference"
}
}
}
Nota:
Para mapear flujos de datos, se recomienda generar una nueva clave privada RSA mediante el estándar PKCS#8 en formato PEM (archivo .p8).
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 | Requerido |
---|---|---|
tipo | La propiedad type del conjunto de datos se debe establecer en SnowflakeV2Table. | Sí |
esquema | Nombre del esquema. Tenga en cuenta que el nombre del esquema distingue mayúsculas de minúsculas. | No para el origen, sí para el receptor |
tabla | 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": "SnowflakeV2Dataset",
"properties": {
"type": "SnowflakeV2Table",
"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 admitidas por el origen y el receptor 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 receptor y el formato son compatibles de forma nativa con el comando COPY de Snowflake, puede usar la actividad de copia para copiar directamente desde Snowflake al receptor. Consulte Copia directa de Snowflake para obtener detalles. En caso contrario, use la función integradaCopia 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 | Requerido |
---|---|---|
tipo | La propiedad type del origen de la actividad de copia debe establecerse en SnowflakeV2Source. | Sí |
consulta | 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 : |
||
tipo | El tipo de comando de exportación, establecido en SnowflakeExportCopyCommand. | Sí |
storageIntegration | Especifica el nombre de la integración de almacenamiento que creó en Snowflake. Para conocer los pasos previos del uso de la integración de almacenamiento, consulta Configuración de una integración de almacenamiento de Snowflake. | No |
opciones adicionales de copia | 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 |
opcionesDeFormatoAdicionales | Opciones de formato de archivo adicionales que se proporcionan al comando COPY como diccionario de pares clave-valor. Ejemplos: DATE_FORMAT, TIME_FORMAT, TIMESTAMP_FORMAT, NULL_IF. Para más información consulte opciones de tipo de formato de Snowflake. Cuando se usa NULL_IF, el valor NULL de Snowflake se convierte en el valor especificado (que debe estar entre comillas únicas) al escribir en el archivo de texto delimitado en el almacenamiento provisional. Este valor especificado se trata como NULL al leer desde el archivo de almacenamiento provisional al almacenamiento receptor. El valor predeterminado es 'NULL' . |
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:
Al especificar
storageIntegration
en el origen:El almacén de datos de destino es Azure Blob Storage, al cual se hace referencia en la etapa externa de Snowflake. Debes completar los pasos siguientes antes de copiar datos:
Crea un servicio vinculado de Azure Blob Storage para el receptor de Azure Blob Storage con los tipos de autenticación admitidos.
Concede al menos el rol de Colaborador de datos de blobs de almacenamiento a la entidad de servicio de Snowflake en el receptor de Azure Blob Storage Access Control (IAM).
Cuando no especifiques
storageIntegration
en el origen:El servicio vinculado al receptor es Azure Blob Storage con la autenticación de la firma de acceso de recurso compartido. Si quieres copiar los datos directamente en Azure Data Lake Storage Gen2 en el siguiente formato admitido, puedes crear un servicio vinculado de Azure Blob Storage con la autenticación de SAS en la cuenta de Azure Data Lake Storage 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 comillas dobles, comillas simples, o cadena vacía (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": "SnowflakeV2Source",
"query": "SELECT * FROM MYTABLE",
"exportSettings": {
"type": "SnowflakeExportCopyCommand",
"additionalCopyOptions": {
"MAX_FILE_SIZE": "64000000",
"OVERWRITE": true
},
"additionalFormatOptions": {
"DATE_FORMAT": "'MM/DD/YYYY'"
},
"storageIntegration": "< Snowflake storage integration name >"
}
},
"sink": {
"type": "<sink type>"
}
}
}
]
Copia almacenada provisionalmente desde Snowflake
Cuando el almacén de datos de destino o el formato no sean compatibles de forma nativa con el comando COPY de Snowflake, como se mencionó en la última sección, habilite la copia intermedia integrada utilizando una instancia intermedia de almacenamiento de Azure Blob. La característica de copia en etapas también proporciona un mejor rendimiento. El servicio exporta datos de Snowflake al almacenamiento provisional y, a continuación, 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.
Al especificar
storageIntegration
en el origen, el almacenamiento provisional de Azure Blob Storage debe ser aquel al que se hace referencia en la etapa externa en Snowflake. Asegúrese de crear un servicio vinculado de Azure Blob Storage para él con cualquier autenticación admitida al usar tiempo de ejecución de integración de Azure, o con una clave de cuenta anónima, una clave de cuenta, una firma de acceso compartido o una autenticación de entidad de servicio al usar el entorno de ejecución de integración autohospedado. Además, conceda al menos Rol colaborador de datos de Storage Blob a la entidad de servicio de Snowflake en el almacenamiento provisional de Azure Blob Storage Control de acceso (IAM).Cuando no se especifica
storageIntegration
en el origen, el servicio vinculado de almacenamiento intermedio de Azure Blob Storage debe usar la autenticación mediante firma de acceso compartido, según lo requiere el comando COPY de Snowflake. Asegúrate 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": "SnowflakeV2Source",
"query": "SELECT * FROM MyTable",
"exportSettings": {
"type": "SnowflakeExportCopyCommand",
"storageIntegration": "< Snowflake storage integration name >"
}
},
"sink": {
"type": "<sink type>"
},
"enableStaging": true,
"stagingSettings": {
"linkedServiceName": {
"referenceName": "MyStagingBlob",
"type": "LinkedServiceReference"
},
"path": "mystagingpath"
}
}
}
]
Al realizar una copia almacenada provisionalmente de Snowflake, es fundamental establecer el comportamiento de copia del receptor en Combinar archivos. Esta configuración garantiza que todos los archivos con particiones se controlan y combinan correctamente, lo que impide el problema en el que solo se copia el último archivo con particiones.
Configuración de ejemplo
{
"type": "Copy",
"source": {
"type": "SnowflakeSource",
"query": "SELECT * FROM my_table"
},
"sink": {
"type": "AzureBlobStorage",
"copyBehavior": "MergeFiles"
}
}
Nota:
Si no se establece el comportamiento de copia del receptor en Combinar archivos, solo se puede copiar el último archivo con particiones.
Snowflake como receptor
El conector de Snowflake utiliza el comando COPY into [tabla] de Snowflake para lograr el mejor rendimiento. Permite escribir datos en 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 a Snowflake para más 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 | Requerido |
---|---|---|
tipo | La propiedad type del receptor de la actividad de copia se establece en SnowflakeV2Sink. | 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 : |
||
tipo | El tipo de comando de importación, establecido en SnowflakeImportCopyCommand. | Sí |
storageIntegration | Especifica el nombre de la integración de almacenamiento que creó en Snowflake. Para conocer los pasos previos del uso de la integración de almacenamiento, consulta Configuración de una integración de almacenamiento de Snowflake. | No |
opciones adicionales de copia | 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 |
opcionesDeFormatoAdicionales | 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 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:
Al especificar
storageIntegration
en el receptor:El almacén de datos de origen es la instancia de Azure Blob Storage a la que se hace referencia en la fase externa de Snowflake. Debes completar los pasos siguientes antes de copiar datos:
Crea un servicio vinculado de Azure Blob Storage para el origen de Azure Blob Storage con los tipos de autenticación admitidos.
Concede al menos el rol de Lector de datos de blobs de almacenamiento a la entidad de servicio de Snowflake en el origen de Azure Blob Storage Access Control (IAM).
Cuando no especifique
storageIntegration
en el receptor:El servicio vinculado al origen es Azure Blob Storage con la autenticación de firma de acceso compartido. Si quieres copiar los datos directamente desde Azure Data Lake Storage Gen2 en el siguiente formato admitido, puedes crear un servicio vinculado de Azure Blob Storage con la autenticación de SAS en la cuenta de Azure Data Lake Storage Gen2, para evitar el uso de una copia almacenada provisionalmente desde 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 comillas dobles, comillas simples, o cadena vacía (ningún carácter de comillas).
-
Para el formato JSON, la copia directa solo admite el caso en que la tabla de destino de Snowflake contiene solo 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": "SnowflakeV2Sink",
"importSettings": {
"type": "SnowflakeImportCopyCommand",
"copyOptions": {
"FORCE": "TRUE",
"ON_ERROR": "SKIP_FILE"
},
"fileFormatOptions": {
"DATE_FORMAT": "YYYY-MM-DD"
},
"storageIntegration": "< Snowflake storage integration name >"
}
}
}
}
]
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 en etapas 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, limpie 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.
Al especificar
storageIntegration
en el receptor, el almacenamiento provisional de Azure Blob Storage debe ser el que se hace referencia en la fase externa de Snowflake. Asegúrese de crear un servicio vinculado de Azure Blob Storage para él con cualquier autenticación admitida al usar tiempo de ejecución de integración de Azure, o con una clave de cuenta anónima, una clave de cuenta, una firma de acceso compartido o una autenticación de entidad de servicio al usar el entorno de ejecución de integración autohospedado. Además, conceda al menos el rol de Lector de datos de blobs de almacenamiento a la entidad de servicio de Snowflake en el almacenamiento provisional de Azure Blob Storage Access Control (IAM).Cuando no se especifica
storageIntegration
en el receptor, el servicio vinculado de almacenamiento provisional de Azure Blob Storage debe usar la autenticación de firma de acceso compartido, según lo requiera 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": "SnowflakeV2Sink",
"importSettings": {
"type": "SnowflakeImportCopyCommand",
"storageIntegration": "< Snowflake storage integration name >"
}
},
"enableStaging": true,
"stagingSettings": {
"linkedServiceName": {
"referenceName": "MyStagingBlob",
"type": "LinkedServiceReference"
},
"path": "mystagingpath"
}
}
}
]
Mapeo de propiedades de flujo de datos
Al transformar datos en un flujo de datos de asignación, puede leer y escribir en tablas de Snowflake. Para más información, consulte 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 siguiente tabla se indican las propiedades que son compatibles con el origen Snowflake. Puede editar estas propiedades en la pestaña Opciones del origen. El conector emplea transferencia de datos interna de Snowflake.
Nombre | Descripción | Requerido | 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 | Cadena |
(solo para conjunto de datos en línea) tableName nombreDelEsquema |
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 | Cadena | consulta |
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 | habilitarCdc |
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 | Cadena | 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 enumeran las propiedades admitidas por 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 | Requerido | 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 actualizable actualizable |
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 | Arreglo | claves |
Acción de tabla | 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 |
recrear truncar |
Ejemplos de script de receptor de Snowflake
Cuando se usa un conjunto de datos de Snowflake como tipo de destino, 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.
Asignación de tipos de datos para Snowflake V2
Al copiar datos de Snowflake, se usan las siguientes asignaciones de tipos de datos de Snowflake para los tipos de datos provisionales dentro del servicio internamente. Para más información acerca de la forma en que la actividad de copia asigna el tipo de datos y el esquema de origen al receptor, consulte el artículo sobre asignaciones de tipos de datos y esquema.
Tipo de datos Snowflake | Tipo provisional de datos del servicio |
---|---|
NÚMERO (p,0) | Decimal |
NUMBER (p,s donde es>0) | Decimal |
FLOTAR | Doble |
VARCHAR | Cadena |
CARBONIZAR | Cadena |
BINARIO | Byte[] |
BOOLEANO | Booleano |
FECHA | Fecha y hora |
TIEMPO | TimeSpan |
TIMESTAMP_LTZ | Desplazamiento de Fecha y Hora |
TIMESTAMP_NTZ | Desplazamiento de Fecha y Hora |
TIMESTAMP_TZ | Desplazamiento de Fecha y Hora |
VARIANTE | Cadena |
OBJETO | Cadena |
MATRIZ | Cadena |
Propiedades de la actividad de búsqueda
Para más información sobre las propiedades, consulte Actividad de búsqueda.
Ciclo de vida y actualización del conector de Snowflake
En la tabla siguiente se muestran la fase de lanzamiento y los registros de cambios para diferentes versiones del conector de Snowflake:
Versión | Fase de lanzamiento | Registro de cambios |
---|---|---|
Snowflake V1 | Versión de disponibilidad general disponible | / |
Snowflake V2 (versión 1.0) | Versión de disponibilidad general disponible | • Agregar compatibilidad con la autenticación de par de claves. • Las propiedades accountIdentifier , warehouse , database , schema y role se utilizan para establecer una conexión en lugar de la propiedad connectionstring .• Agregar compatibilidad con Decimal en la actividad de búsqueda. El tipo de NÚMERO, tal y como se define en Snowflake, se mostrará como una cadena en la actividad de Búsqueda. Si desea incluirlo en tipo numérico en V2, puede usar el parámetro de canalización con función int o función float. Por ejemplo, int(activity('lookup').output.firstRow.VALUE) , float(activity('lookup').output.firstRow.VALUE) • El tipo de datos timestamp de Snowflake se lee como tipo de datos DateTimeOffset en la actividad Búsqueda y script. Si todavía necesita usar el valor Datetime como parámetro de la canalización después de actualizar a V2, puede convertir el tipo DateTimeOffset a tipo DateTime mediante la función formatDateTime (recomendado) o la función concat. Por ejemplo: formatDateTime(activity('lookup').output.firstRow.DATETIMETYPE) , concat(substring(activity('lookup').output.firstRow.DATETIMETYPE, 0, 19), 'Z') • NUMBER (p,0) se interpreta como un tipo de dato Decimal. • TIMESTAMP_LTZ, TIMESTAMP_NTZ y TIMESTAMP_TZ se leen como tipo de datos DateTimeOffset. • Los parámetros de script no se admiten en la actividad Script. Como alternativa, utilice expresiones dinámicas para los parámetros de script. Para obtener más información, consulte Expresiones y funciones en Azure Data Factory y Azure Synapse Analytics. • No se admite la ejecución de varias instrucciones SQL en la actividad script. |
Snowflake V2 (versión 1.1) | Versión preliminar disponible | • Agregar compatibilidad con parámetros de script. • Agregar compatibilidad con la ejecución de varias instrucciones en la actividad script. |
Actualización del conector de Snowflake de V1 a V2
Para actualizar el conector de Snowflake de V1 a V2, puede realizar una actualización en paralelo o una actualización local.
Actualización en paralelo
Para realizar una actualización en paralelo, complete los pasos siguientes:
- Cree un servicio vinculado de Snowflake y configúrelo consultando las propiedades del servicio vinculado V2.
- Cree un conjunto de datos basado en el servicio vinculado de Snowflake recién creado.
- Reemplace el nuevo servicio vinculado y el conjunto de datos por los existentes en las canalizaciones que tiene como destino los objetos V1.
Actualización in situ
Para realizar una actualización local, debe editar la carga del servicio vinculado existente y actualizar el conjunto de datos para usar el nuevo servicio vinculado.
Actualice el tipo de Snowflake a SnowflakeV2.
Modifique la carga del servicio vinculado desde su formato V1 a V2. Puede rellenar cada campo desde la interfaz de usuario después de cambiar el tipo mencionado anteriormente o actualizar la carga directamente a través del Editor JSON. Consulte la sección Propiedades del servicio vinculado de este artículo para conocer las propiedades de conexión admitidas. En los siguientes ejemplos se muestran las diferencias en la carga de los servicios vinculados de Snowflake V1 y V2:
Carga JSON del servicio vinculado snowflake V1:
{ "name": "Snowflake1", "type": "Microsoft.DataFactory/factories/linkedservices", "properties": { "annotations": [], "type": "Snowflake", "typeProperties": { "authenticationType": "Basic", "connectionString": "jdbc:snowflake://<fake_account>.snowflakecomputing.com/?user=FAKE_USER&db=FAKE_DB&warehouse=FAKE_DW&schema=PUBLIC", "encryptedCredential": "<your_encrypted_credential_value>" }, "connectVia": { "referenceName": "AzureIntegrationRuntime", "type": "IntegrationRuntimeReference" } } }
Carga JSON del servicio vinculado de Snowflake V2:
{ "name": "Snowflake2", "type": "Microsoft.DataFactory/factories/linkedservices", "properties": { "parameters": { "schema": { "type": "string", "defaultValue": "PUBLIC" } }, "annotations": [], "type": "SnowflakeV2", "typeProperties": { "authenticationType": "Basic", "accountIdentifier": "<FAKE_Account>", "user": "FAKE_USER", "database": "FAKE_DB", "warehouse": "FAKE_DW", "encryptedCredential": "<placeholder>" }, "connectVia": { "referenceName": "AutoResolveIntegrationRuntime", "type": "IntegrationRuntimeReference" } } }
Actualice el conjunto de datos para usar el nuevo servicio vinculado. Puede crear un nuevo conjunto de datos basado en el servicio vinculado recién creado o actualizar la propiedad tipo de un conjunto de datos existente de SnowflakeTable a SnowflakeV2Table.
Nota:
Al realizar la transición de servicios vinculados, la sección de parámetros de plantilla de anulación podría mostrar solo las propiedades de la base de datos. Para resolverlo, edite manualmente los parámetros. Después de eso, la sección Invalidar parámetros de plantilla mostrará las cadenas de conexión.
Actualización del conector Snowflake V2 de la versión 1.0 a la versión 1.1 (versión preliminar)
En la página Editar servicio vinculado, seleccione 1.1 para la versión. Para más información, consulte las Propiedades del servicio vinculado.
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.