Carregar dados do Oracle no BigQuery

É possível carregar dados do Oracle para o BigQuery usando o conector do serviço de transferência de dados do BigQuery para Oracle. 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 Oracle ao BigQuery.

Limitações

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

  • O número máximo de conexões simultâneas com um banco de dados Oracle é limitado e, como resultado, o número de execuções de transferência simultâneas para um único banco de dados Oracle é limitado a esse valor máximo.
  • Configure um anexo de rede nos casos em que um IP público não estiver disponível para uma conexão com o banco de dados Oracle, com os seguintes requisitos:
    • A origem de dados precisa estar acessível na sub-rede em que o anexo de rede reside.
    • O anexo de rede não pode estar na sub-rede dentro do intervalo 240.0.0.0/24.
    • Não é possível excluir anexos de rede quando há conexões ativas com eles. Para excluir um anexo de rede, entre em contato com o Cloud Customer Care.
    • Para a multirregião us, o anexo de rede precisa estar na região us-central1. Para a multirregião eu, o anexo de rede precisa estar na região europe-west4.
  • O intervalo mínimo entre as transferências recorrentes é de 15 minutos. O intervalo padrão para uma transferência recorrente é 24 horas.
  • 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.
  • Durante uma transferência de dados, o conector do Oracle identifica colunas de chave indexadas e particionadas para transferir seus dados em lotes paralelos. Por isso, recomendamos que você especifique colunas de chave primária ou use colunas indexadas na tabela para melhorar o desempenho e reduzir a taxa de erros nas transferências de dados.
    • Se você tiver restrições de chave primária ou indexada, apenas os seguintes tipos de coluna serão compatíveis para a criação de lotes paralelos:
      • INTEGER
      • TINYINT
      • SMALLINT
      • FLOAT
      • REAL
      • DOUBLE
      • NUMERIC
      • BIGINT
      • DECIMAL
      • DATE
    • As transferências de dados do Oracle que não usam chave primária ou colunas indexadas não podem ter mais de 2 milhões de registros por tabela.
  • Se o anexo de rede e a instância de máquina virtual (VM) configurados estiverem localizados em regiões diferentes, poderá haver movimentação de dados entre regiões ao transferir dados do Oracle.

Limitações da transferência incremental

As transferências incrementais do Oracle estão sujeitas às seguintes limitações:

  • Só é possível escolher TIMESTAMP colunas como marca d'água.
  • A ingestão incremental só é compatível com recursos que têm colunas de marca-d'água válidas.
  • Os valores em uma coluna de marca-d'água precisam ser monotonicamente crescentes.
  • As transferências incrementais não podem sincronizar operações de exclusão na tabela de origem.
  • Uma única configuração de transferência pode oferecer suporte apenas à ingestão incremental ou completa.
  • Não é possível atualizar objetos na lista asset após a primeira execução de ingestão incremental.
  • Não é possível mudar o modo de gravação em uma configuração de transferência após a primeira execução de ingestão incremental.
  • Não é possível mudar a coluna de marca d'água ou a chave primária após a primeira execução de ingestão incremental.

Opções de ingestão de dados

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

Configuração de TLS

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

  • 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 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 assunto (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 é 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 usando a criptografia de rede nativa da Oracle na porta TCP padrão. 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.

Você pode fornecer certificados codificados em PEM no campo Certificado PEM confiável ao criar uma configuração de transferência do Oracle, 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, 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 Oracle. As transferências incrementais são compatíveis com o pré-lançamento.

Selecione Completa para transferir todos os dados dos seus conjuntos de dados do Oracle com cada transferência de dados.

Como alternativa, selecione Incremental (Prévia) 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 sua transferência de dados, especifique os modos de gravação Adicionar 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 Adicionar

O modo de gravação Append insere apenas 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 Adicionar, escolha uma coluna de marca d'água. Uma coluna de marca-d'água é necessária para que o conector do Oracle rastreie as mudanças na tabela de origem.

Para transferências do Oracle, 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 upsert

O modo de gravação Upsert atualiza uma linha ou insere uma nova na tabela de destino verificando uma chave primária. Você pode especificar uma chave primária para permitir que o conector do Oracle 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 da Oracle 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 Oracle vai inserir uma nova linha.

Ao selecionar o modo 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 Oracle 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 Oracle 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 Adicionar.

Antes de começar

Nas seções a seguir, descrevemos as etapas que você precisa seguir antes de criar uma transferência do Oracle.

Pré-requisitos do Oracle

É preciso também ter as seguintes informações do banco de dados Oracle ao criar uma transferência da Oracle.

Nome do parâmetro Descrição
database Nome do banco de dados.
host

Nome do host ou endereço IP do banco de dados.

port

Número da porta do banco de dados.

username

Nome de usuário para acessar o banco de dados.

password

Senha para acessar o banco de dados.

Pré-requisitos do BigQuery

Papéis obrigatórios do BigQuery

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.

Carregar dados do Oracle no BigQuery

Adicione dados do Oracle 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" no console Google Cloud .

    Acesse Transferências de dados

  2. Clique em Criar transferência.

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

  4. 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.
    • Em Host, insira o nome do host ou o IP do banco de dados.
    • Em Porta, insira o número da porta que o banco de dados Oracle está usando para conexões de entrada, como 1521.
    • Em Nome do banco de dados, insira o nome do banco de dados Oracle.
    • Em Tipo de conexão, insira o tipo de URL de conexão: SERVICE, SID ou TNS.
    • Em Nome de usuário, digite o nome do usuário que iniciou a conexão com o banco de dados Oracle.
    • Em Senha, insira a senha do usuário que iniciou a conexão do banco de dados Oracle.
    • Em Modo TLS, selecione uma opção no menu suspenso. 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 Tipo de ingestão, selecione Completa ou Incremental.
    • Em Objetos do Oracle para transferência, clique em Procurar:
      • Selecione os objetos a serem transferidos para o conjunto de dados de destino do BigQuery. Nesse campo, também é possível inserir manualmente qualquer objeto para incluir na transferência de dados.
      • Se você tiver selecionado Adicionar como modo de gravação incremental, escolha uma coluna como marca d'água.
      • Se você tiver selecionado Upsert como modo de gravação incremental, selecione uma coluna como marca d'água e uma ou mais colunas como chave primária.
  5. Na seção Configurações de destino, em Conjunto de dados, selecione o conjunto de dados que você criou para armazenar seus dados.

  6. No campo Nome de exibição da seção Nome de configuração da transferência, insira um nome para a transferência de dados.

  7. Na seção Opções de programação, faça o seguinte:

    • Na lista Frequência de repetição, selecione uma opção para especificar com que frequência essa transferência de dados é executada. Para especificar uma frequência de repetição personalizada, selecione Personalizada. Se você selecionar Sob demanda, essa transferência será executada quando você acionar manualmente a transferência.
    • Se aplicável, selecione Começar agora ou Começar no horário definido e escolha uma data de início e hora de execução.
  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 que ativa a Notificação por e-mail. 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 ativar as notificações de execução de transferência do Pub/Sub para essa transferência, clique no botão de alternância Notificações do Pub/Sub. 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'

Em que:

  • PROJECT_ID (opcional): o ID do projeto do Google Cloud . Se --project_id não for fornecido para especificar um projeto determinado, o projeto padrão será usado.
  • DATA_SOURCE: a fonte de dados — oracle.
  • DISPLAY_NAME: o nome de exibição da configuração da transferência. O nome da transferência de dados 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.
  • PARAMETERS é o parâmetro da configuração de transferência criada no formato JSON. Por exemplo, --params='{"param":"param_value"}'. Veja a seguir os parâmetros de uma transferência de dados do Oracle:

    • connector.networkAttachment (opcional): nome do anexo de rede para se conectar ao banco de dados Oracle.
    • connector.authentication.Username: nome de usuário da conta do Oracle.
    • connector.authentication.Password: senha da conta do Oracle.
    • connector.database: nome do banco de dados do Oracle.
    • connector.endpoint.host: o nome do host ou IP do banco de dados.
    • connector.endpoint.port: o número da porta que o banco de dados Oracle está usando para conexões de entrada, como 1520.
    • connector.connectionType: o tipo de URL de conexão, SERVICE, SID ou TNS.
    • 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 somente se connector.tls.mode for ENCRYPT_VERIFY_CA_AND_HOST ou ENCRYPT_VERIFY_CA.
    • ingestionType: especifique FULL ou INCREMENTAL. As transferências incrementais são compatíveis com a prévia. Para mais informações, consulte Transferências completas ou incrementais.
    • writeMode: especifique WRITE_MODE_APPEND ou WRITE_MODE_UPSERT.
    • watermarkColumns: especifique colunas na sua tabela como colunas de marca d'água. Esse campo é obrigatório para transferências incrementais.
    • primaryKeys: especifique colunas na sua tabela como chaves primárias. Esse campo é obrigatório para transferências incrementais.
    • assets: o caminho para os objetos do Oracle que serão transferidos para o BigQuery, usando o formato: DATABASE_NAME/SCHEMA_NAME/TABLE_NAME

Ao especificar vários recursos durante uma transferência incremental, os valores dos campos watermarkColumns e primaryKeys correspondem à posição dos valores no campo assets. No exemplo a seguir, dep_id corresponde à tabela DB1/USER1/DEPARTMENT, enquanto report_by e report_title correspondem à tabela DB1/USER1/EMPLOYEES.

      "primaryKeys":[['dep_id'], ['report_by','report_title']],
      "assets":["DB1/USER1/DEPARTMENT","DB1/USER1/EMPLOYEES"],
  

Por exemplo, o comando a seguir cria uma transferência de dados do Oracle no projeto padrão com todos os parâmetros necessários:

bq mk
    --transfer_config
    --target_dataset=mydataset
    --data_source=oracle
    --display_name='My Transfer'
    --params='{"assets":["DB1/USER1/DEPARTMENT","DB1/USER1/EMPLOYEES"],
        "connector.authentication.username": "User1",
        "connector.authentication.password":"ABC12345",
        "connector.database":"DB1",
        "connector.endpoint.host":"192.168.0.1",
        "connector.endpoint.port":1520,
        "connector.connectionType":"SERVICE",
        "connector.tls.mode": "ENCRYPT_VERIFY_CA_AND_HOST",
        "connector.tls.trustedServerCertificate": "PEM-encoded certificate",
        "connector.networkAttachment":
        "projects/dev-project1/regions/us-central1/networkattachments/na1"
        "ingestionType":"incremental",
        "writeMode":"WRITE_MODE_APPEND",
        "watermarkColumns":["createdAt","createdAt"],
        "primaryKeys":[['dep_id'], ['report_by','report_title']]}'

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 Oracle 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 Oracle transfere todos os dados disponíveis do Oracle 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 Oracle para os tipos de dados correspondentes do BigQuery.

Tipo de dados Oracle Tipo de dados do BigQuery
BFILE BYTES
BINARY_DOUBLE FLOAT
BINARY_FLOAT FLOAT
BLOB BYTES
CHAR STRING
CLOB STRING
DATE DATETIME
FLOAT FLOAT
INTERVAL DAY TO SECOND STRING
INTERVAL YEAR TO MONTH STRING
LONG STRING
LONG RAW BYTES
NCHAR STRING
NCLOB STRING
NUMBER (without precision and scale) STRING
NUMBER (with precision and scale lower than the BigQuery Numeric range) NUMERIC
NUMBER (with precision and scale lower than the BigQuery BigNumeric range) BIGNUMERIC
NUMBER (with precision and scale greater than the BigQuery BigNumeric range) STRING
NVARCHAR2 STRING
RAW BYTES
ROWID STRING
TIMESTAMP DATETIME
TIMESTAMP WITH LOCAL TIME ZONE DATETIME
TIMESTAMP WITH TIME ZONE TIMESTAMP
UROWID STRING
VARCHAR STRING
VARCHAR2 STRING

Resolver problemas na configuração da transferência

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

Preços

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

A seguir