Carregar dados do MySQL no BigQuery

É possível carregar dados do MySQL para o BigQuery usando o conector do serviço de transferência de dados do BigQuery para MySQL. Ele oferece suporte a instâncias do MySQL hospedadas no seu ambiente local, no Cloud SQL e em outros provedores de nuvem pública como Amazon Web Services (AWS) e Microsoft Azure. Com o serviço de transferência de dados do BigQuery, é possível programar jobs de transferência recorrentes que adicionam seus dados mais recentes do MySQL ao BigQuery.

Antes de começar

Funções exigidas

Para receber as permissões necessárias para criar uma transferência de dados do serviço de transferência de dados do BigQuery, peça ao administrador para conceder a você o papel do IAM Administrador do BigQuery (roles/bigquery.admin) no seu projeto. Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.

Esse papel predefinido contém as permissões necessárias para criar uma transferência de dados do serviço de transferência de dados do BigQuery. Para acessar as permissões exatas necessárias, expanda a seção Permissões necessárias:

Permissões necessárias

As seguintes permissões são necessárias para criar uma transferência de dados do serviço de transferência de dados do BigQuery:

  • Permissões do serviço de transferência de dados do BigQuery:
    • bigquery.transfers.update
    • bigquery.transfers.get
  • Permissões do BigQuery:
    • bigquery.datasets.get
    • bigquery.datasets.getIamPolicy
    • bigquery.datasets.update
    • bigquery.datasets.setIamPolicy
    • bigquery.jobs.create

Essas permissões também podem ser concedidas com funções personalizadas ou outros papéis predefinidos.

Para mais informações, consulte Conceder acesso ao bigquery.admin.

Se quiser configurar notificações de execução de transferência do Pub/Sub, verifique se você tem a permissão pubsub.topics.setIamPolicy do Identity and Access Management (IAM). As permissões do Pub/Sub não serão necessárias caso você configure apenas notificações por e-mail. Para saber mais informações, consulte Notificações de execução do serviço de transferência de dados do BigQuery.

Conexões de rede

Se um endereço IP público não estiver disponível para a conexão com o banco de dados MySQL, configure um anexo de rede.

Para instruções detalhadas sobre a configuração de rede necessária, consulte os seguintes documentos:

Limitações

As transferências de dados do MySQL estão sujeitas às seguintes limitações:

  • O número máximo de conexões simultâneas com um banco de dados MySQL é determinado pelo parâmetro de configuração do MySQL max_connections. Por padrão, esse valor é definido como 151 conexões, mas pode ser configurado para um limite maior, conforme necessário. Como resultado, o número de execuções de transferência simultâneas para um único banco de dados MySQL é limitado a esse valor máximo. Essa limitação também significa que o número de jobs de transferência simultâneos precisa ser limitado a um valor menor que o número máximo de conexões simultâneas aceitas pelo banco de dados MySQL.
  • Uma única configuração de transferência só pode oferecer suporte a uma execução de transferência de dados por vez. Se uma segunda transferência de dados for programada para ser executada antes da conclusão da primeira, apenas a primeira será concluída. As outras transferências que se sobrepõem à primeira serão ignoradas.
    • Para evitar transferências ignoradas em uma única configuração, recomendamos aumentar a duração entre grandes transferências de dados configurando a Frequência de repetição.

Opções de ingestão de dados

As seções a seguir fornecem informações sobre as opções de ingestão de dados ao configurar uma transferência de dados do MySQL.

Configuração de TLS

