ingestr 0.13.19__tar.gz → 0.13.21__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 (245) hide show
  1. {ingestr-0.13.19 → ingestr-0.13.21}/PKG-INFO +3 -1
  2. {ingestr-0.13.19 → ingestr-0.13.21}/docs/.vitepress/config.mjs +9 -1
  3. ingestr-0.13.21/docs/media/personio_duckdb.png +0 -0
  4. ingestr-0.13.21/docs/media/stripe_postgres.png +0 -0
  5. ingestr-0.13.21/docs/supported-sources/db2.md +20 -0
  6. ingestr-0.13.21/docs/tutorials/load-personio-duckdb.md +95 -0
  7. ingestr-0.13.21/docs/tutorials/load-stripe-postgres.md +101 -0
  8. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/main.py +29 -25
  9. ingestr-0.13.21/ingestr/src/buildinfo.py +1 -0
  10. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/factory.py +1 -0
  11. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/sources.py +3 -0
  12. {ingestr-0.13.19 → ingestr-0.13.21}/requirements.in +2 -0
  13. {ingestr-0.13.19 → ingestr-0.13.21}/requirements.txt +7 -0
  14. ingestr-0.13.19/ingestr/src/buildinfo.py +0 -1
  15. {ingestr-0.13.19 → ingestr-0.13.21}/.dockerignore +0 -0
  16. {ingestr-0.13.19 → ingestr-0.13.21}/.githooks/pre-commit-hook.sh +0 -0
  17. {ingestr-0.13.19 → ingestr-0.13.21}/.github/workflows/deploy-docs.yml +0 -0
  18. {ingestr-0.13.19 → ingestr-0.13.21}/.github/workflows/release.yml +0 -0
  19. {ingestr-0.13.19 → ingestr-0.13.21}/.github/workflows/secrets-scan.yml +0 -0
  20. {ingestr-0.13.19 → ingestr-0.13.21}/.github/workflows/tests.yml +0 -0
  21. {ingestr-0.13.19 → ingestr-0.13.21}/.gitignore +0 -0
  22. {ingestr-0.13.19 → ingestr-0.13.21}/.gitleaksignore +0 -0
  23. {ingestr-0.13.19 → ingestr-0.13.21}/.python-version +0 -0
  24. {ingestr-0.13.19 → ingestr-0.13.21}/.vale.ini +0 -0
  25. {ingestr-0.13.19 → ingestr-0.13.21}/Dockerfile +0 -0
  26. {ingestr-0.13.19 → ingestr-0.13.21}/LICENSE.md +0 -0
  27. {ingestr-0.13.19 → ingestr-0.13.21}/Makefile +0 -0
  28. {ingestr-0.13.19 → ingestr-0.13.21}/README.md +0 -0
  29. {ingestr-0.13.19 → ingestr-0.13.21}/docs/.vitepress/theme/custom.css +0 -0
  30. {ingestr-0.13.19 → ingestr-0.13.21}/docs/.vitepress/theme/index.js +0 -0
  31. {ingestr-0.13.19 → ingestr-0.13.21}/docs/commands/example-uris.md +0 -0
  32. {ingestr-0.13.19 → ingestr-0.13.21}/docs/commands/ingest.md +0 -0
  33. {ingestr-0.13.19 → ingestr-0.13.21}/docs/getting-started/core-concepts.md +0 -0
  34. {ingestr-0.13.19 → ingestr-0.13.21}/docs/getting-started/incremental-loading.md +0 -0
  35. {ingestr-0.13.19 → ingestr-0.13.21}/docs/getting-started/quickstart.md +0 -0
  36. {ingestr-0.13.19 → ingestr-0.13.21}/docs/getting-started/telemetry.md +0 -0
  37. {ingestr-0.13.19 → ingestr-0.13.21}/docs/index.md +0 -0
  38. {ingestr-0.13.19 → ingestr-0.13.21}/docs/media/applovin_max.png +0 -0
  39. {ingestr-0.13.19 → ingestr-0.13.21}/docs/media/athena.png +0 -0
  40. {ingestr-0.13.19 → ingestr-0.13.21}/docs/media/clickhouse_img.png +0 -0
  41. {ingestr-0.13.19 → ingestr-0.13.21}/docs/media/github.png +0 -0
  42. {ingestr-0.13.19 → ingestr-0.13.21}/docs/media/googleanalytics.png +0 -0
  43. {ingestr-0.13.19 → ingestr-0.13.21}/docs/media/kinesis.bigquery.png +0 -0
  44. {ingestr-0.13.19 → ingestr-0.13.21}/docs/media/linkedin_ads.png +0 -0
  45. {ingestr-0.13.19 → ingestr-0.13.21}/docs/media/personio.png +0 -0
  46. {ingestr-0.13.19 → ingestr-0.13.21}/docs/media/tiktok.png +0 -0
  47. {ingestr-0.13.19 → ingestr-0.13.21}/docs/supported-sources/adjust.md +0 -0
  48. {ingestr-0.13.19 → ingestr-0.13.21}/docs/supported-sources/airtable.md +0 -0
  49. {ingestr-0.13.19 → ingestr-0.13.21}/docs/supported-sources/applovin.md +0 -0
  50. {ingestr-0.13.19 → ingestr-0.13.21}/docs/supported-sources/applovin_max.md +0 -0
  51. {ingestr-0.13.19 → ingestr-0.13.21}/docs/supported-sources/appsflyer.md +0 -0
  52. {ingestr-0.13.19 → ingestr-0.13.21}/docs/supported-sources/appstore.md +0 -0
  53. {ingestr-0.13.19 → ingestr-0.13.21}/docs/supported-sources/asana.md +0 -0
  54. {ingestr-0.13.19 → ingestr-0.13.21}/docs/supported-sources/athena.md +0 -0
  55. {ingestr-0.13.19 → ingestr-0.13.21}/docs/supported-sources/bigquery.md +0 -0
  56. {ingestr-0.13.19 → ingestr-0.13.21}/docs/supported-sources/chess.md +0 -0
  57. {ingestr-0.13.19 → ingestr-0.13.21}/docs/supported-sources/clickhouse.md +0 -0
  58. {ingestr-0.13.19 → ingestr-0.13.21}/docs/supported-sources/csv.md +0 -0
  59. {ingestr-0.13.19 → ingestr-0.13.21}/docs/supported-sources/custom_queries.md +0 -0
  60. {ingestr-0.13.19 → ingestr-0.13.21}/docs/supported-sources/databricks.md +0 -0
  61. {ingestr-0.13.19 → ingestr-0.13.21}/docs/supported-sources/duckdb.md +0 -0
  62. {ingestr-0.13.19 → ingestr-0.13.21}/docs/supported-sources/dynamodb.md +0 -0
  63. {ingestr-0.13.19 → ingestr-0.13.21}/docs/supported-sources/facebook-ads.md +0 -0
  64. {ingestr-0.13.19 → ingestr-0.13.21}/docs/supported-sources/gcs.md +0 -0
  65. {ingestr-0.13.19 → ingestr-0.13.21}/docs/supported-sources/github.md +0 -0
  66. {ingestr-0.13.19 → ingestr-0.13.21}/docs/supported-sources/google-ads.md +0 -0
  67. {ingestr-0.13.19 → ingestr-0.13.21}/docs/supported-sources/google_analytics.md +0 -0
  68. {ingestr-0.13.19 → ingestr-0.13.21}/docs/supported-sources/gorgias.md +0 -0
  69. {ingestr-0.13.19 → ingestr-0.13.21}/docs/supported-sources/gsheets.md +0 -0
  70. {ingestr-0.13.19 → ingestr-0.13.21}/docs/supported-sources/hubspot.md +0 -0
  71. {ingestr-0.13.19 → ingestr-0.13.21}/docs/supported-sources/kafka.md +0 -0
  72. {ingestr-0.13.19 → ingestr-0.13.21}/docs/supported-sources/kinesis.md +0 -0
  73. {ingestr-0.13.19 → ingestr-0.13.21}/docs/supported-sources/klaviyo.md +0 -0
  74. {ingestr-0.13.19 → ingestr-0.13.21}/docs/supported-sources/linkedin_ads.md +0 -0
  75. {ingestr-0.13.19 → ingestr-0.13.21}/docs/supported-sources/mongodb.md +0 -0
  76. {ingestr-0.13.19 → ingestr-0.13.21}/docs/supported-sources/mssql.md +0 -0
  77. {ingestr-0.13.19 → ingestr-0.13.21}/docs/supported-sources/mysql.md +0 -0
  78. {ingestr-0.13.19 → ingestr-0.13.21}/docs/supported-sources/notion.md +0 -0
  79. {ingestr-0.13.19 → ingestr-0.13.21}/docs/supported-sources/oracle.md +0 -0
  80. {ingestr-0.13.19 → ingestr-0.13.21}/docs/supported-sources/personio.md +0 -0
  81. {ingestr-0.13.19 → ingestr-0.13.21}/docs/supported-sources/postgres.md +0 -0
  82. {ingestr-0.13.19 → ingestr-0.13.21}/docs/supported-sources/redshift.md +0 -0
  83. {ingestr-0.13.19 → ingestr-0.13.21}/docs/supported-sources/s3.md +0 -0
  84. {ingestr-0.13.19 → ingestr-0.13.21}/docs/supported-sources/salesforce.md +0 -0
  85. {ingestr-0.13.19 → ingestr-0.13.21}/docs/supported-sources/sap-hana.md +0 -0
  86. {ingestr-0.13.19 → ingestr-0.13.21}/docs/supported-sources/shopify.md +0 -0
  87. {ingestr-0.13.19 → ingestr-0.13.21}/docs/supported-sources/slack.md +0 -0
  88. {ingestr-0.13.19 → ingestr-0.13.21}/docs/supported-sources/snowflake.md +0 -0
  89. {ingestr-0.13.19 → ingestr-0.13.21}/docs/supported-sources/sqlite.md +0 -0
  90. {ingestr-0.13.19 → ingestr-0.13.21}/docs/supported-sources/stripe.md +0 -0
  91. {ingestr-0.13.19 → ingestr-0.13.21}/docs/supported-sources/tiktok-ads.md +0 -0
  92. {ingestr-0.13.19 → ingestr-0.13.21}/docs/supported-sources/zendesk.md +0 -0
  93. {ingestr-0.13.19 → ingestr-0.13.21}/docs/tutorials/load-kinesis-bigquery.md +0 -0
  94. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/.gitignore +0 -0
  95. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/adjust/__init__.py +0 -0
  96. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/adjust/adjust_helpers.py +0 -0
  97. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/airtable/__init__.py +0 -0
  98. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/applovin/__init__.py +0 -0
  99. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/applovin_max/__init__.py +0 -0
  100. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/appsflyer/_init_.py +0 -0
  101. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/appsflyer/client.py +0 -0
  102. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/appstore/__init__.py +0 -0
  103. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/appstore/client.py +0 -0
  104. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/appstore/errors.py +0 -0
  105. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/appstore/models.py +0 -0
  106. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/appstore/resources.py +0 -0
  107. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/arrow/__init__.py +0 -0
  108. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/asana_source/__init__.py +0 -0
  109. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/asana_source/helpers.py +0 -0
  110. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/asana_source/settings.py +0 -0
  111. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/blob.py +0 -0
  112. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/chess/__init__.py +0 -0
  113. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/chess/helpers.py +0 -0
  114. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/chess/settings.py +0 -0
  115. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/destinations.py +0 -0
  116. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/dynamodb/__init__.py +0 -0
  117. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/errors.py +0 -0
  118. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/facebook_ads/__init__.py +0 -0
  119. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/facebook_ads/exceptions.py +0 -0
  120. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/facebook_ads/helpers.py +0 -0
  121. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/facebook_ads/settings.py +0 -0
  122. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/filesystem/__init__.py +0 -0
  123. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/filesystem/helpers.py +0 -0
  124. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/filesystem/readers.py +0 -0
  125. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/filters.py +0 -0
  126. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/github/__init__.py +0 -0
  127. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/github/helpers.py +0 -0
  128. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/github/queries.py +0 -0
  129. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/github/settings.py +0 -0
  130. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/google_ads/__init__.py +0 -0
  131. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/google_ads/field.py +0 -0
  132. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/google_ads/metrics.py +0 -0
  133. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/google_ads/predicates.py +0 -0
  134. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/google_ads/reports.py +0 -0
  135. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/google_analytics/__init__.py +0 -0
  136. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/google_analytics/helpers.py +0 -0
  137. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/google_sheets/README.md +0 -0
  138. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/google_sheets/__init__.py +0 -0
  139. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/google_sheets/helpers/__init__.py +0 -0
  140. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/google_sheets/helpers/api_calls.py +0 -0
  141. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/google_sheets/helpers/data_processing.py +0 -0
  142. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/gorgias/__init__.py +0 -0
  143. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/gorgias/helpers.py +0 -0
  144. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/hubspot/__init__.py +0 -0
  145. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/hubspot/helpers.py +0 -0
  146. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/hubspot/settings.py +0 -0
  147. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/kafka/__init__.py +0 -0
  148. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/kafka/helpers.py +0 -0
  149. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/kinesis/__init__.py +0 -0
  150. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/kinesis/helpers.py +0 -0
  151. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/klaviyo/_init_.py +0 -0
  152. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/klaviyo/client.py +0 -0
  153. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/klaviyo/helpers.py +0 -0
  154. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/linkedin_ads/__init__.py +0 -0
  155. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/linkedin_ads/dimension_time_enum.py +0 -0
  156. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/linkedin_ads/helpers.py +0 -0
  157. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/loader.py +0 -0
  158. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/mongodb/__init__.py +0 -0
  159. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/mongodb/helpers.py +0 -0
  160. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/notion/__init__.py +0 -0
  161. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/notion/helpers/__init__.py +0 -0
  162. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/notion/helpers/client.py +0 -0
  163. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/notion/helpers/database.py +0 -0
  164. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/notion/settings.py +0 -0
  165. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/partition.py +0 -0
  166. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/personio/__init__.py +0 -0
  167. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/personio/helpers.py +0 -0
  168. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/resource.py +0 -0
  169. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/salesforce/__init__.py +0 -0
  170. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/salesforce/helpers.py +0 -0
  171. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/shopify/__init__.py +0 -0
  172. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/shopify/exceptions.py +0 -0
  173. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/shopify/helpers.py +0 -0
  174. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/shopify/settings.py +0 -0
  175. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/slack/__init__.py +0 -0
  176. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/slack/helpers.py +0 -0
  177. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/slack/settings.py +0 -0
  178. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/sql_database/__init__.py +0 -0
  179. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/sql_database/callbacks.py +0 -0
  180. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/stripe_analytics/__init__.py +0 -0
  181. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/stripe_analytics/helpers.py +0 -0
  182. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/stripe_analytics/settings.py +0 -0
  183. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/table_definition.py +0 -0
  184. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/telemetry/event.py +0 -0
  185. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/testdata/fakebqcredentials.json +0 -0
  186. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/tiktok_ads/__init__.py +0 -0
  187. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/tiktok_ads/tiktok_helpers.py +0 -0
  188. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/time.py +0 -0
  189. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/version.py +0 -0
  190. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/zendesk/__init__.py +0 -0
  191. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/zendesk/helpers/__init__.py +0 -0
  192. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/zendesk/helpers/api_helpers.py +0 -0
  193. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/zendesk/helpers/credentials.py +0 -0
  194. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/zendesk/helpers/talk_api.py +0 -0
  195. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/src/zendesk/settings.py +0 -0
  196. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/testdata/.gitignore +0 -0
  197. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/testdata/create_replace.csv +0 -0
  198. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/testdata/delete_insert_expected.csv +0 -0
  199. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/testdata/delete_insert_part1.csv +0 -0
  200. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/testdata/delete_insert_part2.csv +0 -0
  201. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/testdata/merge_expected.csv +0 -0
  202. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/testdata/merge_part1.csv +0 -0
  203. {ingestr-0.13.19 → ingestr-0.13.21}/ingestr/testdata/merge_part2.csv +0 -0
  204. {ingestr-0.13.19 → ingestr-0.13.21}/package-lock.json +0 -0
  205. {ingestr-0.13.19 → ingestr-0.13.21}/package.json +0 -0
  206. {ingestr-0.13.19 → ingestr-0.13.21}/pyproject.toml +0 -0
  207. {ingestr-0.13.19 → ingestr-0.13.21}/requirements-dev.txt +0 -0
  208. {ingestr-0.13.19 → ingestr-0.13.21}/resources/demo.gif +0 -0
  209. {ingestr-0.13.19 → ingestr-0.13.21}/resources/demo.tape +0 -0
  210. {ingestr-0.13.19 → ingestr-0.13.21}/resources/ingestr.svg +0 -0
  211. {ingestr-0.13.19 → ingestr-0.13.21}/styles/Google/AMPM.yml +0 -0
  212. {ingestr-0.13.19 → ingestr-0.13.21}/styles/Google/Acronyms.yml +0 -0
  213. {ingestr-0.13.19 → ingestr-0.13.21}/styles/Google/Colons.yml +0 -0
  214. {ingestr-0.13.19 → ingestr-0.13.21}/styles/Google/Contractions.yml +0 -0
  215. {ingestr-0.13.19 → ingestr-0.13.21}/styles/Google/DateFormat.yml +0 -0
  216. {ingestr-0.13.19 → ingestr-0.13.21}/styles/Google/Ellipses.yml +0 -0
  217. {ingestr-0.13.19 → ingestr-0.13.21}/styles/Google/EmDash.yml +0 -0
  218. {ingestr-0.13.19 → ingestr-0.13.21}/styles/Google/Exclamation.yml +0 -0
  219. {ingestr-0.13.19 → ingestr-0.13.21}/styles/Google/FirstPerson.yml +0 -0
  220. {ingestr-0.13.19 → ingestr-0.13.21}/styles/Google/Gender.yml +0 -0
  221. {ingestr-0.13.19 → ingestr-0.13.21}/styles/Google/GenderBias.yml +0 -0
  222. {ingestr-0.13.19 → ingestr-0.13.21}/styles/Google/HeadingPunctuation.yml +0 -0
  223. {ingestr-0.13.19 → ingestr-0.13.21}/styles/Google/Headings.yml +0 -0
  224. {ingestr-0.13.19 → ingestr-0.13.21}/styles/Google/Latin.yml +0 -0
  225. {ingestr-0.13.19 → ingestr-0.13.21}/styles/Google/LyHyphens.yml +0 -0
  226. {ingestr-0.13.19 → ingestr-0.13.21}/styles/Google/OptionalPlurals.yml +0 -0
  227. {ingestr-0.13.19 → ingestr-0.13.21}/styles/Google/Ordinal.yml +0 -0
  228. {ingestr-0.13.19 → ingestr-0.13.21}/styles/Google/OxfordComma.yml +0 -0
  229. {ingestr-0.13.19 → ingestr-0.13.21}/styles/Google/Parens.yml +0 -0
  230. {ingestr-0.13.19 → ingestr-0.13.21}/styles/Google/Passive.yml +0 -0
  231. {ingestr-0.13.19 → ingestr-0.13.21}/styles/Google/Periods.yml +0 -0
  232. {ingestr-0.13.19 → ingestr-0.13.21}/styles/Google/Quotes.yml +0 -0
  233. {ingestr-0.13.19 → ingestr-0.13.21}/styles/Google/Ranges.yml +0 -0
  234. {ingestr-0.13.19 → ingestr-0.13.21}/styles/Google/Semicolons.yml +0 -0
  235. {ingestr-0.13.19 → ingestr-0.13.21}/styles/Google/Slang.yml +0 -0
  236. {ingestr-0.13.19 → ingestr-0.13.21}/styles/Google/Spacing.yml +0 -0
  237. {ingestr-0.13.19 → ingestr-0.13.21}/styles/Google/Spelling.yml +0 -0
  238. {ingestr-0.13.19 → ingestr-0.13.21}/styles/Google/Units.yml +0 -0
  239. {ingestr-0.13.19 → ingestr-0.13.21}/styles/Google/We.yml +0 -0
  240. {ingestr-0.13.19 → ingestr-0.13.21}/styles/Google/Will.yml +0 -0
  241. {ingestr-0.13.19 → ingestr-0.13.21}/styles/Google/WordList.yml +0 -0
  242. {ingestr-0.13.19 → ingestr-0.13.21}/styles/Google/meta.json +0 -0
  243. {ingestr-0.13.19 → ingestr-0.13.21}/styles/Google/vocab.txt +0 -0
  244. {ingestr-0.13.19 → ingestr-0.13.21}/styles/bruin/Ingestr.yml +0 -0
  245. {ingestr-0.13.19 → ingestr-0.13.21}/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.13.19
