Carga datos de Microsoft SQL Server en BigQuery

Puedes cargar datos de Microsoft SQL Server en BigQuery con el conector del Servicio de transferencia de datos de BigQuery para Microsoft SQL Server. El conector de Microsoft SQL Server admite cargas de datos desde instancias de Microsoft SQL Server alojadas en entornos locales y otros proveedores de servicios en la nube, como Cloud SQL, Amazon Web Services (AWS) o Microsoft Azure. Con el Servicio de transferencia de datos de BigQuery, puedes crear trabajos de transferencia de datos recurrentes y según demanda para transferir datos de tu instancia de Microsoft SQL Server a BigQuery.

Limitaciones

Los trabajos de transferencia de datos de Microsoft SQL Server están sujetos a las siguientes limitaciones:

  • Hay una cantidad limitada de conexiones simultáneas a una base de datos de Microsoft SQL Server. Por lo tanto, la cantidad de ejecuciones de transferencia simultáneas a una sola base de datos de Microsoft SQL Server también es limitada. Asegúrate de que la cantidad de trabajos de transferencia simultáneos sea menor que la cantidad máxima de conexiones simultáneas que admite la base de datos de Microsoft SQL Server.
  • Algunos tipos de datos de Microsoft SQL Server se pueden asignar al tipo STRING en BigQuery para evitar la pérdida de datos. Por ejemplo, ciertos tipos numéricos en Microsoft SQL Server que no tienen precisión y escala definidas se pueden asignar a STRING en BigQuery. Para obtener más información, consulta Asignación de tipos de datos.

Opciones de transferencia de datos

En la siguiente sección, se proporciona información sobre las opciones de transferencia de datos cuando configuras una transferencia de datos de Microsoft SQL Server.

Configuración de TLS

El conector de Microsoft SQL Server admite la configuración de seguridad a nivel de transporte (TLS) para encriptar tus transferencias de datos a BigQuery. El conector de Microsoft SQL Server admite los siguientes parámetros de configuración de TLS:

  • Encriptar datos y verificar la CA y el nombre de host: Este modo realiza una validación completa del servidor con TLS a través del protocolo TCPS. Encripta todos los datos en tránsito y verifica que el certificado del servidor de la base de datos esté firmado por una autoridad certificadora (AC) de confianza. Este modo también verifica que el nombre de host al que te conectas coincida exactamente con el nombre común (CN) o con un nombre alternativo del sujeto (SAN) en el certificado del servidor. Este modo evita que los atacantes usen un certificado válido para un dominio diferente y se hagan pasar por tu servidor de base de datos.
    • Si tu nombre de host no coincide con el CN o el SAN del certificado, la conexión fallará. Debes configurar una resolución de DNS para que coincida con el certificado o usar un modo de seguridad diferente.
    • Usa este modo para obtener la opción más segura y evitar ataques de intermediarios (PITM).
  • Encriptar datos y verificar solo la CA: Este modo encripta todos los datos con TLS a través del protocolo TCPS y verifica que el certificado del servidor esté firmado por una CA en la que confía el cliente. Sin embargo, este modo no verifica el nombre de host del servidor. Este modo se conecta correctamente siempre que el certificado sea válido y lo haya emitido una VA de confianza, independientemente de si el nombre de host del certificado coincide con el nombre de host al que te conectas.
    • Usa este modo si deseas asegurarte de conectarte a un servidor cuyo certificado esté firmado por una CA de confianza, pero el nombre de host no se puede verificar o no tienes control sobre la configuración del nombre de host.
  • Solo encriptación: Este modo encripta todos los datos transferidos entre el cliente y el servidor. No realiza ninguna validación de certificado ni de nombre de host.
    • Este modo proporciona cierto nivel de seguridad, ya que protege los datos en tránsito, pero puede ser vulnerable a los ataques de PITM.
    • Usa este modo si necesitas asegurarte de que todos los datos estén encriptados, pero no puedes o no quieres verificar la identidad del servidor. Te recomendamos que uses este modo cuando trabajes con VPC privadas.
  • Sin encriptación ni verificación: En este modo, no se encriptan los datos ni se realiza ninguna verificación de certificado o nombre de host. Todos los datos se envían como texto sin formato.
    • No recomendamos usar este modo en un entorno en el que se manejan datos sensibles.
    • Solo recomendamos usar este modo para realizar pruebas en una red aislada en la que la seguridad no sea un problema.

