Com os conectores personalizados, é possível extrair metadados de fontes de dados de terceiros, como MySQL, SQL Server e Oracle. Em seguida, é possível importar esses metadados para o Knowledge Catalog (antigo Dataplex Universal Catalog) usando um pipeline de conectividade gerenciada. Criar um conector personalizado ajuda a catalogar, pesquisar e controlar recursos de fontes de dados que não têm um conector predefinido.
Use o modelo de referência do PySpark e o exemplo de conector do Python para o Oracle Database Express Edition (XE) nesta página como ponto de partida para criar seu próprio conector.
Como os conectores funcionam
Um conector extrai metadados de uma fonte de dados de terceiros, transforma os
metadados no formato ImportItem do Knowledge Catalog e gera
arquivos de importação de metadados que podem ser importados pelo Knowledge Catalog.
O conector faz parte de um pipeline de conectividade gerenciada. Um pipeline de conectividade gerenciada é um fluxo de trabalho orquestrado usado para importar metadados do Knowledge Catalog. O pipeline de conectividade gerenciada executa o conector e realiza outras tarefas no fluxo de trabalho de importação, como executar um job de importação de metadados e capturar registros.
O pipeline de conectividade gerenciada executa o conector usando um job em lote do Serviço Gerenciado para Apache Spark. O Serviço Gerenciado para Apache Spark oferece um ambiente de execução do Spark sem servidor. Embora seja possível criar um conector que não use o Spark, recomendamos que você use o Spark porque ele pode melhorar o desempenho do conector. É possível desenvolver conectores usando Python, Java, Scala ou R.
Requisitos do conector
O conector tem os seguintes requisitos:
- O conector precisa ser uma imagem do Artifact Registry que pode ser executada no Serviço Gerenciado para Apache Spark.
- O conector precisa gerar arquivos de metadados em um formato que possa ser importado
por um job de importação de metadados do Knowledge Catalog (o método de API
metadataJobs.create). Para requisitos detalhados, consulte Arquivo de importação de metadados. O conector precisa aceitar os seguintes argumentos de linha de comando para receber informações do pipeline:
Argumento de linha de comando Valor que o pipeline oferece target_project_idPROJECT_ID target_location_idREGION target_entry_group_idENTRY_GROUP_ID output_bucketCLOUD_STORAGE_BUCKET_ID output_folderFOLDER_ID O conector usa esses argumentos para gerar metadados em um grupo de entrada de destino
projects/PROJECT_ID/locations/REGION/entryGroups/ENTRY_GROUP_IDe gravar em um bucket do Cloud Storagegs://CLOUD_STORAGE_BUCKET_ID/FOLDER_ID. Cada execução do pipeline cria uma nova pasta FOLDER_ID no bucket CLOUD_STORAGE_BUCKET_ID. O conector precisa gravar arquivos de importação de metadados nessa pasta.
Os modelos de pipeline são compatíveis com conectores do PySpark. Os modelos pressupõem que o driver
(mainPythonFileUri)
é um arquivo local na imagem do conector chamada main.py. É possível modificar os
modelos de pipeline para outros cenários, como um conector do Spark, um URI de driver
diferente ou outras opções.
Veja como usar o PySpark para criar um item de importação no arquivo de importação de metadados.
"""PySpark schemas for the data."""
entry_source_schema = StructType([
StructField("display_name", StringType()),
StructField("source", StringType())])
aspect_schema = MapType(StringType(),
StructType([
StructField("aspect_type", StringType()),
StructField("data", StructType([
]))
])
)
entry_schema = StructType([
StructField("name", StringType()),
StructField("entry_type", StringType()),
StructField("fully_qualified_name", StringType()),
StructField("parent_entry", StringType()),
StructField("entry_source", entry_source_schema),
StructField("aspects", aspect_schema)
])
import_item_schema = StructType([
StructField("entry", entry_schema),
StructField("aspect_keys", ArrayType(StringType())),
StructField("update_mask", ArrayType(StringType()))
])
Antes de começar
O exemplo nesta página usa um conector Python para o Oracle Database Express Edition (XE) e pressupõe que você tenha familiaridade com Python e PySpark.
Confira as seguintes informações:
- Conceitos de metadados do Knowledge Catalog
- Documentação sobre jobs de importação de metadados
Siga estas etapas: Crie todos os recursos no mesmo local do Google Cloud.
-
Crie ou selecione um projeto do Google Cloud .
Papéis necessários para selecionar ou criar um projeto
- Selecionar um projeto: para selecionar um projeto, não é necessário ter um papel do IAM específico. É possível selecionar qualquer projeto em que você tenha um papel.
-
Criar um projeto: para criar um projeto, é preciso ter o papel de Criador de projetos
(
roles/resourcemanager.projectCreator), que contém a permissãoresourcemanager.projects.create. Saiba como conceder papéis.
-
Crie um projeto do Google Cloud :
gcloud projects create PROJECT_ID
Substitua
PROJECT_IDpor um nome para o projeto do Google Cloud que você está criando. -
Selecione o projeto do Google Cloud que você criou:
gcloud config set project PROJECT_ID
Substitua
PROJECT_IDpelo nome do projeto do Google Cloud .
-
Verifique se o faturamento está ativado para o projeto do Google Cloud .
Ative as APIs Dataplex, Dataproc, Workflows e API Artifact Registry, se ainda não estiverem ativadas:
Funções necessárias para ativar APIs
Para ativar APIs, você precisa da permissão
serviceusage.services.enable. Se você criou o projeto, provavelmente já tem essa permissão pelo papel de proprietário (roles/owner). Caso contrário, é possível conseguir essa permissão pelo papel de administrador do Service Usage (roles/serviceusage.serviceUsageAdmin). Saiba como conceder papéis.gcloud services enable dataplex.googleapis.com
dataproc.googleapis.com workflows.googleapis.com artifactregistry.googleapis.com -
Instale a CLI do Google Cloud.
-
Ao usar um provedor de identidade (IdP) externo, primeiro faça login na CLI gcloud com sua identidade federada.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init -
Atribua papéis à sua conta de usuário. Execute uma vez o seguinte comando para cada um dos seguintes papéis do IAM:
roles/resourcemanager.projectCreator, roles/billing.projectManager, roles/serviceusage.admin, roles/iam.serviceAccountCreator, roles/iam.securityAdmin, roles/storage.admin, roles/artifactregistry.writer, roles/dataplex.entryGroupOwner, roles/dataplex.entryOwner, roles/dataplex.aspectTypeOwnergcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
Substitua:
PROJECT_ID: o ID do projeto.USER_IDENTIFIER: o identificador da sua conta de usuário . Por exemplo,myemail@example.com.ROLE: o papel do IAM que você concede à sua conta de usuário.
-
Configure a autenticação:
-
Verifique se você tem o papel do IAM de Criar contas de serviço
(
roles/iam.serviceAccountCreator) e o papel de Administrador do IAM do projeto (roles/resourcemanager.projectIamAdmin). Saiba como conceder papéis. -
Crie a conta de serviço:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
Substitua
SERVICE_ACCOUNT_NAMEpor um nome para a conta de serviço. -
Conceda o papel do IAM
roles/ownerà conta de serviço:gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=roles/owner
Substitua:
SERVICE_ACCOUNT_NAME: o nome da conta de serviço.PROJECT_ID: o ID do projeto em que você criou a conta de serviço
-
Verifique se você tem o papel do IAM de Criar contas de serviço
(
-
Crie um bucket do Cloud Storage para armazenar os arquivos de importação de metadados.
-
Crie os seguintes recursos de metadados no mesmo projeto.
Para ver exemplos de valores, consulte a seção Exemplos de recursos de metadados para uma origem do Oracle deste documento.
- Criar um grupo de entrada.
-
Crie tipos de aspecto personalizados para as entradas que você quer importar. Use a convenção de nomenclatura
SOURCE-ENTITY_TO_IMPORT.Por exemplo, para um banco de dados Oracle, crie um tipo de aspecto chamado
oracle-database.Se quiser, crie outros tipos de aspecto para armazenar outras informações.
-
Crie tipos de entrada personalizados para os recursos que você quer importar e atribua os tipos de aspecto relevantes a eles. Use a convenção de nomenclatura
SOURCE-ENTITY_TO_IMPORT.Por exemplo, para um banco de dados Oracle, crie um tipo de entrada chamado
oracle-database. Vincule-o ao tipo de aspecto chamadooracle-database.
- Verifique se a origem de terceiros pode ser acessada pelo projeto do Google Cloud . Para mais informações, consulte Configuração de rede do Serviço Gerenciado para Apache Spark.
Criar um conector básico do Python
O conector básico de exemplo do Python cria entradas de nível superior para uma fonte de dados do Oracle usando as classes da biblioteca de cliente do Knowledge Catalog. Em seguida, forneça os valores para os campos de entrada.
O conector cria um arquivo de importação de metadados com as seguintes entradas:
- Uma entrada
instance, com o tipo de entradaprojects/PROJECT_ID/locations/LOCATION/entryTypes/oracle-instance. Essa entrada representa um sistema Oracle Database XE. - Uma entrada
database, que representa um banco de dados dentro do sistema Oracle Database XE.
Para criar um conector básico do Python, faça o seguinte:
Clone o repositório
cloud-dataplex.Configurar um ambiente local. Recomendamos que você use um ambiente virtual.
mkdir venv python -m venv venv/ source venv/bin/activateUse as versões ativas ou de manutenção do Python. As versões 3.7 e posteriores do Python são compatíveis.
Crie um projeto em Python.
Requisitos de instalação:
pip install -r requirements.txtOs seguintes requisitos estão instalados:
Adicione um arquivo de pipeline
main.pyna raiz do projeto.Ao implantar o código no Serviço Gerenciado para Apache Spark, o arquivo
main.pyserve como o ponto de entrada para a execução. Recomendamos que você minimize a quantidade de informações armazenadas no arquivomain.py. Use esse arquivo para chamar funções e classes definidas no conector, como a classesrc/bootstrap.py.Crie uma pasta
srcpara armazenar a maior parte da lógica do conector.Atualize o arquivo
src/cmd_reader.pycom uma classe Python para aceitar argumentos de linha de comando. Use o módulo argeparse para fazer isso.Em ambientes de produção, recomendamos que você armazene a senha no Secret Manager.
Atualize o arquivo
src/constants.pycom o código para criar constantes.Atualize o arquivo
src/name_builder.pycom métodos para criar os recursos de metadados que você quer que o conector crie para seus recursos do Oracle. Use as convenções descritas na seção Exemplos de recursos de metadados para uma origem Oracle deste documento.Como o arquivo
name_builder.pyé usado para o código principal do Python e do PySpark, recomendamos que você escreva os métodos como funções puras, em vez de membros de uma classe.Atualize o arquivo
src/top_entry_builder.pycom o código para preencher as entradas de nível superior com dados.Atualize o arquivo
src/bootstrap.pycom o código para gerar o arquivo de importação de metadados e executar o conector.Execute o código localmente.
Um arquivo de importação de metadados chamado
output.jsonlé retornado. O arquivo tem duas linhas, cada uma representando um item de importação. O pipeline de conectividade gerenciada lê esse arquivo ao executar o job de importação de metadados.Opcional: estenda o exemplo anterior para usar as classes da biblioteca de cliente do Knowledge Catalog para criar itens de importação para tabelas, esquemas e visualizações. Também é possível executar o exemplo do Python no Serviço Gerenciado para Apache Spark.
Recomendamos que você crie um conector que use o Spark (e seja executado no Serviço Gerenciado para Apache Spark), porque isso pode melhorar o desempenho do conector.
Criar um conector do PySpark
Este exemplo é baseado na API PySpark DataFrame. É possível instalar o PySpark SQL e executá-lo localmente antes de executá-lo no Serviço Gerenciado para Apache Spark. Se você instalar e executar o PySpark localmente, instale a biblioteca do PySpark usando o pip, mas não será necessário instalar um cluster do Spark local.
Por motivos de desempenho, este exemplo não usa classes predefinidas da biblioteca PySpark. Em vez disso, o exemplo cria DataFrames, os converte em entradas JSON e grava a saída em um arquivo de importação de metadados no formato JSON Lines, que pode ser importado para o Knowledge Catalog.
Para criar um conector usando o PySpark, faça o seguinte:
Clone o repositório
cloud-dataplex.Instale o PySpark:
pip install pysparkRequisitos de instalação:
pip install -r requirements.txtOs seguintes requisitos estão instalados:
Atualize o arquivo
oracle_connector.pycom o código para ler dados de uma fonte de dados Oracle e retornar DataFrames.Adicione consultas SQL para retornar os metadados que você quer importar. As consultas precisam retornar as seguintes informações:
- Esquemas de banco de dados
- Tabelas que pertencem a esses esquemas
- Colunas que pertencem a essas tabelas, incluindo o nome, o tipo de dados e se a coluna é anulável ou obrigatória.
Todas as colunas de todas as tabelas e visualizações são armazenadas na mesma tabela do sistema. É possível selecionar colunas com o método
_get_columns. Dependendo dos parâmetros fornecidos, é possível selecionar colunas para as tabelas ou para as visualizações separadamente.Observe o seguinte:
- No Oracle, um esquema de banco de dados pertence a um usuário do banco de dados e tem o mesmo nome que esse usuário.
- Os objetos de esquema são estruturas lógicas criadas pelos usuários. Objetos como tabelas ou índices podem conter dados, e objetos como visualizações ou sinônimos consistem apenas em uma definição.
- O arquivo
ojdbc11.jarcontém o driver JDBC da Oracle.
Atualize o arquivo
src/entry_builder.pycom métodos compartilhados para aplicar transformações do Spark.Observe o seguinte:
- Os métodos criam os recursos de metadados que o conector gera para seus recursos do Oracle. Use as convenções descritas na seção Exemplos de recursos de metadados para uma origem Oracle deste documento.
- O método
convert_to_import_itemsse aplica a esquemas, tabelas e visualizações. Verifique se a saída do conector é um ou mais itens de importação que podem ser processados pelo métodometadataJobs.create, e não entradas individuais. - Mesmo em uma visualização, a coluna é chamada de
TABLE_NAME.
Atualize o arquivo
bootstrap.pycom o código para gerar o arquivo de importação de metadados e executar o conector.Este exemplo salva o arquivo de importação de metadados como um único arquivo JSON Lines. É possível usar ferramentas do PySpark, como a classe
DataFrameWriter, para gerar lotes de JSON em paralelo.O conector pode gravar entradas no arquivo de importação de metadados em qualquer ordem.
Atualize o arquivo
gcs_uploader.pycom o código para fazer upload do arquivo de importação de metadados para um bucket do Cloud Storage.Crie a imagem do conector.
Se o conector tiver vários arquivos ou se você quiser usar bibliotecas que não estão incluídas na imagem Docker padrão, use um contêiner personalizado. O Serviço Gerenciado para Apache Spark executa cargas de trabalho em contêineres do Docker. Crie uma imagem Docker personalizada do conector e armazene-a no Artifact Registry. O Serviço Gerenciado para Apache Spark lê a imagem do Artifact Registry.
Crie um Dockerfile:
Use o Conda como gerenciador de pacotes. O Serviço Gerenciado para Apache Spark monta
pysparkno contêiner no ambiente de execução. Assim, você não precisa instalar dependências do PySpark na imagem do contêiner personalizada.Crie a imagem do contêiner personalizado e envie-a para o Artifact Registry.
Como uma imagem pode ter vários nomes, use a tag do Docker para atribuir um alias a ela.
Execute o conector no Serviço Gerenciado para Apache Spark. Para enviar um job em lote do PySpark usando a imagem de contêiner personalizada, execute o comando
gcloud dataproc batches submit pyspark.gcloud dataproc batches submit pyspark main.py --project=PROJECT \ --region=REGION --batch=BATCH_ID \ --container-image=CUSTOM_CONTAINER_IMAGE \ --service-account=SERVICE_ACCOUNT_NAME \ --jars=PATH_TO_JAR_FILES \ --properties=PYSPARK_PROPERTIES \ -- PIPELINE_ARGUMENTSObserve o seguinte:
- Os arquivos JAR são drivers para o Spark. Para ler do Oracle, MySQL ou
Postgres, é preciso fornecer ao Apache Spark um pacote específico. O pacote
pode estar localizado no Cloud Storage ou dentro do contêiner. Se o arquivo JAR estiver dentro do contêiner, o caminho será semelhante a
file:///path/to/file/driver.jar. Neste exemplo, o caminho para o arquivo JAR é/opt/spark/jars/. - PIPELINE_ARGUMENTS são os argumentos de linha de comando para o conector.
O conector extrai metadados do banco de dados Oracle, gera um arquivo de importação de metadados e o salva em um bucket do Cloud Storage.
- Os arquivos JAR são drivers para o Spark. Para ler do Oracle, MySQL ou
Postgres, é preciso fornecer ao Apache Spark um pacote específico. O pacote
pode estar localizado no Cloud Storage ou dentro do contêiner. Se o arquivo JAR estiver dentro do contêiner, o caminho será semelhante a
Para importar manualmente os metadados do arquivo de importação para o Knowledge Catalog, execute um job de metadados. Use o método
metadataJobs.create.Na linha de comando, adicione variáveis de ambiente e crie um alias para o comando curl.
PROJECT_ID=PROJECT LOCATION_ID=LOCATION DATAPLEX_API=dataplex.googleapis.com/v1/projects/$PROJECT_ID/locations/$LOCATION_ID alias gcurl='curl -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json"'Chame o método da API, transmitindo os tipos de entrada e de aspecto que você quer importar.
gcurl https://${DATAPLEX_API}/metadataJobs?metadata_job_id="JOB_ID" -d "$(cat <<EOF { "type": "IMPORT", "import_spec": { "source_storage_uri": "gs://BUCKET/FOLDER/", "entry_sync_mode": "FULL", "aspect_sync_mode": "INCREMENTAL", "scope": { "entry_groups": ["projects/PROJECT/locations/LOCATION/entryGroups/ENTRY_GROUP_ID"], "entry_types": [ "projects/PROJECT/locations/LOCATION/entryTypes/oracle-instance", "projects/PROJECT/locations/LOCATION/entryTypes/oracle-database", "projects/PROJECT/locations/LOCATION/entryTypes/oracle-schema", "projects/PROJECT/locations/LOCATION/entryTypes/oracle-table", "projects/PROJECT/locations/LOCATION/entryTypes/oracle-view"], "aspect_types": [ "projects/PROJECT/locations/LOCATION/aspectTypes/oracle-instance", "projects/dataplex-types/locations/global/aspectTypes/schema", "projects/PROJECT/locations/LOCATION/aspectTypes/oracle-database", "projects/PROJECT/locations/LOCATION/aspectTypes/oracle-schema", "projects/PROJECT/locations/LOCATION/aspectTypes/oracle-table", "projects/PROJECT/locations/LOCATION/aspectTypes/oracle-view"], }, }, } EOF )"O tipo de aspecto
schemaé um tipo de aspecto global definido pelo Knowledge Catalog.O formato usado para nomes de tipos de aspecto ao chamar o método da API é diferente do formato usado no código do conector.
Opcional: use o Cloud Logging para ver os registros do job de metadados. Para mais informações, consulte Monitorar registros do Knowledge Catalog.
Configurar a orquestração de pipelines
As seções anteriores mostraram como criar um conector de exemplo e executá-lo manualmente.
Em um ambiente de produção, o conector é executado como parte de um pipeline de conectividade gerenciada, usando uma plataforma de orquestração como o Workflows.
Para executar um pipeline de conectividade gerenciada com o conector de exemplo, siga as etapas para importar metadados usando o Workflows. Dicas do que fazer:
- Crie o fluxo de trabalho no mesmo local do Google Cloud que o conector.
No arquivo de definição do fluxo de trabalho, atualize a função
submit_pyspark_extract_jobcom o código a seguir para extrair dados do banco de dados Oracle usando o conector que você criou.- submit_pyspark_extract_job: call: http.post args: url: ${"https://dataproc.googleapis.com/v1/projects/" + args.TARGET_PROJECT_ID + "/locations/" + args.CLOUD_REGION + "/batches"} auth: type: OAuth2 scopes: "https://www.googleapis.com/auth/cloud-platform" headers: Content-Type: "application/json" query: batchId: ${WORKFLOW_ID} body: pysparkBatch: mainPythonFileUri: file:///main.py jars: file:///opt/spark/jars/ojdbc11.jar args: - ${"--host_port=" + args.ORACLE_HOST_PORT} - ${"--user=" + args.ORACLE_USER} - ${"--password=" + args.ORACLE_PASSWORD} - ${"--database=" + args.ORACLE_DATABASE} - ${"--project=" + args.TARGET_PROJECT_ID} - ${"--location=" + args.CLOUD_REGION} - ${"--entry_group=" + args.TARGET_ENTRY_GROUP_ID} - ${"--bucket=" + args.CLOUD_STORAGE_BUCKET_ID} - ${"--folder=" + WORKFLOW_ID} runtimeConfig: version: "2.0" containerImage: "us-central1-docker.pkg.dev/PROJECT/REPOSITORY/oracle-pyspark" environmentConfig: executionConfig: serviceAccount: ${args.SERVICE_ACCOUNT} result: RESPONSE_MESSAGENo arquivo de definição do fluxo de trabalho, atualize a função
submit_import_jobcom o código a seguir para importar as entradas. A chamada de função chama o método de APImetadataJobs.createpara executar um job de importação de metadados.- submit_import_job: call: http.post args: url: ${"https://dataplex.googleapis.com/v1/projects/" + args.TARGET_PROJECT_ID + "/locations/" + args.CLOUD_REGION + "/metadataJobs?metadata_job_id=" + WORKFLOW_ID} auth: type: OAuth2 scopes: "https://www.googleapis.com/auth/cloud-platform" body: type: IMPORT import_spec: source_storage_uri: ${"gs://" + args.CLOUD_STORAGE_BUCKET_ID + "/" + WORKFLOW_ID + "/"} entry_sync_mode: FULL aspect_sync_mode: INCREMENTAL scope: entry_groups: - ${"projects/" + args.TARGET_PROJECT_ID + "/locations/" + args.CLOUD_REGION + "/entryGroups/"+args.TARGET_ENTRY_GROUP_ID} entry_types: -"projects/PROJECT/locations/LOCATION/entryTypes/oracle-instance" -"projects/PROJECT/locations/LOCATION/entryTypes/oracle-database" -"projects/PROJECT/locations/LOCATION/entryTypes/oracle-schema" -"projects/PROJECT/locations/LOCATION/entryTypes/oracle-table" -"projects/PROJECT/locations/LOCATION/entryTypes/oracle-view" aspect_types: -"projects/PROJECT/locations/LOCATION/aspectTypes/oracle-instance" -"projects/dataplex-types/locations/global/aspectTypes/schema" -"projects/PROJECT/locations/LOCATION/aspectTypes/oracle-database" -"projects/PROJECT/locations/LOCATION/aspectTypes/oracle-schema" -"projects/PROJECT/locations/LOCATION/aspectTypes/oracle-table" -"projects/PROJECT/locations/LOCATION/aspectTypes/oracle-view" result: IMPORT_JOB_RESPONSEForneça os mesmos tipos de entrada e de aspecto que você incluiu ao chamar o método da API manualmente. Não há uma vírgula no final de cada string.
Ao executar o fluxo de trabalho, forneça os seguintes argumentos de ambiente de execução:
{ "CLOUD_REGION": "us-central1", "ORACLE_USER": "system", "ORACLE_HOST_PORT": "x.x.x.x:1521", "ORACLE_DATABASE": "xe", "ADDITIONAL_CONNECTOR_ARGS": [], }
Opcional: use o Cloud Logging para ver os registros do pipeline de conectividade gerenciada. O payload do registro inclui um link para os registros do job em lote do Serviço Gerenciado para Apache Spark e do job de importação de metadados, conforme relevante. Para mais informações, consulte Ver registros de fluxo de trabalho.
Opcional: para melhorar a segurança, o desempenho e a funcionalidade do pipeline de conectividade gerenciada, faça o seguinte:
- Use o Secret Manager para armazenar as credenciais da sua fonte de dados de terceiros.
- Use o PySpark para gravar a saída de linhas JSON em vários arquivos de importação de metadados em paralelo.
- Use um prefixo para dividir arquivos grandes (com mais de 100 MB) em arquivos menores.
- Adicione mais aspectos personalizados que capturem outros metadados comerciais e técnicos da sua fonte.
Exemplos de recursos de metadados para uma origem do Oracle
O conector de exemplo extrai metadados de um banco de dados Oracle e os mapeia para os recursos de metadados correspondentes do Knowledge Catalog.
Considerações sobre hierarquia
Cada sistema no Knowledge Catalog tem uma entrada raiz que é a entrada pai
do sistema. Normalmente, a entrada raiz tem um tipo de entrada instance.
A tabela a seguir mostra o exemplo de hierarquia de tipos de entrada e de aspecto
para um sistema Oracle. Por exemplo, o tipo de entrada oracle-database está vinculado a
um tipo de aspecto que também é chamado de oracle-database.
| ID do tipo de entrada | Descrição | ID do tipo de aspecto vinculado |
|---|---|---|
oracle-instance |
A raiz do sistema importado. | oracle-instance |
oracle-database |
O banco de dados Oracle. | oracle-database |
oracle-schema |
O esquema do banco de dados. | oracle-schema |
oracle-table |
Uma tabela. |
|
oracle-view |
Uma visualização. |
|
O tipo de aspecto schema é um tipo de aspecto global definido pelo
Knowledge Catalog. Ele contém uma descrição dos campos em uma tabela,
visualização ou outra entidade que tenha colunas. O tipo de aspecto personalizado oracle-schema
contém o nome do esquema do banco de dados Oracle.
Exemplos de campos de itens de importação
O conector precisa usar as seguintes convenções para recursos do Oracle.
-
Nomes totalmente qualificados: os nomes totalmente qualificados para recursos da Oracle usam o modelo de nomenclatura a seguir. Os caracteres proibidos são escapados com aspas invertidas.
Recurso Modelo Exemplo Instância SOURCE:ADDRESSUse o host e o número da porta ou o nome de domínio do sistema.
oracle:`localhost:1521`ouoracle:`myinstance.com`Banco de dados SOURCE:ADDRESS.DATABASEoracle:`localhost:1521`.xeEsquema SOURCE:ADDRESS.DATABASE.SCHEMAoracle:`localhost:1521`.xe.sysTabela SOURCE:ADDRESS.DATABASE.SCHEMA.TABLE_NAMEoracle:`localhost:1521`.xe.sys.ordersVer SOURCE:ADDRESS.DATABASE.SCHEMA.VIEW_NAMEoracle:`localhost:1521`.xe.sys.orders_view -
Nomes ou IDs de entrada: as entradas para recursos do Oracle usam o modelo de nomenclatura a seguir. Os caracteres proibidos são substituídos por um caractere permitido. Os recursos usam o prefixo
projects/PROJECT/locations/LOCATION/entryGroups/ENTRY_GROUP/entries.Recurso Modelo Exemplo Instância PREFIX/HOST_PORTprojects/example-project/locations/us-central1/entryGroups/oracle-prod/entries/10.1.1.1@1521Banco de dados PREFIX/HOST_PORT/databases/DATABASEprojects/example-project/locations/us-central1/entryGroups/oracle-prod/entries/10.1.1.1@1521/databases/xeEsquema PREFIX/HOST_PORT/databases/DATABASE/database_schemas/SCHEMAprojects/example-project/locations/us-central1/entryGroups/oracle-prod/entries/10.1.1.1@1521/databases/xe/database_schemas/sysTabela PREFIX/HOST_PORT/databases/DATABASE/database_schemas/SCHEMA/tables/TABLEprojects/example-project/locations/us-central1/entryGroups/oracle-prod/entries/10.1.1.1@1521/databases/xe/database_schemas/sys/tables/ordersVer PREFIX/HOST_PORT/databases/DATABASE/database_schemas/SCHEMA/views/VIEWprojects/example-project/locations/us-central1/entryGroups/oracle-prod/entries/10.1.1.1@1521/databases/xe/database_schemas/sys/views/orders_view -
Entradas pai: se uma entrada não for uma entrada raiz para o sistema, ela poderá ter um campo de entrada pai que descreve a posição dela na hierarquia. O campo precisa conter o nome da entrada pai. Recomendamos que você gere esse valor.
A tabela a seguir mostra as entradas pai dos recursos do Oracle.
Entrada Entrada pai Instância ""(string vazia)Banco de dados Nome da instância Esquema Nome do banco de dados Tabela Nome do esquema Ver Nome do esquema Mapa de aspectos: o mapa de aspectos precisa conter pelo menos um aspecto que descreva a entidade a ser importada. Veja um exemplo de mapa de aspectos para uma tabela do Oracle.
"example-project.us-central1.oracle-table": { "aspect_type": "example-project.us-central1.oracle-table", "path": "", "data": {} },
Encontre tipos de aspecto predefinidos (como
schema) que definem a estrutura da tabela ou visualização no projetodataplex-types, no localglobal.-
Chaves de aspecto: as chaves de aspecto usam o formato de nomenclatura PROJECT.LOCATION.ASPECT_TYPE. A tabela a seguir mostra exemplos de chaves de aspecto para recursos do Oracle.
Entrada Exemplo de chave de aspecto Instância example-project.us-central1.oracle-instanceBanco de dados example-project.us-central1.oracle-databaseSchema example-project.us-central1.oracle-schemaTabela example-project.us-central1.oracle-tableVer example-project.us-central1.oracle-view