O conector do MySQL oferece suporte à configuração de segurança no nível de transporte (TLS) para criptografar suas transferências de dados para o BigQuery. O conector do MySQL é compatível com as seguintes configurações de TLS:

  • Criptografar dados e verificar a CA e o nome do host: esse modo realiza uma validação completa do servidor usando TLS sobre o protocolo TCPS. Ele criptografa todos os dados em trânsito e verifica se o certificado do servidor de banco de dados foi assinado por uma autoridade certificadora (CA) confiável. Esse modo também verifica se o nome do host ao qual você está se conectando corresponde exatamente ao nome comum (CN) ou a um nome alternativo do titular (SAN) no certificado do servidor. Esse modo impede que invasores usem um certificado válido para um domínio diferente e se passem pelo servidor de banco de dados.
    • Se o nome do host não corresponder ao CN ou SAN do certificado, a conexão vai falhar. Configure uma resolução de DNS para corresponder ao certificado ou use um modo de segurança diferente.
    • Use esse modo para ter a opção mais segura e evitar ataques de pessoa no meio (PITM, na sigla em inglês).
  • Criptografar dados e verificar somente a CA: esse modo criptografa todos os dados usando TLS pelo protocolo TCPS e verifica se o certificado do servidor foi assinado por uma CA em que o cliente confia. No entanto, esse modo não verifica o nome do host do servidor. Esse modo se conecta com sucesso desde que o certificado seja válido e emitido por uma VA confiável, independente de o nome do host no certificado corresponder ao nome do host a que você está se conectando.
    • Use esse modo se quiser garantir que você está se conectando a um servidor cujo certificado é assinado por uma CA confiável, mas o nome do host não é verificável ou você não tem controle sobre a configuração do nome do host.
  • Somente criptografia: esse modo criptografa todos os dados transferidos entre o cliente e o servidor. Ele não realiza nenhuma validação de certificado ou nome do host.
    • Esse modo oferece algum nível de segurança ao proteger os dados em trânsito, mas pode ficar vulnerável a ataques PITM.
    • Use esse modo se precisar garantir que todos os dados estejam criptografados, mas não puder ou não quiser verificar a identidade do servidor. Recomendamos usar esse modo ao trabalhar com VPCs particulares.
  • Sem criptografia ou verificação: esse modo não criptografa nenhum dado e não realiza nenhuma verificação de certificado ou nome de host. Todos os dados são enviados como texto simples.
    • Não recomendamos o uso desse modo em um ambiente em que dados sensíveis são tratados.
    • Recomendamos usar esse modo apenas para testes em uma rede isolada em que a segurança não é uma preocupação.

Certificado de servidor confiável (PEM)