Certificado de servidor de confianza (PEM)

Si usas el modo Encrypt data, and verify CA and hostname o el modo Encrypt data, and verify CA, también puedes proporcionar uno o más certificados codificados en PEM. Estos certificados son necesarios en algunos casos en los que el Servicio de transferencia de datos de BigQuery necesita verificar la identidad del servidor de la base de datos durante la conexión TLS:

  • Si usas un certificado firmado por una CA privada dentro de tu organización o un certificado autofirmado, debes proporcionar la cadena de certificados completa o el certificado autofirmado único. Esto es necesario para los certificados emitidos por las AC internas de los servicios administrados del proveedor de servicios en la nube, como el Servicio de Base de datos Relacionales de Amazon (RDS).
  • Si tu certificado de servidor de base de datos está firmado por una CA pública (por ejemplo, Let's Encrypt, DigiCert o GlobalSign), no es necesario que proporciones un certificado. Los certificados raíz de estas AC públicas están preinstalados y el Servicio de transferencia de datos de BigQuery confía en ellos.

Puedes proporcionar certificados codificados en PEM en el campo Certificado PEM de confianza cuando creas una configuración de transferencia de Microsoft SQL Server, con los siguientes requisitos:

  • El certificado debe ser una cadena de certificados válida codificada con PEM.
  • El certificado debe ser completamente correcto. Si faltan certificados en la cadena o el contenido es incorrecto, la conexión TLS fallará.
  • Para un solo certificado, puedes proporcionar un certificado único autofirmado desde el servidor de la base de datos.
  • Para una cadena de certificados completa emitida por una CA privada, debes proporcionar la cadena de confianza completa. Esto incluye el certificado del servidor de la base de datos y los certificados de CA intermedios y raíz.

Antes de comenzar

Antes de programar una transferencia de datos de Microsoft SQL Server, debes cumplir con los siguientes requisitos previos.

Requisitos previos de Microsoft SQL Server

Debes haber creado una cuenta de usuario en la base de datos de Microsoft SQL Server. Para obtener más información, consulta Crea un usuario con acceso.

Requisitos previos de BigQuery

Roles obligatorios

Para obtener los permisos que necesitas para crear una transferencia de datos de Microsoft SQL Server, pídele a tu administrador que te otorgue el rol de IAM de administrador de BigQuery (roles/bigquery.admin) en tu proyecto. Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.

Este rol predefinido contiene los permisos necesarios para crear una transferencia de datos de Microsoft SQL Server. Para ver los permisos exactos que son necesarios, expande la sección Permisos requeridos:

Permisos necesarios

Se requieren los siguientes permisos para crear una transferencia de datos de Microsoft SQL Server:

  • bigquery.transfers.update
  • bigquery.datasets.get

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

Configuración de red

Debes configurar parámetros de configuración de red específicos cuando no haya una dirección IP pública disponible para la conexión de la base de datos de Microsoft SQL Server. Para obtener más información, consulta las siguientes secciones:

Configura una transferencia de datos de Microsoft SQL Server

Selecciona una de las siguientes opciones:

Console

  1. Ve a la página Transferencia de datos.

    Ir a Transferencias de datos

  2. Haz clic en Crear transferencia.

  3. En la sección Tipo de fuente, en Fuente, selecciona Microsoft SQL Server.

  4. En la sección Detalles de la fuente de datos, haz lo siguiente:

    • En Adjunto de red, selecciona un adjunto de red existente o haz clic en Crear adjunto de red.
    • En Host, ingresa el nombre de host o la dirección IP de la base de datos de Microsoft SQL Server.
    • En Número de puerto, ingresa el número de puerto de la base de datos de Microsoft SQL Server.
    • En Nombre de la base de datos, ingresa el nombre de la base de datos de Microsoft SQL Server.
    • En Nombre de usuario, ingresa el nombre de usuario del usuario de Microsoft SQL Server que inicia la conexión a la base de datos de Microsoft SQL Server.
    • En Contraseña, ingresa la contraseña del usuario de Microsoft SQL Server que inicia la conexión a la base de datos de Microsoft SQL Server.
    • En Modo TLS, selecciona una opción del menú. Para obtener más información sobre los modos de TLS, consulta Configuración de TLS.
    • En Certificado PEM de confianza, ingresa el certificado público de la autoridad certificadora (AC) que emitió el certificado TLS del servidor de la base de datos. Para obtener más información, consulta Certificado de servidor de confianza (PEM).
    • En Objetos de Microsoft SQL Server que se transferirán, explora la tabla de Microsoft SQL Server o ingresa de forma manual los nombres de las tablas que se requieren para la transferencia.
  5. En la sección Configuración de destino, en Conjunto de datos, selecciona el conjunto de datos que creaste para almacenar tus datos o haz clic en Crear un conjunto de datos nuevo y crea uno para usarlo como conjunto de datos de destino.

  6. En la sección Nombre de la configuración de transferencia, en Nombre visible, ingresa un nombre para la transferencia. El nombre de la transferencia puede ser cualquier valor que te permita identificarla si necesitas modificarla más adelante.

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

    • Selecciona una frecuencia de repetición. Si seleccionas la opción Horas, Días (opción predeterminada), Semanas o Meses, también debes especificar una frecuencia. También puedes seleccionar la opción Personalizado para crear una frecuencia de repetición más específica. Si seleccionas la opción Según demanda, esta transferencia de datos solo se ejecuta cuando activas la transferencia de forma manual.
    • Si corresponde, selecciona la opción Comenzar ahora o Comenzar a una hora definida y proporciona una fecha de inicio y una hora de ejecución.
  8. Opcional: En la sección Opciones de notificación, haz lo siguiente:

    • Para habilitar las notificaciones por correo electrónico, haz clic en el botón de activación Notificaciones por correo electrónico y colócalo en la posición de activado. Cuando habilitas esta opción, el administrador de transferencias recibe una notificación por correo electrónico cuando falla la ejecución de una transferencia.
    • Para configurar las notificaciones de ejecución de Pub/Sub para tu transferencia, haz clic en el botón de activación Notificaciones de Pub/Sub para activarlo. Puedes seleccionar el nombre del tema o hacer clic en Crear un tema para crear uno.
  9. Opcional: En la sección Opciones avanzadas, selecciona un tipo de encriptación para esta transferencia. Puedes seleccionar una clave de Cloud Key Management Service Google-owned and Google-managed encryption keyo una clave propiedad del cliente. Para obtener más información sobre las claves de encriptación, consulta Claves de encriptación administradas por el cliente (CMEK).

  10. Haz clic en Guardar.

bq

Ingresa el comando bq mk y suministra la marca de creación de transferencias --transfer_config:

bq mk \
    --transfer_config \
    --project_id=PROJECT_ID \
    --data_source=DATA_SOURCE \
    --display_name=DISPLAY_NAME \
    --target_dataset=DATASET \
    --params='PARAMETERS'

Reemplaza lo siguiente:

  • PROJECT_ID (opcional): Tu ID del proyecto de Google Cloud . Si no se proporciona la marca --project_id para especificar un proyecto en particular, se usa el proyecto predeterminado.
  • DATA_SOURCE: Es la fuente de datos, que es sqlserver.
  • DISPLAY_NAME: el nombre visible de la configuración de transferencia de datos. El nombre de la transferencia puede ser cualquier valor que te permita identificarla con facilidad si es necesario hacerle modificaciones más tarde.
  • DATASET: el conjunto de datos de destino para la configuración de transferencia de datos.
  • PARAMETERS son los parámetros de la configuración de transferencia creada en formato JSON. Por ejemplo: --params='{"param":"param_value"}' Los siguientes son los parámetros para una transferencia de Microsoft SQL Server:

    • connector.networkAttachment (opcional): Nombre del adjunto de red para conectarse a la base de datos de Microsoft SQL Server.
    • connector.database: Es el nombre de la base de datos de Microsoft SQL Server.
    • connector.endpoint.host: Es el nombre de host o la dirección IP de la base de datos.
    • connector.endpoint.port: Es el número de puerto de la base de datos.
    • connector.authentication.username: Es el nombre de usuario del usuario de la base de datos.
    • connector.authentication.password: Es la contraseña del usuario de la base de datos.
    • connector.tls.mode: Especifica una configuración de TLS para usar con esta transferencia:
      • ENCRYPT_VERIFY_CA_AND_HOST para encriptar datos y verificar la CA y el nombre de host
      • ENCRYPT_VERIFY_CA para encriptar datos y verificar solo la AC
      • ENCRYPT_VERIFY_NONE solo para la encriptación de datos
      • DISABLE para indicar que no hay encriptación ni verificación
    • connector.tls.trustedServerCertificate: Proporciona uno o más certificados codificados con PEM (opcional). Solo se requiere si el valor de connector.tls.mode es ENCRYPT_VERIFY_CA_AND_HOST o ENCRYPT_VERIFY_CA.
    • assets: Es una lista de los nombres de las tablas de Microsoft SQL Server que se transferirán desde la base de datos de Microsoft SQL Server como parte de la transferencia.

Por ejemplo, el siguiente comando crea una transferencia de Microsoft SQL Server llamada My Transfer:

bq mk \
    --transfer_config
    --target_dataset=mydataset
    --data_source=sqlserver
    --display_name='My Transfer'
    --params='{"assets":["db1/dbo/Department","db1/dbo/Employees"],
        "connector.authentication.username": "User1",
        "connector.authentication.password":"ABC12345",
        "connector.database":"DB1",
        "connector.endpoint.host":"192.168.0.1",
        "connector.endpoint.port":"1520",
        "connector.networkAttachment":"projects/dev-project1/regions/us-central1/networkattachments/na1",
        "connector.tls.mode": "ENCRYPT_VERIFY_CA_AND_HOST",
        "connector.tls.trustedServerCertificate": "PEM-encoded certificate"}'
