---
layout: docs
title:  Kylin Python Client
categories: tutorial
permalink: /docs/tutorial/kylin_client_tool.html
---

Apache Kylin Python Client Library is a python-based Apache Kylin client. There are two components in Apache Kylin Python Client Library:

* Apache Kylin command line tools
* Apache Kylin dialect for SQLAlchemy

You can get more detail from this [Github Repository](https://github.com/Kyligence/kylinpy).

## Installation
Make sure Python version is 2.7+ or 3.4+. The easiest way to install Apache Kylin Python Client Library is to use "pip":

```
pip install --upgrade kylinpy
```

## Kylinpy CLI
After installing Apache Kylin Python Client Library you may run kylinpy in terminal.

```
$ kylinpy
Usage: kylinpy [OPTIONS] COMMAND [ARGS]...

Options:
  -h, --host TEXT       Kylin host name  [required]
  -P, --port INTEGER    Kylin port, default: 7070
  -u, --username TEXT   Kylin username  [required]
  -p, --password TEXT   Kylin password  [required]
  --project TEXT        Kylin project  [required]
  --prefix TEXT         Kylin RESTful prefix of url, default: "/kylin/api"
  --debug / --no-debug  show debug information
  --help                Show this message and exit.

Commands:
  auth           get user auth info
  cube_columns   list cube columns
  cube_desc      show cube description
  cube_names     list cube names
  model_desc     show model description
  projects       list all projects
  query          sql query
  table_columns  list table columns
  table_names    list all table names
```

## Examples for Kylinpy CLI

1. To get all user info from Apache Kylin with debug mode

```
kylinpy -h hostname -P 7070 -u ADMIN -p KYLIN --project learn_kylin --debug auth
```

2. To get all cube columns from Apache Kylin with debug mode

```
kylinpy -h hostname -P 7070 -u ADMIN -p KYLIN --project learn_kylin --debug cube_columns --name kylin_sales_cube
```

3. To get cube description of selected cube from Apache Kylin with debug mode

```
kylinpy -h hostname -P 7070 -u ADMIN -p KYLIN --project learn_kylin --debug cube_desc --name kylin_sales_cube
```

4. To get all cube names from Apache Kylin with debug mode

```
kylinpy -h hostname -u ADMIN -p KYLIN --project learn_kylin --debug cube_names
```

5. To get cube SQL of selected cube from Apache Kylin with debug mode

```
kylinpy -h hostname -P 7070 -u ADMIN -p KYLIN --project learn_kylin --debug cube_sql --name kylin_sales_cube
```

6. To list all projects from Apache Kylin with debug mode

```
kylinpy -h hostname -P 7070 -u ADMIN -p KYLIN --project learn_kylin --debug projects
```

7. To list all tables column of selected cube from Apache Kylin with debug mode

```
kylinpy -h hostname -P 7070 -u ADMIN -p KYLIN --project learn_kylin --debug table_columns --name KYLIN_SALES
```

8. To get all table names from kylin

```
kylinpy -h hostname -u ADMIN -p KYLIN --project learn_kylin --api1 table_names
```

9. To get the model description of the selected model from Apache Kylin with debug mode

```
kylinpy -h hostname -P 7070 -u ADMIN -p KYLIN --project learn_kylin --debug model_desc --name kylin_sales_model
```

## Kylin dialect for SQLAlchemy

Any application that uses SQLAlchemy can now query Apache Kylin with this Apache Kylin dialect installed. It is part of the Apache Kylin Python Client Library, so if you already installed this library in the previous step, you are ready to use. You may use below template to build DSN to connect Apache Kylin.

```
kylin://<username>:<password>@<hostname>:<port>/<project>?version=<v1|v2>&prefix=</kylin/api>
```

## Examples for SQLAlchemy

Test connection with Apache Kylin

```
$ python
  >>> import sqlalchemy as sa
  >>> kylin_engine = sa.create_engine('kylin://username:password@hostname:7070/learn_kylin?version=v1')
  >>> results = kylin_engine.execute('SELECT count(*) FROM KYLIN_SALES')
  >>> [e for e in results]
    [(4953,)]
  >>> kylin_engine.table_names()
    [u'KYLIN_ACCOUNT',
     u'KYLIN_CAL_DT',
     u'KYLIN_CATEGORY_GROUPINGS',
     u'KYLIN_COUNTRY',
     u'KYLIN_SALES',
     u'KYLIN_STREAMING_TABLE']
```

### Use Python for Data Science with Apache Kylin

Please refer to the blog [Use Python for Data Science with Apache Kylin](/blog/2019/06/26/use-python-for-data-science-with-apache-kylin/).
