Carregue dados do MySQL para o BigQuery

Pode carregar dados do MySQL para o BigQuery através do conetor do Serviço de transferência de dados do BigQuery para o MySQL. Suporta instâncias do MySQL alojadas no seu ambiente local, no Cloud SQL e noutros fornecedores de nuvem pública, como os serviços Web da Amazon (AWS) e o Microsoft Azure. Com o Serviço de transferência de dados do BigQuery, pode agendar tarefas de transferência recorrentes que adicionam os seus dados mais recentes do MySQL ao BigQuery.

Antes de começar

Funções necessárias

Para receber as autorizações de que precisa para criar uma transferência de dados do Serviço de transferência de dados do BigQuery, peça ao seu administrador para lhe conceder a função do IAM de administrador do BigQuery (roles/bigquery.admin) no seu projeto. Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.

Esta função predefinida contém as autorizações necessárias para criar uma transferência de dados do Serviço de transferência de dados do BigQuery. Para ver as autorizações exatas que são necessárias, expanda a secção Autorizações necessárias:

Autorizações necessárias

São necessárias as seguintes autorizações para criar uma transferência de dados do Serviço de transferência de dados do BigQuery:

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

Também pode conseguir estas autorizações com funções personalizadas ou outras funções predefinidas.

Para mais informações, consulte o artigo Conceda acesso ao bigquery.admin.

Se pretender configurar notificações de execução de transferências para o Pub/Sub, certifique-se de que tem a autorização de pubsub.topics.setIamPolicygestão de identidade e de acesso (IAM) . Não são necessárias autorizações do Pub/Sub se configurar apenas notificações por email. Para mais informações, consulte o artigo Notificações de execução do Serviço de transferência de dados do BigQuery.

Ligações de rede

Se não estiver disponível um endereço IP público para a ligação à base de dados MySQL, tem de configurar uma associação de rede.

Para ver 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 ligações simultâneas a uma base de dados MySQL é determinado pelo parâmetro de configuração do MySQL max_connections. Por predefinição, este valor está definido como 151 ligações, mas pode ser configurado para um limite superior, conforme necessário. Como resultado, o número de execuções de transferência simultâneas para uma única base de dados MySQL está limitado a esse valor máximo. Esta limitação também significa que o número de tarefas de transferência simultâneas deve ser limitado a um valor inferior ao número máximo de ligações simultâneas suportadas pela base de dados MySQL.
  • Uma única configuração de transferência só pode suportar uma execução de transferência de dados num determinado momento. No caso em que uma segunda transferência de dados está agendada para ser executada antes da conclusão da primeira, apenas a primeira transferência de dados é concluída, enquanto todas as outras transferências de dados que se sobreponham à primeira são ignoradas.
    • Para evitar transferências ignoradas numa única configuração de transferência, recomendamos que aumente a duração do tempo entre transferências de grandes volumes de dados configurando a Frequência de repetição.

Opções de carregamento de dados

As secções seguintes fornecem informações sobre as opções de carregamento de dados quando configura uma transferência de dados do MySQL.

Configuração de TLS

O conetor do MySQL suporta a configuração da segurança ao nível do transporte (TLS) para encriptar as suas transferências de dados para o BigQuery. O conetor do MySQL suporta as seguintes configurações de TLS:

  • Encriptar dados e validar a AC e o nome do anfitrião: este modo executa uma validação completa do servidor através do TLS sobre o protocolo TCPS. Encripta todos os dados em trânsito e verifica se o certificado do servidor de base de dados está assinado por uma autoridade de certificação (AC) fidedigna. Este modo também verifica se o nome de anfitrião ao qual está a estabelecer ligação corresponde exatamente ao nome comum (CN) ou a um nome alternativo de entidade (SAN) no certificado do servidor. Este modo impede que os atacantes usem um certificado válido para um domínio diferente para se fazerem passar pelo seu servidor de base de dados.
    • Se o nome de anfitrião não corresponder ao CN ou ao SAN do certificado, a ligação falha. Tem de configurar uma resolução DNS para corresponder ao certificado ou usar um modo de segurança diferente.
    • Use este modo para a opção mais segura de evitar ataques de intermediários (PITM).
  • Encriptar dados e validar apenas a AC: este modo encripta todos os dados através do TLS sobre o protocolo TCPS e verifica se o certificado do servidor está assinado por uma AC na qual o cliente confia. No entanto, este modo não valida o nome do anfitrião do servidor. Este modo estabelece ligação com êxito desde que o certificado seja válido e emitido por uma AC fidedigna, independentemente de o nome do anfitrião no certificado corresponder ao nome do anfitrião ao qual está a estabelecer ligação.
    • Use este modo se quiser garantir que está a estabelecer ligação a um servidor cujo certificado está assinado por uma AC fidedigna, mas o nome do anfitrião não é verificável ou não tem controlo sobre a configuração do nome do anfitrião.
  • Apenas encriptação: este modo encripta todos os dados transferidos entre o cliente e o servidor. Não realiza nenhuma validação de certificado ou nome de anfitrião.
    • Este modo oferece algum nível de segurança ao proteger os dados em trânsito, mas pode ser vulnerável a ataques PITM.
    • Use este modo se precisar de garantir que todos os dados estão encriptados, mas não conseguir ou não quiser validar a identidade do servidor. Recomendamos que use este modo quando trabalhar com VPCs privadas.
  • Sem encriptação nem validação: este modo não encripta dados e não realiza nenhuma validação de certificado ou nome de anfitrião. Todos os dados são enviados como texto simples.
    • Não recomendamos a utilização deste modo num ambiente onde são processados dados confidenciais.
    • Recomendamos que use este modo apenas para fins de teste numa rede isolada onde a segurança não seja uma preocupação.

