Cargar datos de Microsoft SQL Server en BigQuery

Puede cargar datos de Microsoft SQL Server en BigQuery mediante el conector de BigQuery Data Transfer Service para Microsoft SQL Server. El conector de Microsoft SQL Server admite cargas de datos de 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 BigQuery Data Transfer Service, puede crear tareas de transferencia de datos periódicas y bajo demanda para transferir datos de su instancia de Microsoft SQL Server a BigQuery.

Limitaciones

Las tareas de transferencia de datos de Microsoft SQL Server están sujetas a las siguientes limitaciones:

  • Hay un número limitado de conexiones simultáneas a una base de datos de Microsoft SQL Server. Por lo tanto, el número de transferencias simultáneas a una sola base de datos de Microsoft SQL Server también está limitado. Asegúrate de que el número de trabajos de transferencia simultáneos sea inferior al número máximo de conexiones simultáneas admitidas por 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, algunos tipos numéricos de Microsoft SQL Server que no tienen definidos la precisión y la escala se pueden asignar a STRING en BigQuery. Para obtener más información, consulta Asignación de tipos de datos.

Opciones de ingestión de datos

En la siguiente sección se proporciona información sobre las opciones de ingesta de datos al configurar 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 cifrar las transferencias de datos a BigQuery. El conector de Microsoft SQL Server admite las siguientes configuraciones de TLS:

  • Encriptar datos y verificar la CA y el nombre de host: este modo realiza una validación completa del servidor mediante 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 de certificación (CA) de confianza. Este modo también comprueba que el nombre de host al que te conectas coincide exactamente con el nombre común o con un nombre alternativo del sujeto del certificado del servidor. Este modo evita que los atacantes usen un certificado válido para un dominio diferente con el fin de suplantar la identidad de tu servidor de base de datos.
    • Si el nombre de host no coincide con el nombre común o el nombre alternativo del sujeto del certificado, la conexión fallará. Debes configurar una resolución de DNS que coincida con el certificado o usar otro modo de seguridad.
    • Usa este modo para disfrutar de la opción más segura y evitar ataques de intermediario (PITM).
  • Cifrar datos y verificar solo la autoridad de certificación: este modo cifra todos los datos mediante TLS a través del protocolo TCPS y verifica que el certificado del servidor esté firmado por una autoridad de certificación en la que confíe 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 estás conectando.
    • Usa este modo si quieres asegurarte de que te conectas 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 cifrado: este modo cifra todos los datos que se transfieren entre el cliente y el servidor. No realiza ninguna validación de certificados ni de nombres de host.
    • Este modo proporciona cierto nivel de seguridad al proteger los datos en tránsito, pero puede ser vulnerable a ataques PITM.
    • Usa este modo si necesitas asegurarte de que todos los datos estén cifrados, pero no puedes o no quieres verificar la identidad del servidor. Te recomendamos que uses este modo cuando trabajes con VPCs privadas.
  • Sin cifrado ni verificación: en este modo no se cifra ningún dato y no se realiza ninguna verificación de certificado ni de 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 gestionen datos sensibles.
    • Solo recomendamos usar este modo para hacer pruebas en una red aislada en la que la seguridad no sea un problema.

Certificado de servidor de confianza (PEM)

Si usas el modo Cifrar datos y verificar AC y nombre de host o el modo Cifrar datos y verificar AC, también puedes proporcionar uno o varios certificados codificados en PEM. Estos certificados son necesarios en algunos casos en los que el servicio BigQuery Data Transfer Service debe verificar la identidad de tu servidor de bases de datos durante la conexión TLS:

  • Si usas un certificado firmado por una AC privada de tu organización o un certificado autofirmado, debes proporcionar la cadena de certificados completa o el certificado autofirmado. Esto es necesario para los certificados emitidos por las AC internas de los servicios gestionados de proveedores de servicios en la nube, como Amazon Relational Database Service (RDS).
  • Si el certificado de tu servidor de bases de datos está firmado por una autoridad de certificación pública (por ejemplo, Let's Encrypt, DigiCert o GlobalSign), no tienes que proporcionar ningún certificado. Los certificados raíz de estas autoridades de certificación públicas están preinstalados y son de confianza para BigQuery Data Transfer Service.

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

  • El certificado debe ser una cadena de certificados válida codificada en PEM.
  • El certificado debe ser totalmente correcto. Si falta algún certificado en la cadena o el contenido es incorrecto, la conexión TLS fallará.
  • En el caso de un solo certificado, puedes proporcionar un certificado autofirmado único desde el servidor de la base de datos.
  • En el caso de una cadena de certificados completa emitida por una CA privada, debe 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 empezar

Para poder programar una transferencia de datos de Microsoft SQL Server, debes cumplir 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 Crear un usuario con un inicio de sesión.

Requisitos previos de BigQuery

Roles obligatorios

Para obtener los permisos que necesitas para crear una transferencia de datos de Microsoft SQL Server, pide a tu administrador que te conceda 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 Microsoft SQL Server. Para ver los permisos exactos que se necesitan, despliega la sección Permisos necesarios:

Permisos obligatorios

Para crear una transferencia de datos de Microsoft SQL Server, se necesitan los siguientes permisos:

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

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

Configuración de red

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

Configurar una transferencia de datos de Microsoft SQL Server

Selecciona una de las opciones siguientes:

Consola

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

    Ir a Transferencias de datos

  2. Haz clic en Crear transferencia.

  3. En la sección Tipo de origen, en Origen, selecciona Microsoft SQL Server.

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

    • En Red adjunta, selecciona una red adjunta o haz clic en Crear red adjunta.
    • En Host (Host), introduce el nombre de host o la dirección IP de la base de datos de Microsoft SQL Server.
    • En Número de puerto, introduce el número de puerto de la base de datos de Microsoft SQL Server.
    • En Nombre de la base de datos, introduzca el nombre de la base de datos de Microsoft SQL Server.
    • En Nombre de usuario, introduce el nombre de usuario de Microsoft SQL Server que inicia la conexión con la base de datos de Microsoft SQL Server.
    • En Contraseña, introduce la contraseña del usuario de Microsoft SQL Server que inicia la conexión con 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, introduce el certificado público de la autoridad de certificación (CA) 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).
    • Para transferir objetos de Microsoft SQL Server, busca la tabla de Microsoft SQL Server o introduce manualmente los nombres de las tablas necesarias para la transferencia.
  5. En la sección Configuración de destino, en Conjunto de datos, seleccione el conjunto de datos que ha creado para almacenar sus datos o haga clic en Crear conjunto de datos y cree uno para usarlo como conjunto de datos de destino.

  6. En la sección Nombre de la configuración de transferencia, en Nombre visible, indica 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, haga lo siguiente:

    • Selecciona una frecuencia de repetición. Si selecciona la opción Horas, Días (opción predeterminada), Semanas o Meses, también debe 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 Bajo demanda, esta transferencia de datos solo se realizará cuando la inicies manualmente.
    • Si procede, selecciona la opción Empezar ahora o Empezar a una hora determinada y proporciona una fecha de inicio y un tiempo de ejecución.
  8. Opcional: En la sección Opciones de notificación, haz lo siguiente:

    • Para habilitar las notificaciones por correo, haz clic en el interruptor Notificaciones por correo para activarlo. Si habilitas esta opción, el administrador de la transferencia recibirá una notificación por correo cuando falle una ejecución de la transferencia.
    • Para configurar las notificaciones de Pub/Sub sobre la transferencia, activa el interruptor Notificaciones de Pub/Sub. Puedes seleccionar el tema o hacer clic en Crear un tema para crear uno.
  9. Opcional: En la sección Opciones avanzadas, selecciona un tipo de cifrado para esta transferencia. Puedes seleccionar una Google-owned and Google-managed encryption key o una clave de Cloud Key Management Service propiedad del cliente. Para obtener más información sobre las claves de cifrado, consulta Claves de cifrado gestionadas por el cliente (CMEK).

  10. Haz clic en Guardar.

bq

Introduce el comando bq mk y proporciona la marca de creación de transferencia --transfer_config:

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

Haz los cambios siguientes:

  • PROJECT_ID (opcional): su ID de proyecto. Google Cloud Si no se proporciona la marca --project_id para especificar un proyecto concreto, se usará el proyecto predeterminado.
  • DATA_SOURCE: 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 si necesitas modificarla más adelante.
  • DATASET: el conjunto de datos de destino de la configuración de transferencia de datos.
  • PARAMETERS: los parámetros de la configuración de transferencia creada en formato JSON. Por ejemplo: --params='{"param":"param_value"}'. Estos son los parámetros de una transferencia de Microsoft SQL Server:

    • connector.networkAttachment (opcional): nombre de la conexión de red para conectarse a la base de datos de Microsoft SQL Server.
    • connector.database: el nombre de la base de datos de Microsoft SQL Server.
    • connector.endpoint.host: el nombre de host o la dirección IP de la base de datos.
    • connector.endpoint.port: número de puerto de la base de datos.
    • connector.authentication.username: nombre de usuario de la base de datos.
    • connector.authentication.password: contraseña del usuario de la base de datos.
    • connector.tls.mode: especifica una configuración de TLS que se va a usar con esta transferencia:
      • ENCRYPT_VERIFY_CA_AND_HOST para cifrar los datos y verificar la AC y el nombre de host
      • ENCRYPT_VERIFY_CA para cifrar datos y verificar solo la AC
      • ENCRYPT_VERIFY_NONE solo para el cifrado de datos
      • DISABLE si no quieres usar cifrado ni verificación
    • connector.tls.trustedServerCertificate: (opcional) proporcione uno o varios certificados codificados en PEM. Obligatorio solo si el valor de connector.tls.mode es ENCRYPT_VERIFY_CA_AND_HOST o ENCRYPT_VERIFY_CA.
    • assets: lista de los nombres de las tablas de Microsoft SQL Server que se van a transferir 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 la transferencia, el conector de Microsoft SQL Server activa automáticamente una ejecución de la transferencia según la opción de programación que hayas elegido. En cada ejecución de la 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 programación habitual, puedes iniciar una ejecución de rellenado.

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 SQL de Azure y en las instancias gestionadas de SQL de Azure configuradas con la política de actualización siempre actualizada. El tipo de datos JSON no se admite en las instancias gestionadas 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 que uses JSON_VALUE() para la extracción, con FLOAT cálculos manuales para la similitud.

Solucionar problemas

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

Precios

No hay ningún coste por transferir datos de Microsoft SQL Server a BigQuery mientras esta función esté en vista previa.

Siguientes pasos

  • Para obtener una descripción general de BigQuery Data Transfer Service, consulta ¿Qué es BigQuery Data Transfer Service?
  • Para obtener información sobre cómo usar las transferencias, como obtener información sobre una configuración de transferencia, enumerar configuraciones de transferencia y ver el historial de ejecuciones de una transferencia, consulta Gestionar transferencias.