Skip to content

🐍 Coral is a translation, analysis, and query rewrite engine for SQL and other relational languages

License

Notifications You must be signed in to change notification settings

isaccanedo/coral

Repository files navigation

O que é a Biblioteca Coral?

Coral é uma biblioteca para analisar, processar e reescrever visualizações definidas no Hive Metastore e compartilhá-las em vários mecanismos de execução. Ele executa traduções SQL para permitir visualizações expressas em HiveQL (e potencialmente outras linguagens) para serem acessíveis em mecanismos como Trino (anteriormente PrestoSQL), Apache Spark e Apache Pig. Coral não apenas traduz definições de visão entre diferentes dialetos SQL/não SQL, mas também reescreve expressões para produzir semanticamente equivalentes, levando em consideração a semântica da linguagem ou motor de destino. Por exemplo, ele compõe automaticamente novas expressões internas que são equivalentes a cada expressão interna no definição de exibição de origem. Além disso, integra-se com Transport UDFs para habilitar a tradução e execução de funções definidas pelo usuário (UDFs) no Hive, Trino, Spark e Pig.Coral está em desenvolvimento ativo. Atualmente, estamos procurando expandir o conjunto de APIs de linguagem de visualização de entrada além do HiveQL, e implementação de algoritmos de reescrita de consulta para governança de dados e otimização de consulta.

Slack

  • Participe da discussão com a comunidade no Slack aqui!

Módulos

Coral consiste nos seguintes módulos:

  • Coral-Hive: Converte definições de visualizações do Hive com UDFs para o plano lógico de visualização equivalente;
  • Coral-Trino: Converte o plano lógico de visualização em Trino (anteriormente PrestoSQL) SQL e vice-versa;
  • Coral-Spark: Converte o plano lógico de exibição em Spark SQL;
  • Coral-Pig: Converte o plano lógico de visualização para Pig-latin;
  • Coral-Schema: Deriva o esquema Avro de visão usando o plano lógico de visão e os esquemas Avro de entrada de tabelas base;
  • Coral-Spark-Plan: Converte as strings do plano Spark em um plano lógico equivalente (em andamento);
  • Coral-Service: Serviço que expõe APIs REST que permitem que os usuários interajam com o Coral (consulte Coral-as-a-Service para obter mais detalhes).

Como construir

Clone the repository:

git clone https://github.com/linkedin/coral.git

Build:

./gradlew clean build

Contribuindo

The project is under active development and we welcome contributions of different forms. Please see the Contribution Agreement.

Recursos

Coral-as-a-Service

Coral-as-a-Service ou simplesmente Coral Service é um serviço que expõe APIs REST que permitem que os usuários interajam com o Coral sem necessariamente vir de um mecanismo de computação. Atualmente, o serviço oferece suporte a uma API para tradução de consulta entre diferentes dialetos e outra para interagir com um Hive Metastore local para criar bancos de dados, tabelas e exibições de exemplo para que possam ser referenciados na API de tradução. O serviço pode ser usado em dois modos: modo Hive Metastore remoto e modo Hive Metastore local. O modo remoto usa um Hive Metastore existente (já implantado) para resolver tabelas e exibições, enquanto o modo local cria um Hive Metastore incorporado vazio para que os usuários possam adicionar suas próprias definições de tabela e exibição.

Referência da API

/api/translations/translate

Uma API POST que recebe o corpo da solicitação JSON contendo os seguintes parâmetros e retorna a consulta traduzida:

  • fromLanguage: Input dialect (e.g., spark, trino, hive -- see below for supported inputs)
  • toLanguage: Output dialect (e.g., spark, trino, hive -- see below for supported outputs)
  • query: SQL query to translate between two dialects

/api/catalog-ops/execute

Uma API POST que usa uma instrução SQL para criar um banco de dados/tabela/visualização no metastore local (observação: este endpoint só está disponível com Coral Service no modo metastore local).

Instruções para usar com exemplos

  1. Clone Coral repo
git clone https://github.com/linkedin/coral.git  
  1. No diretório raiz do Coral, acesse o módulo coral-service
cd coral-service  
  1. Build
../gradlew clean build  

Para executar o Coral Service usando o metastore local:

  1. Run
../gradlew bootRun --args='--spring.profiles.active=localMetastore'  

Fluxo de trabalho de exemplo usando metastore local:

  1. Crie um banco de dados chamado db1 no metastore local usando o endpoint /api/catalog-ops/execute
curl --header "Content-Type: application/json" \
  --request POST \
  --data "CREATE DATABASE IF NOT EXISTS db1" \
  http://localhost:8080/api/catalog-ops/execute

Creation successful
  1. Crie uma tabela chamada airport dentro de db1 no metastore local usando o endpoint /api/catalog-ops/execute
curl --header "Content-Type: application/json" \
  --request POST \
  --data "CREATE TABLE IF NOT EXISTS db1.airport(name string, country string, area_code int, code string, datepartition string)" \
  http://localhost:8080/api/catalog-ops/execute

Creation successful
  1. Traduza uma consulta em db1.airport no metastore local usando o endpoint /api/translations/translate
curl --header "Content-Type: application/json" \
  --request POST \
  --data '{
    "fromLanguage":"hive", 
    "toLanguage":"trino", 
    "query":"SELECT * FROM db1.airport"
  }' \
  http://localhost:8080/api/translations/translate

O resultado da tradução é:

Original query in hive: SELECT * FROM db1.airport
Translated to trino:
SELECT "name", "country", "area_code", "code", "datepartition"
FROM "db1"."airport"

Para executar o Coral Service usando o metastore remoto:

  1. Adicione o arquivo keytab do cliente Kerberos a coral-service/src/main/resources
  2. Appropriately replace all instances of SET_ME in coral-service/src/main/resources/hive.properties
  3. Run
../gradlew bootRun  
  1. Translate a query on existing table/view in remote metastore using the /translate endpoint

Fluxos de tradução atualmente suportados

  1. Hive to Trino
  2. Hive to Spark
  3. Trino to Spark

Observação: durante as traduções de Trino para Spark, as exibições referenciadas em consultas são consideradas definidas no HiveQL e, portanto, não podem ser usadas ao traduzir uma exibição de Trino. Atualmente, apenas referenciar tabelas base é suportado em consultas Trino. Este caminho de tradução é atualmente um POC e pode precisar de mais melhorias.

About

🐍 Coral is a translation, analysis, and query rewrite engine for SQL and other relational languages

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published