GithubHelp home page GithubHelp logo

contiamo / rhombic Goto Github PK

View Code? Open in Web Editor NEW
48.0 10.0 8.0 2.79 MB

SQL parsing, lineage extraction and manipulation

TypeScript 97.08% JavaScript 0.06% ANTLR 2.87%
sql parser lineage sql-lineage postgresql spark

rhombic's Introduction

Rhombic-logo

Utilities for parsing, analysing and manipulating SQL.

Getting started

npm install rhombic

Description

Rhombic can parse SQL with 2 different parsers with different sets of operations applicable in each case:

  • Chevrotain based parser built from ground up to support simple statements for ANSI SQL dialect. Parsed SQL tree can then be manipulated (adding projection items, ordering, filters) and serialized back to SQL text. For details and available operations see src/index.ts
  • Antlr based parser (generated with antlr4ts) from SQL grammar derived from Apache Spark SQL grammar with the goal to support most SQL dialects with broad functionality. Currenly this mode can be used to extract SQL column level lineage. For details and available operations see src/antlr/index.ts

Antlr parser - lineage

To build SQL column level lineage for an SQL query using Antlr-based parser:

import { antlr, TablePrimary } from "rhombic";

try {
  const parsingOptions = {
    // if double quotes should quote identifiers:
    doubleQuotedIdentifier: true
  };
  const q = antlr.parse("SELECT * FROM abc;", parsingOptions);

  console.log(q.getUsedTables()); // [{ tableName: "abc" }];
  const getTable = (table: TablePrimary) => {
    /* Logic to retrieve table & columns metadata */
  };

  // Whether to use "mergedLeaves" or "tree" lineage type
  const mergedLeaves = true;
  const lineageOptions = {
    positionalRefsEnabled: false
  };
  const lineage = q.getLineage(getTable, mergedLeaves, lineageOptions);
} catch (e) {
  // Parsing errors
}

You can then use something like react-flow to draw a nice visualization of your lineage -

image

Chevrotain parser - SQL manipulation

import rhombic from "rhombic";

try {
  const query = rhombic
    .parse("SELECT * FROM abc;")
    .addProjectionItem("city")
    .toString();

  console.log(query); // SELECT city FROM abc;
} catch (e) {
  // Parsing errors
}

How to publish to npm?

Just update the version in package.json!

As soon as your branch will be merged to master, a new npm version will be automatically published for you.

History

This project was built to support Contiamo® workbench editor (a fancy SQL editor).

Resources

SQL 2003-2 BNF

rhombic's People

Contributors

dependabot[bot] avatar fabien0102 avatar megaflo avatar micha-f avatar steffeniwan avatar stereobooster avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.