Executar consultas federadas no MySQL

Esta página descreve como configurar a Lakehouse Federation para executar consultas federadas em dados MySQL que não são gerenciados pelo Azure Databricks. Para saber mais sobre a Lakehouse Federation, consulte Ligar a bases de dados e catálogos externos

Para se ligar à sua base de dados MySQL usando a Lakehouse Federation, deve criar o seguinte na sua metastore Azure Databricks Unity Catalog (os espaços de trabalho criados após 9 de novembro de 2023 já têm uma metastore Unity Catalog provisionada automaticamente):

  • Uma conexão com seu banco de dados MySQL.
  • Um catálogo estrangeiro que espelha seu banco de dados MySQL no Unity Catalog para que você possa usar a sintaxe de consulta do Catálogo Unity e as ferramentas de governança de dados para gerenciar o acesso do usuário do Azure Databricks ao banco de dados.

Antes de começar

Requisitos do espaço de trabalho:

  • Espaço de trabalho habilitado para o Unity Catalog. Os espaços de trabalho criados após 9 de novembro de 2023 são ativados automaticamente para o Unity Catalog, incluindo o provisionamento automático de metastores. Não precisas de criar uma metastore manualmente a menos que o teu espaço de trabalho seja anterior à ativação automática e não tenha sido ativado para o Unity Catalog. Consulte Introdução ao Catálogo Unity.

Requisitos de computação:

  • Conectividade de rede do seu recurso de computação para os sistemas de banco de dados de destino. Consulte Recomendações de rede para a Lakehouse Federation.
  • A computação do Azure Databricks deve usar o Databricks Runtime 13.3 LTS ou superior e modo de acesso Standard ou Dedicated.
  • Os armazéns SQL devem ser profissionais ou sem servidor e devem usar 2023.40 ou superior.

Permissões necessárias:

  • Para criar uma conexão, você deve ser um administrador de metastore ou um usuário com o privilégio de CREATE CONNECTION no metastore do Unity Catalog anexado ao espaço de trabalho. Nos espaços de trabalho que estavam ativados automaticamente para o Unity Catalog, os administradores de espaços de trabalho têm esse CREATE CONNECTION privilégio por defeito.
  • Para criar um catálogo estrangeiro, você deve ter a permissão CREATE CATALOG no metastore e ser o proprietário da conexão ou ter o privilégio de CREATE FOREIGN CATALOG na conexão. Nos espaços de trabalho que estavam ativados automaticamente para o Unity Catalog, os administradores de espaços de trabalho têm esse CREATE CATALOG privilégio por defeito.

Os requisitos de permissão adicionais são especificados em cada seção baseada em tarefas a seguir.

SSL é necessário para criar uma conexão.

Criar uma conexão

Uma conexão especifica um caminho e credenciais para acessar um sistema de banco de dados externo. Para criar uma conexão, você pode usar o Gerenciador de Catálogos ou o comando CREATE CONNECTION SQL em um bloco de anotações do Azure Databricks ou no editor de consultas Databricks SQL.

Nota

Você também pode usar a API REST do Databricks ou a CLI do Databricks para criar uma conexão. Consulte POST /api/2.1/unity-catalog/connections e os comandos do Unity Catalog .

Permissões necessárias: administrador do Metastore ou usuário com o CREATE CONNECTION privilégio.