3
+ Version: 0.13.21
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
@@ -81,6 +81,8 @@ Requires-Dist: hdbcli==2.23.27
81
81
  Requires-Dist: hexbytes==1.3.0
82
82
  Requires-Dist: httplib2==0.22.0
83
83
  Requires-Dist: humanize==4.12.1
84
+ Requires-Dist: ibm-db-sa==0.4.1
85
+ Requires-Dist: ibm-db==3.2.6
84
86
  Requires-Dist: idna==3.10
85
87
  Requires-Dist: inflection==0.5.1
86
88
  Requires-Dist: isodate==0.7.2
@@ -40,7 +40,6 @@ export default defineConfig({
40
40
  text: "Incremental Loading",
41
41
  link: "/getting-started/incremental-loading.md",
42
42
  },
43
- { text: "Load Kinesis Data to BigQuery", link: "/tutorials/load-kinesis-bigquery.md" },
44
43
  { text: "Telemetry", link: "/getting-started/telemetry.md" },
45
44
  ],
46
45
  },
@@ -51,6 +50,14 @@ export default defineConfig({
51
50
  { text: "example-uris", link: "/commands/example-uris.md" },
52
51
  ],
53
52
  },
53
+ {
54
+ text: "Tutorials",
55
+ items: [
56
+ { text: "Load Kinesis Data to BigQuery", link: "/tutorials/load-kinesis-bigquery.md" },
57
+ { text: "Load Personio Data to DuckDB", link: "/tutorials/load-personio-duckdb.md" },
58
+ { text: "Load Stripe Data to Postgres", link: "/tutorials/load-stripe-postgres.md" },
59
+ ],
60
+ },
54
61
  {
55
62
  text: "Sources & Destinations",
56
63
  items: [
@@ -68,6 +75,7 @@ export default defineConfig({
68
75
  text: "Google BigQuery",
69
76
  link: "/supported-sources/bigquery.md",
70
77
  },
78
+ { text: "IBM Db2", link: "/supported-sources/db2.md" },
71
79
  { text: "Kafka", link: "/supported-sources/kafka.md" },
72
80
  { text: "Local CSV Files", link: "/supported-sources/csv.md" },
73
81
  {
@@ -0,0 +1,20 @@
1
+ # IBM Db2
2
+ [IBM Db2](https://www.ibm.com/db2) is a high-performance, enterprise-grade relational database system designed for reliability, scalability, and transactional integrity.
3
+
4
+ ingestr supports IBM Db2 as a source.
5
+
6
+ ## URI format
7
+ The URI format for DB2 is as follows:
8
+
9
+ ```plaintext
10
+ db2://<username>:<password>@<host>:<port>/<database-name>
11
+ ```
12
+
13
+ URI parameters:
14
+ - `username`: The username to connect to the database
15
+ - `password`: The password for the user
16
+ - `host`: The host address of the database server
17
+ - `port`: The port number the database server is listening
18
+ - `database-name`: the name of the database to connect to
19
+
20
+ The same URI structure can be used both for sources and destinations. You can read more about SQLAlchemy's Db2 dialect [here](https://github.com/ibmdb/python-ibmdbsa?tab=readme-ov-file#connecting).
@@ -0,0 +1,95 @@
1
+ # Load Data from Personio to DuckDB
2
+
3
+ Welcome! 👋
4
+ This beginner-friendly guide will help you load data from `Personio` into `DuckDB` using ingestr — a simple yet powerful command-line tool. No prior experience is needed, and best of all, no coding required!
5
+
6
+ By the end of this guide, you'll have your Personio data securely stored in DuckDB. But before we dive in, let’s take a quick look at `ingestr`
7
+
8
+ ## Overview of ingestr
9
+ `ingestr` is a command-line tool that simplifies data ingestion by allowing users to load data from a source to a destination using simple command-line flags.
10
+
11
+ ### `ingestr` Command
12
+ ```bash
13
+ ingestr ingest \
14
+ --source-uri '<your-source-uri-here>' \
15
+ --source-table '<your-schema>.<your-table>' \
16
+ --dest-uri '<your-destination-uri-here>' \
17
+ --dest-table '<your-schema>.<your-table>'
18
+ ```
19
+ - `ingestr ingest`: Executes the data ingestion process.
20
+ - `--source-uri TEXT`: Specifies the URI of the data source.
21
+ - `--dest-uri TEXT`: Specifies the URI of the destination.
22
+ - `--source-table TEXT`: Defines the table to fetch data from.
23
+ - `--dest-table TEXT`: Specifies the destination table. If not provided, it defaults to `--source-table`.
24
+
25
+ With this command, we connect to the source, retrieve the specified data, and load it into the destination database.
26
+ ## Let's Load Data from Personio to DuckDB Together!
27
+
28
+ Personio is a human resources management platform that helps businesses handle recruitment and employee data. To analyze this data, you may need to load it into an analytics database like DuckDB. `ingestr` makes this process simple.
29
+
30
+ ### Step 1: Install `ingestr`
31
+ Ensure `ingestr` is installed. If not, follow the installation guide [here](../getting-started/quickstart.md#Installation).
32
+
33
+ ### Step 2: Get Personio Credentials
34
+ Personio will be our data source.
35
+ 1. Log in to your Personio account.
36
+ 2. Ensure your user has API access.
37
+ 3. Navigate to **Settings > Integrations > API Credentials**.
38
+ 4. Click **Generate new credentials**.
39
+ 5. Assign **read access** to required attributes (e.g., last name, last modified).
40
+ 6. Copy the generated `client ID` and `client secret`.
41
+
42
+ For more details, refer to [Personio API documentation](https://developer.personio.de/docs/getting-started-with-the-personio-api#21-employee-attendance-and-absence-endpoints).
43
+
44
+ ### Step 3: Install DuckDB
45
+ DuckDB will be our data destination. If it’s not already installed, you can install it using pip:
46
+ ```bash
47
+ pip install duckdb
48
+ ```
49
+ Alternatively, you can download the latest version from the [official DuckDB website](https://duckdb.org/docs/installation/?version=stable&environment=cli&platform=macos&download_method=direct).
50
+
51
+ ### Step 4: Run the `ingestr` Command
52
+ Execute the following command to load data from Personio to DuckDB:
53
+ ```bash
54
+ ingestr ingest \
55
+ --source-uri 'personio://?client_id=<YOUR_CLIENT_ID>&client_secret=<YOUR_CLIENT_SECRET>' \
56
+ --source-table 'employees' \
57
+ --dest-uri 'duckdb:///personio.duckdb' \
58
+ --dest-table 'dest.employees'
59
+ ```
60
+ - `--source-uri 'personio://?client_id=<ID>&client_secret=<SECRET>'`: Connects to Personio using API credentials.
61
+ - `--source-table 'employees'`: Specifies the table to fetch data from Personio.
62
+ - `--dest-uri 'duckdb:///personio.duckdb'`: Specifies DuckDB as the destination database.
63
+ - `--dest-table 'dest.employees'`: Defines where the data will be stored in DuckDB.
64
+
65
+
66
+ ## Verify Data in DuckDB
67
+ Once the command runs successfully, your Personio data will be available in DuckDB. Follow these steps to verify the data:
68
+
69
+ ### Step 1: Open DuckDB
70
+ If DuckDB is installed, you can open it using the following command:
71
+ ```bash
72
+ duckdb personio.duckdb
73
+ ```
74
+
75
+ ### Step 2: List Available Tables
76
+ To check if the `employees` table has been created, run:
77
+ ```sql
78
+ .tables;
79
+ ```
80
+
81
+ ### Step 3: View Data in the `employees` Table
82
+ To display all data from the `employees` table, run:
83
+ ```sql
84
+ SELECT * FROM dest.employees;
85
+ ```
86
+
87
+ ### Step 4: Validate Data
88
+ Ensure that the retrieved data matches what was expected from Personio.
89
+
90
+ Example output:
91
+
92
+ ![Personio to DuckDB](../media/personio_duckdb.png)
93
+
94
+ 🎉 **Congratulations!** You have successfully loaded data from Personio to DuckDB using `ingestr`.
95
+
@@ -0,0 +1,101 @@
1
+ # Load Data from Stripe to PostgreSQL
2
+
3
+ Welcome! 👋 This beginner-friendly guide will help you load data from `Stripe` into `PostgreSQL` using ingestr — a simple yet powerful command-line tool. No prior experience is needed, and best of all, no coding required! 🚀
4
+
5
+ By the end of this guide, you'll have your Stripe data securely stored in PostgreSQL. But before we dive in, let’s take a quick look at ingestr.
6
+
7
+ ## Overview of `ingestr`
8
+ `ingestr` is a command-line tool that simplifies data ingestion by allowing users to load data from a source to a destination.
9
+
10
+ ### `ingestr` Command
11
+ ```bash
12
+ ingestr ingest \
13
+ --source-uri '<your-source-uri-here>' \
14
+ --source-table '<your-schema>.<your-table>' \
15
+ --dest-uri '<your-destination-uri-here>' \
16
+ --dest-table '<your-schema>.<your-table>'
17
+ ```
18
+ - `ingestr ingest`: Executes the data ingestion process.
19
+ - `--source-uri TEXT`: Defines the source database URI.
20
+ - `--dest-uri TEXT`: Defines the destination database URI.
21
+ - `--source-table TEXT`: Specifies the table to fetch data from.
22
+ - `--dest-table TEXT`: Defines where the data should be stored (defaults to `--source-table` if not specified).
23
+
24
+ With this command, we connect to the source, retrieve the specified data, and load it into the destination database.
25
+
26
+ ## Let's Load Data from Stripe into PostgreSQL Together!
27
+
28
+ Stripe is a popular payment processing platform used by e-commerce and SaaS applications. If you need to analyze Stripe data, you can load it into PostgreSQL, a reliable and widely used relational database.
29
+
30
+ ## Step 1: Install `ingestr`
31
+ Ensure `ingestr` is installed on your system. If not, follow the installation guide [here](../getting-started/quickstart.md#Installation).
32
+
33
+ ```bash
34
+ pip install ingestr
35
+ ```
36
+
37
+ ## Step 2: Retrieve Stripe API Credentials
38
+ Stripe will be our **data source**. To retrieve your API credentials:
39
+
40
+ 1. Log in to your **Stripe Dashboard**: [dashboard.stripe.com](https://dashboard.stripe.com)
41
+ 2. Navigate to **Developers** → **API Keys**.
42
+ 3. Under **Standard Keys**, find:
43
+ - **Secret Key**: Required for server-to-server requests
44
+ 4. Click **Reveal Key** next to your **Secret Key** and copy it.
45
+
46
+ For detailed API documentation, visit the [Stripe API Docs](https://stripe.com/docs/api).
47
+
48
+ ## Step 3: Retrieve PostgreSQL Credentials
49
+ In this example, we are using a **cloud-hosted PostgreSQL instance**.
50
+ 1. Log in to your cloud provider (e.g., [Neon](https://neon.tech/)).
51
+ 2. Navigate to your **PostgreSQL instance** and retrieve:
52
+ - **Host**: Example - `your-db-instance.aws.com`
53
+ - **Port**: Default is `5432`
54
+ - **Database Name**: The database where Stripe data will be stored.
55
+ - **Username & Password**: Credentials used to connect to PostgreSQL.
56
+ - **sslmode**: Required depending on the security settings of your PostgreSQL instance
57
+
58
+ ## Step 4: Run the `ingestr` Command
59
+ Execute the following command to load data from **Stripe to PostgreSQL**:
60
+
61
+ ```bash
62
+ ingestr ingest \
63
+ --source-uri 'stripe://?api_key=<YOUR_STRIPE_SECRET_KEY>' \
64
+ --source-table 'event' \
65
+ --dest-uri 'postgresql://<username>:<password>@<host>:<port>/<database-name>?sslmode=<sslmode>' \
66
+ --dest-table 'dest.events'
67
+ ```
68
+ - `--source-uri 'stripe://?api_key=<YOUR_STRIPE_SECRET_KEY>'`: Connects to Stripe using secret key .
69
+ - `--source-table 'event'`: Specifies the data to fetch data from Stripe.
70
+ - `--dest-uri 'postgresql://<username>:<password>@<host>:<port>/<database-name>?sslmode=<sslmode>'`: Connects to PostgreSQL as the destination database using the provided credentials.
71
+ - `--dest-table 'dest.events'`: Defines where the data will be stored in Postgres.
72
+
73
+ ## Step 5: Verify Data in PostgreSQL via DBeaver
74
+
75
+ Once the command runs successfully, let's verify that the Stripe data has been loaded into PostgreSQL.
76
+
77
+ ### 1: Connect to PostgreSQL via DBeaver
78
+ 1. **Open DBeaver** and go to **Database** → **New Connection**.
79
+ 2. Select **PostgreSQL**.
80
+ 3. Enter your **PostgreSQL credentials**:
81
+ - **Host**: `<your-host>`
82
+ - **Port**: `5432` (default)
83
+ - **Database**: `<your-database>`
84
+ - **Username**: `<your-username>`
85
+ - **Password**: `<your-password>`
86
+ 4. Click **Test Connection** to verify.
87
+ 5. If successful, click **Finish**.
88
+
89
+ ### 2: Browse Tables
90
+ 1. Expand your **PostgreSQL connection** in the **Database Navigator**.
91
+ 2. Expand **Schemas** → **Public**.
92
+ 3. Expand **Tables** and find `events`.
93
+
94
+ ### 3: View Data in DBeaver
95
+ 1. Right-click the `events` table.
96
+ 2. Click **View Data** → **All Rows**.
97
+ 3. Ensure that the retrieved data matches what was expected from Stripe.
98
+
99
+ ![Stripe to Postgresql](../media/stripe_postgres.png)
100
+ 🎉 Congratulations!
101
+ Your Stripe data is now securely stored in PostgreSQL 🚀
@@ -127,40 +127,44 @@ class SqlReflectionLevel(str, Enum):
127
127
  def ingest(
128
128
  source_uri: Annotated[
129
129
  str,
130
- typer.Option(help="The URI of the [green]source[/green]", envvar="SOURCE_URI"),
130
+ typer.Option(
131
+ help="The URI of the [green]source[/green]",
132
+ envvar=["SOURCE_URI", "INGESTR_SOURCE_URI"],
133
+ ),
131
134
  ], # type: ignore
132
135
  dest_uri: Annotated[
133
136
  str,
134
137
  typer.Option(
135
- help="The URI of the [cyan]destination[/cyan]", envvar="DESTINATION_URI"
138
+ help="The URI of the [cyan]destination[/cyan]",
139
+ envvar=["DESTINATION_URI", "INGESTR_DESTINATION_URI"],
136
140
  ),
137
141
  ], # type: ignore
138
142
  source_table: Annotated[
139
143
  str,
140
144
  typer.Option(
141
145
  help="The table name in the [green]source[/green] to fetch",
142
- envvar="SOURCE_TABLE",
146
+ envvar=["SOURCE_TABLE", "INGESTR_SOURCE_TABLE"],
143
147
  ),
144
148
  ], # type: ignore
145
149
  dest_table: Annotated[
146
150
  str,
147
151
  typer.Option(
148
152
  help="The table in the [cyan]destination[/cyan] to save the data into",
149
- envvar="DESTINATION_TABLE",
153
+ envvar=["DESTINATION_TABLE", "INGESTR_DESTINATION_TABLE"],
150
154
  ),
151
155
  ] = None, # type: ignore
152
156
  incremental_key: Annotated[
153
157
  Optional[str],
154
158
  typer.Option(
155
159
  help="The incremental key from the table to be used for incremental strategies",
156
- envvar="INCREMENTAL_KEY",
160
+ envvar=["INCREMENTAL_KEY", "INGESTR_INCREMENTAL_KEY"],
157
161
  ),
158
162
  ] = None, # type: ignore
159
163
  incremental_strategy: Annotated[
160
164
  IncrementalStrategy,
161
165
  typer.Option(
162
166
  help="The incremental strategy to use",
163
- envvar="INCREMENTAL_STRATEGY",
167
+ envvar=["INCREMENTAL_STRATEGY", "INGESTR_INCREMENTAL_STRATEGY"],
164
168
  ),
165
169
  ] = IncrementalStrategy.create_replace, # type: ignore
166
170
  interval_start: Annotated[
@@ -168,7 +172,7 @@ def ingest(
168
172
  typer.Option(
169
173
  help="The start of the interval the incremental key will cover",
170
174
  formats=DATE_FORMATS,
171
- envvar="INTERVAL_START",
175
+ envvar=["INTERVAL_START", "INGESTR_INTERVAL_START"],
172
176
  ),
173
177
  ] = None, # type: ignore
174
178
  interval_end: Annotated[
@@ -176,126 +180,126 @@ def ingest(
176
180
  typer.Option(
177
181
  help="The end of the interval the incremental key will cover",
178
182
  formats=DATE_FORMATS,
179
- envvar="INTERVAL_END",
183
+ envvar=["INTERVAL_END", "INGESTR_INTERVAL_END"],
180
184
  ),
181
185
  ] = None, # type: ignore
182
186
  primary_key: Annotated[
183
187
  Optional[list[str]],
184
188
  typer.Option(
185
189
  help="The key that will be used to deduplicate the resulting table",
186
- envvar="PRIMARY_KEY",
190
+ envvar=["PRIMARY_KEY", "INGESTR_PRIMARY_KEY"],
187
191
  ),
188
192
  ] = None, # type: ignore
189
193
  partition_by: Annotated[
190
194
  Optional[str],
191
195
  typer.Option(
192
196
  help="The partition key to be used for partitioning the destination table",
193
- envvar="PARTITION_BY",
197
+ envvar=["PARTITION_BY", "INGESTR_PARTITION_BY"],
194
198
  ),
195
199
  ] = None, # type: ignore
196
200
  cluster_by: Annotated[
197
201
  Optional[str],
198
202
  typer.Option(
199
203
  help="The clustering key to be used for clustering the destination table, not every destination supports clustering.",
200
- envvar="CLUSTER_BY",
204
+ envvar=["CLUSTER_BY", "INGESTR_CLUSTER_BY"],
201
205
  ),
202
206
  ] = None, # type: ignore
203
207
  yes: Annotated[
204
208
  Optional[bool],
205
209
  typer.Option(
206
210
  help="Skip the confirmation prompt and ingest right away",
207
- envvar="SKIP_CONFIRMATION",
211
+ envvar=["SKIP_CONFIRMATION", "INGESTR_SKIP_CONFIRMATION"],
208
212
  ),
209
213
  ] = False, # type: ignore
210
214
  full_refresh: Annotated[
211
215
  bool,
212
216
  typer.Option(
213
217
  help="Ignore the state and refresh the destination table completely",
214
- envvar="FULL_REFRESH",
218
+ envvar=["FULL_REFRESH", "INGESTR_FULL_REFRESH"],
215
219
  ),
216
220
  ] = False, # type: ignore
217
221
  progress: Annotated[
218
222
  Progress,
219
223
  typer.Option(
220
224
  help="The progress display type, must be one of 'interactive', 'log'",
221
- envvar="PROGRESS",
225
+ envvar=["PROGRESS", "INGESTR_PROGRESS"],
222
226
  ),
223
227
  ] = Progress.interactive, # type: ignore
224
228
  sql_backend: Annotated[
225
229
  SqlBackend,
226
230
  typer.Option(
227
231
  help="The SQL backend to use",
228
- envvar="SQL_BACKEND",
232
+ envvar=["SQL_BACKEND", "INGESTR_SQL_BACKEND"],
229
233
  ),
230
234
  ] = SqlBackend.pyarrow, # type: ignore
231
235
  loader_file_format: Annotated[
232
236
  Optional[LoaderFileFormat],
233
237
  typer.Option(
234
238
  help="The file format to use when loading data",
235
- envvar="LOADER_FILE_FORMAT",
239
+ envvar=["LOADER_FILE_FORMAT", "INGESTR_LOADER_FILE_FORMAT"],
236
240
  ),
237
241
  ] = None, # type: ignore
238
242
  page_size: Annotated[
239
243
  Optional[int],
240
244
  typer.Option(
241
245
  help="The page size to be used when fetching data from SQL sources",
242
- envvar="PAGE_SIZE",
246
+ envvar=["PAGE_SIZE", "INGESTR_PAGE_SIZE"],
243
247
  ),
244
248
  ] = 50000, # type: ignore
245
249
  loader_file_size: Annotated[
246
250
  Optional[int],
247
251
  typer.Option(
248
252
  help="The file size to be used by the loader to split the data into multiple files. This can be set independent of the page size, since page size is used for fetching the data from the sources whereas this is used for the processing/loading part.",
249
- envvar="LOADER_FILE_SIZE",
253
+ envvar=["LOADER_FILE_SIZE", "INGESTR_LOADER_FILE_SIZE"],
250
254
  ),
251
255
  ] = 100000, # type: ignore
252
256
  schema_naming: Annotated[
253
257
  SchemaNaming,
254
258
  typer.Option(
255
259
  help="The naming convention to use when moving the tables from source to destination. The default behavior is explained here: https://dlthub.com/docs/general-usage/schema#naming-convention",
256
- envvar="SCHEMA_NAMING",
260
+ envvar=["SCHEMA_NAMING", "INGESTR_SCHEMA_NAMING"],
257
261
  ),
258
262
  ] = SchemaNaming.default, # type: ignore
259
263
  pipelines_dir: Annotated[
260
264
  Optional[str],
261
265
  typer.Option(
262
266
  help="The path to store dlt-related pipeline metadata. By default, ingestr will create a temporary directory and delete it after the execution is done in order to make retries stateless.",
263
- envvar="PIPELINES_DIR",
267
+ envvar=["PIPELINES_DIR", "INGESTR_PIPELINES_DIR"],
264
268
  ),
265
269
  ] = None, # type: ignore
266
270
  extract_parallelism: Annotated[
267
271
  Optional[int],
268
272
  typer.Option(
269
273
  help="The number of parallel jobs to run for extracting data from the source, only applicable for certain sources",
270
- envvar="EXTRACT_PARALLELISM",
274
+ envvar=["EXTRACT_PARALLELISM", "INGESTR_EXTRACT_PARALLELISM"],
271
275
  ),
272
276
  ] = 5, # type: ignore
273
277
  sql_reflection_level: Annotated[
274
278
  SqlReflectionLevel,
275
279
  typer.Option(
276
280
  help="The reflection level to use when reflecting the table schema from the source",
277
- envvar="SQL_REFLECTION_LEVEL",
281
+ envvar=["SQL_REFLECTION_LEVEL", "INGESTR_SQL_REFLECTION_LEVEL"],
278
282
  ),
279
283
  ] = SqlReflectionLevel.full, # type: ignore
280
284
  sql_limit: Annotated[
281
285
  Optional[int],
282
286
  typer.Option(
283
287
  help="The limit to use when fetching data from the source",
284
- envvar="SQL_LIMIT",
288
+ envvar=["SQL_LIMIT", "INGESTR_SQL_LIMIT"],
285
289
  ),
286
290
  ] = None, # type: ignore
287
291
  sql_exclude_columns: Annotated[
288
292
  Optional[list[str]],
289
293
  typer.Option(
290
294
  help="The columns to exclude from the source table",
291
- envvar="SQL_EXCLUDE_COLUMNS",
295
+ envvar=["SQL_EXCLUDE_COLUMNS", "INGESTR_SQL_EXCLUDE_COLUMNS"],
292
296
  ),
293
297
  ] = [], # type: ignore
294
298
  columns: Annotated[
295
299
  Optional[list[str]],
296
300
  typer.Option(
297
301
  help="The column types to be used for the destination table in the format of 'column_name:column_type'",
298
- envvar="COLUMNS",
302
+ envvar=["COLUMNS", "INGESTR_COLUMNS"],
299
303
  ),
300
304
  ] = None, # type: ignore
301
305
  ):
@@ -0,0 +1 @@
1
+ version = "v0.13.21"
@@ -72,6 +72,7 @@ SQL_SOURCE_SCHEMES = [
72
72
  "hana",
73
73
  "clickhouse",
74
74
  "databricks",
75
+ "db2",
75
76
  ]
76
77
 
77
78
 
@@ -177,6 +177,9 @@ class SqlSource:
177
177
  scheme="clickhouse+native",
178
178
  query=urlencode(query_params, doseq=True),
179
179
  ).geturl()
180
+
181
+ if uri.startswith("db2://"):
182
+ uri = uri.replace("db2://", "db2+ibm_db://")
180
183
 
181
184
  query_adapters = []
182
185
  if kwargs.get("sql_limit"):
@@ -47,3 +47,5 @@ clickhouse-connect==0.8.14
47
47
  clickhouse-driver==0.2.9
48
48
  clickhouse-sqlalchemy==0.2.7
49
49
  zstd==1.5.6.5
50
+ ibm-db==3.2.6
51
+ ibm-db-sa==0.4.1
@@ -207,6 +207,12 @@ httplib2==0.22.0
207
207
  # google-auth-httplib2
208
208
  humanize==4.12.1
209
209
  # via dlt
210
+ ibm-db==3.2.6
211
+ # via
212
+ # -r requirements.in
213
+ # ibm-db-sa
214
+ ibm-db-sa==0.4.1
215
+ # via -r requirements.in
210
216
  idna==3.10
211
217
  # via
212
218
  # requests
@@ -476,6 +482,7 @@ sqlalchemy==1.4.52
476
482
  # databricks-sql-connector
477
483
  # databricks-sqlalchemy
478
484
  # duckdb-engine
485
+ # ibm-db-sa
479
486
  # snowflake-sqlalchemy
480
487
  # sqlalchemy-bigquery
481
488
  # sqlalchemy-hana
@@ -1 +0,0 @@
1
- version = "v0.13.19"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes