Introdução às transferências de dados do PostgreSQL

É possível carregar dados do PostgreSQL para o BigQuery usando o conector do serviço de transferência de dados do BigQuery para PostgreSQL. O conector é compatível com 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. Este documento oferece uma visão geral das opções de ingestão de dados para sua transferência do PostgreSQL e informações sobre o mapeamento de tipos de dados e preços.

Para saber como programar uma transferência do PostgreSQL, consulte Carregar dados do PostgreSQL no BigQuery.

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

Configuração de TLS

O conector PostgreSQL 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 PostgreSQL é compatível com as seguintes configurações de TLS:

  • O modo Criptografar dados e verificar CA e 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 de certificação (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. É necessário configurar uma resolução de DNS para corresponder ao certificado ou usar um modo de segurança diferente. Use esse modo para ter a opção mais segura e evitar ataques person-in-the-middle (PITM).

  • O modo Criptografar dados e verificar somente a AC. Esse modo criptografa todos os dados usando TLS no protocolo TCPS e verifica se o certificado do servidor é 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 CA 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.

  • O modo 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.

  • O modo Sem criptografia ou verificação. Esse modo não criptografa dados e não realiza nenhuma verificação de certificado ou nome do 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 seja 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 especificar certificados codificados em PEM no campo Certificado PEM confiável na configuração de transferência, com os seguintes requisitos:

  • O certificado precisa ser uma cadeia 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, você pode fornecer um certificado único e autoassinado do servidor de banco de dados.
  • Para uma cadeia de certificados completa emitida por uma CA particular, forneça 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.

Transferências completas ou incrementais

É possível especificar como os dados são carregados no BigQuery selecionando a preferência de gravação Completa ou Incremental na configuração da transferência ao configurar uma transferência do PostgreSQL. As transferências incrementais são compatíveis com a Prévia.

É possível configurar uma transferência de dados completa para transferir todos os dados dos seus conjuntos de dados do PostgreSQL com cada transferência.

Como alternativa, configure uma transferência de dados incremental ([prévia](https://cloud.google.com/products#product-launch-stages)) para transferir apenas os dados que foram alterados desde a última transferência, em vez de carregar todo o conjunto de dados a cada transferência. Se você selecionar Incremental para a transferência de dados, especifique os modos de gravação Anexar ou Upsert para definir como os dados são gravados no BigQuery durante uma transferência incremental. As seções a seguir descrevem os modos de gravação disponíveis.

Modo de gravação de anexação

O modo de gravação de anexação só insere novas linhas na tabela de destino. Essa opção anexa estritamente os dados transferidos sem verificar registros existentes. Portanto, esse modo pode causar duplicação de dados na tabela de destino.

Ao selecionar o modo de adição, é necessário escolher uma coluna de marca d'água. Uma coluna de marca-d'água é necessária para que o conector do PostgreSQL rastreie as mudanças na tabela de origem.

Para transferências do PostgreSQL, recomendamos selecionar uma coluna que só seja atualizada quando o registro for criado e que não mude com atualizações subsequentes. Por exemplo, a coluna CREATED_AT.

Modo de gravação de upsert

O modo de gravação upsert atualiza uma linha ou insere uma nova linha na tabela de destino verificando uma chave primária. Você pode especificar uma chave primária para permitir que o conector do PostgreSQL determine quais mudanças são necessárias para manter a tabela de destino atualizada com a tabela de origem. Se a chave primária especificada estiver presente na tabela de destino do BigQuery durante uma transferência de dados, o conector do PostgreSQL vai atualizar essa linha com novos dados da tabela de origem. Se uma chave primária não estiver presente durante uma transferência de dados, o conector do PostgreSQL vai inserir uma nova linha.

Ao selecionar o modo de upsert, você precisa escolher uma coluna de marca d'água e uma chave primária:

  • Uma coluna de marca d'água é necessária para que o conector do PostgreSQL rastreie as mudanças na tabela de origem.
    • Selecione uma coluna de marca d'água que seja atualizada sempre que uma linha for modificada. Recomendamos colunas semelhantes às colunas UPDATED_AT ou LAST_MODIFIED.
  • A chave primária pode ser uma ou mais colunas na sua tabela que são necessárias para que o conector do PostgreSQL determine se precisa inserir ou atualizar uma linha.

    Selecione colunas que contenham valores não nulos e exclusivos em todas as linhas da tabela. Recomendamos colunas que incluem identificadores gerados pelo sistema, códigos de referência exclusivos (por exemplo, IDs de incremento automático) ou IDs de sequência imutáveis com base em tempo.

    Para evitar possíveis perdas ou corrupção de dados, as colunas de chave primária selecionadas precisam ter valores exclusivos. Se você tiver dúvidas sobre a exclusividade da coluna de chave primária escolhida, recomendamos usar o modo de gravação de adição.

Comportamento de ingestão incremental

Quando você faz mudanças no esquema da tabela na sua fonte de dados, as transferências incrementais de dados dessas tabelas são refletidas no BigQuery das seguintes maneiras:

Mudanças na fonte de dados Comportamento de ingestão incremental
Adicionar uma nova coluna Uma nova coluna é adicionada à tabela de destino do BigQuery. Todos os registros anteriores dessa coluna terão valores nulos.
excluir uma coluna. A coluna excluída permanece na tabela de destino do BigQuery. As novas entradas nessa coluna excluída são preenchidas com valores nulos.
Como mudar o tipo de dados em uma coluna O conector só é compatível com conversões de tipos de dados aceitas pela instrução DDL ALTER COLUMN. Qualquer outra conversão de tipo de dados causa falha na transferência.

Se você tiver problemas, recomendamos criar uma nova configuração de transferência.

Como renomear uma coluna A coluna original permanece na tabela de destino do BigQuery como está, enquanto uma nova coluna é adicionada à tabela de destino com o nome atualizado.

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 Tipo de dados do BigQuery atualizado
array STRING
bigint INTEGER
bigserial INTEGER
bit(n) STRING
bit varying(n) STRING
boolean BOOLEAN
box STRING
bytea BYTES
character STRING
character varying STRING
cidr STRING
circle STRING
circularstring STRING
compoundcurve STRING
curvepolygon STRING
date DATE
double precision FLOAT
enum STRING
geometrycollection STRING
inet STRING
integer INTEGER
interval STRING
json STRING JSON
jsonb STRING JSON
line STRING
linestring STRING
lseg STRING
macaddr STRING
macaddr8 STRING
money STRING
multicurve STRING
multilinestring STRING
multipoint STRING
multipolygon STRING
multisurface STRING
numeric(precision, scale)/decimal(precision, scale) NUMERIC
path STRING
point STRING
polygon STRING
polyhedralsurface STRING
range STRING
real FLOAT
serial INTEGER
smallint INTEGER
smallserial INTEGER
text STRING
time [ (p) ] [ without timezone ] TIMESTAMP
time [ (p) ] with time zone TIMESTAMP
tin STRING
timestamp [ (p) ] [ without timezone ] TIMESTAMP DATETIME
timestamp [ (p) ] with time zone TIMESTAMP
triangle STRING
tsquery STRING
tsvector STRING
uuid STRING
xml STRING

Preços

Para informações sobre preços de transferências do PostgreSQL, consulte Preços do serviço de transferência de dados.

A seguir