Programar una transferencia de Snowflake
El conector de Snowflake que proporciona BigQuery Data Transfer Service te permite programar y gestionar tareas de transferencia automatizadas para migrar datos de Snowflake a BigQuery mediante listas de permitidas de IPs públicas.
Información general
El conector de Snowflake emplea agentes de migración en Google Kubernetes Engine e inicia una operación de carga de Snowflake a un área de stage del mismo proveedor de nube en el que se aloja Snowflake.
- En el caso de las cuentas de Snowflake alojadas en AWS, los datos se almacenan primero en tu segmento de Amazon S3, que luego se transfiere a BigQuery con BigQuery Data Transfer Service.
- En el caso de las cuentas de Snowflake alojadas enGoogle Cloud, los datos se almacenan primero en tu segmento de Cloud Storage, que luego se transfiere a BigQuery con BigQuery Data Transfer Service.
- En el caso de las cuentas de Snowflake alojadas en Azure, los datos se almacenan primero en el contenedor de Azure Blob Storage, que luego se transfiere a BigQuery con BigQuery Data Transfer Service.
Limitaciones
Las transferencias de datos que se realizan mediante el conector de Snowflake están sujetas a las siguientes limitaciones:
- El conector de Snowflake no admite transferencias de datos incrementales.
- El conector de Snowflake solo admite transferencias desde tablas de una única base de datos y un único esquema de Snowflake. Para transferir datos de tablas con varias bases de datos o esquemas de Snowflake, puedes configurar cada tarea de transferencia por separado.
- La velocidad de carga de datos de Snowflake a tu segmento de Amazon S3, contenedor de Azure Blob Storage o segmento de Cloud Storage está limitada por el almacén de Snowflake que hayas elegido para esta transferencia.
Los datos se extraen de Snowflake en formato Parquet antes de cargarse en BigQuery:
- No se admiten los siguientes tipos de datos de Parquet:
TIMESTAMP_TZ
,TIMESTAMP_LTZ
OBJECT
,VARIANT
,ARRAY
- Para obtener más información, consulta Evaluar datos de Snowflake.
El siguiente tipo de datos de Parquet no se admite, pero se puede convertir:
TIMESTAMP_NTZ
Usa el archivo YAML de configuración de conversión de tipo global para anular el comportamiento predeterminado de la conversión de
DATETIME
aTIMESTAMP
cuando generes metadatos y ejecutes el motor de traducción.El archivo YAML de configuración puede ser similar al siguiente ejemplo:
type: experimental_object_rewriter global: typeConvert: datetime: TIMESTAMP
- No se admiten los siguientes tipos de datos de Parquet:
Antes de empezar
Antes de configurar una transferencia de Snowflake, debe seguir todos los pasos que se indican en esta sección. A continuación, se muestra una lista de todos los pasos necesarios.
- Prepara tu Google Cloud proyecto
- Roles de BigQuery obligatorios
- Preparar el segmento de almacenamiento provisional
- Crea un usuario de Snowflake con los permisos necesarios.
- Añadir políticas de red
- Opcional: Generar metadatos y ejecutar el motor de traducción
- Evaluar Snowflake para detectar tipos de datos no admitidos
- Recoger información sobre la transferencia
Prepara tu proyecto de Google Cloud
Crea y configura tu proyecto de Google Cloud para una transferencia de Snowflake siguiendo estos pasos:
Crea un proyecto Google Cloud o selecciona uno que ya tengas.
Comprueba que has completado todas las acciones necesarias para habilitar BigQuery Data Transfer Service.
Crea un conjunto de datos de BigQuery para almacenar tus datos. No es necesario que cree ninguna tabla.
Roles de BigQuery necesarios
Para obtener los permisos que necesitas para crear una transferencia de datos de BigQuery Data Transfer Service,
pide a tu administrador que te asigne el rol de gestión de identidades y accesos Administrador de BigQuery (roles/bigquery.admin
) en tu proyecto.
Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar acceso a proyectos, carpetas y organizaciones.
Este rol predefinido contiene los permisos necesarios para crear una transferencia de datos de BigQuery Data Transfer Service. Para ver los permisos exactos que se necesitan, despliega la sección Permisos necesarios:
Permisos obligatorios
Para crear una transferencia de datos de BigQuery Data Transfer Service, se necesitan los siguientes permisos:
-
Permisos de BigQuery Data Transfer Service:
-
bigquery.transfers.update
-
bigquery.transfers.get
-
-
Permisos de BigQuery:
-
bigquery.datasets.get
-
bigquery.datasets.getIamPolicy
-
bigquery.datasets.update
-
bigquery.datasets.setIamPolicy
-
bigquery.jobs.create
-
También puedes obtener estos permisos con roles personalizados u otros roles predefinidos.
Para obtener más información, consulta Conceder acceso a bigquery.admin
.
Preparar el segmento de staging
Para completar una transferencia de datos de Snowflake, debes crear un segmento de almacenamiento provisional y, a continuación, configurarlo para permitir el acceso de escritura desde Snowflake.
Segmento de almacenamiento provisional para la cuenta de Snowflake alojada en AWS
En el caso de las cuentas de Snowflake alojadas en AWS, crea un segmento de Amazon S3 para almacenar los datos de Snowflake antes de cargarlos en BigQuery.
Crea y configura un objeto de integración de almacenamiento de Snowflake para permitir que Snowflake escriba datos en el segmento de Amazon S3 como un área de almacenamiento externa.
Para permitir el acceso de lectura a tu segmento de Amazon S3, debes hacer lo siguiente:
Crea un usuario de gestión de identidades y accesos de Amazon específico y concédele la política AmazonS3ReadOnlyAccess.
Crea un par de claves de acceso de Amazon para el usuario de IAM.
Contenedor de Azure Blob Storage de almacenamiento provisional para una cuenta de Snowflake alojada en Azure
En el caso de las cuentas de Snowflake alojadas en Azure, crea un contenedor de Azure Blob Storage para almacenar los datos de Snowflake antes de cargarlos en BigQuery.
- Cree una cuenta de almacenamiento de Azure y un contenedor de almacenamiento en ella.
- Crea y configura un objeto de integración de almacenamiento de Snowflake para permitir que Snowflake escriba datos en el contenedor de almacenamiento de Azure como área de stage externa. Ten en cuenta que puedes saltarte el paso 3, "Crear un escenario externo", ya que no lo vamos a usar.
Para permitir el acceso de lectura a tu contenedor de Azure, genera un token SAS.
Segmento de staging de la cuenta de Snowflake alojada en Google Cloud
En el caso de las cuentas de Snowflake alojadas en Google Cloud, crea un cubo de Cloud Storage para almacenar los datos de Snowflake antes de cargarlos en BigQuery.
- Crea un segmento de Cloud Storage.
- Crea y configura un objeto de integración de almacenamiento de Snowflake para permitir que Snowflake escriba datos en el segmento de Cloud Storage como área de stage externa.
Para permitir el acceso al segmento de almacenamiento provisional, concede al agente de servicio de DTS el rol
roles/storage.objectViewer
con el siguiente comando:gcloud storage buckets add-iam-policy-binding gs://STAGING_BUCKET_NAME \ --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-bigquerydatatransfer.iam.gserviceaccount.com \ --role=roles/storage.objectViewer
Crear un usuario de Snowflake con los permisos necesarios
Durante una transferencia de Snowflake, el conector de Snowflake se conecta a tu cuenta de Snowflake mediante una conexión JDBC. Debe crear un usuario de Snowflake con un rol personalizado que solo tenga los privilegios necesarios para realizar la transferencia de datos:
// Create and configure new role, MIGRATION_ROLE GRANT USAGE ON WAREHOUSE WAREHOUSE_NAME TO ROLE MIGRATION_ROLE; GRANT USAGE ON DATABASE DATABASE_NAME TO ROLE MIGRATION_ROLE; GRANT USAGE ON SCHEMA DATABASE_NAME.SCHEMA_NAME TO ROLE MIGRATION_ROLE; // You can modify this to give select permissions for all tables in a schema GRANT SELECT ON TABLE DATABASE_NAME.SCHEMA_NAME.TABLE_NAME TO ROLE MIGRATION_ROLE; GRANT USAGE ON STORAGE_INTEGRATION_OBJECT_NAME TO ROLE MIGRATION_ROLE;
Haz los cambios siguientes:
MIGRATION_ROLE
: el nombre del rol personalizado que vas a crearWAREHOUSE_NAME
: el nombre de tu almacén de datosDATABASE_NAME
: el nombre de tu base de datos de SnowflakeSCHEMA_NAME
: el nombre de tu esquema de copo de nieveTABLE_NAME
: el nombre de la instancia de Snowflake incluida en esta transferencia de datosSTORAGE_INTEGRATION_OBJECT_NAME
: el nombre de tu objeto de integración de almacenamiento de Snowflake.
Generar un par de claves para la autenticación
Debido a la obsolescencia de los inicios de sesión con contraseña de un solo factor por parte de Snowflake, te recomendamos que utilices un par de claves para la autenticación.
Puede configurar un par de claves generando un par de claves RSA cifrado o sin cifrar y, a continuación, asignando la clave pública a un usuario de Snowflake. Para obtener más información, consulta Configurar la autenticación con pares de claves.
Añadir políticas de red
En el caso de la conectividad pública, la cuenta de Snowflake permite la conexión pública con las credenciales de la base de datos de forma predeterminada. Sin embargo, es posible que hayas configurado reglas o políticas de red que impidan que el conector de Snowflake se conecte a tu cuenta. En ese caso, debe añadir las direcciones IP necesarias a su lista de permitidas.
En la siguiente tabla se muestra una lista de las direcciones IP de las ubicaciones regionales y multirregionales que se usan para las transferencias públicas. Puedes añadir las direcciones IP que solo correspondan a la ubicación de tu conjunto de datos o todas las direcciones IP que aparecen en la tabla. Estas son direcciones IP reservadas por Google para las transferencias de datos de BigQuery Data Transfer Service.
Para añadir una dirección IP a una lista de permitidas, sigue estos pasos:
- Crea una regla de red
con
type
=IPV4
. BigQuery Data Transfer Service usa una conexión JDBC para conectarse a la cuenta de Snowflake. - Crea una política de red con la regla de red que has creado antes y la dirección IP de la siguiente tabla.
Ubicaciones regionales
Descripción de la región | Nombre de la región | Direcciones IP | |
---|---|---|---|
América | |||
Columbus (Ohio) | us-east5 |
34.162.72.184 34.162.173.185 34.162.205.205 34.162.81.45 34.162.182.149 34.162.59.92 34.162.157.190 34.162.191.145 |
|
Dallas | us-south1 |
34.174.172.89 34.174.40.67 34.174.5.11 34.174.96.109 34.174.148.99 34.174.176.19 34.174.253.135 34.174.129.163 |
|
Iowa | us-central1 |
34.121.70.114 34.71.81.17 34.122.223.84 34.121.145.212 35.232.1.105 35.202.145.227 35.226.82.216 35.225.241.102 |
|
Las Vegas | us-west4 |
34.125.53.201 34.125.69.174 34.125.159.85 34.125.152.1 34.125.195.166 34.125.50.249 34.125.68.55 34.125.91.116 |
|
Los Ángeles | us-west2 |
35.236.59.167 34.94.132.139 34.94.207.21 34.94.81.187 34.94.88.122 35.235.101.187 34.94.238.66 34.94.195.77 |
|
México | northamerica-south1 |
34.51.6.35 34.51.7.113 34.51.12.83 34.51.10.94 34.51.11.219 34.51.11.52 34.51.2.114 34.51.15.251 |
|
Montreal | northamerica-northeast1 |
34.95.20.253 35.203.31.219 34.95.22.233 34.95.27.99 35.203.12.23 35.203.39.46 35.203.116.49 35.203.104.223 |
|
Norte de Virginia | us-east4 |
35.245.95.250 35.245.126.228 35.236.225.172 35.245.86.140 35.199.31.35 35.199.19.115 35.230.167.48 35.245.128.132 35.245.111.126 35.236.209.21 |
|
Oregón | us-west1 |
35.197.117.207 35.199.178.12 35.197.86.233 34.82.155.140 35.247.28.48 35.247.31.246 35.247.106.13 34.105.85.54 |
|
Salt Lake City | us-west3 |
34.106.37.58 34.106.85.113 34.106.28.153 34.106.64.121 34.106.246.131 34.106.56.150 34.106.41.31 34.106.182.92 |
|
São Paolo | southamerica-east1 |
35.199.88.228 34.95.169.140 35.198.53.30 34.95.144.215 35.247.250.120 35.247.255.158 34.95.231.121 35.198.8.157 |
|
Santiago | southamerica-west1 |
34.176.188.48 34.176.38.192 34.176.205.134 34.176.102.161 34.176.197.198 34.176.223.236 34.176.47.188 34.176.14.80 |
|
Carolina del Sur | us-east1 |
35.196.207.183 35.237.231.98 104.196.102.222 35.231.13.201 34.75.129.215 34.75.127.9 35.229.36.137 35.237.91.139 |
|
Toronto | northamerica-northeast2 |
34.124.116.108 34.124.116.107 34.124.116.102 34.124.116.80 34.124.116.72 34.124.116.85 34.124.116.20 34.124.116.68 |
|
Europa | |||
Bélgica | europe-west1 |
35.240.36.149 35.205.171.56 34.76.234.4 35.205.38.234 34.77.237.73 35.195.107.238 35.195.52.87 34.76.102.189 |
|
Berlín | europe-west10 |
34.32.28.80 34.32.31.206 34.32.19.49 34.32.33.71 34.32.15.174 34.32.23.7 34.32.1.208 34.32.8.3 |
|
Finlandia | europe-north1 |
35.228.35.94 35.228.183.156 35.228.211.18 35.228.146.84 35.228.103.114 35.228.53.184 35.228.203.85 35.228.183.138 |
|
Fráncfort | europe-west3 |
35.246.153.144 35.198.80.78 35.246.181.106 35.246.211.135 34.89.165.108 35.198.68.187 35.242.223.6 34.89.137.180 |
|
Londres | europe-west2 |
35.189.119.113 35.189.101.107 35.189.69.131 35.197.205.93 35.189.121.178 35.189.121.41 35.189.85.30 35.197.195.192 |
|
Madrid | europe-southwest1 |
34.175.99.115 34.175.186.237 34.175.39.130 34.175.135.49 34.175.1.49 34.175.95.94 34.175.102.118 34.175.166.114 |
|
Milán | europe-west8 |
34.154.183.149 34.154.40.104 34.154.59.51 34.154.86.2 34.154.182.20 34.154.127.144 34.154.201.251 34.154.0.104 |
|
Países Bajos | europe-west4 |
35.204.237.173 35.204.18.163 34.91.86.224 34.90.184.136 34.91.115.67 34.90.218.6 34.91.147.143 34.91.253.1 |
|
París | europe-west9 |
34.163.76.229 34.163.153.68 34.155.181.30 34.155.85.234 34.155.230.192 34.155.175.220 34.163.68.177 34.163.157.151 |
|
Estocolmo | europe-north2 |
34.51.133.48 34.51.136.177 34.51.128.140 34.51.141.252 34.51.139.127 34.51.142.55 34.51.134.218 34.51.138.9 |
|
Turín | europe-west12 |
34.17.15.186 34.17.44.123 34.17.41.160 34.17.47.82 34.17.43.109 34.17.38.236 34.17.34.223 34.17.16.47 |
|
Varsovia | europe-central2 |
34.118.72.8 34.118.45.245 34.118.69.169 34.116.244.189 34.116.170.150 34.118.97.148 34.116.148.164 34.116.168.127 |
|
Zúrich | europe-west6 |
34.65.205.160 34.65.121.140 34.65.196.143 34.65.9.133 34.65.156.193 34.65.216.124 34.65.233.83 34.65.168.250 |
|
Asia‑Pacífico | |||
Deli | asia-south2 |
34.126.212.96 34.126.212.85 34.126.208.224 34.126.212.94 34.126.208.226 34.126.212.232 34.126.212.93 34.126.212.206 |
|
Hong Kong | asia-east2 |
34.92.245.180 35.241.116.105 35.220.240.216 35.220.188.244 34.92.196.78 34.92.165.209 35.220.193.228 34.96.153.178 |
|
Yakarta | asia-southeast2 |
34.101.79.105 34.101.129.32 34.101.244.197 34.101.100.180 34.101.109.205 34.101.185.189 34.101.179.27 34.101.197.251 |
|
Melbourne | australia-southeast2 |
34.126.196.95 34.126.196.106 34.126.196.126 34.126.196.96 34.126.196.112 34.126.196.99 34.126.196.76 34.126.196.68 |
|
Bombay | asia-south1 |
34.93.67.112 35.244.0.1 35.200.245.13 35.200.203.161 34.93.209.130 34.93.120.224 35.244.10.12 35.200.186.100 |
|
Osaka | asia-northeast2 |
34.97.94.51 34.97.118.176 34.97.63.76 34.97.159.156 34.97.113.218 34.97.4.108 34.97.119.140 34.97.30.191 |
|
Seúl | asia-northeast3 |
34.64.152.215 34.64.140.241 34.64.133.199 34.64.174.192 34.64.145.219 34.64.136.56 34.64.247.158 34.64.135.220 |
|
Singapur | asia-southeast1 |
34.87.12.235 34.87.63.5 34.87.91.51 35.198.197.191 35.240.253.175 35.247.165.193 35.247.181.82 35.247.189.103 |
|
Sídney | australia-southeast1 |
35.189.33.150 35.189.38.5 35.189.29.88 35.189.22.179 35.189.20.163 35.189.29.83 35.189.31.141 35.189.14.219 |
|
Taiwán | asia-east1 |
35.221.201.20 35.194.177.253 34.80.17.79 34.80.178.20 34.80.174.198 35.201.132.11 35.201.223.177 35.229.251.28 35.185.155.147 35.194.232.172 |
|
Tokio | asia-northeast1 |
34.85.11.246 34.85.30.58 34.85.8.125 34.85.38.59 34.85.31.67 34.85.36.143 34.85.32.222 34.85.18.128 34.85.23.202 34.85.35.192 |
|
Oriente Medio | |||
Dammam | me-central2 |
34.166.20.177 34.166.10.104 34.166.21.128 34.166.19.184 34.166.20.83 34.166.18.138 34.166.18.48 34.166.23.171 |
|
Doha | me-central1 |
34.18.48.121 34.18.25.208 34.18.38.183 34.18.33.25 34.18.21.203 34.18.21.80 34.18.36.126 34.18.23.252 |
|
Tel Aviv | me-west1 |
34.165.184.115 34.165.110.74 34.165.174.16 34.165.28.235 34.165.170.172 34.165.187.98 34.165.85.64 34.165.245.97 |
|
África | |||
Johannesburgo | africa-south1 |
34.35.11.24 34.35.10.66 34.35.8.32 34.35.3.248 34.35.2.113 34.35.5.61 34.35.7.53 34.35.3.17 |
Ubicaciones multirregionales
Descripción multirregional | Nombre multirregional | Direcciones IP |
---|---|---|
Centros de datos en Estados miembros de la Unión Europea1 | EU |
34.76.156.158 34.76.156.172 34.76.136.146 34.76.1.29 34.76.156.232 34.76.156.81 34.76.156.246 34.76.102.206 34.76.129.246 34.76.121.168 |
Centros de datos en Estados Unidos | US |
35.185.196.212 35.197.102.120 35.185.224.10 35.185.228.170 35.197.5.235 35.185.206.139 35.197.67.234 35.197.38.65 35.185.202.229 35.185.200.120 |
1 Los datos ubicados en la multirregión EU
no se almacenan en los centros de datos europe-west2
(Londres) ni europe-west6
(Zúrich).
Generar metadatos y ejecutar el motor de traducción
Puedes saltarte esta sección si quieres que el conector de Snowflake detecte automáticamente el esquema de tus tablas de Snowflake durante una transferencia de datos de Snowflake.
Sin embargo, si quieres definir tu esquema manualmente (por ejemplo, si quieres anular determinados atributos del esquema), puedes hacerlo siguiendo estos pasos para generar tus metadatos y ejecutar el motor de traducción.
El conector de BigQuery Data Transfer Service para Snowflake usa el motor de traducción del servicio de migración de BigQuery para asignar esquemas al migrar tablas de Snowflake a BigQuery. Para completar una transferencia de datos de Snowflake, primero debe generar metadatos para la traducción y, a continuación, ejecutar el motor de traducción:
- Ejecuta
dwh-migration-tool
para Snowflake. Para obtener más información, consulta Generar metadatos para la traducción y la evaluación. - Sube el archivo
metadata.zip
generado a un segmento de Cloud Storage. El archivometadata.zip
se usa como entrada para el motor de traducción. Ejecuta el servicio de traducción por lotes y especifica el campo
target_types
comometadata
. Para obtener más información, consulta Traducir consultas de SQL con la API Translation.- A continuación, se muestra un ejemplo de un comando para ejecutar una traducción por lotes para Snowflake:
curl -d "{ \"name\": \"sf_2_bq_translation\", \"displayName\": \"Snowflake to BigQuery Translation\", \"tasks\": { string: { \"type\": \"Snowflake2BigQuery_Translation\", \"translation_details\": { \"target_base_uri\": \"gs://sf_test_translation/output\", \"source_target_mapping\": { \"source_spec\": { \"base_uri\": \"gs://sf_test_translation/input\" } }, \"target_types\": \"metadata\", } } }, }" \ -H "Content-Type:application/json" \ -H "Authorization: Bearer TOKEN" -X POST https://bigquerymigration.googleapis.com/v2alpha/projects/project_id/locations/location/workflows
- Puedes consultar el estado de este comando en la página Traducción de SQL de BigQuery.
El resultado de la tarea de traducción por lotes se almacena en
gs://translation_target_base_uri/metadata/config/
.
Permisos de cuenta de servicio necesarios
En una transferencia de Snowflake, se usa una cuenta de servicio para leer los datos de la salida del motor de traducción en la ruta de Cloud Storage especificada.
Debes conceder a la cuenta de servicio los permisos storage.objects.get
y storage.objects.list
.
Te recomendamos que la cuenta de servicio pertenezca al mismo Google Cloud proyecto en el que se creen la configuración de transferencia y el conjunto de datos de destino. Si la cuenta de servicio está en un Google Cloud proyecto distinto del proyecto que creó la transferencia de datos de BigQuery, debes habilitar la autorización de cuentas de servicio entre proyectos.
Para obtener más información, consulta el artículo sobre los roles y permisos de gestión de identidades y accesos de BigQuery.
Evaluar datos de Snowflake
BigQuery escribe datos de Snowflake en Cloud Storage como archivos Parquet. Los archivos Parquet no admiten los tipos de datos TIMESTAMP_TZ
y TIMESTAMP_LTZ
. Si tus datos contienen estos tipos, puedes exportarlos a Amazon S3 como archivos CSV y, a continuación, importar los archivos CSV a BigQuery. Para obtener más información, consulta la descripción general de las transferencias de Amazon S3.
Recoger información sobre la transferencia
Reúne la información que necesitas para configurar la migración con BigQuery Data Transfer Service:
- El identificador de tu cuenta de Snowflake, que es el prefijo de la URL de tu cuenta de Snowflake. Por ejemplo,
ACCOUNT_IDENTIFIER.snowflakecomputing.com
. - El nombre de usuario y la clave privada asociada con los permisos adecuados para tu base de datos de Snowflake. Solo debe tener los permisos necesarios para ejecutar la transferencia de datos.
- El URI del bucket de almacenamiento provisional que quieras usar para la transferencia:
- En el caso de una cuenta de Snowflake alojada en AWS, se necesita un URI de segmento de Amazon S3, así como credenciales de acceso.
- En el caso de Snowflake alojado en Azure, se necesita una cuenta y un contenedor de Azure Blob Storage.
- En el caso de una cuenta de Snowflake alojada enGoogle Cloud, se necesita un URI de segmento de Cloud Storage. Te recomendamos que configures una política de ciclo de vida para este segmento y así evitar cargos innecesarios.
- El URI del segmento de Cloud Storage en el que has almacenado los archivos de asignación de esquemas obtenidos del motor de traducción.
Configurar una transferencia de Snowflake
Selecciona una de las opciones siguientes:
Consola
Ve a la página Transferencias de datos de la Google Cloud consola.
Haz clic en
Crear transferencia.En la sección Tipo de fuente, seleccione Migración de Snowflake en la lista Fuente.
En la sección Nombre de la configuración de transferencia, indica un nombre para la transferencia, como
My migration
, en el campo Nombre visible. El nombre visible puede ser cualquier valor que te permita identificar la transferencia si necesitas modificarla más adelante.En la sección Configuración de destino, elija el conjunto de datos que ha creado en la lista Conjunto de datos.
En la sección Detalles de la fuente de datos, haga lo siguiente:
- En Identificador de cuenta, introduce un identificador único para tu cuenta de Snowflake, que es una combinación del nombre de tu organización y el nombre de la cuenta. El identificador es el prefijo de la URL de la cuenta de Snowflake y no la URL completa. Por ejemplo,
ACCOUNT_IDENTIFIER.snowflakecomputing.com
. - En Nombre de usuario, introduce el nombre de usuario de Snowflake cuyas credenciales y autorización se utilizan para acceder a tu base de datos y transferir las tablas de Snowflake. Te recomendamos que uses el usuario que has creado para esta transferencia.
- En Auth mechanism (Mecanismo de autenticación), selecciona un método de autenticación de usuario de Snowflake. Para obtener más información, consulta Generar un par de claves para la autenticación.
- En Password (Contraseña), introduce la contraseña del usuario de Snowflake. Este campo es obligatorio si has seleccionado PASSWORD en el campo Auth mechanism (Mecanismo de autenticación).
- En Clave privada, introduce la clave privada vinculada a la clave pública asociada al usuario de Snowflake. Este campo es obligatorio si has seleccionado KEY_PAIR en el campo Mecanismo de autenticación.
- En ¿Está cifrada la clave privada?, selecciona este campo si la clave privada está cifrada con una frase de contraseña.
- En Frase de contraseña de la clave privada, introduce la frase de contraseña de la clave privada cifrada. Este campo es obligatorio si ha seleccionado KEY_PAIR en los campos Mecanismo de autenticación y ¿Está cifrada la clave privada?.
- En Almacén, introduce un almacén que se use para ejecutar esta transferencia de datos.
- En Cuenta de servicio, introduce una cuenta de servicio que quieras usar para esta transferencia de datos. La cuenta de servicio debe pertenecer al mismo proyecto en el que se hayan creado la configuración de transferencia y el conjunto de datos de destino.Google Cloud La cuenta de servicio debe tener los
storage.objects.list
ystorage.objects.get
permisos necesarios. - En Base de datos, introduzca el nombre de la base de datos de Snowflake que contiene las tablas incluidas en esta transferencia de datos.
- En Esquema, introduce el nombre del esquema de Snowflake que contiene las tablas incluidas en esta transferencia de datos.
En Patrones de nombres de tabla, especifica una tabla que quieras transferir introduciendo un nombre o un patrón que coincida con el nombre de la tabla en el esquema. Puedes usar expresiones regulares para especificar el patrón, por ejemplo,
table1_regex;table2_regex
. El patrón debe seguir la sintaxis de expresiones regulares de Java. Por ejemplo,lineitem;ordertb
coincide con las tablas llamadaslineitem
yordertb
..*
coincide con todas las tablas.
Opcional: En Ruta de GCS de salida de la traducción, especifica una ruta a la carpeta de Cloud Storage que contiene los archivos de asignación de esquemas del motor de traducción. Puedes dejar este campo en blanco para que el conector de Snowflake detecte automáticamente tu esquema.
- La ruta debe tener el formato
translation_target_base_uri/metadata/config/db/schema/
y debe terminar con/
.
- La ruta debe tener el formato
En Storage integration object name (Nombre del objeto de integración de almacenamiento), introduzca el nombre del objeto de integración de almacenamiento de Snowflake.
En Proveedor de servicios en la nube, selecciona
AWS
,AZURE
oGCP
, según el proveedor de servicios en la nube que aloje tu cuenta de Snowflake.En URI de Amazon S3, introduce el URI del segmento de Amazon S3 que quieras usar como área de almacenamiento temporal. Solo es obligatorio cuando el valor de Proveedor de nube es
AWS
.En ID de clave de acceso y Clave de acceso secreta, introduce el par de claves de acceso. Solo es obligatorio cuando tu proveedor de servicios en la nube es
AWS
.En Cuenta de almacenamiento de Azure y Contenedor de almacenamiento de Azure, introduce el nombre de la cuenta de almacenamiento y del contenedor de Azure Blob Storage que quieras usar como área de almacenamiento temporal. Solo es obligatorio cuando el valor de Proveedor de nube es
AZURE
.En Token de SAS, introduce el token de SAS generado para el contenedor. Solo es obligatorio cuando tu proveedor de servicios en la nube es
AZURE
.En URI de GCS, introduzca el URI de Cloud Storage que quiera usar como área de almacenamiento temporal. Solo es obligatorio cuando el valor de Proveedor de nube es
GCP
.
- En Identificador de cuenta, introduce un identificador único para tu cuenta de Snowflake, que es una combinación del nombre de tu organización y el nombre de la cuenta. El identificador es el prefijo de la URL de la cuenta de Snowflake y no la URL completa. Por ejemplo,
Opcional: En la sección Opciones de notificación, haz lo siguiente:
- Haz clic en el interruptor para habilitar las notificaciones por correo electrónico. Si habilitas esta opción, el administrador de las transferencias recibirá una notificación por correo cuando falle una ejecución de transferencia.
- En Selecciona un tema de Pub/Sub, elige el tema o haz clic en Crear un tema. Esta opción configura las notificaciones de Pub/Sub sobre la transferencia.
Haz clic en Guardar.
La consola muestra todos los detalles de la configuración de la transferencia, incluido el nombre de recurso de esta transferencia. Google Cloud
bq
Introduce el comando bq mk
y proporciona la marca de creación de transferencia
--transfer_config
. También se necesitan las siguientes marcas:
--project_id
--data_source
--target_dataset
--display_name
--params
bq mk \ --transfer_config \ --project_id=project_id \ --data_source=data_source \ --target_dataset=dataset \ --display_name=name \ --service_account_name=service_account \ --params='parameters'
Haz los cambios siguientes:
- project_id: tu ID de proyecto Google Cloud . Si no se especifica
--project_id
, se usa el proyecto predeterminado. - data_source: la fuente de datos,
snowflake_migration
. - dataset: el conjunto de datos de destino de BigQuery de la configuración de transferencia.
- name: el nombre visible de la configuración de la transferencia. El nombre de la transferencia puede ser cualquier valor que te permita identificarla si necesitas modificarla más adelante.
- service_account: (opcional) el nombre de la cuenta de servicio que se usa para autenticar la transferencia. La cuenta de servicio debe ser propiedad del mismo
project_id
que se usó para crear la transferencia y debe tener todos los roles necesarios. - parameters: los parámetros de la configuración de transferencia creada en formato JSON. Por ejemplo:
--params='{"param":"param_value"}'
.
Los parámetros necesarios para una configuración de transferencia de Snowflake son los siguientes:
account_identifier
: especifica un identificador único para tu cuenta de Snowflake, que es una combinación del nombre de tu organización y el nombre de la cuenta. El identificador es el prefijo de la URL de la cuenta de Snowflake y no la URL completa. Por ejemplo,account_identifier.snowflakecomputing.com
.username
: especifica el nombre de usuario de Snowflake cuyas credenciales y autorización se utilizan para acceder a tu base de datos y transferir las tablas de Snowflake.auth_mechanism
: especifica el método de autenticación de usuarios de Snowflake. Los valores posibles sonPASSWORD
yKEY_PAIR
. Para obtener más información, consulta Generar un par de claves para la autenticación.password
: especifica la contraseña del usuario de Snowflake. Este campo es obligatorio si ha especificadoPASSWORD
en el campoauth_mechanism
.private_key
: especifica la clave privada vinculada a la clave pública asociada al usuario de Snowflake. Este campo es obligatorio si ha especificadoKEY_PAIR
en el campoauth_mechanism
.is_private_key_encrypted
: especificatrue
si la clave privada está cifrada con una frase de contraseña.private_key_passphrase
: especifica la frase de contraseña de la clave privada cifrada. Este campo es obligatorio si ha especificadoKEY_PAIR
en el campoauth_mechanism
ytrue
en el campois_private_key_encrypted
.warehouse
: especifica un almacén que se utiliza para ejecutar esta transferencia de datos.service_account
: especifica una cuenta de servicio que se usará con esta transferencia de datos. La cuenta de servicio debe pertenecer al mismo proyecto Google Cloud en el que se creen la configuración de transferencia y el conjunto de datos de destino. La cuenta de servicio debe tener los permisos necesariosstorage.objects.list
ystorage.objects.get
.database
: especifica el nombre de la base de datos de Snowflake que contiene las tablas incluidas en esta transferencia de datos.schema
: especifica el nombre del esquema de Snowflake que contiene las tablas incluidas en esta transferencia de datos.table_name_patterns
: especifica una tabla que se va a transferir introduciendo un nombre o un patrón que coincida con el nombre de la tabla en el esquema. Puedes usar expresiones regulares para especificar el patrón, por ejemplo,table1_regex;table2_regex
. El patrón debe seguir la sintaxis de expresiones regulares de Java. Por ejemplo,lineitem;ordertb
coincide con las tablas llamadaslineitem
yordertb
..*
coincide con todas las tablas.También puede dejar este campo en blanco para migrar todas las tablas del esquema especificado.
translation_output_gcs_path
: (Opcional) especifica la ruta a la carpeta de Cloud Storage que contiene los archivos de asignación de esquemas del motor de traducción. Puedes dejar este campo en blanco para que el conector de Snowflake detecte automáticamente tu esquema.- La ruta debe tener el formato
gs://translation_target_base_uri/metadata/config/db/schema/
y debe terminar con/
.
- La ruta debe tener el formato
storage_integration_object_name
: especifica el nombre del objeto de integración de almacenamiento de Snowflake.cloud_provider
: introduceAWS
,AZURE
oGCP
en función del proveedor de servicios en la nube que aloje tu cuenta de Snowflake.staging_s3_uri
: introduce el URI del segmento de S3 que quieras usar como área de almacenamiento temporal. Solo es obligatorio cuandocloud_provider
esAWS
.aws_access_key_id
: introduce el par de claves de acceso. Solo es obligatorio cuandocloud_provider
esAWS
.aws_secret_access_key
: introduce el par de claves de acceso. Solo es obligatorio cuandocloud_provider
esAWS
.azure_storage_account
: introduce el nombre de la cuenta de almacenamiento que quieras usar como área de almacenamiento provisional. Solo es obligatorio cuandocloud_provider
esAZURE
.staging_azure_container
: introduce el contenedor de Azure Blob Storage que quieras usar como área de almacenamiento temporal. Solo es obligatorio cuandocloud_provider
esAZURE
.azure_sas_token
: introduce el token de SAS. Solo es obligatorio cuandocloud_provider
esAZURE
.staging_gcs_uri
: introduce el URI de Cloud Storage que quieras usar como área de almacenamiento temporal. Solo es obligatorio cuandocloud_provider
esGCP
.
Por ejemplo, en una cuenta de Snowflake alojada en AWS, el siguiente comando crea una transferencia de Snowflake llamada Snowflake transfer config
con un conjunto de datos de destino llamado your_bq_dataset
y un proyecto con el ID your_project_id
.
PARAMS='{ "account_identifier": "your_account_identifier", "auth_mechanism": "KEY_PAIR", "aws_access_key_id": "your_access_key_id", "aws_secret_access_key": "your_aws_secret_access_key", "cloud_provider": "AWS", "database": "your_sf_database", "private_key": "-----BEGIN PRIVATE KEY----- privatekey\nseparatedwith\nnewlinecharacters=-----END PRIVATE KEY-----", "schema": "your_snowflake_schema", "service_account": "your_service_account", "storage_integration_object_name": "your_storage_integration_object", "staging_s3_uri": "s3://your/s3/bucket/uri", "table_name_patterns": ".*", "translation_output_gcs_path": "gs://sf_test_translation/output/metadata/config/database_name/schema_name/", "username": "your_sf_username", "warehouse": "your_warehouse" }' bq mk --transfer_config \ --project_id=your_project_id \ --target_dataset=your_bq_dataset \ --display_name='snowflake transfer config' \ --params="$PARAMS" \ --data_source=snowflake_migration
API
Usa el método projects.locations.transferConfigs.create
y proporciona una instancia del recurso TransferConfig
.
Cuotas y límites
BigQuery tiene una cuota de carga de 15 TB por cada tarea de carga y por cada tabla. Internamente, Snowflake comprime los datos de la tabla, por lo que el tamaño de la tabla exportada es mayor que el tamaño de la tabla que indica Snowflake. Si tienes previsto migrar una tabla de más de 15 TB, ponte en contacto con dts-migration-preview-support@google.com.
Debido al modelo de coherencia de Amazon S3, es posible que algunos archivos no se incluyan en la transferencia a BigQuery.
Precios
Para obtener información sobre los precios de BigQuery Data Transfer Service, consulta la página Precios.
- Si el almacén de Snowflake y el segmento de Amazon S3 están en regiones diferentes, Snowflake aplica cargos de salida cuando ejecutas una transferencia de datos de Snowflake. No se aplican cargos por salida de datos de Snowflake si tanto el almacén de Snowflake como el segmento de Amazon S3 se encuentran en la misma región.
- Cuando los datos se transfieren de AWS a Google Cloud, se aplican cargos de salida entre nubes.
Siguientes pasos
- Más información sobre BigQuery Data Transfer Service
- Migra código SQL con la traducción de SQL por lotes.