ingestr 0.12.11__tar.gz → 0.13.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of ingestr might be problematic. Click here for more details.

Files changed (217) hide show
  1. {ingestr-0.12.11 → ingestr-0.13.0}/PKG-INFO +4 -1
  2. {ingestr-0.12.11 → ingestr-0.13.0}/docs/.vitepress/config.mjs +1 -0
  3. ingestr-0.13.0/docs/media/clickhouse_img.png +0 -0
  4. ingestr-0.13.0/docs/supported-sources/clickhouse.md +31 -0
  5. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/main.py +1 -1
  6. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/destinations.py +68 -0
  7. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/factory.py +3 -0
  8. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/sources.py +1 -0
  9. ingestr-0.13.0/ingestr/src/version.py +1 -0
  10. {ingestr-0.12.11 → ingestr-0.13.0}/package-lock.json +1015 -422
  11. {ingestr-0.12.11 → ingestr-0.13.0}/package.json +1 -1
  12. {ingestr-0.12.11 → ingestr-0.13.0}/pyproject.toml +2 -1
  13. {ingestr-0.12.11 → ingestr-0.13.0}/requirements.txt +3 -1
  14. ingestr-0.12.11/ingestr/src/version.py +0 -1
  15. {ingestr-0.12.11 → ingestr-0.13.0}/.dockerignore +0 -0
  16. {ingestr-0.12.11 → ingestr-0.13.0}/.githooks/pre-commit-hook.sh +0 -0
  17. {ingestr-0.12.11 → ingestr-0.13.0}/.github/workflows/deploy-docs.yml +0 -0
  18. {ingestr-0.12.11 → ingestr-0.13.0}/.github/workflows/secrets-scan.yml +0 -0
  19. {ingestr-0.12.11 → ingestr-0.13.0}/.github/workflows/tests.yml +0 -0
  20. {ingestr-0.12.11 → ingestr-0.13.0}/.gitignore +0 -0
  21. {ingestr-0.12.11 → ingestr-0.13.0}/.gitleaksignore +0 -0
  22. {ingestr-0.12.11 → ingestr-0.13.0}/.python-version +0 -0
  23. {ingestr-0.12.11 → ingestr-0.13.0}/.vale.ini +0 -0
  24. {ingestr-0.12.11 → ingestr-0.13.0}/Dockerfile +0 -0
  25. {ingestr-0.12.11 → ingestr-0.13.0}/LICENSE.md +0 -0
  26. {ingestr-0.12.11 → ingestr-0.13.0}/Makefile +0 -0
  27. {ingestr-0.12.11 → ingestr-0.13.0}/README.md +0 -0
  28. {ingestr-0.12.11 → ingestr-0.13.0}/docs/.vitepress/theme/custom.css +0 -0
  29. {ingestr-0.12.11 → ingestr-0.13.0}/docs/.vitepress/theme/index.js +0 -0
  30. {ingestr-0.12.11 → ingestr-0.13.0}/docs/commands/example-uris.md +0 -0
  31. {ingestr-0.12.11 → ingestr-0.13.0}/docs/commands/ingest.md +0 -0
  32. {ingestr-0.12.11 → ingestr-0.13.0}/docs/getting-started/core-concepts.md +0 -0
  33. {ingestr-0.12.11 → ingestr-0.13.0}/docs/getting-started/incremental-loading.md +0 -0
  34. {ingestr-0.12.11 → ingestr-0.13.0}/docs/getting-started/quickstart.md +0 -0
  35. {ingestr-0.12.11 → ingestr-0.13.0}/docs/getting-started/telemetry.md +0 -0
  36. {ingestr-0.12.11 → ingestr-0.13.0}/docs/index.md +0 -0
  37. {ingestr-0.12.11 → ingestr-0.13.0}/docs/media/athena.png +0 -0
  38. {ingestr-0.12.11 → ingestr-0.13.0}/docs/media/github.png +0 -0
  39. {ingestr-0.12.11 → ingestr-0.13.0}/docs/media/googleanalytics.png +0 -0
  40. {ingestr-0.12.11 → ingestr-0.13.0}/docs/media/linkedin_ads.png +0 -0
  41. {ingestr-0.12.11 → ingestr-0.13.0}/docs/media/tiktok.png +0 -0
  42. {ingestr-0.12.11 → ingestr-0.13.0}/docs/supported-sources/adjust.md +0 -0
  43. {ingestr-0.12.11 → ingestr-0.13.0}/docs/supported-sources/airtable.md +0 -0
  44. {ingestr-0.12.11 → ingestr-0.13.0}/docs/supported-sources/appsflyer.md +0 -0
  45. {ingestr-0.12.11 → ingestr-0.13.0}/docs/supported-sources/appstore.md +0 -0
  46. {ingestr-0.12.11 → ingestr-0.13.0}/docs/supported-sources/asana.md +0 -0
  47. {ingestr-0.12.11 → ingestr-0.13.0}/docs/supported-sources/athena.md +0 -0
  48. {ingestr-0.12.11 → ingestr-0.13.0}/docs/supported-sources/bigquery.md +0 -0
  49. {ingestr-0.12.11 → ingestr-0.13.0}/docs/supported-sources/chess.md +0 -0
  50. {ingestr-0.12.11 → ingestr-0.13.0}/docs/supported-sources/csv.md +0 -0
  51. {ingestr-0.12.11 → ingestr-0.13.0}/docs/supported-sources/custom_queries.md +0 -0
  52. {ingestr-0.12.11 → ingestr-0.13.0}/docs/supported-sources/databricks.md +0 -0
  53. {ingestr-0.12.11 → ingestr-0.13.0}/docs/supported-sources/duckdb.md +0 -0
  54. {ingestr-0.12.11 → ingestr-0.13.0}/docs/supported-sources/dynamodb.md +0 -0
  55. {ingestr-0.12.11 → ingestr-0.13.0}/docs/supported-sources/facebook-ads.md +0 -0
  56. {ingestr-0.12.11 → ingestr-0.13.0}/docs/supported-sources/gcs.md +0 -0
  57. {ingestr-0.12.11 → ingestr-0.13.0}/docs/supported-sources/github.md +0 -0
  58. {ingestr-0.12.11 → ingestr-0.13.0}/docs/supported-sources/google-ads.md +0 -0
  59. {ingestr-0.12.11 → ingestr-0.13.0}/docs/supported-sources/google_analytics.md +0 -0
  60. {ingestr-0.12.11 → ingestr-0.13.0}/docs/supported-sources/gorgias.md +0 -0
  61. {ingestr-0.12.11 → ingestr-0.13.0}/docs/supported-sources/gsheets.md +0 -0
  62. {ingestr-0.12.11 → ingestr-0.13.0}/docs/supported-sources/hubspot.md +0 -0
  63. {ingestr-0.12.11 → ingestr-0.13.0}/docs/supported-sources/kafka.md +0 -0
  64. {ingestr-0.12.11 → ingestr-0.13.0}/docs/supported-sources/klaviyo.md +0 -0
  65. {ingestr-0.12.11 → ingestr-0.13.0}/docs/supported-sources/linkedin_ads.md +0 -0
  66. {ingestr-0.12.11 → ingestr-0.13.0}/docs/supported-sources/mongodb.md +0 -0
  67. {ingestr-0.12.11 → ingestr-0.13.0}/docs/supported-sources/mssql.md +0 -0
  68. {ingestr-0.12.11 → ingestr-0.13.0}/docs/supported-sources/mysql.md +0 -0
  69. {ingestr-0.12.11 → ingestr-0.13.0}/docs/supported-sources/notion.md +0 -0
  70. {ingestr-0.12.11 → ingestr-0.13.0}/docs/supported-sources/oracle.md +0 -0
  71. {ingestr-0.12.11 → ingestr-0.13.0}/docs/supported-sources/postgres.md +0 -0
  72. {ingestr-0.12.11 → ingestr-0.13.0}/docs/supported-sources/redshift.md +0 -0
  73. {ingestr-0.12.11 → ingestr-0.13.0}/docs/supported-sources/s3.md +0 -0
  74. {ingestr-0.12.11 → ingestr-0.13.0}/docs/supported-sources/sap-hana.md +0 -0
  75. {ingestr-0.12.11 → ingestr-0.13.0}/docs/supported-sources/shopify.md +0 -0
  76. {ingestr-0.12.11 → ingestr-0.13.0}/docs/supported-sources/slack.md +0 -0
  77. {ingestr-0.12.11 → ingestr-0.13.0}/docs/supported-sources/snowflake.md +0 -0
  78. {ingestr-0.12.11 → ingestr-0.13.0}/docs/supported-sources/sqlite.md +0 -0
  79. {ingestr-0.12.11 → ingestr-0.13.0}/docs/supported-sources/stripe.md +0 -0
  80. {ingestr-0.12.11 → ingestr-0.13.0}/docs/supported-sources/tiktok-ads.md +0 -0
  81. {ingestr-0.12.11 → ingestr-0.13.0}/docs/supported-sources/zendesk.md +0 -0
  82. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/.gitignore +0 -0
  83. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/adjust/__init__.py +0 -0
  84. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/adjust/adjust_helpers.py +0 -0
  85. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/airtable/__init__.py +0 -0
  86. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/appsflyer/_init_.py +0 -0
  87. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/appsflyer/client.py +0 -0
  88. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/appstore/__init__.py +0 -0
  89. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/appstore/client.py +0 -0
  90. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/appstore/errors.py +0 -0
  91. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/appstore/models.py +0 -0
  92. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/appstore/resources.py +0 -0
  93. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/arrow/__init__.py +0 -0
  94. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/asana_source/__init__.py +0 -0
  95. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/asana_source/helpers.py +0 -0
  96. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/asana_source/settings.py +0 -0
  97. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/blob.py +0 -0
  98. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/chess/__init__.py +0 -0
  99. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/chess/helpers.py +0 -0
  100. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/chess/settings.py +0 -0
  101. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/dynamodb/__init__.py +0 -0
  102. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/errors.py +0 -0
  103. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/facebook_ads/__init__.py +0 -0
  104. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/facebook_ads/exceptions.py +0 -0
  105. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/facebook_ads/helpers.py +0 -0
  106. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/facebook_ads/settings.py +0 -0
  107. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/filesystem/__init__.py +0 -0
  108. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/filesystem/helpers.py +0 -0
  109. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/filesystem/readers.py +0 -0
  110. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/filters.py +0 -0
  111. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/github/__init__.py +0 -0
  112. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/github/helpers.py +0 -0
  113. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/github/queries.py +0 -0
  114. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/github/settings.py +0 -0
  115. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/google_ads/__init__.py +0 -0
  116. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/google_ads/field.py +0 -0
  117. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/google_ads/metrics.py +0 -0
  118. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/google_ads/predicates.py +0 -0
  119. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/google_ads/reports.py +0 -0
  120. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/google_analytics/__init__.py +0 -0
  121. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/google_analytics/helpers.py +0 -0
  122. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/google_sheets/README.md +0 -0
  123. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/google_sheets/__init__.py +0 -0
  124. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/google_sheets/helpers/__init__.py +0 -0
  125. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/google_sheets/helpers/api_calls.py +0 -0
  126. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/google_sheets/helpers/data_processing.py +0 -0
  127. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/gorgias/__init__.py +0 -0
  128. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/gorgias/helpers.py +0 -0
  129. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/hubspot/__init__.py +0 -0
  130. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/hubspot/helpers.py +0 -0
  131. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/hubspot/settings.py +0 -0
  132. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/kafka/__init__.py +0 -0
  133. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/kafka/helpers.py +0 -0
  134. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/klaviyo/_init_.py +0 -0
  135. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/klaviyo/client.py +0 -0
  136. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/klaviyo/helpers.py +0 -0
  137. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/linkedin_ads/__init__.py +0 -0
  138. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/linkedin_ads/dimension_time_enum.py +0 -0
  139. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/linkedin_ads/helpers.py +0 -0
  140. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/mongodb/__init__.py +0 -0
  141. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/mongodb/helpers.py +0 -0
  142. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/notion/__init__.py +0 -0
  143. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/notion/helpers/__init__.py +0 -0
  144. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/notion/helpers/client.py +0 -0
  145. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/notion/helpers/database.py +0 -0
  146. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/notion/settings.py +0 -0
  147. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/shopify/__init__.py +0 -0
  148. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/shopify/exceptions.py +0 -0
  149. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/shopify/helpers.py +0 -0
  150. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/shopify/settings.py +0 -0
  151. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/slack/__init__.py +0 -0
  152. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/slack/helpers.py +0 -0
  153. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/slack/settings.py +0 -0
  154. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/sql_database/__init__.py +0 -0
  155. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/sql_database/callbacks.py +0 -0
  156. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/stripe_analytics/__init__.py +0 -0
  157. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/stripe_analytics/helpers.py +0 -0
  158. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/stripe_analytics/settings.py +0 -0
  159. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/table_definition.py +0 -0
  160. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/telemetry/event.py +0 -0
  161. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/testdata/fakebqcredentials.json +0 -0
  162. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/tiktok_ads/__init__.py +0 -0
  163. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/tiktok_ads/tiktok_helpers.py +0 -0
  164. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/time.py +0 -0
  165. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/zendesk/__init__.py +0 -0
  166. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/zendesk/helpers/__init__.py +0 -0
  167. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/zendesk/helpers/api_helpers.py +0 -0
  168. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/zendesk/helpers/credentials.py +0 -0
  169. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/zendesk/helpers/talk_api.py +0 -0
  170. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/src/zendesk/settings.py +0 -0
  171. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/testdata/.gitignore +0 -0
  172. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/testdata/create_replace.csv +0 -0
  173. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/testdata/delete_insert_expected.csv +0 -0
  174. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/testdata/delete_insert_part1.csv +0 -0
  175. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/testdata/delete_insert_part2.csv +0 -0
  176. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/testdata/merge_expected.csv +0 -0
  177. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/testdata/merge_part1.csv +0 -0
  178. {ingestr-0.12.11 → ingestr-0.13.0}/ingestr/testdata/merge_part2.csv +0 -0
  179. {ingestr-0.12.11 → ingestr-0.13.0}/requirements-dev.txt +0 -0
  180. {ingestr-0.12.11 → ingestr-0.13.0}/resources/demo.gif +0 -0
  181. {ingestr-0.12.11 → ingestr-0.13.0}/resources/demo.tape +0 -0
  182. {ingestr-0.12.11 → ingestr-0.13.0}/resources/ingestr.svg +0 -0
  183. {ingestr-0.12.11 → ingestr-0.13.0}/styles/Google/AMPM.yml +0 -0
  184. {ingestr-0.12.11 → ingestr-0.13.0}/styles/Google/Acronyms.yml +0 -0
  185. {ingestr-0.12.11 → ingestr-0.13.0}/styles/Google/Colons.yml +0 -0
  186. {ingestr-0.12.11 → ingestr-0.13.0}/styles/Google/Contractions.yml +0 -0
  187. {ingestr-0.12.11 → ingestr-0.13.0}/styles/Google/DateFormat.yml +0 -0
  188. {ingestr-0.12.11 → ingestr-0.13.0}/styles/Google/Ellipses.yml +0 -0
  189. {ingestr-0.12.11 → ingestr-0.13.0}/styles/Google/EmDash.yml +0 -0
  190. {ingestr-0.12.11 → ingestr-0.13.0}/styles/Google/Exclamation.yml +0 -0
  191. {ingestr-0.12.11 → ingestr-0.13.0}/styles/Google/FirstPerson.yml +0 -0
  192. {ingestr-0.12.11 → ingestr-0.13.0}/styles/Google/Gender.yml +0 -0
  193. {ingestr-0.12.11 → ingestr-0.13.0}/styles/Google/GenderBias.yml +0 -0
  194. {ingestr-0.12.11 → ingestr-0.13.0}/styles/Google/HeadingPunctuation.yml +0 -0
  195. {ingestr-0.12.11 → ingestr-0.13.0}/styles/Google/Headings.yml +0 -0
  196. {ingestr-0.12.11 → ingestr-0.13.0}/styles/Google/Latin.yml +0 -0
  197. {ingestr-0.12.11 → ingestr-0.13.0}/styles/Google/LyHyphens.yml +0 -0
  198. {ingestr-0.12.11 → ingestr-0.13.0}/styles/Google/OptionalPlurals.yml +0 -0
  199. {ingestr-0.12.11 → ingestr-0.13.0}/styles/Google/Ordinal.yml +0 -0
  200. {ingestr-0.12.11 → ingestr-0.13.0}/styles/Google/OxfordComma.yml +0 -0
  201. {ingestr-0.12.11 → ingestr-0.13.0}/styles/Google/Parens.yml +0 -0
  202. {ingestr-0.12.11 → ingestr-0.13.0}/styles/Google/Passive.yml +0 -0
  203. {ingestr-0.12.11 → ingestr-0.13.0}/styles/Google/Periods.yml +0 -0
  204. {ingestr-0.12.11 → ingestr-0.13.0}/styles/Google/Quotes.yml +0 -0
  205. {ingestr-0.12.11 → ingestr-0.13.0}/styles/Google/Ranges.yml +0 -0
  206. {ingestr-0.12.11 → ingestr-0.13.0}/styles/Google/Semicolons.yml +0 -0
  207. {ingestr-0.12.11 → ingestr-0.13.0}/styles/Google/Slang.yml +0 -0
  208. {ingestr-0.12.11 → ingestr-0.13.0}/styles/Google/Spacing.yml +0 -0
  209. {ingestr-0.12.11 → ingestr-0.13.0}/styles/Google/Spelling.yml +0 -0
  210. {ingestr-0.12.11 → ingestr-0.13.0}/styles/Google/Units.yml +0 -0
  211. {ingestr-0.12.11 → ingestr-0.13.0}/styles/Google/We.yml +0 -0
  212. {ingestr-0.12.11 → ingestr-0.13.0}/styles/Google/Will.yml +0 -0
  213. {ingestr-0.12.11 → ingestr-0.13.0}/styles/Google/WordList.yml +0 -0
  214. {ingestr-0.12.11 → ingestr-0.13.0}/styles/Google/meta.json +0 -0
  215. {ingestr-0.12.11 → ingestr-0.13.0}/styles/Google/vocab.txt +0 -0
  216. {ingestr-0.12.11 → ingestr-0.13.0}/styles/bruin/Ingestr.yml +0 -0
  217. {ingestr-0.12.11 → ingestr-0.13.0}/styles/config/vocabularies/bruin/accept.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ingestr