Se você estiver usando o modo Criptografar dados e verificar CA e nome do host ou o modo Criptografar dados e verificar CA, também será possível fornecer um ou mais certificados codificados em PEM. Esses certificados são necessários em alguns cenários em que o serviço de transferência de dados do BigQuery precisa verificar a identidade do servidor de banco de dados durante a conexão TLS:

  • Se você estiver usando um certificado assinado por uma CA particular na sua organização ou um certificado autoassinado, forneça a cadeia de certificados completa ou o único certificado autoassinado. Isso é necessário para certificados emitidos por CAs internas de serviços gerenciados de provedores de nuvem, como o Amazon Relational Database Service (RDS).
  • Se o certificado do servidor de banco de dados for assinado por uma CA pública (por exemplo, Let's Encrypt, DigiCert ou GlobalSign), não será necessário fornecer um certificado. Os certificados raiz dessas CAs públicas são pré-instalados e confiáveis para o serviço de transferência de dados do BigQuery.

É possível fornecer certificados codificados em PEM no campo Certificado PEM confiável ao criar uma configuração de transferência do MySQL, com os seguintes requisitos:

  • O certificado precisa ser uma cadeia de certificados válida codificada em PEM.
  • O certificado precisa estar totalmente correto. Qualquer certificado ausente na cadeia ou conteúdo incorreto causa falha na conexão TLS.
  • Para um único certificado, é possível fornecer um certificado único e autoassinado do servidor de banco de dados.
  • Para uma cadeia de certificados completa emitida por uma CA particular, é necessário fornecer a cadeia de confiança completa. Isso inclui o certificado do servidor de banco de dados e todos os certificados de CA intermediários e raiz.

Carregar dados do MySQL no BigQuery

Adicione dados do MySQL ao BigQuery configurando uma configuração de transferência usando uma das seguintes opções:

Console

  1. Acesse a página Transferências de dados.

    Acesse Transferências de dados

  2. Clique em Criar transferência.

  3. Na seção Tipo de origem, em Origem, selecione MySQL.

  4. No campo Nome de exibição, na seção Nome de configuração da transferência, insira um nome para a transferência. O nome da transferência pode ser qualquer valor que permita a identificação dela, caso você precise modificá-la mais tarde.

  5. Na seção Opções de programação, realize estas ações:

    • Selecione uma frequência de repetição. Se você selecionar a opção Horas, Dias (padrão), Semanas ou Meses, também precisará especificar uma frequência. Também é possível selecionar a opção Personalizada para criar uma frequência de repetição mais específica. Se você selecionar a opção Sob demanda, essa transferência de dados só vai ser executada quando você acioná-la manualmente.
    • Se aplicável, selecione a opção Começar agora ou Começar em um horário definido e forneça uma data de início e um horário de execução.
  6. Na seção Configurações de destino, em Conjunto de dados, selecione o conjunto que você criou para armazenar seus dados ou clique em Criar novo conjunto de dados e crie um para usar como o conjunto de dados de destino.

  7. Na seção Detalhes da fonte de dados, faça o seguinte:

    • Em Anexo de rede, selecione um anexo de rede ou clique em Criar anexo de rede. Para mais informações, consulte a seção Conexões de rede deste documento.
    • Em Host, insira o nome do host ou o endereço IP do servidor de banco de dados MySQL.
    • Em Número da porta, insira o número da porta do servidor de banco de dados MySQL.
    • Em Nome do banco de dados, insira o nome do banco de dados MySQL.
    • Em Nome de usuário, insira o nome de usuário do usuário do MySQL que está iniciando a conexão com o banco de dados MySQL.
    • Em Senha, insira a senha do usuário do MySQL que iniciou a conexão do banco de dados MySQL.
    • Em Modo TLS, selecione uma opção no menu. Para mais informações sobre os modos TLS, consulte Configuração do TLS.
    • Em Certificado PEM confiável, insira o certificado público da autoridade de certificação (CA) que emitiu o certificado TLS do servidor de banco de dados. Para mais informações, consulte Certificado de servidor confiável (PEM).
    • Em Objetos do MySQL a serem transferidos, faça o seguinte:

      • Clique em Procurar para selecionar as tabelas do MySQL necessárias para a transferência e clique em Selecionar.
      • Insira manualmente os nomes das tabelas nos objetos do MySQL a serem transferidos.
  8. Opcional: na seção Opções de notificação, faça o seguinte:

    • Para ativar as notificações por e-mail, clique no botão Notificações por e-mail e coloque na posição ativada. Quando você ativa essa opção, o administrador de transferências recebe uma notificação por e-mail quando uma execução de transferência falha.
    • Para configurar as notificações de execução do Pub/Sub para sua transferência, clique no botão Notificações do Pub/Sub para ativar. Selecione o nome do tópico ou clique em Criar um tópico.
  9. Clique em Salvar.

bq

Insira o comando bq mk e forneça a sinalização de execução da transferência --transfer_config:

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

Substitua:

  • PROJECT_ID (opcional): o ID do projeto do Google Cloud . Se a flag --project_id não for fornecida para especificar um projeto específico, o projeto padrão será usado.
  • DATA_SOURCE: a fonte de dados, que é mysql.
  • DISPLAY_NAME: o nome de exibição da configuração da transferência de dados. O nome da transferência pode ser qualquer valor que permita identificá-la, caso você precise modificá-la mais tarde.
  • DATASET: o conjunto de dados de destino na configuração da transferência de dados.
  • PARAMETERS é o parâmetro da configuração de transferência criada no formato JSON. Por exemplo, --params='{"param":"param_value"}'. Confira a seguir os parâmetros de uma transferência do MySQL:

    • connector.networkAttachment (opcional): o nome do anexo de rede para se conectar ao banco de dados MySQL.
    • connector.database: o nome do banco de dados do MySQL.
    • connector.endpoint.host: o nome do host ou o endereço IP do banco de dados.
    • connector.endpoint.port: o número da porta do banco de dados.
    • connector.authentication.username: o nome de usuário do usuário do banco de dados.
    • connector.authentication.password: a senha do usuário do banco de dados. connector.connectionType
    • connector.connectionType (opcional): o tipo de conexão para determinar o URL de conexão. Os valores podem ser SERVICE, SID ou TNS. Quando não fornecido, o padrão é SERVICE.
    • connector.tls.mode: especifique uma configuração de TLS para usar com esta transferência:
      • ENCRYPT_VERIFY_CA_AND_HOST para criptografar dados e verificar a CA e o nome do host
      • ENCRYPT_VERIFY_CA para criptografar dados e verificar apenas a AC
      • ENCRYPT_VERIFY_NONE somente para criptografia de dados
      • DISABLE para nenhuma criptografia ou verificação
    • connector.tls.trustedServerCertificate: (opcional) forneça um ou mais certificados codificados em PEM. Obrigatório apenas se connector.tls.mode for ENCRYPT_VERIFY_CA_AND_HOST ou ENCRYPT_VERIFY_CA.
    • assets: uma lista dos nomes das tabelas do MySQL a serem transferidas do banco de dados MySQL como parte da transferência.

Por exemplo, o comando a seguir cria uma transferência do MySQL chamada My Transfer:

bq mk
    --transfer_config
    --target_dataset=mydataset
    --data_source=mysql
    --display_name='My Transfer'
    --params='{"assets":["DB1/DEPARTMENT","DB1/EMPLOYEES"],
        "connector.authentication.username": "User1",
        "connector.authentication.password":"ABC12345",
        "connector.encryptionMode":"FULL",
        "connector.database":"DB1",
        "connector.endpoint.host":"54.74.220.23",
        "connector.endpoint.port":3306
        "connector.tls.mode": "ENCRYPT_VERIFY_CA_AND_HOST",
        "connector.tls.trustedServerCertificate": "PEM-encoded certificate"}'

