Programar uma transferência do PostgreSQL

O conector do serviço de transferência de dados do BigQuery para PostgreSQL ajuda os usuários a criar jobs de transferência de dados sob demanda e recorrentes para transferir dados da instância do PostgreSQL para o BigQuery. O conector oferece suporte a instâncias do PostgreSQL hospedadas no seu ambiente local, no Cloud SQL e em outros provedores de nuvem pública, como Amazon Web Services (AWS) e Microsoft Azure.

Limitações

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

  • O número máximo de execuções de transferência simultâneas para um único banco de dados do PostgreSQL é determinado pelo número máximo de conexões simultâneas aceitas pelo banco de dados do PostgreSQL. O número de trabalhos de transferência simultâneas precisa ser limitado a um valor menor que o número máximo de conexões simultâneas suportadas pelo banco de dados PostgreSQL.
  • No PostgreSQL, alguns tipos de dados são mapeados para o tipo de string no BigQuery para evitar a perda de dados. Por exemplo, os tipos numéricos definidos no PostgreSQL que não têm uma precisão e escala definidas são mapeados para o tipo de string no BigQuery.

Antes de começar

Funções exigidas

Se você pretende 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 são necessárias se você configurar 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.

Para receber as permissões necessárias para criar uma transferência de dados do PostgreSQL, peça ao administrador para conceder a você o papel do IAM de 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 PostgreSQL. Para conferir 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 PostgreSQL:

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

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

Conexões de rede

Se um endereço IP público não estiver disponível para a conexão do banco de dados PostgreSQL, será necessário configurar um anexo de rede.

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

Configurar uma transferência de dados do PostgreSQL

Selecione 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 PostgreSQL.

  4. No campo Nome de exibição, na seção Transferir nome da configuração, insira um nome para a transferência. O nome da transferência pode ser qualquer valor que permite identificá-la, 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 as opções Horas, Dias (padrão), Semanas ou Meses, também precisará especificar uma frequência. Também é possível selecionar a opção Personalizado 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ó será executada quando você acionar manualmente a transferência.
    • Se aplicável, selecione a opção Começar agora ou Começar em um horário definido e informe 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 existente 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 do PostgreSQL.
    • Em Número da porta, insira o número da porta do servidor de banco de dados PostgreSQL.
    • Em Nome do banco de dados, insira o nome do banco de dados PostgreSQL.
    • Em Nome de usuário, digite o nome de usuário do usuário do PostgreSQL que está iniciando a conexão do banco de dados do PostgreSQL.
    • Em Senha, insira a senha do usuário do PostgreSQL que está iniciando a conexão do banco de dados.
    • Para transferir objetos do PostgreSQL, faça o seguinte:

      • Clique em Procurar para selecionar as tabelas do PostgreSQL necessárias para a transferência e clique em Selecionar.
      • Insira manualmente os nomes das tabelas nos objetos do PostgreSQL para transferir.

    Detalhes da fonte de dados na página "Criar transferência"

  8. Opcional: no menu Conta de serviço, especifique uma conta de serviço personalizada para autorizar a transferência. Verifique se a conta de serviço usada tem todos os papéis e permissões necessários. Para mais informações, consulte Transferir o proprietário como uma conta de serviço.

  9. 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 de alternância Notificações por e-mail para a posição ativada. Quando você ativa essa opção, o administrador de transferência 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 de alternância Notificações do Pub/Sub para ativar. Selecione o nome do tópico ou clique em Criar um tópico.
  10. Clique em Salvar.

bq

Insira o comando bq mk e forneça a flag de criaçã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 é postgresql.
  • 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 PostgreSQL:

    • networkAttachment (opcional): o nome do anexo de rede para se conectar ao banco de dados PostgreSQL.
    • connector.database: o nome do banco de dados do PostgreSQL.
    • connector.endpoint.host: o nome do host ou 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.
    • assets: uma lista dos nomes das tabelas do PostgreSQL que serão transferidas do banco de dados do PostgreSQL como parte da transferência.

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

bq mk \
    --transfer_config \
    --target_dataset=mydataset \
    --data_source=postgresql \
    --display_name='My Transfer' \
    --params='{"assets":["DB1/PUBLIC/DEPARTMENT","DB1/PUBLIC/EMPLOYEES"], \
        "connector.authentication.username": "User1", \
        "connector.authentication.password":"ABC12345", \
        "connector.database":"DB1", \
        "Connector.endpoint.host":"192.168.0.1", \
        "Connector.endpoint.port":"1520"}' 

API

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

Mapeamento de tipo de dados

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

Tipo de dados do PostgreSQL Tipo de dados do BigQuery
bigint INTEGER
bigserial INTEGER
bit(n) STRING
bit varying(n) STRING
boolean BOOLEAN
bytea BYTES
character STRING
character varying STRING
double precision FLOAT
integer INTEGER
numeric(precision, scale)/decimal(precision, scale) NUMERIC
real FLOAT
smallint INTEGER
smallserial INTEGER
serial INTEGER
text INTEGER
date DATE
time [ (p) ] [ without timezone ] TIMESTAMP
time [ (p) ] with time zone TIMESTAMP
timestamp [ (p) ] [ without timezone ] TIMESTAMP
timestamp [ (p) ] with time zone TIMESPAMP
xml STRING
tsquery STRING
tsvector STRING
uuid STRING
box STRING
cidr STRING
circle STRING
inet STRING
interval STRING
json STRING
jsonb STRING
line STRING
lseg STRING
macaddr STRING
macaddr8 STRING
money STRING
path STRING
point STRING
polygon STRING

Resolver problemas

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

A seguir