{ "info": { "author": "datamill", "author_email": "", "bugtrack_url": null, "classifiers": [ "Programming Language :: Python :: 3 :: Only" ], "description": "# Target Redshift\n\n[![CircleCI](https://circleci.com/gh/datamill-co/target-redshift.svg?style=svg)](https://circleci.com/gh/datamill-co/target-redshift)\n\n[![PyPI version](https://badge.fury.io/py/target-redshift.svg)](https://pypi.org/project/target-redshift/)\n\n[![](https://img.shields.io/librariesio/github/datamill-co/target-redshift.svg)](https://libraries.io/github/datamill-co/target-redshift)\n\nA [Singer](https://singer.io/) redshift target, for use with Singer streams generated by Singer taps.\n\n## Features\n\n- Creates SQL tables for [Singer](https://singer.io) streams\n- Denests objects flattening them into the parent object's table\n- Denests rows into separate tables\n- Adds columns and sub-tables as new fields are added to the stream [JSON Schema](https://json-schema.org/)\n- Full stream replication via record `version` and `ACTIVATE_VERSION` messages.\n\n## Install\n\n```sh\npip install target-redshift\n```\n\n## Usage\n\n1. Follow the\n [Singer.io Best Practices](https://github.com/singer-io/getting-started/blob/master/docs/RUNNING_AND_DEVELOPING.md#running-a-singer-tap-with-a-singer-target)\n for setting up separate `tap` and `target` virtualenvs to avoid version\n conflicts.\n\n1. Create a [config file](#configjson) at\n `~/singer.io/target_redshift_config.json` with redshift connection\n information and target redshift schema.\n\n ```json\n {\n \"redshift_host\": \"aws.something.or.other\",\n \"redshift_port\": 5439,\n \"redshift_database\": \"my_analytics\",\n \"redshift_username\": \"myuser\",\n \"redshift_password\": \"1234\",\n \"redshift_schema\": \"mytapname\",\n \"default_column_length\": 1000,\n \"target_s3\": {\n \"aws_access_key_id\": \"AKIA...\",\n \"aws_secret_access_key\": \"supersecret\",\n \"bucket\": \"target_redshift_staging\",\n \"key_prefix\": \"__tmp\"\n }\n }\n ```\n\n1. Run `target-redshift` against a [Singer](https://singer.io) tap.\n\n ```bash\n ~/.virtualenvs/tap-something/bin/tap-something \\\n | ~/.virtualenvs/target-redshift/bin/target-redshift \\\n --config ~/singer.io/target_redshift_config.json\n ```\n\n### Config.json\n\nThe fields available to be specified in the config file are specified\nhere.\n\n| Field | Type | Default | Details |\n| --------------------------- | --------------------- | ---------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| `redshift_host` | `[\"string\"]` | `N/A` | |\n| `redshift_port` | `[\"integer\", \"null\"]` | `5432` | |\n| `redshift_database` | `[\"string\"]` | `N/A` | |\n| `redshift_username` | `[\"string\"]` | `N/A` | |\n| `redshift_password` | `[\"string\"]` | `N/A` | |\n| `redshift_schema` | `[\"string\", \"null\"]` | `\"public\"` | |\n| `invalid_records_detect` | `[\"boolean\", \"null\"]` | `true` | Include `false` in your config to disable `target-redshift` from crashing on invalid records |\n| `invalid_records_threshold` | `[\"integer\", \"null\"]` | `0` | Include a positive value `n` in your config to allow for `target-redshift` to encounter at most `n` invalid records per stream before giving up. |\n| `disable_collection` | `[\"string\", \"null\"]` | `false` | Include `true` in your config to disable [Singer Usage Logging](#usage-logging). |\n| `logging_level` | `[\"string\", \"null\"]` | `\"INFO\"` | The level for logging. Set to `DEBUG` to get things like queries executed, timing of those queries, etc. See [Python's Logger Levels](https://docs.python.org/3/library/logging.html#levels) for information about valid values. |\n| `max_batch_rows` | `[\"integer\", \"null\"]` | `200000` | The maximum number of rows to buffer in memory before writing to the destination table in Redshift\n| `max_buffer_size` | `[\"integer\", \"null\"]` | `104857600` (100MB in bytes) | The maximum number of bytes to buffer in memory before writing to the destination table in Redshift\n| `batch_detection_threshold` | `[\"integer\", \"null\"]` | `5000`, or 1/40th `max_batch_rows` | How often, in rows received, to count the buffered rows and bytes to check if a flush is necessary. There's a slight performance penalty to checking the buffered records count or bytesize, so this controls how often this is polled in order to mitigate the penalty. This value is usually not necessary to set as the default is dynamically adjusted to check reasonably often.\n| `persist_empty_tables` | `[\"boolean\", \"null\"]` | `False` | Whether the Target should create tables which have no records present in Remote. |\n| `default_column_length` | `[\"integer\", \"null\"]` | `1000` | All columns with the VARCHAR(CHARACTER VARYING) type will be have this length.Range: 1-65535. |\n| `state_support` | `[\"boolean\", \"null\"]` | `True` | Whether the Target should emit `STATE` messages to stdout for further consumption. In this mode, which is on by default, STATE messages are buffered in memory until all the records that occurred before them are flushed according to the batch flushing schedule the target is configured with. |\n| `target_s3` | `[\"object\"]` | `N/A` | See `S3` below |\n\n#### S3 Config.json\n\n| Field | Type | Default | Details |\n| ----------------------- | -------------------- | ------- | ---------------------------------------------------------------------------- |\n| `aws_access_key_id` | `[\"string\"]` | `N/A` | |\n| `aws_secret_access_key` | `[\"string\"]` | `N/A` | |\n| `bucket` | `[\"string\"]` | `N/A` | Bucket where staging files should be uploaded to. |\n| `key_prefix` | `[\"string\", \"null\"]` | `\"\"` | Prefix for staging file uploads to allow for better delineation of tmp files |\n\n## Known Limitations\n\n- Ignores `STATE` Singer messages.\n- Requires a [JSON Schema](https://json-schema.org/) for every stream.\n- Only string, string with date-time format, integer, number, boolean,\n object, and array types with or without null are supported. Arrays can\n have any of the other types listed, including objects as types within\n items.\n - Example of JSON Schema types that work\n - `['number']`\n - `['string']`\n - `['string', 'null']`\n - Exmaple of JSON Schema types that **DO NOT** work\n - `['string', 'integer']`\n - `['integer', 'number']`\n - `['any']`\n - `['null']`\n- JSON Schema combinations such as `anyOf` and `allOf` are not supported.\n- JSON Schema \\$ref is partially supported:\n - **_NOTE:_** The following limitations are known to **NOT** fail gracefully\n - Presently you cannot have any circular or recursive `$ref`s\n - `$ref`s must be present within the schema:\n - URI's do not work\n - if the `$ref` is broken, the behaviour is considered unexpected\n- Any values which are the `string` `NULL` will be streamed to Redshift as the literal `null`\n- Table names are restricted to:\n - 127 characters in length\n - can only be composed of `_`, lowercase letters, numbers, `$`\n - cannot start with `$`\n - ASCII characters\n- Field/Column names are restricted to:\n - 127 characters in length\n - ASCII characters\n- Fields/Columns are **_ALL_** `nullable`\n- Fields/Columns use a default of 1000 characters (in order to be able to work with a large number of columns).\n\n## Usage Logging\n\n[Singer.io](https://www.singer.io/) requires official taps and targets to collect anonymous usage data. This data is only used in aggregate to report on individual tap/targets, as well as the Singer community at-large. IP addresses are recorded to detect unique tap/targets users but not shared with third-parties.\n\nTo disable anonymous data collection set `disable_collection` to `true` in the configuration JSON file.\n\n## Developing\n\n`target-redshift` utilizes [setup.py](https://python-packaging.readthedocs.io/en/latest/index.html) for package\nmanagement, and [PyTest](https://docs.pytest.org/en/latest/contents.html) for testing.\n\n### Docker\n\nIf you have [Docker](https://www.docker.com/) and [Docker Compose](https://docs.docker.com/compose/) installed, you can\neasily run the following to get a local env setup quickly.\n\nFirst, make sure to create a [`.env`](https://docs.docker.com/compose/environment-variables/#the-env-file) file in the root of this repo (it has been `.gitignore`d so don't worry about accidentally staging it).\n\nTherein, fill out the following information:\n\n```sh\nREDSHIFT_HOST='' # Most likely 'localhost'\nREDSHIFT_DATABASE='' # Most likely 'dev'\nREDSHIFT_SCHEMA='' # Probably 'public'\nREDSHIFT_PORT='' # Probably 5439\nREDSHIFT_USERNAME=''\nDEFAULT_COLUMN_LENGTH=''\nTARGET_S3_AWS_ACCESS_KEY_ID=''\nTARGET_S3_AWS_SECRET_ACCESS_KEY=''\nTARGET_S3_BUCKET=''\nTARGET_S3_KEY_PREFIX='' # We use 'target_redshift_test'\n```\n\n```sh\n$ docker-compose up -d --build\n$ docker logs -tf target-redshift_target-redshift_1 # You container names might differ\n```\n\nAs soon as you see `INFO: Dev environment ready.` you can shell into the container and start running test commands:\n\n```sh\n$ docker exec -it target-redshift_target-redshift_1 bash # Your container names might differ\nroot@... $ source /code/venv--target-redshift/bin/activate\nroot@... $ pytest\n```\n\nSee the [PyTest](#pytest) commands below!\n\n### DB\n\nTo run the tests, you will need an _actual_ Redshift cluster running, and a user that either:\n\n- Has the ability to _create_ schemas therein\n\n - This is required if you wish to run multiple versions of the tests, similar\n to how we run our [CI tests by varying the `REDSHIFT_SCHEMA` envvar](https://github.com/datamill-co/target-redshift/blob/master/.circleci/config.yml#L94-L96)\n\n- has access to the `public` schema\n - If the `REDSHIFT_SCHEMA` is seen to be the string `\"public\"`, the tests will ignore creating and dropping schemas\n - This setup is often preferred for situations in which `GRANT CREATE ON DATABASE db TO user;`\n is viewed as too risky\n\nMake sure to set the following env vars for [PyTest](#pytest):\n\n```sh\n$ EXPORT REDSHIFT_HOST='' # Most likely 'localhost'\n$ EXPORT REDSHIFT_DATABASE='' # Most likely 'dev'\n$ EXPORT REDSHIFT_SCHEMA='' # Probably 'public'\n$ EXPORT REDSHIFT_PORT='' # Probably 5439\n$ EXPORT REDSHIFT_USERNAME='=1.9.205)", "singer-target-postgres (==0.2.1)", "urllib3 (==1.25.6)", "chance (==0.110) ; extra == 'tests'", "Faker (==2.0.2) ; extra == 'tests'", "pytest (==5.2.1) ; extra == 'tests'" ], "requires_python": "", "summary": "Singer.io target for loading data into redshift", "version": "0.2.1" }, "last_serial": 5940334, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "7cfe8cea9d19ae81410e1524e6168714", "sha256": "fbb42d9d35232c6478998395bcddfea2b015212c5d90828cd2018b7b454ac94d" }, "downloads": -1, "filename": "target_redshift-0.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "7cfe8cea9d19ae81410e1524e6168714", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 20262, "upload_time": "2019-01-30T21:33:10", "url": "https://files.pythonhosted.org/packages/d6/db/e1eda32e199289e8ea5fdd2cfe858cdf15e0f567d56566117bb1d6bdfda8/target_redshift-0.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "91951b99eea4896e948d510463b15059", "sha256": "cb88fdc865eace162461db38a712524747683fe13c9631a8a191ad6fda25b980" }, "downloads": -1, "filename": "target-redshift-0.0.1.tar.gz", "has_sig": false, "md5_digest": "91951b99eea4896e948d510463b15059", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8820, "upload_time": "2019-01-30T21:33:12", "url": "https://files.pythonhosted.org/packages/7a/ca/028d301211220ef185edb9c6b553a17388ebc72261062ed5ce906c80a97e/target-redshift-0.0.1.tar.gz" } ], "0.0.10": [ { "comment_text": "", "digests": { "md5": "04e27b2dd2d06a22b545f06f049631b9", "sha256": "02b840f46de7ed71a3e371029df8ca6b2038bb89093eefba8bea38388a0cb358" }, "downloads": -1, "filename": "target_redshift-0.0.10-py3-none-any.whl", "has_sig": false, "md5_digest": "04e27b2dd2d06a22b545f06f049631b9", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 20898, "upload_time": "2019-08-28T18:10:13", "url": "https://files.pythonhosted.org/packages/b1/f8/1ce4a4533df2dabaeeaa33e56fdacdbf217bc25362a08304c20b887e9a7e/target_redshift-0.0.10-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b5a7f422112f75e94c644cf48b3cb311", "sha256": "17a4e6ac94be160527457f771a44253d98aebcfcd84e7fa0aa7d7a25e55feef7" }, "downloads": -1, "filename": "target-redshift-0.0.10.tar.gz", "has_sig": false, "md5_digest": "b5a7f422112f75e94c644cf48b3cb311", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9504, "upload_time": "2019-08-28T18:10:15", "url": "https://files.pythonhosted.org/packages/61/1b/2c276b79e687ffbedd821faeae80ad008af3594848592c903fbb754b3145/target-redshift-0.0.10.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "a92736b75ac36ff75570b493e884b156", "sha256": "fea3d979c5f2f40d1a62ddce69d695c75dee9649fcd6911deaaec3426fee7e73" }, "downloads": -1, "filename": "target_redshift-0.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "a92736b75ac36ff75570b493e884b156", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 20264, "upload_time": "2019-02-09T00:22:17", "url": "https://files.pythonhosted.org/packages/e9/6a/c258f80bca252f98f3f04fead465dfd96b2e636f04089c7983aaca031fb3/target_redshift-0.0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "96fec0ee23564bbe2039fa1ad48a699e", "sha256": "3f912204222b3e47928465e6e9163a14619821c060ecac63568823c2cd1b43d5" }, "downloads": -1, "filename": "target-redshift-0.0.2.tar.gz", "has_sig": false, "md5_digest": "96fec0ee23564bbe2039fa1ad48a699e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8824, "upload_time": "2019-02-09T00:22:18", "url": "https://files.pythonhosted.org/packages/2f/36/f13bb9cdf4e880632c762787779585024bc036630cdd569ccacaba53322e/target-redshift-0.0.2.tar.gz" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "635502050dd894c544a979c470cfed66", "sha256": "a9b6ab0dd17e69900ca796482cf91dd0ca0738408abfb6acf48d0ab3f8726842" }, "downloads": -1, "filename": "target_redshift-0.0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "635502050dd894c544a979c470cfed66", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 20466, "upload_time": "2019-02-18T15:31:14", "url": "https://files.pythonhosted.org/packages/48/74/4e8df506b44cef91cd402c69345c30d3189c02bd693690d0283650862e00/target_redshift-0.0.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "17a1bb4b1b3b208ffca3d0b7653f831c", "sha256": "4822472c5ad72fbc0b5f4eb7768cadbc48fc067f9ad7c1872593d7c40acae537" }, "downloads": -1, "filename": "target-redshift-0.0.3.tar.gz", "has_sig": false, "md5_digest": "17a1bb4b1b3b208ffca3d0b7653f831c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9009, "upload_time": "2019-02-18T15:31:16", "url": "https://files.pythonhosted.org/packages/ca/ec/cc56d3381e0c1f28127fc94047d0c2275b3789692729e851b5ba742d16b5/target-redshift-0.0.3.tar.gz" } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "8541a1c12b4528c87ed4a443c3864699", "sha256": "9efbe380bcfdd27f373a6854a17e43bc3318c126bd770aabacc602e85f07f594" }, "downloads": -1, "filename": "target_redshift-0.0.4-py3-none-any.whl", "has_sig": false, "md5_digest": "8541a1c12b4528c87ed4a443c3864699", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 20567, "upload_time": "2019-02-20T20:00:02", "url": "https://files.pythonhosted.org/packages/74/a0/05ede86fa01f518fc9fa6b2760b3cf42ca80e3d91c069afc17bfccdaf662/target_redshift-0.0.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b81e58b3e6d05c99332b9fb0f658981a", "sha256": "a8d63381e8096e78244f1cee5c913b1d7bab9d2534ba7f239685fde2ed2a9ca4" }, "downloads": -1, "filename": "target-redshift-0.0.4.tar.gz", "has_sig": false, "md5_digest": "b81e58b3e6d05c99332b9fb0f658981a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9096, "upload_time": "2019-02-20T20:00:03", "url": "https://files.pythonhosted.org/packages/c7/b1/5ea3677264f96e57073d743b57919eb6dfd04a8a664175976602cb9fd99c/target-redshift-0.0.4.tar.gz" } ], "0.0.5": [ { "comment_text": "", "digests": { "md5": "98cb7455b45cdbed5618a71e92bcd338", "sha256": "ae6c7eb99f081c2402db78ccab9c2063b27d57b1e7cd8716d9d3efece85a0c65" }, "downloads": -1, "filename": "target_redshift-0.0.5-py3-none-any.whl", "has_sig": false, "md5_digest": "98cb7455b45cdbed5618a71e92bcd338", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 20566, "upload_time": "2019-03-15T17:04:05", "url": "https://files.pythonhosted.org/packages/51/f8/8b26441fd5d8cc3b11f9b178af0d541942eb38511f7ff8fa7ca2f90a4f24/target_redshift-0.0.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "037f0df2ab5b558df9842b88d41690fd", "sha256": "b4b7d709c85cdb7c2618ae5ee82e39733ac72a48f13d177604351fc74098ac6b" }, "downloads": -1, "filename": "target-redshift-0.0.5.tar.gz", "has_sig": false, "md5_digest": "037f0df2ab5b558df9842b88d41690fd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9095, "upload_time": "2019-03-15T17:04:06", "url": "https://files.pythonhosted.org/packages/80/bf/4d4f9066267cf9fd5c5d0de19f1d87a47579a3934d73f7a8cee1d0553f16/target-redshift-0.0.5.tar.gz" } ], "0.0.6": [ { "comment_text": "", "digests": { "md5": "e197a5b2841592740d30e329d9e14cec", "sha256": "ae76cf769efa40ae1a5117ec9e6bf67b7b9e4ef82c1cbb0ee37a667a297db88a" }, "downloads": -1, "filename": "target_redshift-0.0.6-py3-none-any.whl", "has_sig": false, "md5_digest": "e197a5b2841592740d30e329d9e14cec", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 20774, "upload_time": "2019-04-17T13:38:05", "url": "https://files.pythonhosted.org/packages/90/34/08c3068096511ff3bc4025c3a237ab8e007aeb8c2a85ed40482815a44125/target_redshift-0.0.6-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "004eac8972df3186dc20ee43d9a6887e", "sha256": "ade001b7d59ce3ea809cfd684fc304978a3fa5570c04a1cdec889356641bbf03" }, "downloads": -1, "filename": "target-redshift-0.0.6.tar.gz", "has_sig": false, "md5_digest": "004eac8972df3186dc20ee43d9a6887e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9383, "upload_time": "2019-04-17T13:38:07", "url": "https://files.pythonhosted.org/packages/7f/c5/bc66fd288c0487826df99d1de6bd6367f6901b3dfe0c73c7f4877c23d1f8/target-redshift-0.0.6.tar.gz" } ], "0.0.7": [ { "comment_text": "", "digests": { "md5": "eeffb63b155ca64bdfd0fe98366509ca", "sha256": "55d4cbed85567dde620c4ded47972e60e69c86aaaabdf8bb35733459b6336378" }, "downloads": -1, "filename": "target_redshift-0.0.7-py3-none-any.whl", "has_sig": false, "md5_digest": "eeffb63b155ca64bdfd0fe98366509ca", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 20775, "upload_time": "2019-05-30T18:26:01", "url": "https://files.pythonhosted.org/packages/c5/85/08ddd717c067991bc2158c5b6fa033bae1cc061d4406eb1ec9e8fe67dfb6/target_redshift-0.0.7-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fb87673e953e11cf051aba1d433e5f36", "sha256": "a92cc59398a59b21e59b2c3b694a1e425fe4e0192fec55f10df8865096b38323" }, "downloads": -1, "filename": "target-redshift-0.0.7.tar.gz", "has_sig": false, "md5_digest": "fb87673e953e11cf051aba1d433e5f36", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9385, "upload_time": "2019-05-30T18:26:03", "url": "https://files.pythonhosted.org/packages/75/43/ef86b9cbfa523fb9e1177c169c0c5496d6ca0278b7ddf7748b80738c1dad/target-redshift-0.0.7.tar.gz" } ], "0.0.8": [ { "comment_text": "", "digests": { "md5": "014b2651b2c6aa7555007320c531ad4a", "sha256": "78e482d05b45463949c2221dde6a6f554c0a29a552cfdb26064341a0a89efa20" }, "downloads": -1, "filename": "target_redshift-0.0.8-py3-none-any.whl", "has_sig": false, "md5_digest": "014b2651b2c6aa7555007320c531ad4a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 20775, "upload_time": "2019-08-12T20:28:35", "url": "https://files.pythonhosted.org/packages/f3/ab/dcfe5801c5f1bdbaa4386cdc54f4bd67105a2b71640e76a91376563891b5/target_redshift-0.0.8-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "28674efd162c2645d7b8c18a076a9686", "sha256": "f2355c8806439a6eacfa06ddd11b390bde7251ba97a6a72ff9300394a98f0068" }, "downloads": -1, "filename": "target-redshift-0.0.8.tar.gz", "has_sig": false, "md5_digest": "28674efd162c2645d7b8c18a076a9686", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9382, "upload_time": "2019-08-12T20:28:36", "url": "https://files.pythonhosted.org/packages/b3/e7/6d0181aea8bf32410f88e221fa6bbd7351f4ac0a2fde1ad871919fd8f38b/target-redshift-0.0.8.tar.gz" } ], "0.0.9": [ { "comment_text": "", "digests": { "md5": "885d23900dadc8bc774695867225575a", "sha256": "df48f2fce348adeaf7a4dad9b26789f0ba0e1edce2a71e9814e5e697eda7ca23" }, "downloads": -1, "filename": "target_redshift-0.0.9-py3-none-any.whl", "has_sig": false, "md5_digest": "885d23900dadc8bc774695867225575a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 20868, "upload_time": "2019-08-22T21:05:15", "url": "https://files.pythonhosted.org/packages/e8/68/24de4aabfb4ca485fda50b7bde38e4ccd6afbf946e3b9fa8b51f60a3c0fc/target_redshift-0.0.9-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f32625525b7b19cf2e239b23e08543f2", "sha256": "78246f6784e5a74a59d00e923bf7377efca0f65908b3f2824d9c75c0fbfe1afe" }, "downloads": -1, "filename": "target-redshift-0.0.9.tar.gz", "has_sig": false, "md5_digest": "f32625525b7b19cf2e239b23e08543f2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9485, "upload_time": "2019-08-22T21:05:16", "url": "https://files.pythonhosted.org/packages/e2/c8/4bc8926a5b515840c72d0d1d0e3a66e3fb43ab35752a67f0347dda17107b/target-redshift-0.0.9.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "e6b309c31b797e4a316f94202e363e61", "sha256": "cf76bd9ad3dd6a5575be46fa0130e34701724f99e3c594f88bc9328dae469339" }, "downloads": -1, "filename": "target_redshift-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "e6b309c31b797e4a316f94202e363e61", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 20881, "upload_time": "2019-09-10T17:20:40", "url": "https://files.pythonhosted.org/packages/bd/ef/e63c0b52a77e30be4984a424ae5a0935374a1bfc08ce4250e8b4881611bc/target_redshift-0.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "56afecc792c413b9c0752f45aec2a20d", "sha256": "9273a193a0819e0ef81a9e1a9d0d26b2be5ed87eef43485a5897a0243fecd576" }, "downloads": -1, "filename": "target-redshift-0.2.0.tar.gz", "has_sig": false, "md5_digest": "56afecc792c413b9c0752f45aec2a20d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9502, "upload_time": "2019-09-10T17:20:41", "url": "https://files.pythonhosted.org/packages/91/ec/d3b1821f5ecacb73cf4283c9cad29fde09236cea11c77fde4de5cda7fb40/target-redshift-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "44b507db3e7ad74f0f61fa914b0d5733", "sha256": "806bea57f221989aeb73f9765b2d0b3f8a19b3bf63ee07ba2f8361b63937f1f9" }, "downloads": -1, "filename": "target_redshift-0.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "44b507db3e7ad74f0f61fa914b0d5733", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 21339, "upload_time": "2019-10-07T17:21:09", "url": "https://files.pythonhosted.org/packages/05/89/0ab48daed124eb279730c8349c81a98b68400451f9fa4bcd3eae028b36ed/target_redshift-0.2.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4541362d3a9ba1692d8609c005feca54", "sha256": "3e146d9b592be379b2471ee85571998590cf0ab13d1aadd9aecd817a20bfe723" }, "downloads": -1, "filename": "target-redshift-0.2.1.tar.gz", "has_sig": false, "md5_digest": "4541362d3a9ba1692d8609c005feca54", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11036, "upload_time": "2019-10-07T17:21:11", "url": "https://files.pythonhosted.org/packages/a6/78/be1e406ccaacda96753526385df9f5c080b65593b1e41475eab15d7936da/target-redshift-0.2.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "44b507db3e7ad74f0f61fa914b0d5733", "sha256": "806bea57f221989aeb73f9765b2d0b3f8a19b3bf63ee07ba2f8361b63937f1f9" }, "downloads": -1, "filename": "target_redshift-0.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "44b507db3e7ad74f0f61fa914b0d5733", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 21339, "upload_time": "2019-10-07T17:21:09", "url": "https://files.pythonhosted.org/packages/05/89/0ab48daed124eb279730c8349c81a98b68400451f9fa4bcd3eae028b36ed/target_redshift-0.2.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4541362d3a9ba1692d8609c005feca54", "sha256": "3e146d9b592be379b2471ee85571998590cf0ab13d1aadd9aecd817a20bfe723" }, "downloads": -1, "filename": "target-redshift-0.2.1.tar.gz", "has_sig": false, "md5_digest": "4541362d3a9ba1692d8609c005feca54", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11036, "upload_time": "2019-10-07T17:21:11", "url": "https://files.pythonhosted.org/packages/a6/78/be1e406ccaacda96753526385df9f5c080b65593b1e41475eab15d7936da/target-redshift-0.2.1.tar.gz" } ] }