This project has been archived by its maintainers, and is no longer receiving any updates.
yoyo-indexima
Versions following Semantic Versioning
Overview
Indexima migration schema based on yoyo and pyhive.
The little story
In the land of database migration tool, i have tried:
- flyway
- liquidbase with hive extention
Both either did not support hive (as flyway), or indexima did not fully compliant with hive (wich cause probleme with liquidbase)
So I try to found a module not too complex in order to migrate our indexima schema in a safe way.
In this early release, I just trying to do the job.
Setup
Requirements
- Python 3.7+
Installation
Install this library directly into an activated virtual environment:
$ pip install yoyo-indexima
or add it to your Poetry project:
$ poetry add yoyo-indexima
Usage
Hive connection
- backend ui must start with
indexima:// - If you have trouble to obtain an hive connection, please read http://dwgeek.com/guide-connecting-hiveserver2-using-python-pyhive.html/
Note: If you using python in docker, you should install :
apt-get update -qq
apt-get install -qqy gcc libsasl2-dev libsasl2-2 libsasl2-modules-gssapi-mit
Migration
You could see a complete sample under 'example' folder.
using python client
yoyo_indexima
usage: yoyo_indexima [-h] [-s SOURCE] -u URI {show,apply}
example:
yoyo_indexima apply -s $(pwd)/example/migrations/ -u "indexima://admin:super_password@localhost:10000/default"
Commands:
- show Show migrations
- apply Apply migrations
- reapply Reapply migrations
- rollback Rollback migrations
- mark Mark migrations as applied, without running them
- unmark Unmark applied migrations, without rolling them back
- break-lock Break migration locks
Help for apply:
> yoyo_indexima apply -h
usage: yoyo_indexima apply [-h] [-s SOURCE] -u URI [-f] [-a] [-r REVISION]
[-d]
optional arguments:
-h, --help show this help message and exit
-s SOURCE, --source SOURCE
source path of migration script (default ./migrations)
-u URI, --uri URI backend uri
-f, --force Force apply/rollback of steps even if previous steps
have failed
-a, --all Select all migrations, regardless of whether they have
been previously applied
-r REVISION, --revision REVISION
Apply/rollback migration with id REVISION
-d, --dry-run Dry run: no modification will be applied
within python code
If your migrations script are under directory migration folder
import os
from yoyo_indexima import get_backend, read_migrations
if __name__ == "__main__":
# obtain IndeximaBackend
backend = get_backend('indexima://admin:super_password@localhost:10000/default?auth=CUSTOM')
# Read migrations folder
migrations = read_migrations(os.path.join(os.getcwd(), 'migrations/**/*'))
print(f'migrations: {migrations}')
if migrations:
# apply migration
with backend.lock():
backend.apply_migrations(backend.to_apply(migrations))
Management table
This tool create in your default schema:
- a log table: 'yoyo_log'
- a lock_table: 'yoyo_lock'
- a version table: 'yoyo_version'
- a migration table: 'yoyo_migration'
Migration script template
"""
{message}
"""
from yoyo import step
__depends__ = {{{depends}}}
steps = [
step("create ...", "drop ...")
]
Configure hive connection
In python script, on IndeximaBackendinstance, you could use:
set_hive_configuration: A dictionary of Hive settings (functionally same as thesetcommand)set_hive_thrift_transport: an instance of TSaslClientTransport
As see in https://github.com/dropbox/PyHive/issues/162, you could do things like that:
import sasl
from thrift_sasl import TSaslClientTransport
from thrift.transport.TSocket import TSocket
def create_hive_plain_transport(host, port, username, password, timeout=60):
socket = TSocket(host, port)
socket.setTimeout(timeout * 1000)
sasl_auth = 'PLAIN'
def sasl_factory():
sasl_client = sasl.Client()
sasl_client.setAttr('host', host)
sasl_client.setAttr('username', username)
sasl_client.setAttr('password', password)
sasl_client.init()
return sasl_client
return TSaslClientTransport(sasl_factory, sasl_auth, socket)
backend = get_backend('indexima://admin:super_password@localhost:10000/default?auth=CUSTOM')
backend.set_hive_thrift_transport(create_hive_plain_transport(...))
Extends IndeximaBackend
If you extends IndeximaBackend you could register your classes, in the function:
get_backend(uri: str, backend=IndeximaBackend) -> DatabaseBackend:
TODO: add a client parameter to specify full class name in cli.
License
Contributing
See Contributing
Next step
- production usage in order to see how this tool made the job
- more documentation in code
- purpose few change in 'yoyo' like set all SQL command on Backend class
- ...
Metadata
Release files for yoyo-indexima 0.1.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| yoyo_indexima-0.1.3.tar.gz | 15.2 kB | Without provenance | Details for yoyo_indexima-0.1.3.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| yoyo_indexima-0.1.3-py3-none-any.whl | Python 3 | none | any | Details for yoyo_indexima-0.1.3-py3-none-any.whl |
Total release size: 31.2 kB
Release files / yoyo_indexima-0.1.3.tar.gz
| Download URL | yoyo_indexima-0.1.3.tar.gz |
|---|---|
| Size | 15.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
5cee9b5ac3d4b51a397eb40d15ea515e5760bba6623e56cc21e3077c61b633d6
|
|
BLAKE2b-256 checksum How to use checksums |
f88d16041cec567b05103c2d4e4c0fa8929ddb0fa21807eec163db11896834af
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/0.12.17 CPython/3.7.3 Darwin/17.7.0
|
Release files / yoyo_indexima-0.1.3-py3-none-any.whl
| Download URL | yoyo_indexima-0.1.3-py3-none-any.whl |
|---|---|
| Size | 16.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
0f15b0f3c7b5e863b1a5991c38021791bf8132364d6a28593ef3183e482b999e
|
|
BLAKE2b-256 checksum How to use checksums |
c2ef304362fe869d4c41e078bb54482a50ea6eaf63834736389a9c10088313a5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/0.12.17 CPython/3.7.3 Darwin/17.7.0
|
Security for yoyo-indexima 0.1.3
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.