Para empresas com muitas origens de dados isoladas, o acesso a dados empresariais em toda a organização, especialmente em tempo real, pode ser difícil. Isto resulta num mundo de acesso aos dados limitado e lento, o que impede a capacidade de introspeção da organização.
O Datastream oferece acesso quase em tempo real a dados de alterações de várias origens de dados no local e baseadas na nuvem para criar acesso a dados organizacionais. O fluxo de dados fornece uma API de consumo unificada que democratiza o acesso da organização aos dados empresariais mais recentes disponíveis em toda a organização, o que permite cenários integrados quase em tempo real.
Um desses cenários é a transferência de dados de uma base de dados de origem para um serviço de armazenamento ou uma fila de mensagens baseados na nuvem e a transformação destes dados num formato legível por outras aplicações e serviços que comunicam com este serviço de armazenamento ou fila de mensagens.
Neste tutorial, vai aprender a usar o Datastream para transferir esquemas, tabelas e dados de uma base de dados Oracle de origem para uma pasta num contentor do Cloud Storage. O Cloud Storage é um serviço Web para armazenar e aceder a dados no Google Cloud. O serviço combina o desempenho e a escalabilidade da nuvem da Google com capacidades avançadas de segurança e partilha.
Como parte da transferência destas informações para uma pasta no contentor do Cloud Storage de destino, o Datastream traduz estas informações para o formato Avro. O Avro é definido por um esquema escrito em JavaScript Object Notation (JSON). Esta tradução permite-lhe ler dados de diferentes origens de dados de forma uniforme.
Objetivos
Neste tutorial, vai aprender a:- Defina variáveis de ambiente. Vai usar estas variáveis quando fizer pedidos ao Datastream para criar e gerir perfis de associação e uma stream.
- Crie e faça a gestão de perfis de ligação para uma base de dados de origem e um contentor de destino no Cloud Storage. Ao criar estes perfis de associação, está a criar registos que contêm informações sobre a base de dados de origem e o contentor do Cloud Storage de destino. A stream no Datastream usa as informações nos perfis de associação para transferir dados da base de dados de origem para uma pasta no contentor de destino.
- Crie e faça a gestão de uma stream. O Datastream usa esta stream para transferir dados, esquemas e tabelas da base de dados de origem para uma pasta no contentor de destino.
- Verifique se o Datastream transfere os dados e as tabelas associados a um esquema da base de dados Oracle de origem para uma pasta no contentor de destino e traduz estes dados para o formato de ficheiro Avro.
- Limpe os recursos que criou no fluxo de dados para que não ocupem quota e não lhe sejam faturados no futuro.
Custos
Neste documento, usa os seguintes componentes faturáveis do Google Cloud:
- Cloud Storage
Para gerar uma estimativa de custos com base na sua utilização prevista,
use a calculadora de preços.
Antes de começar
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
- Ative a API Datastream.
- Certifique-se de que tem a função de administrador do fluxo de dados atribuída à sua conta de utilizador.
- Certifique-se de que tem uma base de dados de origem à qual o Datastream pode aceder. Para este tutorial, é usada uma base de dados Oracle como origem.
- Configure a base de dados de origem para permitir ligações recebidas a partir de endereços IP públicos do Datastream. Consulte o artigo Listas de autorização de IPs e regiões para aceder às localizações de todas as regiões do Datastream e aos respetivos endereços IP públicos associados.
- Certifique-se de que configurou um contentor do Cloud Storage de destino ao qual o Datastream pode aceder através da lista de autorizações de IP, do túnel SSH encaminhado ou do método de conetividade de rede de peering de VPC.
- Certifique-se de que tem dados, tabelas e esquemas na base de dados de origem que o Datastream pode transferir para uma pasta no contentor do Cloud Storage de destino.
- Transfira e instale o Cloud Shell. Esta aplicação cliente oferece-lhe acesso à linha de comandos aos seus recursos na nuvem (incluindo o Datastream).
- Instale e configure o utilitário
jq. Este utilitário é um processador JSON de linha de comandos simples e flexível. Vai usar este processador para apresentar comandoscURLcomplexos em texto fácil de ler.
Definir variáveis de ambiente
Neste procedimento, vai definir as seguintes variáveis:
$PROJECT: esta variável está associada ao seu Google Cloud projeto. Todos os recursos do Google Cloud que atribuir e usar têm de pertencer a um projeto.Google Cloud$TOKEN: esta variável está associada a um token de acesso. O token de acesso fornece uma sessão que o Cloud Shell usa para realizar tarefas no Datastream através de APIs REST.
Inicie a aplicação Cloud Shell.
Depois de se autenticar na sua aplicação com a sua Conta Google, introduza o seguinte comando:
gcloud auth loginNa mensagem
Do you want to continue (Y/n)?, introduzaY.Abra um navegador de Internet e copie o URL para o navegador.
Faça a autenticação no SDK Google Cloud com a sua Conta Google. É apresentado um código na página Início de sessão. Este código é a sua chave de acesso.
Copie o token de acesso, cole-o no parâmetro
Enter verification code:na sua aplicação Cloud Shell e primaEnter.No comando, introduza
PROJECT=\"YOUR_PROJECT_NAME\"para definir a variável de ambiente$PROJECTpara o seu projeto Google Cloud.No comando, introduza
gcloud config set project YOUR_PROJECT_NAMEpara definir o projeto no qual quer trabalhar como o seu Google Cloud projeto.A linha de comandos é atualizada para refletir o seu projeto ativo e respeita este formato:
USERNAME@cloudshell:~ (YOUR_PROJECT_NAME)$No comando, introduza
TOKEN=$(gcloud auth print-access-token)para obter o token de acesso e armazená-lo como uma variável.No comando, introduza os seguintes comandos para garantir que as variáveis
$PROJECTe$TOKENestão definidas corretamente:echo $PROJECTecho $TOKEN
Agora que definiu as variáveis, pode fazer pedidos ao Datastream para criar e gerir perfis de associação e uma stream.
Crie e faça a gestão de perfis de associação
Nesta secção, cria e gere perfis de associação para uma base de dados Oracle de origem e um contentor de destino no Cloud Storage.
Quando cria estes perfis de associação, cria registos que contêm informações sobre a base de dados de origem e o contentor do Cloud Storage de destino. O Datastream usa as informações nos perfis de associação para transferir dados da base de dados de origem para uma pasta no contentor de destino.
A criação e a gestão de perfis de associação incluem:
- Criar perfis de associação para uma base de dados Oracle de origem e um contentor de destino no Cloud Storage
- A obter informações sobre um perfil de associação
- Modificar um perfil de associação
- Executar uma chamada API discover no perfil de ligação do Oracle de origem. Esta chamada permite-lhe analisar a base de dados para ver os objetos associados à mesma. Estes objetos incluem os esquemas e as tabelas que contêm os dados da base de dados. Quando usa a stream de dados para configurar uma stream, pode não querer extrair todos os objetos da base de dados, mas sim um subconjunto dos objetos (por exemplo, apenas determinadas tabelas e esquemas da base de dados). Use a API Discover para ajudar a encontrar (ou descobrir) o subconjunto de objetos da base de dados que quer extrair.
Crie perfis de ligação
Neste procedimento, cria dois perfis de ligação: um a uma base de dados Oracle de origem e outro a um contentor de destino no Cloud Storage.
- Crie um perfil de associação a uma base de dados Oracle de origem. No comando, introduza o seguinte comando:
ORACLE="{\"displayName\":\"DISPLAY_NAME\",\"oracle_profile\":{\"hostname\":\"HOSTNAME\",\" username\":\"USERNAME\",\"password\":\"PASSWORD\",\"database_service\":\"DATABASE_SERVICE\",\" port\":"PORT_NUMBER\"},\"no_connectivity\":{}}"
Use a tabela seguinte para ajudar a compreender os valores dos parâmetros da base de dados Oracle de origem:
| Valor do parâmetro | Substituir por |
|---|---|
| DISPLAY_NAME | O nome a apresentar do perfil de associação à base de dados de origem. |
| HOSTNAME | O nome do anfitrião do servidor da base de dados de origem. |
| USERNAME | O nome de utilizador da conta da base de dados de origem (por exemplo, ROOT). |
| PASSWORD | A palavra-passe da conta da base de dados de origem. |
| DATABASE_SERVICE | O serviço que garante que a base de dados de origem está protegida e é monitorizada. Para bases de dados Oracle, o serviço de base de dados é normalmente ORCL. |
| PORT_NUMBER | O número da porta reservado para a base de dados de origem. Para uma base de dados Oracle, o número da porta é normalmente 1521. |
No comando, introduza o comando
echo $ORACLE | jqpara ver o perfil de ligação de origem que criou em texto fácil de ler.{ "displayName": "DISPLAY_NAME", "oracle_profile": { "hostname": "HOSTNAME", "username": "USERNAME", "password": "PASSWORD", "database_service": "DATABASE_SERVICE", "port": PORT_NUMBER }, "no_connectivity": {} }
Envie o perfil de ligação do Oracle para que possa ser criado. No comando, introduza o seguinte comando:
curl -X POST -d $ORACLE -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json"
https://datastream.googleapis.com/DATASTREAM_API_VERSION/PROJECT_PATH/connectionProfiles? connection_profile_id=SOURCE_CONNECTION_PROFILE_ID Use a tabela seguinte para ajudar a compreender os valores dos parâmetros para este comando:
Valor do parâmetro Substituir por DATASTREAM_API_VERSION A versão atual da API Datastream (por exemplo, v1).PROJECT_PATH O caminho completo do seu Google Cloud projeto (por exemplo, projects/$PROJECT/locations/YOUR_PROJECT_LOCATION).SOURCE_CONNECTION_PROFILE_ID O identificador exclusivo reservado para este perfil de associação (por exemplo, cp-1). Verifique se vê as seguintes linhas de código:
{ "name": "PROJECT_PATH/operations/operation-SOURCE_CONNECTION_PROFILE_OPERATION_ID", "metadata": { "@type": "type.googleapis.com/google.cloud.datastream.DATASTREAM_API_VERSION.OperationMetadata", "createTime": "DATE_AND_TIME_STAMP", "target": "datastream.googleapis.com/DATASREAM_VERSION/PROJECT_PATH/connectionProfiles/
SOURCE_CONNECTION_PROFILE_ID" , "verb": "create", "requestedCancellation": false, "apiVersion": "DATASTREAM_API_VERSION" }, "done": false }Crie um perfil de associação a um contentor de destino no Cloud Storage. No comando, introduza o seguinte comando:
GOOGLECLOUDSTORAGE="{\"displayName\":\"DISPLAY_NAME\",\"gcs_profile\":{\"bucket_name\":\"BUCKET_NAME\",
\"root_path\":\"/FOLDER_PATH\"},\"no_connectivity\":{}}" Use a tabela seguinte para ajudar a compreender os valores dos parâmetros do contentor de destino:
Valor do parâmetro Substituir por DISPLAY_NAME O nome a apresentar do perfil de associação ao contentor de destino. BUCKET_NAME O nome do contentor de destino. FOLDER_PATH A pasta no contentor de destino para a qual o Datastream transfere dados da base de dados de origem (por exemplo, /root/path). No comando, introduza o comando
echo $GOOGLECLOUDSTORAGE | jqpara ver o perfil de ligação de destino que criou em texto fácil de ler.{ "displayName": "DISPLAY_NAME", "gcs_profile": { "bucket_name": "BUCKET_NAME", "root_path": "/FOLDER_PATH" }, "no_connectivity": {} }
Envie o perfil de associação do Cloud Storage para que possa ser criado. No comando, introduza o seguinte comando:
curl -X POST -d $GOOGLECLOUDSTORAGE -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json"
https://datastream.googleapis.com/DATASTREAM_API_VERSION/PROJECT_PATH/connectionProfiles? connection_profile_id=DESTINATION_CONNECTION_PROFILE_ID Verifique se vê as seguintes linhas de código:
{ "name": "PROJECT_PATH/operations/operation-DESTINATION_CONNECTION_PROFILE_OPERATION_ID", "metadata": { "@type": "@type": "type.googleapis.com/google.cloud.datastream.DATASTREAM_API_VERSION.
OperationMetadata" , "createTime": "DATE_AND_TIME_STAMP", "target": "datastream.googleapis.com/DATASTREAM_VERSION/PROJECT_PATH/connectionProfiles/DESTINATION_CONNECTION_PROFILE_ID" , "verb": "create", "requestedCancellation": false, "apiVersion": "DATASTREAM_API_VERSION" }, "done": false }Confirme se ambos os perfis de ligação foram criados. No comando, introduza o seguinte comando:
curl -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json"
https://datastream.googleapis.com/DATASTREAM_API_VERSION/PROJECT_PATH/connectionProfiles Confirme se recebe dois resultados devolvidos para os perfis de ligação de origem e de destino.
{ "connectionProfiles": [ { "name": "PROJECT_PATH/connectionProfiles/DESTINATION_CONNECTION_PROFILE_ID", "createTime": "DATE_AND_TIME_STAMP", "updateTime": "DATE_AND_TIME_STAMP", "displayName": "DISPLAY_NAME", "gcsProfile": { "bucketName": "BUCKET_NAME", "rootPath": "FOLDER_PATH" }, "noConnectivity": {} }, { "name": "PROJECT_PATH/connectionProfiles/SOURCE_CONNECTION_PROFILE_ID", "createTime": "DATE_AND_TIME_STAMP", "updateTime": "DATE_AND_TIME_STAMP", "displayName": "DISPLAY_NAME", "oracleProfile": { "hostname": "HOSTNAME", "port": PORT_NUMBER, "username": "USERNAME", "databaseService": "DATABASE_SERVICE" }, "noConnectivity": {} } ] }
Faça a gestão dos perfis de ligação
Neste procedimento, gere os perfis de ligação que criou para uma base de dados Oracle de origem e um contentor de destino no Cloud Storage. Isto inclui:
- Obter informações sobre o perfil de ligação do Cloud Storage de destino
- Modificar este perfil de associação. Para este tutorial, vai alterar a pasta do contentor do Cloud Storage de destino para /root/tutorial. O stream de dados transfere dados da base de dados de origem para esta pasta.
- Executar uma chamada API discover no perfil de ligação do Oracle de origem
Obter informações sobre o perfil de ligação do Cloud Storage de destino. No comando, introduza o seguinte comando:
curl -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json"
https://datastream.googleapis.com/DATASTREAM_API_VERSION/PROJECT_PATH/connectionProfiles/ DESTINATION_CONNECTION_PROFILE_ID Confirme que vê informações sobre este perfil de associação.
{ "name": "PROJECT_PATH/connectionProfiles/DESTINATION_CONNECTION_PROFILE_ID", "createTime": "DATE_AND_TIME_STAMP", "updateTime": "DATE_AND_TIME_STAMP", "displayName": "DISPLAY_NAME", "gcsProfile": { "bucketName": "BUCKET_NAME", "rootPath": "FOLDER_PATH" }, "noConnectivity": {} }
Modifique este perfil de associação. Para tal, primeiro, defina uma variável UPDATE. Esta variável contém os valores do perfil de associação que quer alterar. Para este tutorial, vai alterar a pasta do contentor de destino para /root/tutorial.
Para definir a variável, na linha de comandos, introduza o seguinte comando:
UPDATE="{\"gcsProfile\":{\"rootPath\":\"/root/tutorial\"}}"
No comando, introduza o seguinte comando:
curl -X PATCH -d $UPDATE -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json"
https://datastream.googleapis.com/DATASTREAM_API_VERSION/PROJECT_PATH/connectionProfiles/ DESTINATION_CONNECTION_PROFILE_ID?update_mask=gcsProfile.rootPath Verifique se vê as seguintes linhas de código:
{ "name": "PROJECT_PATH/operations/operation-DESTINATION_CONNECTION_PROFILE_OPERATION_ID", "metadata": { "@type": "type.googleapis.com/google.cloud.datastream.DATASTREAM_API_VERSION.OperationMetadata", "createTime": "DATE_AND_TIME_STAMP", "target": "PROJECT_PATH/connectionProfiles/DESTINATION_CONNECTION_PROFILE_ID", "verb": "update", "requestedCancellation": false, "apiVersion": "DATASTREAM_API_VERSION" }, "done": false }
Confirme que o perfil de ligação é modificado. No comando, introduza o seguinte comando:
curl -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json"
https://datastream.googleapis.com/DATASTREAM_API_VERSION/PROJECT_PATH/connectionProfiles/ DESTINATION_CONNECTION_PROFILE_ID Verifique se a pasta do contentor de destino do perfil de ligação do Cloud Storage é agora /root/tutorial.
{ "name": "PROJECT_PATH/connectionProfiles/DESTINATION_CONNECTION_PROFILE_ID", "createTime": "DATE_AND_TIME_STAMP", "updateTime": "DATE_AND_TIME_STAMP", "displayName": "DISPLAY_NAME", "gcsProfile": { "bucketName": "BUCKET_NAME", "rootPath": "/root/tutorial" }, "noConnectivity": {} }
Use a API Datastream Discover para descobrir os esquemas e as tabelas da base de dados Oracle de origem. O fluxo de dados fornece acesso a esta base de dados através do perfil de associação de origem.
Descubra os esquemas da base de dados Oracle. No comando, introduza o seguinte comando:
curl -X POST -d "{\"connection_profile_name\":\"projects/YOUR_PROJECT_NUMBER/locations/YOUR_PROJECT_LOCATION/connectionProfiles/SOURCE_CONNECTION_PROFILE_ID\", \"oracle_rdbms\":{\"oracleSchemas\":[{\"schema\":\"ROOT\"}]}}" -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" https://datastream.googleapis.com/DATASTREAM_API_VERSION/PROJECT_PATH/connectionProfiles:discover Verifique se o Datastream obtém todos os esquemas da sua base de dados.
Obtenha as tabelas de um esquema na sua base de dados. Para este tutorial, vai usar a API Discover para obter as tabelas do esquema ROOT. No entanto, pode descobrir as tabelas de qualquer esquema na sua base de dados.
No comando, introduza o seguinte comando:
curl -X POST -d "{\"connection_profile_name\":\"projects/YOUR_PROJECT_NUMBER/locations/YOUR_PROJECT_LOCATION/connectionProfiles/SOURCE_CONNECTION_PROFILE_ID\", \"oracle_rdbms\":{\"oracleSchemas\":[{\"schema\":\"ROOT\"}]}}" -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" https://datastream.googleapis.com/DATASTREAM_API_VERSION/PROJECT_PATH/connectionProfiles:discover - Verifique se o fluxo de dados obtém todas as tabelas do esquema que especificou (para este tutorial, o esquema ROOT).
Agora que criou e geriu perfis de associação para uma base de dados Oracle de origem e um contentor de destino no Cloud Storage, está pronto para criar e gerir uma stream no Datastream.
Criar e gerir uma stream
Nesta secção, cria e gere uma stream. O Datastream usa esta stream para transferir dados, esquemas e tabelas da base de dados de origem para uma pasta no contentor do Cloud Storage de destino.
A criação e a gestão de uma stream incluem:
- Validar uma stream para garantir que é executada com êxito e que todas as verificações de validação são aprovadas. Estas verificações incluem:
- Se a origem está configurada corretamente para permitir que o fluxo de dados transmita dados a partir da mesma.
- Se a stream consegue estabelecer ligação à origem e ao destino.
- A configuração ponto a ponto da stream.
- A criar a stream com as seguintes listas:
- Uma lista de autorizações. Esta lista especifica as tabelas e os esquemas na base de dados de origem que o Datastream pode transferir para uma pasta no contentor de destino no Cloud Storage. Para este tutorial, esta é a pasta /root/tutorial.
- Uma lista de rejeição. Esta lista especifica as tabelas e os esquemas na base de dados de origem cuja transferência para a pasta no contentor de destino do Cloud Storage está restrita ao Datastream.
- A obter informações sobre a stream
- Modificar a stream
- Iniciar a stream para que o Datastream possa transferir dados, esquemas e tabelas da base de dados de origem para uma pasta no contentor do Cloud Storage de destino.
- Usar a API Fetch Errors para detetar erros associados à stream
- Pausar a stream. Quando uma stream é pausada, o Datastream não extrai novos dados da base de dados de origem para o contentor de destino.
- Retomar a stream pausada para que a stream de dados possa continuar a transferir dados para o contentor de destino.
Crie uma stream
Neste procedimento, cria uma stream a partir da base de dados Oracle de origem para uma pasta no contentor do Cloud Storage de destino. A stream que criar inclui uma lista de autorizações e uma lista de rejeições.
Defina uma variável SCHEMAS. Esta variável define os esquemas que contêm os dados e as tabelas que quer que o Datastream obtenha da base de dados de origem e transfira para a pasta /root/tutorial do contentor de destino do Cloud Storage. Para este tutorial, vai definir a variável SCHEMAS para ser associada ao esquema ROOT.
No comando, introduza o seguinte comando:
SCHEMAS="{\"oracleSchemas\":[{\"schema\":\"ROOT\"}]}"
No comando, introduza o comando echo $SCHEMAS | jq para ver o esquema ROOT que definiu para esta variável num texto fácil de ler.
Crie uma stream. No comando, introduza o seguinte comando:
STREAM="{\"display_name\":\"DISPLAY_NAME\",\"source_config\":{\"source_connection_profile_name\":\"
PROJECT_PATH/connectionProfiles/SOURCE_CONNECTION_PROFILE_ID" ,\"oracle_source_config\":{\"allowlist\":$SCHEMAS,\"rejectlist\":{}}},\"destination_config\":{\"destination_connection_profile_name\" :\"PROJECT_PATH/connectionProfiles/DESTINATION_CONNECTION_PROFILE_ID\",\"gcs_destination_config\": {\"file_rotation_mb\":5,\"file_rotation_interval\":{\"seconds\":15},\"avro_file_format\":{}}, \"backfill_all\":{}}}" No comando, introduza o comando
echo $STREAM | jqpara ver a stream que criou em texto fácil de ler.{ "display_name": "DISPLAY_NAME", "source_config": { "source_connection_profile_name": "PROJECT_PATH/connectionProfiles/SOURCE_CONNECTION_PROFILE_ID", "oracle_source_config": { "allowlist": { "oracleSchemas": [ { "schema": "ROOT" } ] }, "rejectlist": {} } }, "destination_config": { "destination_connection_profile_name": "PROJECT_PATH/connectionProfiles/
DESTINATION_CONNECTION_PROFILE_ID" , "gcs_destination_config": { "file_rotation_mb": 5, "file_rotation_interval": { "seconds": 15 }, "avro_file_format": {} } }, "backfill_all": {} }Use esta tabela para ajudar a compreender os seguintes parâmetros da stream:
Parâmetro Descrição allowlist Os esquemas, que contêm tabelas e dados, que vão ser transferidos da base de dados de origem para uma pasta do contentor de destino do Cloud Storage. Para este tutorial, todas as tabelas e dados do esquema ROOT (e apenas deste esquema) vão ser transferidos para a pasta /root/tutorial do contentor de destino. rejectlist Todos os esquemas, que contêm tabelas e dados, que não são transferidos para uma pasta do contentor de destino do Cloud Storage. Para este tutorial, o valor