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 siguiente diagrama se muestra cómo se transfieren los datos de un almacén de datos de Snowflake alojado en AWS a BigQuery.

El flujo de datos durante una migración de Snowflake a BigQuery.

Limitaciones

Las transferencias de datos que se realizan mediante el conector de Snowflake están sujetas a las siguientes limitaciones:

  • Las transferencias de datos solo se admiten desde cuentas de Snowflake alojadas en AWS. No se admiten las transferencias de datos desde cuentas de Snowflake alojadas en Google Cloud ni en Microsoft Azure.
  • 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 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:

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.

  1. Prepara tu Google Cloud proyecto
  2. Roles de BigQuery obligatorios
  3. Prepara tu segmento de Amazon S3
  4. Crea un usuario de Snowflake con los permisos necesarios.
  5. Añadir políticas de red
  6. Opcional: Generar metadatos y ejecutar el motor de traducción
  7. Evaluar Snowflake para detectar tipos de datos no admitidos
  8. 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:

  1. Crea un proyecto Google Cloud o selecciona uno que ya tengas.

  2. Comprueba que has completado todas las acciones necesarias para habilitar BigQuery Data Transfer Service.

  3. 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, pide a tu administrador que te conceda el rol de gestión de identidades y accesos Administrador de BigQuery (roles/bigquery.admin). Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar el acceso a proyectos, carpetas y organizaciones.

Este rol predefinido contiene los permisos necesarios para crear una transferencia. Para ver los permisos exactos que se necesitan, despliega la sección Permisos necesarios:

Permisos obligatorios

Para crear una transferencia, se necesitan los siguientes permisos:

  • bigquery.transfers.update en la cuenta de usuario o de servicio que cree la configuración de transferencia
  • bigquery.datasets.get en la cuenta de usuario o de servicio que cree la configuración de transferencia
  • bigquery.datasets.update en la cuenta de usuario o de servicio que cree la configuración de transferencia

También puedes obtener estos permisos con roles personalizados u otros roles predefinidos.

Preparar un segmento de Amazon S3

Para completar una transferencia de datos de Snowflake, debes crear un segmento de Amazon S3 y, a continuación, configurarlo para permitir el acceso de escritura desde Snowflake.

  1. Crea un segmento de Amazon S3. El segmento de Amazon S3 se usa para almacenar los datos antes de cargarlos en BigQuery.

  2. 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:

  1. Crea un usuario de gestión de identidades y accesos de Amazon específico y concédele la política AmazonS3ReadOnlyAccess.

  2. Crea un par de claves de acceso de Amazon para el usuario de IAM.

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 crear
  • WAREHOUSE_NAME: el nombre de tu almacén de datos
  • DATABASE_NAME: el nombre de tu base de datos de Snowflake
  • SCHEMA_NAME: el nombre de tu esquema de copo de nieve
  • TABLE_NAME: el nombre de la instancia de Snowflake incluida en esta transferencia de datos
  • STORAGE_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 se indican 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:

  1. Crea una regla de red con type = IPV4. BigQuery Data Transfer Service usa una conexión JDBC para conectarse a la cuenta de Snowflake.
  2. 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:

  1. Ejecuta dwh-migration-tool para Snowflake. Para obtener más información, consulta Generar metadatos para la traducción y la evaluación.
  2. Sube el archivo metadata.zip generado a un segmento de Cloud Storage. El archivo metadata.zip se usa como entrada para el motor de traducción.
  3. Ejecuta el servicio de traducción por lotes y especifica el campo target_types como metadata. 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:

Configurar una transferencia de Snowflake

Selecciona una de las opciones siguientes:

Consola

  1. Ve a la página Transferencias de datos de la Google Cloud consola.

    Ir a Transferencias de datos

  2. Haz clic en Crear transferencia.

  3. En la sección Tipo de fuente, seleccione Migración de Snowflake en la lista Fuente.

  4. 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.

  5. En la sección Configuración de destino, elija el conjunto de datos que ha creado en la lista Conjunto de datos.

  6. En la sección Detalles de la fuente de datos, haga lo siguiente:

    1. En Identificador de cuenta, introduzca un identificador único para su cuenta de Snowflake, que es una combinación del nombre de su 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.
    2. En Nombre de usuario, introduce el nombre de usuario de Snowflake cuyas credenciales y autorización se usarán 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.
    3. 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.
    4. 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).
    5. 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.
    6. En ¿Está cifrada la clave privada?, seleccione este campo si la clave privada está cifrada con una frase de contraseña.
    7. 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?.
    8. En Almacén, introduce un almacén que se use para ejecutar esta transferencia de datos.
    9. En Cuenta de servicio, introduce una cuenta de servicio que quieras usar para esta transferencia de datos. La cuenta de servicio debe tener los permisos necesarios storage.objects.list y storage.objects.get.
    10. En Base de datos, introduzca el nombre de la base de datos de Snowflake que contiene las tablas incluidas en esta transferencia de datos.
    11. En Esquema, introduce el nombre del esquema de Snowflake que contiene las tablas incluidas en esta transferencia de datos.
    12. 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 llamadas lineitem y ordertb.
      • .* coincide con todas las tablas.
    13. 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 vacío 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 /.
    14. 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 este caso, S3.

    15. En Proveedor de servicios en la nube, selecciona AWS.

    16. En URI de GCS, nombre de cuenta de almacenamiento de Azure, nombre de contenedor de Azure y SAS de Azure, deja estos campos en blanco.

    17. En URI de Amazon S3, introduce el URI del segmento de S3 que quieras usar como área de almacenamiento temporal.

    18. En ID de clave de acceso y Clave de acceso secreta, introduce el par de claves de acceso.

  7. Opcional: En la sección Opciones de notificación, haz lo siguiente:

    1. 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.
    2. 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.
  8. Haz clic en Guardar.

  9. La consola muestra todos los detalles de la configuración de la transferencia, incluido el nombre del 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 para transferir las tablas de Snowflake.
  • auth_mechanism: especifica el método de autenticación de usuarios de Snowflake. Los valores posibles son PASSWORD y KEY_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 especificado PASSWORD en el campo auth_mechanism.
  • private_key : especifica la clave privada vinculada a la clave pública asociada al usuario de Snowflake. Este campo es obligatorio si ha especificado KEY_PAIR en el campo auth_mechanism.
  • is_private_key_encrypted : especifica true 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 especificado KEY_PAIR en el campo auth_mechanism y true en el campo is_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 necesarios storage.objects.list y storage.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 llamadas lineitem y ordertb.
    • .* 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 vacío 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 /.
  • storage_integration_object_name: especifica el nombre del objeto de integración de almacenamiento de Snowflake. En este caso, S3.

  • cloud_provider: especifica AWS.

  • amazon_s3_uri: especifica el URI del bucket de S3 que se va a usar como área de almacenamiento provisional.

  • aws_access_key_id: especifica el par de claves de acceso.

  • aws_secret_access_key: especifica el par de claves de acceso.

Por ejemplo, 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