API

Use o método projects.locations.transferConfigs.create e forneça uma instância do recurso TransferConfig.

Quando você salva a configuração de transferência, o conector do MySQL aciona automaticamente uma execução de transferência de acordo com a opção de programação. Em cada execução de transferência, o conector do MySQL transfere todos os dados disponíveis do MySQL para o BigQuery.

Para executar manualmente uma transferência de dados fora da sua programação regular, inicie uma execução de preenchimento.

Mapeamento de tipo de dados

A tabela a seguir mapeia os tipos de dados do MySQL para os tipos de dados correspondentes do BigQuery.

Tipo de dados do MySQL Tipo de dados do BigQuery
BIT BOOLEAN
TINYINT INTEGER
BOOL, BOOLEAN INTEGER

Em um banco de dados MySQL, os tipos de dados BOOL e BOOLEAN são armazenados internamente como TINYINT(1), que aceita valores no intervalo -128 a 127. Por isso, os tipos de dados BOOL e BOOLEAN são mapeados para INTEGER quando transferidos para o BigQuery. Para mais informações, consulte Sintaxe do tipo de dados numéricos.

SMALLINT INTEGER
MEDIUMINT INTEGER
INT, INTEGER INTEGER
BIGINT BIGNUMERIC
FLOAT FLOAT
DOUBLE FLOAT
DECIMAL BIGNUMERIC
DATE DATE
DATETIME TIMESTAMP
TIMESTAMP TIMESTAMP
TIME TIME
YEAR DATE
CHAR STRING
VARCHAR STRING
BINARY BYTES
VARBINARY BYTES
TINYBLOB BYTES
TINYTEXT STRING
BLOB BYTES
TEXT STRING
MEDIUMBLOB BYTES
MEDIUMTEXT STRING
LONGBLOB BYTES
LONGTEXT STRING
ENUM STRING
SET STRING
JSON JSON

Resolver problemas

Se você tiver problemas para configurar a transferência de dados, consulte Problemas de transferência do MySQL.

A seguir