execução de consultas federadas no Oracle
Esta página descreve como configurar o Lakehouse Federation para executar consultas federadas em dados Oracle que não são gerenciados pelo Databricks. Para saber mais sobre a Federação Lakehouse, consulte Conecte-se a bancos de dados externos e catálogos
Para conectar-se ao seu banco de dados Oracle usando o Lakehouse Federation, você deve criar o seguinte no seu metastore do Databricks Unity Catalog (os espaços de trabalho criados após 8 de novembro de 2023 já possuem um provisionamento automático do metastore Unity Catalog ):
- Uma conexão com seu banco de dados Oracle.
- Um catálogo externo que espelha seu banco de dados Oracle no Unity Catalog para que o senhor possa usar a sintaxe de consulta do Unity Catalog e as ferramentas de governança de dados para gerenciar o acesso do usuário do Databricks ao banco de dados.
Requisitos
Antes de começar, confirme se você atende aos requisitos desta seção.
Requisitos do Databricks
Requisitos do workspace:
- Workspace habilitado para o Unity Catalog. Workspaces criados após 8 de novembro de 2023 são habilitados para o Unity Catalog automaticamente, incluindo o provisionamento automático do metastore. Não é necessário criar um metastore manualmente, a menos que seu workspace seja anterior à habilitação automática e não tenha sido habilitado para o Unity Catalog. Consulte Introdução ao uso do Unity Catalog.
Requisitos de computação:
- Conectividade de rede do seu recurso compute para os sistemas de banco de dados de destino. Veja as recomendações do Networking para a Lakehouse Federation.
- Databricks compute deve usar o site Databricks Runtime 16.1 ou acima e o modo de acesso Standard ou Dedicated .
- SQL O armazém deve ser pro ou serverless e deve usar 2024.50 ou acima.
Permissões necessárias:
- Para criar uma conexão, você deve ser um administrador do metastore ou um usuário com o privilégio
CREATE CONNECTIONno metastore Unity Catalog anexado ao workspace. Em espaços de trabalho que foram habilitados para o Unity Catalog automaticamente, os administradores workspace têm o privilégioCREATE CONNECTIONpor default. - Para criar um catálogo estrangeiro, você deve ter a permissão
CREATE CATALOGno metastore e ser o proprietário da conexão ou ter o privilégioCREATE FOREIGN CATALOGna conexão. Em espaços de trabalho que foram habilitados para o Unity Catalog automaticamente, os administradores workspace têm o privilégioCREATE CATALOGpor default.
Outros requisitos de permissão são definidos em cada seção baseada em tarefa a seguir.
Requisitos da Oracle
Para conexões que usam a Criptografia Nativa de Rede, você deve habilitar a NNE do lado do servidor (nível ACCEPTED no mínimo). Consulte Configuring Network Data Encryption na documentação da Oracle. Isso não se aplica a conexões que usam TLS.
Criar uma conexão com o Databricks
A conexão especifica um caminho e as credenciais para acessar um sistema de banco de dados externo. Para criar uma conexão, você pode usar o Catalog Explorer ou o comando CREATE CONNECTION do SQL em um Notebook do Databricks ou no editor de consultas SQL do Databricks.
O senhor também pode usar a API REST da Databricks ou a CLI da Databricks para criar uma conexão. Veja POST /api/2.1/unity-catalog/connections e Unity Catalog comando.
Permissões necessárias: Administrador do Metastore ou usuário com o privilégio CREATE CONNECTION.
- Catalog Explorer
- SQL
-
No site Databricks workspace, clique em
Catalog .
-
Clique
Conecte-se e, em seguida, clique em Conexões .
-
Clique no botão Criar conexão .
-
Na página Noções básicas de conexão do assistente de configuração de conexão , insira um nome de conexão fácil de usar.
-
Selecione um tipo de conexão do Oracle .
-
(Opcional) Adicione um comentário.
-
Clique em Avançar .
-
Na página Autenticação , digite o seguinte para a instância Oracle:
- Anfitrião : Por exemplo,
oracle-demo.123456.rds.amazonaws.com - Porto : Por exemplo,
1521 - Usuário : Por exemplo,
oracle_user - Senha : Por exemplo,
password123 - Protocolo de criptografia :
Native Network Encryption(default) ouTransport Layer Security - Certificado de servidor fornecido pelo usuário : Opcional. O certificado público codificado em PEM da sua instância Oracle, usado para verificar a identidade do servidor durante o handshake TLS. Forneça-o quando o servidor apresentar um certificado de uma autoridade de certificação privada ou interna que não esteja no repositório de confiança default. Um certificado de servidor fornecido pelo usuário requer um Protocolo de criptografia igual a
Transport Layer Security. A verificação de hostname é realizada como parte do handshake TLS. A conexão falhará se o hostname no certificado não corresponder ao hostname solicitado. - Timezone as region : Opcional. Ativado por default. Controla se a conexão relata seu fuso horário de sessão para o Oracle como uma região nomeada (ativado) ou como um deslocamento UTC fixo (desativado). Desative-o apenas para contornar o erro
timezone region not found. Consulte ORA-01882: timezone region not found.
- Anfitrião : Por exemplo,
-
Clique em Criar conexão .
-
Na página Noções básicas do catálogo , insira um nome para o catálogo estrangeiro. Um catálogo externo espelha um banco de dados em um sistema de dados externo para que o senhor possa consultar e gerenciar o acesso aos dados desse banco de dados usando o Databricks e o Unity Catalog.
-
(Opcional) Clique em Testar conexão para confirmar se está funcionando.
-
Clique em Criar catálogo .
-
Na página Access (Acesso) , selecione o espaço de trabalho no qual os usuários podem acessar o catálogo que o senhor criou. O senhor pode selecionar All workspace have access (Todos os espaços de trabalho têm acesso ) ou clicar em Assign to workspace (Atribuir ao espaço de trabalho), selecionar o espaço de trabalho e clicar em Assign (Atribuir ).
-
Altere o proprietário que poderá gerenciar o acesso a todos os objetos no catálogo. começar a digitar um diretor na caixa de texto e, em seguida, clicar no diretor nos resultados retornados.
-
Conceda privilégios no catálogo. Clique em Conceder :
-
Especifique os diretores que terão acesso aos objetos no catálogo. começar a digitar um diretor na caixa de texto e, em seguida, clicar no diretor nos resultados retornados.
-
Selecione as predefinições de privilégios a serem concedidas a cada diretor. Todos os usuários de account recebem
BROWSEpor default.- Selecione Leitor de dados no menu suspenso para conceder privilégios
readem objetos no catálogo. - Selecione Editor de dados no menu suspenso para conceder os privilégios
reademodifyaos objetos no catálogo. - Selecione manualmente os privilégios a serem concedidos.
- Selecione Leitor de dados no menu suspenso para conceder privilégios
-
Clique em Conceder .
-
-
Clique em Avançar .
-
Na página Metadata (Metadados ), especifique as tags em key-value. Para obter mais informações, consulte Apply tags to Unity Catalog securable objects.
-
(Opcional) Adicione um comentário.
-
Clique em Salvar .
Execute o seguinte comando em um Notebook ou no editor de consultas Databricks SQL:
CREATE CONNECTION <connection-name> TYPE oracle
OPTIONS (
host '<hostname>',
port '<port>',
user '<user>',
password '<password>',
encryption_protocol '<protocol>', -- optional
timezone_as_region '<true-or-false>' -- optional
);
timezone_as_region controls whether the connection reports its session time zone to Oracle as a named region such as America/Los_Angeles (true, the default) or as a fixed UTC offset such as -08:00 (false). Set it to false only to work around the timezone region not found error. See ORA-01882: timezone region not found.
Databricks recomenda que o senhor use Databricks segredos em vez de texto simples strings para valores confidenciais, como credenciais. Por exemplo:
CREATE CONNECTION <connection-name> TYPE oracle
OPTIONS (
host '<hostname>',
port '<port>',
user secret ('<secret-scope>','<secret-key-user>'),
password secret ('<secret-scope>','<secret-key-password>'),
encryption_protocol '<protocol>' -- optional
)
Para verificar a identidade do servidor durante o handshake TLS (por exemplo, quando seu servidor Oracle apresenta um certificado de uma autoridade de certificação privada ou interna que não está no repositório de confiança default), passe o certificado codificado em PEM do servidor na opção userProvidedServerCertificate. Um certificado de servidor fornecido pelo usuário exige que encryption_protocol seja definido como TLS.
CREATE CONNECTION <connection-name> TYPE oracle
OPTIONS (
host '<hostname>',
port '<port>',
user secret ('<secret-scope>','<secret-key-user>'),
password secret ('<secret-scope>','<secret-key-password>'),
encryption_protocol 'TLS',
userProvidedServerCertificate '<pem-encoded-certificate>'
)
Se o senhor precisar usar o texto simples strings no Notebook SQL comando, evite truncar as cadeias de caracteres escapando de caracteres especiais como $ com \. Por exemplo: \$.
Para obter informações sobre a configuração de segredos, consulte Gerenciamento de segredos.
Crie um catálogo estrangeiro
Se o senhor usar a interface do usuário para criar uma conexão com a fonte de dados, a criação do catálogo externo estará incluída e o senhor poderá ignorar essa etapa.
Um catálogo externo espelha um banco de dados em um sistema de dados externo para você consultar e gerenciar o acesso aos dados nesse banco de dados com Databricks e Unity Catalog. Para criar um catálogo externo, utiliza-se uma conexão com a fonte de dados que já foi definida.
Para criar um catálogo externo, o senhor pode usar o Catalog Explorer ou o comando CREATE FOREIGN CATALOG SQL em um Notebook Databricks ou o editor de consultas SQL. O senhor também pode usar a API REST da Databricks ou a CLI da Databricks para criar um catálogo. Veja POST /api/2.1/unity-catalog/catalogs e Unity Catalog comando.
Permissões necessárias: permissão CREATE CATALOG na metastore e propriedade da conexão ou o privilégio CREATE FOREIGN CATALOG na conexão.
- Catalog Explorer
- SQL
-
No site Databricks workspace, clique em
Catalog para abrir o Catalog Explorer.
-
Na parte superior do painel Catálogo , clique no ícone
Adicionar e selecione Adicionar um catálogo no menu.
Como alternativa, na página de acesso rápido , clique no botão Catálogos e no botão Criar catálogo .
-
Siga as instruções para criar catálogos estrangeiros em Criar catálogos.
Execute o seguinte comando SQL em um notebook ou editor de consultas SQL. Os itens entre colchetes são opcionais. Substitua os valores temporários:
<catalog-name>: Nome para o catálogo no Databricks.<connection-name>: O objeto de conexão que especifica a fonte de dados, o caminho e as credenciais de acesso.<service-name>: Nome do serviço que o senhor deseja espelhar como um catálogo no Databricks.
CREATE FOREIGN CATALOG [IF NOT EXISTS] <catalog-name> USING CONNECTION <connection-name>
OPTIONS (service_name '<service-name>');
Pushdowns suportados
A tabela a seguir lista as operações de pushdown suportadas pelo Oracle, juntamente com o compute necessário para cada uma.
Empurrar | computesuportada |
|---|---|
Agregados |
|
Operadores aritméticos |
|
Operadores Boolean |
|
Contém, começa com, termina com |
|
Filtros |
|
Limite |
|
Funções matemáticas |
|
Funções diversas |
|
deslocamento |
|
Projeções |
|
Ordenação, quando usada com limite |
|
Funções de strings |
|
join |
|
Funções de janela |
|
Mapeamentos de tipos de dados
Quando o senhor lê do Oracle para o Spark, os tipos de dados são mapeados da seguinte forma:
Tipo de oráculo | Spark tipo |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
* DATE e TIMESTAMP são mapeados para Spark TimestampType se spark.sql.timestampType = TIMESTAMP_LTZ (default). Eles são mapeados para TimestampNTZType se spark.sql.timestampType = TIMESTAMP_NTZ.
** NUMBER sem especificar a precisão será mapeado para DecimalType(38, 10) porque não há suporte para Decimal de ponto flutuante puro no Spark.
Solução de problemas
ORA-01882: região de fuso horário não encontrada
Ao se conectar a instâncias Oracle 11.2.0.3.0 e posteriores que não possuem um valor de fuso horário de Etc/UTC, a conexão pode falhar com o erro ORA-01882: timezone region not found. Isso ocorre quando o servidor Oracle não reconhece a região de fuso horário nomeada que a conexão relata no logon.
To resolve this error, Databricks recommends the following, in order:
- Atualize os arquivos de fuso horário no servidor Oracle para que ele reconheça o nome da região. Esta é a correção permanente preferencial. Consulte o Suporte da Oracle - ORA-01882.
- Se você não puder atualizar o servidor Oracle, defina a opção de conexão
timezone_as_regioncomofalse. A conexão relata um deslocamento UTC fixo em vez de um nome de região, o que evita o erro. Um deslocamento fixo não segue as alterações sazonais de horário, portanto, os valoresTIMESTAMP WITH LOCAL TIME ZONEnão são ajustados para o horário de verão.
Licença
O driver Oracle e outros jars Oracle necessários são regidos pela licença FDHUT sem clique.