3
- Version: 0.12.11
3
+ Version: 0.13.0
4
4
  Summary: ingestr is a command-line application that ingests data from various sources and stores them in any database.
5
5
  Project-URL: Homepage, https://github.com/bruin-data/ingestr
6
6
  Project-URL: Issues, https://github.com/bruin-data/ingestr/issues
@@ -15,6 +15,9 @@ Classifier: Programming Language :: Python :: 3
15
15
  Classifier: Topic :: Database
16
16
  Requires-Python: >=3.9
17
17
  Requires-Dist: asana==3.2.3
18
+ Requires-Dist: clickhouse-connect==0.8.14
19
+ Requires-Dist: clickhouse-driver==0.2.9
20
+ Requires-Dist: clickhouse-sqlalchemy==0.2.7
18
21
  Requires-Dist: confluent-kafka>=2.6.1
19
22
  Requires-Dist: databricks-sql-connector==2.9.3
20
23
  Requires-Dist: dataclasses-json==0.6.7
@@ -59,6 +59,7 @@ export default defineConfig({
59
59
  items: [
60
60
  { text: "AWS Athena", link: "/supported-sources/athena.md" },
61
61
  { text: "AWS Redshift", link: "/supported-sources/redshift.md" },
62
+ { text: "ClickHouse", link: "/supported-sources/clickhouse.md" },
62
63
  { text: "Databricks", link: "/supported-sources/databricks.md" },
63
64
  { text: "DuckDB", link: "/supported-sources/duckdb.md" },
64
65
  {
@@ -0,0 +1,31 @@
1
+ # ClickHouse
2
+ ClickHouse is a fast, open-source, column-oriented database management system that allows for high performance data ingestion and querying.
3
+
4
+ Ingestr supports ClickHouse as a destination.
5
+
6
+ ## URI format
7
+ The URI format for ClickHouse as a destination is as follows:
8
+
9
+ ```plaintext
10
+ clickhouse://<username>:<password>@<host>:<port>?http_port=<http_port>
11
+ ```
12
+ ## URI parameters:
13
+ - `username` (required): The username is required to authenticate with the ClickHouse server.
14
+ - `password` (required): The password is required to authenticate the provided username.
15
+ - `host` (required): The hostname or IP address of the ClickHouse server where the database is hosted.
16
+ - `port` (required): The TCP port number used by the ClickHouse server.
17
+ - `http_port` (optional): The port number to use when connecting to the ClickHouse server's HTTP interface. Make sure your ClickHouse server is configured to accept HTTP connections on the port specified by http_port. By default, ClickHouse uses port 8123.
18
+
19
+ ClickHouse requires a `username`, `password`, `host` and `port` to connect to the ClickHouse server. For more information, read [here](https://dlthub.com/docs/dlt-ecosystem/destinations/clickhouse#2-setup-clickhouse-database). Once you've completed the guide, you should have all the above-mentioned credentials.
20
+
21
+ ```
22
+ ingestr ingest \
23
+ --source-uri "stripe://?api_key=key123" \
24
+ --source-table 'event' \
25
+ --dest-uri "clickhouse://user_123:pass123@localhost:9000" \
26
+ --dest-table 'stripe.event'
27
+ ```
28
+
29
+ This is a sample command that will copy the data from the Stripe source into Athena.
30
+
31
+ <img alt="clickhouse_img" src="../media/clickhouse_img.png" />
@@ -451,7 +451,7 @@ def ingest(
451
451
  pipelines_dir = tempfile.mkdtemp()
452
452
  is_pipelines_dir_temp = True
453
453
 
454
- dlt_dest = destination.dlt_dest(uri=dest_uri)
454
+ dlt_dest = destination.dlt_dest(uri=dest_uri, dest_table=dest_table)
455
455
  validate_loader_file_format(dlt_dest, loader_file_format)
456
456
 
457
457
  if partition_by:
@@ -9,6 +9,9 @@ from urllib.parse import parse_qs, quote, urlparse
9
9
 
10
10
  import dlt
11
11
  from dlt.common.configuration.specs import AwsCredentials
12
+ from dlt.destinations.impl.clickhouse.configuration import (
13
+ ClickHouseCredentials,
14
+ )
12
15
 
13
16
 
14
17
  class GenericSqlDestination:
@@ -261,3 +264,68 @@ class AthenaDestination:
261
264
 
262
265
  def post_load(self):
263
266
  pass
267
+
268
+
269
+ class ClickhouseDestination:
270
+ def dlt_dest(self, uri: str, **kwargs):
271
+ parsed_uri = urlparse(uri)
272
+
273
+ if "dest_table" in kwargs:
274
+ table = kwargs["dest_table"]
275
+ database = table.split(".")[0]
276
+ else:
277
+ database = parsed_uri.path.lstrip("/")
278
+
279
+ username = parsed_uri.username
280
+ if not username:
281
+ raise ValueError(
282
+ "A username is required to connect to the ClickHouse database."
283
+ )
284
+
285
+ password = parsed_uri.password
286
+ if not password:
287
+ raise ValueError(
288
+ "A password is required to authenticate with the ClickHouse database."
289
+ )
290
+
291
+ host = parsed_uri.hostname
292
+ if not host:
293
+ raise ValueError(
294
+ "The hostname or IP address of the ClickHouse server is required to establish a connection."
295
+ )
296
+
297
+ port = parsed_uri.port
298
+ if not port:
299
+ raise ValueError(
300
+ "The TCP port of the ClickHouse server is required to establish a connection."
301
+ )
302
+
303
+ query_params = parse_qs(parsed_uri.query)
304
+ http_port = (
305
+ int(query_params["http_port"][0]) if "http_port" in query_params else 8123
306
+ )
307
+
308
+ credentials = ClickHouseCredentials(
309
+ {
310
+ "host": host,
311
+ "port": port,
312
+ "username": username,
313
+ "password": password,
314
+ "database": database,
315
+ "http_port": http_port,
316
+ "secure": 0,
317
+ }
318
+ )
319
+
320
+ return dlt.destinations.clickhouse(credentials=credentials)
321
+
322
+ def dlt_run_params(self, uri: str, table: str, **kwargs) -> dict:
323
+ table_fields = table.split(".")
324
+ if len(table_fields) != 2:
325
+ raise ValueError("Table name must be in the format <schema>.<table>")
326
+ return {
327
+ "table_name": table_fields[-1],
328
+ }
329
+
330
+ def post_load(self):
331
+ pass
@@ -6,6 +6,7 @@ from dlt.common.destination import Destination
6
6
  from ingestr.src.destinations import (
7
7
  AthenaDestination,
8
8
  BigQueryDestination,
9
+ ClickhouseDestination,
9
10
  CsvDestination,
10
11
  DatabricksDestination,
11
12
  DuckDBDestination,
@@ -146,6 +147,8 @@ class SourceDestinationFactory:
146
147
  "synapse": SynapseDestination,
147
148
  "csv": CsvDestination,
148
149
  "athena": AthenaDestination,
150
+ "clickhouse+native": ClickhouseDestination,
151
+ "clickhouse": ClickhouseDestination,
149
152
  }
150
153
 
151
154
  def __init__(self, source_uri: str, destination_uri: str):
@@ -1568,6 +1568,7 @@ class GCSSource:
1568
1568
 
1569
1569
  return readers(bucket_url, fs, path_to_file).with_resources(endpoint)
1570
1570
 
1571
+
1571
1572
  class GoogleAdsSource:
1572
1573
  def handles_incrementality(self) -> bool:
1573
1574
  return True
@@ -0,0 +1 @@
1
+ __version__ = "0.13.0"