Explorador de Catálogos

  1. No seu espaço de trabalho do Azure Databricks, clique no ícone Dados.Catálogo.
  2. Na parte superior do painel Catálogo, clique no ícone Adicionar ou ícone de maisícone Adicionar e selecione Criar uma conexão no menu.
  3. Na página Noções básicas de conexão do assistente Configurar conexão, insira um Nome da conexãoque seja fácil de usar .
  4. Selecione um tipo de conexão do MySQL.
  5. (Opcional) Adicione um comentário.
  6. Clique Avançar.
  7. Na página de Autenticação , introduza as seguintes propriedades de ligação para a sua instância MySQL:
    • Anfitrião: Por exemplo, mysql-demo.lb123.us-west-2.rds.amazonaws.com
    • Porto: Por exemplo, 3306
    • Usuário: Por exemplo, mysql_user
    • Palavra-passe: Por exemplo, password123
  8. (Opcional): Selecione Certificado do servidor confiável. Esta opção é desmarcada por predefinição. Quando selecionada, a camada de transporte usa SSL para criptografar o canal e ignora a cadeia de certificados para validar a confiança. Deixe isso definido como padrão, a menos que você tenha uma necessidade específica de ignorar a validação de confiança.
  9. (Opcional) Certificado de servidor fornecido pelo utilizador: O certificado público codificado em PEM da sua instância MySQL. A ligação é sempre encriptada com SSL, e este certificado verifica a identidade do servidor durante o handshake TLS. Forneça-o quando o seu servidor apresentar um certificado de uma autoridade certificadora privada ou interna que não esteja no repositório de confiança predefinido. É uma alternativa à seleção do certificado Trust server, que ignora essa verificação. Se ambos fornecerem um certificado e selecionarem o certificado Trust server, o certificado fornecido tem prioridade. A verificação do nome de host é realizada como parte do handshake TLS: a ligação falha se o nome de host no certificado não corresponder ao nome solicitado.
  10. Clique em Criar conexão.
  11. Na página Noções básicas do catálogo, insira um nome para o catálogo estrangeiro. Um catálogo estrangeiro espelha um banco de dados em um sistema de dados externo para que você possa consultar e gerenciar o acesso aos dados nesse banco de dados usando o Azure Databricks e o Unity Catalog.
  12. (Opcional) Clique em Testar conexão para confirmar se ela funciona.
  13. Clique em Criar o catálogo.
  14. Na página Access , selecione os espaços de trabalho onde os utilizadores podem aceder ao catálogo que criou. Você pode selecionar Todos os espaços de trabalho têm acesso ou clicar em Atribuir a espaços de trabalho, selecionar os espaços de trabalho e clicar em Atribuir.
  15. Altere o Proprietário que poderá gerenciar o acesso a todos os objetos no catálogo. Comece a escrever um principal na caixa de texto e, em seguida, clique no principal nos resultados apresentados.
  16. Conceder privilégios e no catálogo. Clique em Grant:
    1. Especifique os Principals que terão acesso aos objetos no catálogo. Comece a escrever um principal na caixa de texto e, em seguida, clique no principal nos resultados apresentados.
    2. Selecione as predefinições de privilégio para conceder a cada principal. Todos os usuários da conta recebem BROWSE por padrão.
      • Selecione Leitor de Dados no menu suspenso para conceder privilégios read a objetos no catálogo.
      • Selecione Editor de Dados no menu suspenso para conceder privilégios read e modify sobre objetos no catálogo.
      • Selecione manualmente os privilégios a conceder.
    3. Clique em Conceder.
  17. Clique Avançar.
  18. Na página Metadados , especifique os pares chave-valor das etiquetas. Para obter mais informações, consulte Aplicar tags a objetos protegíveis do Unity Catalog.
  19. (Opcional) Adicione um comentário.
  20. Clique Salvar.

SQL

Execute o seguinte comando em um bloco de anotações ou no editor de consultas Databricks SQL.

CREATE CONNECTION <connection-name> TYPE mysql
OPTIONS (
  host '<hostname>',
  port '<port>',
  user '<user>',
  password '<password>'
);

Recomendamos que use o Azure Databricks Secrets em vez de strings de texto puro para valores confidenciais, como credenciais. Por exemplo:

CREATE CONNECTION <connection-name> TYPE mysql
OPTIONS (
  host '<hostname>',
  port '<port>',
  user secret ('<secret-scope>','<secret-key-user>'),
  password secret ('<secret-scope>','<secret-key-password>')
)

Para verificar a identidade do servidor durante o handshake TLS (por exemplo, quando o seu servidor MySQL apresenta um certificado de uma autoridade de certificação privada ou interna que não está na trust store padrão), passe o certificado codificado em PEM do servidor na userProvidedServerCertificate opção. A ligação é sempre encriptada com SSL. Esta opção é uma alternativa trustServerCertificate e tem prioridade sobre ela.

CREATE CONNECTION <connection-name> TYPE mysql
OPTIONS (
  host '<hostname>',
  port '<port>',
  user secret ('<secret-scope>','<secret-key-user>'),
  password secret ('<secret-scope>','<secret-key-password>'),
  userProvidedServerCertificate '<pem-encoded-certificate>'
)

Se precisar usar cadeias de caracteres de texto sem formatação nos comandos SQL do notebook, evite truncar a cadeia de caracteres escapando os caracteres especiais, como $ com \. Por exemplo: \$.

Para obter informações sobre como configurar segredos, consulte Gerenciamento de segredos.

Criar um catálogo estrangeiro

Nota

Se você usar a interface do usuário para criar uma conexão com a fonte de dados, a criação de catálogo estrangeiro será incluída e você poderá ignorar esta etapa.

Um catálogo estrangeiro espelha um banco de dados em um sistema de dados externo para que você possa consultar e gerenciar o acesso aos dados nesse banco de dados usando o Azure Databricks e o Unity Catalog. Para criar um catálogo estrangeiro, use uma conexão com a fonte de dados que já foi definida.

