- Uma linguagem de modelagem semântica e também de consulta, com natureza dupla: executa consultas usando engines SQL existentes
- As consultas Malloy escritas são compiladas para SQL otimizado para o banco de dados em uso e então executadas
- Quando foi apresentada em 2022, era uma linguagem experimental sob a Looker, mas agora foi transferida separadamente para malloydata e cresceu para cerca de 2,5 mil estrelas
- Os backends suportados também se expandiram dos dois da época, BigQuery e Postgres, para BigQuery/Snowflake/PostgreSQL/MySQL/Trino/Presto, com adição de suporte nativo a DuckDB
- Nomenclatura concisa e reutilização: economiza tempo evitando escrever definições repetitivas, permitindo refinar o modelo iterativamente enquanto se consulta
- Evita resultados que parecem corretos, mas estão errados: previne problemas em que consultas aparentemente corretas levam a valores incorretos
- Nested Queries (consultas aninhadas): cria facilmente visualizações hierárquicas ricas dos dados; a própria consulta funciona como um componente reutilizável, sem necessidade de reescrevê-la para criar hierarquias
- Symmetric Aggregates (agregações simétricas): evita automaticamente agregações incorretas de soma/média/contagem etc.; resolve no nível da linguagem problemas de armadilhas de relacionamento (Fan/Chasm Trap)
- Freedom and Safety (liberdade e segurança): combina a flexibilidade total do SQL com a segurança de um modelo semântico de dados, em contraste com o LookML, que oferece segurança mas restringe a liberdade
- Oferece extensão para VS Code: dá suporte à construção de modelos, consultas e transformações, visualizações simples e criação de dashboards; pode ser testado diretamente no navegador
- Exemplo de sintaxe: consulta que agrega voos partindo de SFO por companhia aérea; é mais concisa que a estrutura SELECT/COUNT/AVG/GROUP BY do SQL e é ordenada automaticamente pelo primeiro aggregate, dispensando
ORDER BYrun: bigquery.table('malloydata-org.faa.flights') -> { where: origin = 'SFO' group_by: carrier aggregate: flight_count is count() average_flight_time is flight_time.avg() }
1 comentários
Não sei se é porque estou acostumado com SQL, mas não concordo muito que seja mais conciso que SQL.
O LINQ do C# parece mais conveniente, e também dá suporte a mais tipos de bancos de dados.