Certificado do servidor fidedigno (PEM)

Se estiver a usar o modo Encriptar dados e validar AC e nome do anfitrião ou o modo Encriptar dados e validar AC, também pode fornecer um ou mais certificados codificados em PEM. Estes certificados são necessários em alguns cenários em que o Serviço de transferência de dados do BigQuery tem de validar a identidade do servidor de base de dados durante a ligação TLS:

  • Se estiver a usar um certificado assinado por uma AC privada na sua organização ou um certificado autoassinado, tem de fornecer a cadeia de certificados completa ou o certificado autoassinado único. Isto é necessário para certificados emitidos por ACs internas de serviços de fornecedores de nuvem geridos, como o Amazon Relational Database Service (RDS).
  • Se o certificado do servidor de base de dados for assinado por uma CA pública (por exemplo, Let's Encrypt, DigiCert ou GlobalSign), não tem de fornecer um certificado. Os certificados de raiz destas ACs públicas estão pré-instalados e são fidedignos para o Serviço de transferência de dados do BigQuery.

Pode fornecer certificados codificados em PEM no campo Certificado PEM fidedigno quando cria uma configuração de transferência do MySQL, com os seguintes requisitos:

  • O certificado tem de ser uma cadeia de certificados codificada em PEM válida.
  • O certificado tem de estar totalmente correto. Quaisquer certificados em falta na cadeia ou conteúdo incorreto fazem com que a ligação TLS falhe.
  • Para um único certificado, pode fornecer um único certificado autoassinado do servidor de base de dados.
  • Para uma cadeia de certificados completa emitida por uma AC privada, tem de fornecer a cadeia de confiança completa. Isto inclui o certificado do servidor de base de dados e todos os certificados intermédios e da AC de raiz.

Carregue dados do MySQL para o BigQuery

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

Consola

  1. Aceda à página Transferências de dados.

    Aceda a Transferências de dados

  2. Clique em Criar transferência.

  3. Na secção Tipo de origem, para Origem, selecione MySQL.

  4. Na secção Nome da configuração da transferência, para Nome a apresentar, introduza um nome para a transferência. O nome da transferência pode ser qualquer valor que lhe permita identificar a transferência se precisar de a modificar mais tarde.

  5. Na secção Opções de agendamento, faça o seguinte:

    • Selecione uma frequência de repetição. Se selecionar a opção Horas, Dias (predefinição), Semanas ou Meses, também tem de especificar uma frequência. Também pode selecionar a opção Personalizado para criar uma frequência de repetição mais específica. Se selecionar a opção A pedido, esta transferência de dados só é executada quando aciona manualmente a transferência.
    • Se aplicável, selecione a opção Começar agora ou Começar a uma hora definida e indique uma data de início e um tempo de execução.
  6. Na secção Definições de destino, para Conjunto de dados, selecione o conjunto de dados que criou para armazenar os dados ou clique em Criar novo conjunto de dados e crie um para usar como conjunto de dados de destino.

  7. Na secção Detalhes da origem de dados, faça o seguinte:

    • Para Anexo de rede, selecione um anexo de rede existente ou clique em Criar anexo de rede. Para mais informações, consulte a secção Ligações de rede deste documento.
    • Para Anfitrião, introduza o nome do anfitrião ou o endereço IP do servidor de base de dados MySQL.
    • Para Número da porta, introduza o número da porta do servidor de base de dados MySQL.
    • Em Nome da base de dados, introduza o nome da base de dados do MySQL.
    • Para Nome de utilizador, introduza o nome de utilizador do utilizador do MySQL que inicia a ligação à base de dados do MySQL.
    • Para Palavra-passe, introduza a palavra-passe do utilizador do MySQL que inicia a ligação à base de dados do MySQL.
    • Para o Modo TLS, selecione uma opção no menu. Para mais informações sobre os modos TLS, consulte o artigo Configuração do TLS.
    • Para Certificado PEM fidedigno, introduza o certificado público da autoridade de certificação (AC) que emitiu o certificado TLS do servidor de base de dados. Para mais informações, consulte o artigo Certificado de servidor fidedigno (PEM).
    • Para transferir objetos do MySQL, faça uma das seguintes ações:

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

    • Para ativar as notificações por email, clique no botão Notificações por email para o ativar. Quando ativa esta opção, o administrador da transferência recebe uma notificação por email quando uma execução de transferência falha.
    • Para configurar notificações executadas pelo Pub/Sub para a transferência, clique no botão Notificações do Pub/Sub para o ativar. Pode selecionar o nome do tópico ou clicar em Criar um tópico para criar um.
  9. Clique em Guardar.

bq

Introduza o comando bq mk e forneça a flag de criação de 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 o seguinte:

  • PROJECT_ID (opcional): o ID do seu Google Cloud projeto. Se a flag --project_id não for fornecida para especificar um projeto em particular, é usado o projeto predefinido.
  • DATA_SOURCE: a origem de dados, que é mysql.
  • DISPLAY_NAME: o nome a apresentar da configuração de transferência de dados. O nome da transferência pode ser qualquer valor que lhe permita identificar a transferência se precisar de a modificar mais tarde.
  • DATASET: o conjunto de dados de destino para a configuração de transferência de dados.
  • PARAMETERS: os parâmetros da configuração de transferência criada no formato JSON. Por exemplo: --params='{"param":"param_value"}'. Seguem-se os parâmetros para uma transferência do MySQL:

    • connector.networkAttachment (opcional): o nome da ligação de rede para se ligar à base de dados MySQL.
    • connector.database: o nome da base de dados MySQL.
    • connector.endpoint.host: o nome do anfitrião ou o endereço IP da base de dados.
    • connector.endpoint.port: o número da porta da base de dados.
    • connector.authentication.username: o nome de utilizador do utilizador da base de dados.
    • connector.authentication.password: a palavra-passe do utilizador da base de dados. connector.connectionType
    • connector.connectionType (opcional): o tipo de ligação para determinar o URL de ligação. Pode ser SERVICE, SID ou TNS. Quando não é fornecido, o valor predefinido é SERVICE.
    • connector.tls.mode: especifique uma configuração TLS a usar com esta transferência:
      • ENCRYPT_VERIFY_CA_AND_HOST para encriptar dados e validar a AC e o nome do anfitrião
      • ENCRYPT_VERIFY_CA para encriptar dados e validar apenas a AC
      • ENCRYPT_VERIFY_NONE apenas para encriptação de dados
      • DISABLE para nenhuma encriptação ou validação
    • connector.tls.trustedServerCertificate: (opcional) forneça um ou mais certificados codificados em PEM. O elemento é 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 transferir da base de dados do MySQL como parte da transferência.

Por exemplo, o comando seguinte cria uma transferência do MySQL denominada 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 guarda a configuração de transferência, o conector MySQL aciona automaticamente uma execução de transferência de acordo com a opção de agendamento. Com cada execução de transferência, o conetor 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 normal, pode iniciar uma execução de preenchimento.

Mapeamento de tipos de dados

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

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

Numa base de dados MySQL, os tipos de dados BOOL e BOOLEAN são armazenados internamente como TINYINT(1), que suporta valores no intervalo -128 a 127. Por este motivo, os tipos de dados BOOL e BOOLEAN são mapeados para INTEGER quando são transferidos para o BigQuery. Para mais informações, consulte a secção 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 estiver a ter problemas com a configuração da transferência de dados, consulte a secção Problemas de transferência do MySQL.

O que se segue?