Cuando guardas la configuración de transferencia, el conector de Microsoft SQL Server activa automáticamente una ejecución de transferencia según la opción de programación que elijas. Con cada ejecución de transferencia, el conector de Microsoft SQL Server transfiere todos los datos disponibles de Microsoft SQL Server a BigQuery.

Para ejecutar manualmente una transferencia de datos fuera de tu programa habitual, puedes iniciar una ejecución de reabastecimiento.

Asignación de tipos de datos

En la siguiente tabla, se asignan los tipos de datos de Microsoft SQL Server a los tipos de datos de BigQuery correspondientes:

Tipo de datos de Microsoft SQL Server Tipo de datos de BigQuery
tinyint INTEGER
smallint INTEGER
int INTEGER
bigint BIGNUMERIC
bit BOOLEAN
decimal BIGNUMERIC
numeric NUMERIC
money BIGNUMERIC
smallmoney BIGNUMERIC
float FLOAT
real FLOAT
date DATE
time TIME
datetime2 TIMESTAMP
datetimeoffset TIMESTAMP
datetime TIMESTAMP
smalldatetime TIMESTAMP
char STRING
varchar STRING
text STRING
nchar STRING
nvarchar STRING
ntext STRING
binary BYTES
varbinary BYTES
image BYTES
geography STRING
geometry STRING
hierarchyid BYTES
rowversion BYTES
sql_variant BYTES
uniqueidentifier STRING
xml STRING
json STRING
vector STRING