Para criar um catálogo estrangeiro, você pode usar o Gerenciador de Catálogos ou o comando CREATE FOREIGN CATALOG SQL em um bloco de anotações do Azure Databricks ou no editor de consultas Databricks SQL. Você também pode usar a API REST do Databricks ou a CLI do Databricks para criar um catálogo. Veja POST /api/2.1/unity-catalog/catalogs e comandos do Unity Catalog.

Permissões necessárias:CREATE CATALOG permissão no metastore e propriedade da conexão ou o CREATE FOREIGN CATALOG privilégio na conexão.

Explorador de Catálogos

  1. No seu espaço de trabalho do Azure Databricks, clique no ícone Dados.Catálogo para abrir o Catalog Explorer.

  2. No topo do painel de Catálogo, clique no ícone Adicionar ou maisAdicionar e selecione Adicionar um catálogo no menu.

    Como alternativa, a partir da página de Acesso rápido, clique no botão Catálogos e, em seguida, clique no botão Criar catálogo.

  3. Siga as instruções para criar catálogos estrangeiros em Criar catálogos.

  4. Também pode especificar a seguinte opção de catálogo:

    • TINYINT(1) is bit: Uma opção opcional de catálogo que especifica como as colunas MySQL tinyint(1) são mapeadas para os tipos de dados Spark. Consulte Mapeamentos de Tipos de Dados para mais informações.

SQL

Execute o seguinte comando SQL em um bloco de anotações ou editor SQL Databricks. Os itens entre parênteses são opcionais. Substitua os valores dos espaços reservados:

  • <catalog-name>: Nome do catálogo no Azure Databricks.
  • <connection-name>: O objeto de conexão que especifica a fonte de dados, o caminho e as credenciais de acesso.
  • tinyInt1isBit: Uma opção opcional de catálogo que especifica como as colunas MySQL tinyint(1) são mapeadas para os tipos de dados Spark. Consulte Mapeamentos de Tipos de Dados para mais informações.
CREATE FOREIGN CATALOG [IF NOT EXISTS] <catalog-name> USING CONNECTION <connection-name>
[OPTIONS (tinyInt1isBit {'true'|'false'})];

Pushdowns suportados

A tabela seguinte lista as operações pushdown suportadas para o MySQL, juntamente com o cálculo necessário para cada uma.

Empurrão Computação suportada
Funções de data, hora e carimbo temporal
(apenas expressões parciais, filtro)
Suportado Todos os sistemas de computação
Filtros Suportado Todos os sistemas de computação
Limite Suportado Todos os sistemas de computação
Funções matemáticas
(apenas expressões parciais, filtro)
Suportado Todos os sistemas de computação
Funções diversas
(como Alias, Cast, SortOrder; parciais, apenas expressões de filtro)
Suportado Todos os sistemas de computação
Offset Suportado Todos os sistemas de computação
Projeções Suportado Todos os sistemas de computação
Funções de cadeia de caracteres
(apenas expressões parciais, filtro)
Suportado Todos os sistemas de computação
Agregados Suportado Todos os sistemas de computação
Operadores aritméticos
(como +, -, *, %, /; não suportado se o ANSI estiver desativado)
Suportado Todos os sistemas de computação
Operadores booleanas
(como =, <=>, <, <=, >, >=)
Suportado Todos os sistemas de computação
Bitwise E operador
(&)
Suportado Todos os sistemas de computação
Classificação, quando usado com limite Suportado Todos os sistemas de computação
Junções Suportado Databricks Runtime 17.2 e posterior e computação do SQL warehouse. Este pushdown está em Pré-visualização pública; ative a opção Pushdown de associação para consultas federadas na página Pré-visualizações.
Funções do Windows Não suportado Não suportado

Mapeamentos de tipo de dados

Quando você lê do MySQL para o Spark, os tipos de dados são mapeados da seguinte maneira:

Tipo MySQL Tipo de faísca
bigint (se não assinado), decimal DecimalType
int, integer, mediumint, smallint IntegerType
tinyint(1) BooleanType/ByteType*
tinyint(>1) ByteType
bigint (se assinado) LongType
float FloatType
double DoubleType
char, enum, set CharType
varchar VarcharType
json, longtext, mediumtext, text, tinytext StringType
binary, blob, varbinary, varchar binary BinaryType
bit, boolean BooleanType
date, year DateType
datetime, time, timestamp** TimestampType/TimestampNTZType

* O MySQL tinyint(1) signed/unsigned é mapeado em Spark BooleanType se a opção de catálogo tinyInt1isBit = true for usada (por defeito). Se a opção tinyInt1isBit = false de catálogo estiver mapeada para ByteType.

** Quando você lê a partir do MySQL, o MySQL Timestamp é mapeado para o Spark TimestampType if preferTimestampNTZ = false (padrão). O MySQL Timestamp é mapeado para TimestampNTZType if preferTimestampNTZ = true.

Recursos adicionais