Skip to main content

Azure Data Explorer (Kusto) dialect for SQLAlchemy

Project description

Azure Data Explorer (Kusto) dialect for SQLAlchemy

pypi

sqlalchemy-kusto implements a DBAPI (PEP-249) and SQLAlchemy dialect that enables SQL query execution via SQLAlchemy.

Current project includes support for two dialects: SQL dialect and KQL dialect.

SQL dialect

Current implementation has full support for SQL queries. But pay your attention that Kusto implementation of T-SQL has not full coverage; check the list of known issues.

KQL dialect

KQL dialect still in progress. Please, use it on your own risk for now.

Notice that implemented Kusto dialects don't support DDL statements and inserts, deletes, updates.

Installation

pip install sqlalchemy-kusto

Library usage

Using DBAPI

from sqlalchemy_kusto import connect

connection = connect(
        cluster=kusto_url,
        database=database_name,
        msi=False,
        user_msi=None,
        azure_ad_client_id=kusto_client_id,
        azure_ad_client_secret=kusto_client_secret,
        azure_ad_tenant_id=kusto_tenant_id,
        dev_mode=False
)

result = connection.execute(f"select 1").fetchall()

Using SQLAlchemy raw sql

from sqlalchemy.engine import create_engine

engine = create_engine(
    f"kustosql+{kusto_url}/{database_name}?"
    f"msi=False&azure_ad_client_id={kusto_client_id}&"
    f"azure_ad_client_secret={kusto_client_secret}&"
    f"azure_ad_tenant_id={kusto_tenant_id}&"
    f"dev_mode=False"
)
engine.connect()
cursor = engine.execute(f"select top 1")
data_rows = cursor.fetchall()

Using SQLAlchemy

from sqlalchemy import create_engine, MetaData, Table, Column, String, Integer

engine = create_engine(
    f"kustosql+{kusto_url}/{database_name}?"
    f"msi=False&azure_ad_client_id={kusto_client_id}&"
    f"azure_ad_client_secret={kusto_client_secret}&"
    f"azure_ad_tenant_id={kusto_tenant_id}"
)

my_table = Table(
        "MyTable",
        MetaData(),
        Column("Id", Integer),
        Column("Text", String),
)

query = my_table.select().limit(5)

engine.connect()
cursor = engine.execute(query)
print([row for row in cursor])

Using with Apache Superset

Apache Superset starting from version 1.5 also supports Kusto database engine spec.
When connecting to a new data source you may choose a data source type either KustoSQL or KustoKQL depending on the dialect you want to use.

There are following connection string formats:

# KustoSQL
kustosql+https://<CLUSTER_URL>/<DATABASE>?azure_ad_client_id=<CLIENT_ID>&azure_ad_client_secret=<CLIENT_SECRET>&azure_ad_tenant_id=<TENANT_ID>&msi=False

# KustoKQL
kustokql+https://<CLUSTER_URL>/<DATABASE>?azure_ad_client_id=<CLIENT_ID>&azure_ad_client_secret=<CLIENT_SECRET>&azure_ad_tenant_id=<TENANT_ID>&msi=False

Important notice on package version compatibility.
Apache Superset stable releases 1.5 and 2.0 dependent on sqlalchemy==1.3.24. If you want to use sqlalchemy-kusto with these versions you need to install version 1.* of the package.

Current master branch of the apache/superset dependent on sqlalchemy==1.4.36. If you want to use sqlalchemy-kusto with the latest unstable version of apache/superset, you need to install version 2.* of the package.

Contributing

Please see the CONTRIBUTING.md for development setup and contributing process guidelines.


Issue in Apache Superset repository that inspired current solution.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

sqlalchemy_kusto-3.1.0.tar.gz (21.2 kB view details)

Uploaded Source

Built Distribution

sqlalchemy_kusto-3.1.0-py3-none-any.whl (19.7 kB view details)

Uploaded Python 3

File details

Details for the file sqlalchemy_kusto-3.1.0.tar.gz.

File metadata

  • Download URL: sqlalchemy_kusto-3.1.0.tar.gz
  • Upload date:
  • Size: 21.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.10.15

File hashes

Hashes for sqlalchemy_kusto-3.1.0.tar.gz
Algorithm Hash digest
SHA256 87fe98a06c2d827979f917f67ba344e8af2603e00000059cd85ec5f80d7c941e
MD5 8a9a04e7c7b209a222fa10501b57e551
BLAKE2b-256 792226ce3fc0df79a61fdef62971c333401d7b7ddcdb11c807eef360e27fabaf

See more details on using hashes here.

File details

Details for the file sqlalchemy_kusto-3.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for sqlalchemy_kusto-3.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b03914616ed1f890435984eb552bd725a9e8f931022c10d02378e5f49c8b27d8
MD5 900ccf0593ad16d2a63630affdd21c92
BLAKE2b-256 5d9f7fa3bc94b319833c5d72308ee7388bbcdec4e5d953a797df8e5be59c86b0

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page