Los tipos de datos json y vector solo se admiten en Azure.

El tipo de datos JSON se admite en las bases de datos de Azure SQL y en las instancias administradas de Azure SQL configuradas con la política de actualización siempre actualizada. El tipo de datos JSON no se admite en las instancias administradas de Azure SQL configuradas con la política de actualización de Microsoft SQL Server 2022.

Microsoft SQL Server almacena JSON como NVARCHAR(MAX), no como un tipo JSON. Te recomendamos que uses CHECK (ISJSON(json_col) = 1) para la validación y JSON_VALUE() para las consultas.

Microsoft SQL Server no admite vectores para el tipo de datos vector. Te recomendamos que almacenes los vectores como arrays JSON en NVARCHAR(MAX) y uses JSON_VALUE() para la extracción, con cálculos manuales de FLOAT para la similitud.

Solucionar problemas

Para solucionar problemas relacionados con tu transferencia de datos, consulta Problemas de transferencia de Microsoft SQL Server.

Precios

No se aplican costos por transferir datos de Microsoft SQL Server a BigQuery mientras esta función está en vista previa.

¿Qué sigue?

  • Si deseas obtener una descripción general del Servicio de transferencia de datos de BigQuery, consulta ¿Qué es el Servicio de transferencia de datos de BigQuery?.
  • Para obtener información sobre el uso de las transferencias (por ejemplo, cómo obtener información sobre una configuración de transferencia, mostrar distintas configuraciones o visualizar su historial de ejecuciones), consulta Manejar transferencias.