ingestr 0.9.2__tar.gz → 0.9.4__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.
- {ingestr-0.9.2 → ingestr-0.9.4}/.gitignore +1 -0
- ingestr-0.9.4/.vale.ini +16 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/Dockerfile +2 -2
- {ingestr-0.9.2 → ingestr-0.9.4}/Makefile +3 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/PKG-INFO +8 -8
- {ingestr-0.9.2 → ingestr-0.9.4}/README.md +7 -7
- ingestr-0.9.4/docs/commands/example-uris.md +5 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/docs/commands/ingest.md +7 -7
- {ingestr-0.9.2 → ingestr-0.9.4}/docs/getting-started/core-concepts.md +4 -4
- {ingestr-0.9.2 → ingestr-0.9.4}/docs/getting-started/incremental-loading.md +10 -10
- {ingestr-0.9.2 → ingestr-0.9.4}/docs/getting-started/quickstart.md +7 -7
- {ingestr-0.9.2 → ingestr-0.9.4}/docs/getting-started/telemetry.md +4 -4
- ingestr-0.9.4/docs/supported-sources/adjust.md +84 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/docs/supported-sources/airtable.md +3 -3
- ingestr-0.9.4/docs/supported-sources/appsflyer.md +33 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/docs/supported-sources/bigquery.md +3 -3
- {ingestr-0.9.2 → ingestr-0.9.4}/docs/supported-sources/chess.md +5 -5
- {ingestr-0.9.2 → ingestr-0.9.4}/docs/supported-sources/csv.md +1 -1
- {ingestr-0.9.2 → ingestr-0.9.4}/docs/supported-sources/databricks.md +1 -1
- {ingestr-0.9.2 → ingestr-0.9.4}/docs/supported-sources/duckdb.md +1 -1
- {ingestr-0.9.2 → ingestr-0.9.4}/docs/supported-sources/facebook-ads.md +3 -3
- {ingestr-0.9.2 → ingestr-0.9.4}/docs/supported-sources/gorgias.md +4 -4
- {ingestr-0.9.2 → ingestr-0.9.4}/docs/supported-sources/gsheets.md +4 -4
- {ingestr-0.9.2 → ingestr-0.9.4}/docs/supported-sources/hubspot.md +4 -4
- {ingestr-0.9.2 → ingestr-0.9.4}/docs/supported-sources/kafka.md +7 -7
- ingestr-0.9.4/docs/supported-sources/klaviyo.md +50 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/docs/supported-sources/mongodb.md +3 -3
- {ingestr-0.9.2 → ingestr-0.9.4}/docs/supported-sources/mssql.md +1 -1
- {ingestr-0.9.2 → ingestr-0.9.4}/docs/supported-sources/mysql.md +3 -3
- {ingestr-0.9.2 → ingestr-0.9.4}/docs/supported-sources/notion.md +2 -2
- {ingestr-0.9.2 → ingestr-0.9.4}/docs/supported-sources/oracle.md +2 -2
- {ingestr-0.9.2 → ingestr-0.9.4}/docs/supported-sources/postgres.md +4 -4
- {ingestr-0.9.2 → ingestr-0.9.4}/docs/supported-sources/redshift.md +3 -3
- ingestr-0.9.4/docs/supported-sources/s3.md +39 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/docs/supported-sources/sap-hana.md +3 -3
- {ingestr-0.9.2 → ingestr-0.9.4}/docs/supported-sources/shopify.md +3 -3
- {ingestr-0.9.2 → ingestr-0.9.4}/docs/supported-sources/slack.md +4 -4
- {ingestr-0.9.2 → ingestr-0.9.4}/docs/supported-sources/snowflake.md +3 -3
- {ingestr-0.9.2 → ingestr-0.9.4}/docs/supported-sources/sqlite.md +1 -1
- {ingestr-0.9.2 → ingestr-0.9.4}/docs/supported-sources/stripe.md +3 -3
- ingestr-0.9.4/docs/supported-sources/zendesk.md +84 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/ingestr/main.py +3 -1
- ingestr-0.9.4/ingestr/src/adjust/__init__.py +100 -0
- ingestr-0.9.2/ingestr/src/adjust/helpers.py → ingestr-0.9.4/ingestr/src/adjust/adjust_helpers.py +46 -23
- {ingestr-0.9.2 → ingestr-0.9.4}/ingestr/src/sources.py +57 -17
- ingestr-0.9.4/ingestr/src/version.py +1 -0
- ingestr-0.9.4/styles/Google/AMPM.yml +9 -0
- ingestr-0.9.4/styles/Google/Acronyms.yml +64 -0
- ingestr-0.9.4/styles/Google/Colons.yml +8 -0
- ingestr-0.9.4/styles/Google/Contractions.yml +30 -0
- ingestr-0.9.4/styles/Google/DateFormat.yml +9 -0
- ingestr-0.9.4/styles/Google/Ellipses.yml +9 -0
- ingestr-0.9.4/styles/Google/EmDash.yml +13 -0
- ingestr-0.9.4/styles/Google/Exclamation.yml +12 -0
- ingestr-0.9.4/styles/Google/FirstPerson.yml +13 -0
- ingestr-0.9.4/styles/Google/Gender.yml +9 -0
- ingestr-0.9.4/styles/Google/GenderBias.yml +43 -0
- ingestr-0.9.4/styles/Google/HeadingPunctuation.yml +13 -0
- ingestr-0.9.4/styles/Google/Headings.yml +29 -0
- ingestr-0.9.4/styles/Google/Latin.yml +11 -0
- ingestr-0.9.4/styles/Google/LyHyphens.yml +14 -0
- ingestr-0.9.4/styles/Google/OptionalPlurals.yml +12 -0
- ingestr-0.9.4/styles/Google/Ordinal.yml +7 -0
- ingestr-0.9.4/styles/Google/OxfordComma.yml +7 -0
- ingestr-0.9.4/styles/Google/Parens.yml +7 -0
- ingestr-0.9.4/styles/Google/Passive.yml +184 -0
- ingestr-0.9.4/styles/Google/Periods.yml +7 -0
- ingestr-0.9.4/styles/Google/Quotes.yml +7 -0
- ingestr-0.9.4/styles/Google/Ranges.yml +7 -0
- ingestr-0.9.4/styles/Google/Semicolons.yml +8 -0
- ingestr-0.9.4/styles/Google/Slang.yml +11 -0
- ingestr-0.9.4/styles/Google/Spacing.yml +10 -0
- ingestr-0.9.4/styles/Google/Spelling.yml +10 -0
- ingestr-0.9.4/styles/Google/Units.yml +8 -0
- ingestr-0.9.4/styles/Google/We.yml +11 -0
- ingestr-0.9.4/styles/Google/Will.yml +7 -0
- ingestr-0.9.4/styles/Google/WordList.yml +80 -0
- ingestr-0.9.4/styles/Google/meta.json +4 -0
- ingestr-0.9.4/styles/Google/vocab.txt +0 -0
- ingestr-0.9.4/styles/bruin/Ingestr.yml +9 -0
- ingestr-0.9.4/styles/config/vocabularies/bruin/accept.txt +51 -0
- ingestr-0.9.2/docs/commands/example-uris.md +0 -5
- ingestr-0.9.2/docs/supported-sources/adjust.md +0 -30
- ingestr-0.9.2/docs/supported-sources/appsflyer.md +0 -28
- ingestr-0.9.2/docs/supported-sources/klaviyo.md +0 -64
- ingestr-0.9.2/docs/supported-sources/s3.md +0 -39
- ingestr-0.9.2/docs/supported-sources/zendesk.md +0 -84
- ingestr-0.9.2/ingestr/src/adjust/_init_.py +0 -31
- ingestr-0.9.2/ingestr/src/version.py +0 -1
- {ingestr-0.9.2 → ingestr-0.9.4}/.dockerignore +0 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/.github/workflows/deploy-docs.yml +0 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/.github/workflows/tests.yml +0 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/.python-version +0 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/LICENSE.md +0 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/docs/.vitepress/config.mjs +0 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/docs/.vitepress/theme/custom.css +0 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/docs/.vitepress/theme/index.js +0 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/docs/index.md +0 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/ingestr/src/.gitignore +0 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/ingestr/src/airtable/__init__.py +0 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/ingestr/src/appsflyer/_init_.py +0 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/ingestr/src/appsflyer/client.py +0 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/ingestr/src/arrow/__init__.py +0 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/ingestr/src/chess/__init__.py +0 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/ingestr/src/chess/helpers.py +0 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/ingestr/src/chess/settings.py +0 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/ingestr/src/destinations.py +0 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/ingestr/src/facebook_ads/__init__.py +0 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/ingestr/src/facebook_ads/exceptions.py +0 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/ingestr/src/facebook_ads/helpers.py +0 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/ingestr/src/facebook_ads/settings.py +0 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/ingestr/src/factory.py +0 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/ingestr/src/filesystem/__init__.py +0 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/ingestr/src/filesystem/helpers.py +0 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/ingestr/src/filesystem/readers.py +0 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/ingestr/src/google_sheets/README.md +0 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/ingestr/src/google_sheets/__init__.py +0 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/ingestr/src/google_sheets/helpers/__init__.py +0 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/ingestr/src/google_sheets/helpers/api_calls.py +0 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/ingestr/src/google_sheets/helpers/data_processing.py +0 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/ingestr/src/gorgias/__init__.py +0 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/ingestr/src/gorgias/helpers.py +0 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/ingestr/src/hubspot/__init__.py +0 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/ingestr/src/hubspot/helpers.py +0 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/ingestr/src/hubspot/settings.py +0 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/ingestr/src/kafka/__init__.py +0 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/ingestr/src/kafka/helpers.py +0 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/ingestr/src/klaviyo/_init_.py +0 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/ingestr/src/klaviyo/client.py +0 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/ingestr/src/klaviyo/helpers.py +0 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/ingestr/src/mongodb/__init__.py +0 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/ingestr/src/mongodb/helpers.py +0 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/ingestr/src/notion/__init__.py +0 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/ingestr/src/notion/helpers/__init__.py +0 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/ingestr/src/notion/helpers/client.py +0 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/ingestr/src/notion/helpers/database.py +0 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/ingestr/src/notion/settings.py +0 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/ingestr/src/shopify/__init__.py +0 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/ingestr/src/shopify/exceptions.py +0 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/ingestr/src/shopify/helpers.py +0 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/ingestr/src/shopify/settings.py +0 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/ingestr/src/slack/__init__.py +0 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/ingestr/src/slack/helpers.py +0 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/ingestr/src/slack/settings.py +0 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/ingestr/src/sql_database/__init__.py +0 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/ingestr/src/sql_database/arrow_helpers.py +0 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/ingestr/src/sql_database/helpers.py +0 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/ingestr/src/sql_database/override.py +0 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/ingestr/src/sql_database/schema_types.py +0 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/ingestr/src/stripe_analytics/__init__.py +0 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/ingestr/src/stripe_analytics/helpers.py +0 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/ingestr/src/stripe_analytics/settings.py +0 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/ingestr/src/table_definition.py +0 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/ingestr/src/telemetry/event.py +0 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/ingestr/src/testdata/fakebqcredentials.json +0 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/ingestr/src/zendesk/__init__.py +0 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/ingestr/src/zendesk/helpers/__init__.py +0 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/ingestr/src/zendesk/helpers/api_helpers.py +0 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/ingestr/src/zendesk/helpers/credentials.py +0 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/ingestr/src/zendesk/helpers/talk_api.py +0 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/ingestr/src/zendesk/settings.py +0 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/ingestr/testdata/.gitignore +0 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/ingestr/testdata/create_replace.csv +0 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/ingestr/testdata/delete_insert_expected.csv +0 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/ingestr/testdata/delete_insert_part1.csv +0 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/ingestr/testdata/delete_insert_part2.csv +0 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/ingestr/testdata/merge_expected.csv +0 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/ingestr/testdata/merge_part1.csv +0 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/ingestr/testdata/merge_part2.csv +0 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/package-lock.json +0 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/package.json +0 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/pyproject.toml +0 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/requirements-dev.txt +0 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/requirements.txt +0 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/resources/demo.gif +0 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/resources/demo.tape +0 -0
- {ingestr-0.9.2 → ingestr-0.9.4}/resources/ingestr.svg +0 -0
ingestr-0.9.4/.vale.ini
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
StylesPath = styles
|
|
2
|
+
|
|
3
|
+
MinAlertLevel = suggestion
|
|
4
|
+
|
|
5
|
+
Packages = Google
|
|
6
|
+
|
|
7
|
+
Vocab = bruin
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
[*]
|
|
11
|
+
BasedOnStyles = Vale, Google, bruin
|
|
12
|
+
Google.We = NO
|
|
13
|
+
Google.Passive = NO
|
|
14
|
+
Google.Will = NO
|
|
15
|
+
Google.Latin = NO
|
|
16
|
+
Google.Contractions = NO
|
|
@@ -28,10 +28,10 @@ ENV VIRTUAL_ENV=/usr/local
|
|
|
28
28
|
ADD --chmod=755 https://astral.sh/uv/install.sh /install.sh
|
|
29
29
|
RUN /install.sh && rm /install.sh
|
|
30
30
|
|
|
31
|
-
RUN
|
|
31
|
+
RUN $HOME/.local/bin/uv pip install --system --no-cache -r requirements.txt
|
|
32
32
|
|
|
33
33
|
COPY . /app
|
|
34
34
|
|
|
35
|
-
RUN pip3 install -e .
|
|
35
|
+
RUN pip3 install -e . && pip3 install pyodbc
|
|
36
36
|
|
|
37
37
|
ENTRYPOINT ["ingestr"]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: ingestr
|
|
3
|
-
Version: 0.9.
|
|
3
|
+
Version: 0.9.4
|
|
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
|
|
@@ -51,7 +51,7 @@ Description-Content-Type: text/markdown
|
|
|
51
51
|
|
|
52
52
|
<div align="center">
|
|
53
53
|
<img src="https://github.com/bruin-data/ingestr/blob/main/resources/ingestr.svg?raw=true" width="500" />
|
|
54
|
-
<p>
|
|
54
|
+
<p>Copy data from any source to any destination without any code</p>
|
|
55
55
|
<img src="https://github.com/bruin-data/ingestr/blob/main/resources/demo.gif?raw=true" width="750" />
|
|
56
56
|
</div>
|
|
57
57
|
|
|
@@ -63,7 +63,7 @@ Description-Content-Type: text/markdown
|
|
|
63
63
|
|
|
64
64
|
---
|
|
65
65
|
|
|
66
|
-
|
|
66
|
+
ingestr is a command-line app that allows you to ingest data from any source into any destination using simple command-line flags, no code necessary.
|
|
67
67
|
|
|
68
68
|
- ✨ copy data from your database into any destination
|
|
69
69
|
- ➕ incremental loading: `append`, `merge` or `delete+insert`
|
|
@@ -89,10 +89,10 @@ ingestr ingest \
|
|
|
89
89
|
|
|
90
90
|
That's it.
|
|
91
91
|
|
|
92
|
-
This command
|
|
92
|
+
This command:
|
|
93
93
|
|
|
94
|
-
-
|
|
95
|
-
-
|
|
94
|
+
- gets the table `public.some_data` from the Postgres instance.
|
|
95
|
+
- uploads this data to your BigQuery warehouse under the schema `ingestr` and table `some_data`.
|
|
96
96
|
|
|
97
97
|
## Documentation
|
|
98
98
|
|
|
@@ -102,7 +102,7 @@ You can see the full documentation [here](https://bruin-data.github.io/ingestr/g
|
|
|
102
102
|
|
|
103
103
|
Join our Slack community [here](https://join.slack.com/t/bruindatacommunity/shared_invite/zt-2dl2i8foy-bVsuMUauHeN9M2laVm3ZVg).
|
|
104
104
|
|
|
105
|
-
## Supported
|
|
105
|
+
## Supported sources & destinations
|
|
106
106
|
|
|
107
107
|
<table>
|
|
108
108
|
<tr>
|
|
@@ -256,7 +256,7 @@ Join our Slack community [here](https://join.slack.com/t/bruindatacommunity/shar
|
|
|
256
256
|
</tr>
|
|
257
257
|
</table>
|
|
258
258
|
|
|
259
|
-
|
|
259
|
+
Feel free to create an issue if you'd like to see support for another source or destination.
|
|
260
260
|
|
|
261
261
|
## Acknowledgements
|
|
262
262
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<div align="center">
|
|
2
2
|
<img src="https://github.com/bruin-data/ingestr/blob/main/resources/ingestr.svg?raw=true" width="500" />
|
|
3
|
-
<p>
|
|
3
|
+
<p>Copy data from any source to any destination without any code</p>
|
|
4
4
|
<img src="https://github.com/bruin-data/ingestr/blob/main/resources/demo.gif?raw=true" width="750" />
|
|
5
5
|
</div>
|
|
6
6
|
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
|
|
13
13
|
---
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
ingestr is a command-line app that allows you to ingest data from any source into any destination using simple command-line flags, no code necessary.
|
|
16
16
|
|
|
17
17
|
- ✨ copy data from your database into any destination
|
|
18
18
|
- ➕ incremental loading: `append`, `merge` or `delete+insert`
|
|
@@ -38,10 +38,10 @@ ingestr ingest \
|
|
|
38
38
|
|
|
39
39
|
That's it.
|
|
40
40
|
|
|
41
|
-
This command
|
|
41
|
+
This command:
|
|
42
42
|
|
|
43
|
-
-
|
|
44
|
-
-
|
|
43
|
+
- gets the table `public.some_data` from the Postgres instance.
|
|
44
|
+
- uploads this data to your BigQuery warehouse under the schema `ingestr` and table `some_data`.
|
|
45
45
|
|
|
46
46
|
## Documentation
|
|
47
47
|
|
|
@@ -51,7 +51,7 @@ You can see the full documentation [here](https://bruin-data.github.io/ingestr/g
|
|
|
51
51
|
|
|
52
52
|
Join our Slack community [here](https://join.slack.com/t/bruindatacommunity/shared_invite/zt-2dl2i8foy-bVsuMUauHeN9M2laVm3ZVg).
|
|
53
53
|
|
|
54
|
-
## Supported
|
|
54
|
+
## Supported sources & destinations
|
|
55
55
|
|
|
56
56
|
<table>
|
|
57
57
|
<tr>
|
|
@@ -205,7 +205,7 @@ Join our Slack community [here](https://join.slack.com/t/bruindatacommunity/shar
|
|
|
205
205
|
</tr>
|
|
206
206
|
</table>
|
|
207
207
|
|
|
208
|
-
|
|
208
|
+
Feel free to create an issue if you'd like to see support for another source or destination.
|
|
209
209
|
|
|
210
210
|
## Acknowledgements
|
|
211
211
|
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
# `ingestr example-uris`
|
|
2
|
+
|
|
3
|
+
This command serves as a guide for the user to understand the various URI formats that `ingestr` supports. The command provides a list of supported sources and destinations, along with the URI format for each of them.
|
|
4
|
+
|
|
5
|
+
For the detailed documentation, please refer to the Sources & Destinations section on the sidebar.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# `ingestr ingest`
|
|
2
2
|
|
|
3
|
-
The `ingest` command is a core
|
|
3
|
+
The `ingest` command is a core feature of the `ingestr` tool, allowing users to transfer data from a source to a destination with optional support for incremental updates.
|
|
4
4
|
|
|
5
5
|
## Example
|
|
6
6
|
|
|
@@ -13,13 +13,13 @@ ingestr ingest
|
|
|
13
13
|
--dest-uri '<your-destination-uri-here>'
|
|
14
14
|
```
|
|
15
15
|
|
|
16
|
-
## Required
|
|
16
|
+
## Required flags
|
|
17
17
|
|
|
18
|
-
- `--source-uri TEXT`: Specifies the URI of the data source.
|
|
19
|
-
- `--dest-uri TEXT`: Specifies the URI of the destination where data will be ingested.
|
|
20
|
-
- `--source-table TEXT`: Defines the source table to fetch data from.
|
|
18
|
+
- `--source-uri TEXT`: Required. Specifies the URI of the data source.
|
|
19
|
+
- `--dest-uri TEXT`: Required. Specifies the URI of the destination where data will be ingested.
|
|
20
|
+
- `--source-table TEXT`: Required. Defines the source table to fetch data from.
|
|
21
21
|
|
|
22
|
-
## Optional
|
|
22
|
+
## Optional flags
|
|
23
23
|
|
|
24
24
|
- `--dest-table TEXT`: Designates the destination table to save the data. If not specified, defaults to the value of `--source-table`.
|
|
25
25
|
- `--incremental-key TEXT`: Identifies the key used for incremental data strategies. Defaults to `None`.
|
|
@@ -38,7 +38,7 @@ The `interval-start` and `interval-end` options support various datetime formats
|
|
|
38
38
|
> [!INFO]
|
|
39
39
|
> For the details around the incremental key and the various strategies, please refer to the [Incremental Loading](../getting-started/incremental-loading.md) section.
|
|
40
40
|
|
|
41
|
-
## General
|
|
41
|
+
## General flags
|
|
42
42
|
|
|
43
43
|
- `--help`: Displays the help message and exits the command.
|
|
44
44
|
|
|
@@ -5,8 +5,8 @@ outline: deep
|
|
|
5
5
|
# Core Concepts
|
|
6
6
|
ingestr has a few simple concepts that you should understand before you start using it.
|
|
7
7
|
|
|
8
|
-
## Source &
|
|
9
|
-
The source and destination are the two main components of ingestr. The source is the place from where you want to ingest the data, hence the name "source"
|
|
8
|
+
## Source & destination URIs
|
|
9
|
+
The source and destination are the two main components of ingestr. The source is the place from where you want to ingest the data, hence the name "source" and the destination is the place where you want to store the data.
|
|
10
10
|
|
|
11
11
|
The sources and destinations are identified with [URIs](https://en.wikipedia.org/wiki/Uniform_Resource_Identifier). A URI is a simple string that contains the credentials used to connect to the source or destination.
|
|
12
12
|
|
|
@@ -27,13 +27,13 @@ ingestr can connect to any source or destination using this structure across all
|
|
|
27
27
|
> [!NOTE]
|
|
28
28
|
> ingestr uses [dlt](https://github.com/dlt-hub/dlt) & [SQLAlchemy](https://www.sqlalchemy.org/) libraries internally, which means you can get connection URIs by following their documentation as well, they are supposed to work right away in ingestr.
|
|
29
29
|
|
|
30
|
-
## Source &
|
|
30
|
+
## Source & destination tables
|
|
31
31
|
The source and destination tables are the tables from the source and destination databases, respectively. The source table is the table from where you want to ingest the data from, and the destination table is the table where you want to store the data.
|
|
32
32
|
|
|
33
33
|
ingestr uses the `--source-table` and `--dest-table` flags to specify the source and destination tables, respectively. The `--dest-table` is optional, if you don't specify it, ingestr will use the same table name as the source table.
|
|
34
34
|
|
|
35
35
|
|
|
36
|
-
## Incremental
|
|
36
|
+
## Incremental loading
|
|
37
37
|
ingestr supports incremental loading, which means you can choose to append, merge or delete+insert data into the destination table. Incremental loading allows you to ingest only the new rows from the source table into the destination table, which means that you don't have to ingest the entire table every time you run ingestr.
|
|
38
38
|
|
|
39
39
|
Incremental loading requires various identifiers in the source table to understand what has changed when, so that the new rows can be ingested into the destination table. Read more in the [Incremental Loading](/getting-started/incremental-loading.md) section.
|
|
@@ -6,12 +6,12 @@ outline: deep
|
|
|
6
6
|
ingestr supports incremental loading, which means you can choose to append, merge or delete+insert data into the destination table. Incremental loading allows you to ingest only the new rows from the source table into the destination table, which means that you don't have to ingest the entire table every time you run ingestr.
|
|
7
7
|
|
|
8
8
|
Before you use incremental loading, you should understand 3 important keys:
|
|
9
|
-
- `primary_key`: the column
|
|
10
|
-
- `incremental_key`: the column that will be used to determine the new rows, if you give an incremental key for an ingestion the resulting rows will be filtered based on the incremental key,
|
|
11
|
-
- A good example of an incremental key is a timestamp column, where you only want to ingest the rows that are newer than the last ingestion,
|
|
9
|
+
- `primary_key`: the column or columns that uniquely identify a row in the table, if you give a primary key for an ingestion the resulting rows will be deduplicated based on the primary key, which means there will only be one row for each primary key in the destination.
|
|
10
|
+
- `incremental_key`: the column that will be used to determine the new rows, if you give an incremental key for an ingestion the resulting rows will be filtered based on the incremental key, which means only the new rows will be ingested.
|
|
11
|
+
- A good example of an incremental key is a timestamp column, where you only want to ingest the rows that are newer than the last ingestion, for example `created_at` or `updated_at`.
|
|
12
12
|
- `strategy`: the strategy to use for incremental loading, the available strategies are:
|
|
13
13
|
- `replace`: replace the existing destination table with the source directly, this is the default strategy and the simplest one.
|
|
14
|
-
- This strategy
|
|
14
|
+
- This strategy isn't recommended for large tables, as it will replace the entire table and can be slow.
|
|
15
15
|
- `append`: simply append the new rows to the destination table.
|
|
16
16
|
- `merge`: merge the new rows with the existing rows in the destination table, insert the new ones and update the existing ones with the new values.
|
|
17
17
|
- `delete+insert`: delete the existing rows in the destination table that match the incremental key and then insert the new rows.
|
|
@@ -38,7 +38,7 @@ Here's how the replace strategy works:
|
|
|
38
38
|
> This strategy will delete the entire destination table and replace it with the source table, use with caution.
|
|
39
39
|
|
|
40
40
|
## Append
|
|
41
|
-
Append will simply append the new rows from the source table to the destination table. By default, it will append all the rows
|
|
41
|
+
Append will simply append the new rows from the source table to the destination table. By default, it will append all the rows. You should provide an `incremental_key` to use it as an incremental strategy.
|
|
42
42
|
|
|
43
43
|
The following example below will append the new rows from the `my_schema.some_data` table in Postgres to the `my_schema.some_data` table in BigQuery, only where there's a new table.
|
|
44
44
|
```bash
|
|
@@ -89,11 +89,11 @@ When you run the command again, it will only ingest the new rows into the destin
|
|
|
89
89
|
The behavior is the same if there were new rows in the source table, they would be appended to the destination table if they have `updated_at` that is **later than the latest record** in the destination table.
|
|
90
90
|
|
|
91
91
|
> [!TIP]
|
|
92
|
-
> The `append` strategy allows you to keep a version history of your data, as it will keep appending the new rows to the destination table. You can use it to build [SCD Type 2](https://en.wikipedia.org/wiki/Slowly_changing_dimension#Type_2:_add_new_row) tables, for example.
|
|
92
|
+
> The `append` strategy allows you to keep a version history of your data, as it will keep appending the new rows to the destination table. You can use it to build [Slowly Changing Dimensions (SCD) Type 2](https://en.wikipedia.org/wiki/Slowly_changing_dimension#Type_2:_add_new_row) tables, for example.
|
|
93
93
|
|
|
94
94
|
|
|
95
95
|
## Merge
|
|
96
|
-
Merge will merge the new rows with the existing rows in the destination table, insert the new ones and update the existing ones with the new values. By default, it will merge all the rows
|
|
96
|
+
Merge will merge the new rows with the existing rows in the destination table, insert the new ones and update the existing ones with the new values. By default, it will merge all the rows. If you'd like to use it as an incremental strategy, you should provide an `incremental_key` as well as a `primary_key` to find the right rows to update.
|
|
97
97
|
|
|
98
98
|
The following example below will merge the new rows from the `my_schema.some_data` table in Postgres to the `my_schema.some_data` table in BigQuery, only where there's a new table.
|
|
99
99
|
```bash
|
|
@@ -155,7 +155,7 @@ The behavior is the same if there were new rows in the source table, they would
|
|
|
155
155
|
> For the cases where there's a primary key match, the `merge` strategy will **update** the existing rows in the destination table with the new values from the source table. Use with caution, as it can lead to data loss if not used properly, as well as data processing charges if your data warehouse charges for updates.
|
|
156
156
|
|
|
157
157
|
## Delete+Insert
|
|
158
|
-
Delete+Insert will delete the existing rows in the destination table that match the `incremental_key` and then insert the new rows from the source table. By default, it will delete and insert all the rows
|
|
158
|
+
Delete+Insert will delete the existing rows in the destination table that match the `incremental_key` and then insert the new rows from the source table. By default, it will delete and insert all the rows. If you'd like to use it as an incremental strategy, you should provide an `incremental_key`.
|
|
159
159
|
|
|
160
160
|
The following example below will delete the existing rows in the `my_schema.some_data` table in BigQuery that match the `updated_at` and then insert the new rows from the `my_schema.some_data` table in Postgres.
|
|
161
161
|
```bash
|
|
@@ -213,7 +213,7 @@ When you run the command again, it will delete the existing rows in the destinat
|
|
|
213
213
|
The behavior is the same if there were new rows in the source table, they would be deleted and inserted into the destination table if they have `updated_at` that is **later than the latest record** in the destination table.
|
|
214
214
|
|
|
215
215
|
> [!TIP]
|
|
216
|
-
> The `delete+insert` strategy is useful when you want to keep the destination table clean, as it will delete the existing rows in the destination table that match the `incremental_key` and then insert the new rows from the source table. `delete+insert` strategy also allows you to
|
|
216
|
+
> The `delete+insert` strategy is useful when you want to keep the destination table clean, as it will delete the existing rows in the destination table that match the `incremental_key` and then insert the new rows from the source table. `delete+insert` strategy also allows you to backfill the data, e.g. going back to a past date and ingesting the data again.
|
|
217
217
|
|
|
218
218
|
|
|
219
219
|
## Conclusion
|
|
@@ -222,7 +222,7 @@ Incremental loading is a powerful feature that allows you to ingest only the new
|
|
|
222
222
|
- If you can and your data is not huge, use the `replace` strategy, as it's the simplest strategy and it will replace the entire destination table with the source table, which will always give you a clean exact replica of the source table.
|
|
223
223
|
- If you want to keep a version history of your data, use the `append` strategy, as it will keep appending the new rows to the destination table, which will give you a version history of your data.
|
|
224
224
|
- If you want to keep the latest version of your data in the destination table and your table has a natural primary key, such as a user ID, use the `merge` strategy, as it will update the existing rows in the destination table with the new values from the source table.
|
|
225
|
-
- If you want to keep the destination table clean and you want to
|
|
225
|
+
- If you want to keep the destination table clean and you want to backfill the data, use the `delete+insert` strategy, as it will delete the existing rows in the destination table that match the `incremental_key` and then insert the new rows from the source table.
|
|
226
226
|
|
|
227
227
|
> [!TIP]
|
|
228
228
|
> Even though the document tries to explain, there's no better learning than trying it yourself. You can use the [Quickstart](/getting-started/quickstart.md) to try the incremental loading strategies yourself.
|
|
@@ -3,9 +3,9 @@ outline: deep
|
|
|
3
3
|
---
|
|
4
4
|
|
|
5
5
|
# Quickstart
|
|
6
|
-
ingestr is a command-line
|
|
6
|
+
ingestr is a command-line app that allows you to ingest data from any source into any destination using simple command-line flags, no code necessary.
|
|
7
7
|
|
|
8
|
-
- ✨ copy data from your
|
|
8
|
+
- ✨ copy data from your Postgres / Mongo / BigQuery or any other source into any destination
|
|
9
9
|
- ➕ incremental loading: `append`, `merge` or `delete+insert`
|
|
10
10
|
- 🐍 single-command installation
|
|
11
11
|
|
|
@@ -29,11 +29,11 @@ ingestr ingest \
|
|
|
29
29
|
|
|
30
30
|
That's it.
|
|
31
31
|
|
|
32
|
-
This command
|
|
33
|
-
-
|
|
34
|
-
-
|
|
32
|
+
This command:
|
|
33
|
+
- gets the table `public.some_data` from the Postgres instance.
|
|
34
|
+
- uploads this data to your BigQuery warehouse under the schema `ingestr` and table `some_data`.
|
|
35
35
|
|
|
36
36
|
|
|
37
|
-
## Supported
|
|
37
|
+
## Supported sources & destinations
|
|
38
38
|
|
|
39
|
-
See the Supported Sources & Destinations page for a list of all supported sources and destinations.
|
|
39
|
+
See the Supported Sources & Destinations page for a list of all supported sources and destinations.
|
|
@@ -8,11 +8,11 @@ ingestr uses a very basic form of **anonymous telemetry** to be able to keep tra
|
|
|
8
8
|
- It sends the following information:
|
|
9
9
|
- ingestr version
|
|
10
10
|
- machine ID
|
|
11
|
-
- OS
|
|
11
|
+
- OS information: OS, architecture, Python version
|
|
12
12
|
- command executed
|
|
13
13
|
- success/failure
|
|
14
14
|
|
|
15
|
-
The information collected here is used to understand the usage of ingestr and to improve the product. We use [Rudderstack](https://www.rudderstack.com/) to collect the events and we
|
|
15
|
+
The information collected here is used to understand the usage of ingestr and to improve the product. We use [Rudderstack](https://www.rudderstack.com/) to collect the events and we don't store any PII.
|
|
16
16
|
|
|
17
17
|
The specific events that are sent are:
|
|
18
18
|
- command triggered
|
|
@@ -22,5 +22,5 @@ The questions we answer by these simple events are:
|
|
|
22
22
|
- How many unique users are using ingestr?
|
|
23
23
|
- How many times is ingestr being used?
|
|
24
24
|
|
|
25
|
-
## Disabling
|
|
26
|
-
If you'd like to
|
|
25
|
+
## Disabling telemetry
|
|
26
|
+
If you'd like to turn off the telemetry, simply set the `INGESTR_DISABLE_TELEMETRY` environment variable to `true`.
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
# Adjust
|
|
2
|
+
|
|
3
|
+
[Adjust](https://www.adjust.com/) is a mobile marketing analytics platform that provides solutions for measuring and optimizing campaigns, as well as protecting user data.
|
|
4
|
+
|
|
5
|
+
ingestr supports Adjust as a source.
|
|
6
|
+
|
|
7
|
+
## URI format
|
|
8
|
+
|
|
9
|
+
The URI format for Adjust is as follows:
|
|
10
|
+
|
|
11
|
+
```plaintext
|
|
12
|
+
adjust://?api_key=<api-key-here>
|
|
13
|
+
```
|
|
14
|
+
Parameters:
|
|
15
|
+
- `api_key`: Required. The API key for the Adjust account.
|
|
16
|
+
- `lookback_days`: Optional. The number of days to go back than the given start date for data. Defaults to 30 days.
|
|
17
|
+
|
|
18
|
+
An API token is required to retrieve reports from the Adjust reporting API. please follow the guide to [obtain an API key](https://dev.adjust.com/en/api/rs-api/authentication/).
|
|
19
|
+
|
|
20
|
+
Once you complete the guide, you should have an API key. Let's say your API key is `nr_123`, here's a sample command that will copy the data from Adjust into a DuckDB database:
|
|
21
|
+
|
|
22
|
+
```sh
|
|
23
|
+
ingestr ingest --source-uri 'adjust://?api_key=nr_123' --source-table 'campaigns' --dest-uri duckdb:///adjust.duckdb --dest-table 'adjust.output'
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
The result of this command will be a table in the `adjust.duckdb` database.
|
|
27
|
+
|
|
28
|
+
### Lookback days
|
|
29
|
+
|
|
30
|
+
Adjust data may change going back, which means you'll need to change your start date to get the latest data. The `lookback_days` parameter allows you to specify how many days to go back when calculating the start date, and takes care of automatically updating the start date and getting the past data as well. It defaults to 30 days.
|
|
31
|
+
|
|
32
|
+
## Tables
|
|
33
|
+
Adjust source allows ingesting data from various sources:
|
|
34
|
+
|
|
35
|
+
- `campaigns`: Retrieves data for a campaign, showing the app's revenue and network costs over multiple days.
|
|
36
|
+
- `creatives`: Retrieves data for a creative assets, detailing the app's revenue and network costs across multiple days.
|
|
37
|
+
- `custom`: Retrieves custom data based on the dimensions and metrics specified.
|
|
38
|
+
|
|
39
|
+
### Custom reports: `custom:<dimensions>:<metrics>[:<filters>]`
|
|
40
|
+
|
|
41
|
+
The custom table allows you to retrieve data based on specific dimensions and metrics, and apply filters to the data.
|
|
42
|
+
|
|
43
|
+
The format for the custom table is:
|
|
44
|
+
```plaintext
|
|
45
|
+
custom:<dimensions>:<metrics>[:<filters>]
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Parameters:
|
|
49
|
+
- `dimensions`: A comma-separated list of [dimensions](https://dev.adjust.com/en/api/rs-api/reports#dimensions) to retrieve.
|
|
50
|
+
- `metrics`: A comma-separated list of [metrics](https://dev.adjust.com/en/api/rs-api/reports#metrics) to retrieve.
|
|
51
|
+
- `filters`: A comma-separated list of [filters](https://dev.adjust.com/en/api/rs-api/reports#filters) to apply to the data.
|
|
52
|
+
- Parsing the `filters` key is smart enough to handle filters that contain commas inside them.
|
|
53
|
+
|
|
54
|
+
> [!WARNING]
|
|
55
|
+
> Custom tables require a time-based dimension for efficient operation, such as `hour`, `day`, `week`, `month`, or `year`.
|
|
56
|
+
|
|
57
|
+
## Examples
|
|
58
|
+
|
|
59
|
+
Copy campaigns data from Adjust into a DuckDB database:
|
|
60
|
+
```sh
|
|
61
|
+
ingestr ingest \
|
|
62
|
+
--source-uri 'adjust://?api_key=nr_123' \
|
|
63
|
+
--source-table 'campaigns' \
|
|
64
|
+
--dest-uri duckdb:///adjust.duckdb \
|
|
65
|
+
--dest-table 'adjust.output'
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
Copy creatives data from Adjust into a DuckDB database:
|
|
69
|
+
```sh
|
|
70
|
+
ingestr ingest \
|
|
71
|
+
--source-uri 'adjust://?api_key=nr_123' \
|
|
72
|
+
--source-table 'creatives' \
|
|
73
|
+
--dest-uri duckdb:///adjust.duckdb \
|
|
74
|
+
--dest-table 'adjust.output'
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
Copy custom data from Adjust into a DuckDB database:
|
|
78
|
+
```sh
|
|
79
|
+
ingestr ingest \
|
|
80
|
+
--source-uri "adjust://?api_key=nr_123&lookback_days=2" \
|
|
81
|
+
--source-table "custom:hour,app,store_id,channel,os_name,country_code,campaign_network,campaign_id_network,adgroup_network, adgroup_id_network,creative_network,creative_id_network:impressions,clicks,cost,network_cost,installs,ad_revenue,all_revenue" \
|
|
82
|
+
--dest-uri duckdb:///adjust.db \
|
|
83
|
+
--dest-table "mat.example"
|
|
84
|
+
```
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
ingestr supports Airtable as a source.
|
|
6
6
|
|
|
7
|
-
## URI
|
|
7
|
+
## URI format
|
|
8
8
|
|
|
9
9
|
The URI format for Airtable is as follows:
|
|
10
10
|
|
|
@@ -23,7 +23,7 @@ The URI is used to connect to the Airtable API for extracting data. More details
|
|
|
23
23
|
|
|
24
24
|
Airtable requires a few steps to set up an integration, please follow the guide dltHub [has built here](https://dlthub.com/docs/dlt-ecosystem/verified-sources/airtable#setup-guide).
|
|
25
25
|
|
|
26
|
-
Once you complete the guide, you should have an Access Token and Base Id. Let's say your Access Token is `patr123.abc` and Base Id is `appXYZ`, here's a sample command that will copy the data from Airtable into a
|
|
26
|
+
Once you complete the guide, you should have an Access Token and Base Id. Let's say your Access Token is `patr123.abc` and Base Id is `appXYZ`, here's a sample command that will copy the data from Airtable into a DuckDB database:
|
|
27
27
|
|
|
28
28
|
```sh
|
|
29
29
|
ingestr ingest --source-uri 'airtable://?base_id=appXYc&access_token=patr123.abc' --source-table 'employee' --dest-uri 'duckdb:///airtable.duckdb' --dest-table 'des.employee'
|
|
@@ -31,7 +31,7 @@ ingestr ingest --source-uri 'airtable://?base_id=appXYc&access_token=patr123.abc
|
|
|
31
31
|
|
|
32
32
|
The result of this command will be an `employee` table containing data from the `employee` source in the `Airtable.duckdb` database.
|
|
33
33
|
|
|
34
|
-
The `source-table` can include multiple table names that share the
|
|
34
|
+
The `source-table` can include multiple table names that share the same `base_id`, e.g. `--source-table 'employee,users'`, but this will merge all the data from the specified tables into a single destination table.
|
|
35
35
|
|
|
36
36
|
> [!CAUTION]
|
|
37
37
|
> Airtable does not support incremental loading, which means every time you run the command, the entire table will be copied from Airtable to the destination. This can be slow for large tables.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# AppsFlyer
|
|
2
|
+
|
|
3
|
+
[AppsFlyer](https://www.appsflyer.com/) is a mobile marketing analytics and attribution platform that helps businesses track, measure, and optimize their app marketing efforts across various channels.
|
|
4
|
+
|
|
5
|
+
ingestr supports AppsFlyer as a source.
|
|
6
|
+
|
|
7
|
+
The URI format for AppsFlyer is as follows:
|
|
8
|
+
|
|
9
|
+
```plaintext
|
|
10
|
+
appsflyer://?api_key=<api-key>
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
An API token is required to retrieve reports from the AppsFlyer API. Please follow the guide to [obtain a API key](https://support.appsflyer.com/hc/en-us/articles/360004562377-Managing-AppsFlyer-tokens)
|
|
14
|
+
|
|
15
|
+
Once you complete the guide, you should have an API key. Let's say your API key is `ey123`, here's a sample command that will copy the data from AppsFlyer into a DuckDB database:
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
ingestr ingest
|
|
19
|
+
--source-uri 'appsflyer://?api_key=ey123'
|
|
20
|
+
--source-table 'campaigns'
|
|
21
|
+
--dest-uri duckdb:///appsflyer.duckdb
|
|
22
|
+
--dest-table 'appsflyer.output'
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
The result of this command will be a table in the `appsflyer.duckdb` database.
|
|
26
|
+
|
|
27
|
+
## Tables
|
|
28
|
+
AppsFlyer source allows ingesting the following sources into separate tables:
|
|
29
|
+
|
|
30
|
+
- `campaigns`: Retrieves data for campaigns, detailing the app's costs, loyal users, total installs, and revenue over multiple days.
|
|
31
|
+
- `creatives`: Retrieves data for a creative asset, including revenue and cost.
|
|
32
|
+
|
|
33
|
+
Use these as `--source-table` parameter in the `ingestr ingest` command.
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
# Google BigQuery
|
|
2
|
-
BigQuery is a fully
|
|
2
|
+
BigQuery is a fully managed, serverless data warehouse that enables scalable analysis over petabytes of data.
|
|
3
3
|
|
|
4
4
|
ingestr supports BigQuery as both a source and destination.
|
|
5
5
|
|
|
6
|
-
## URI
|
|
6
|
+
## URI format
|
|
7
7
|
The URI format for BigQuery is as follows:
|
|
8
8
|
|
|
9
9
|
```plaintext
|
|
@@ -13,7 +13,7 @@ bigquery://<project-name>?credentials_path=/path/to/service/account.json&locatio
|
|
|
13
13
|
URI parameters:
|
|
14
14
|
- `project-name`: the name of the project in which the dataset resides
|
|
15
15
|
- `credentials_path`: the path to the service account JSON file
|
|
16
|
-
- `location`: the location of the dataset
|
|
16
|
+
- `location`: optional, the location of the dataset
|
|
17
17
|
|
|
18
18
|
The same URI structure can be used both for sources and destinations. You can read more about SQLAlchemy's BigQuery dialect [here](https://github.com/googleapis/python-bigquery-sqlalchemy?tab=readme-ov-file#connection-string-parameters).
|
|
19
19
|
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
ingestr supports Chess.com as a source, primarily to play around with the data of players, games, and more since it doesn't require any authentication.
|
|
6
6
|
|
|
7
|
-
## URI
|
|
7
|
+
## URI format
|
|
8
8
|
|
|
9
9
|
The URI format for Chess is as follows:
|
|
10
10
|
|
|
@@ -26,12 +26,12 @@ ingestr ingest --source-uri 'chess://?players=max2,peter23' --source-table 'prof
|
|
|
26
26
|
|
|
27
27
|
The result of this command will be a table in the `chess.duckdb` database.
|
|
28
28
|
|
|
29
|
-
##
|
|
29
|
+
## Tables
|
|
30
30
|
|
|
31
31
|
Chess source allows ingesting the following sources into separate tables:
|
|
32
32
|
|
|
33
|
-
- `profiles`:
|
|
34
|
-
- `games`:
|
|
35
|
-
- `archives`:
|
|
33
|
+
- `profiles`: Retrieves player profiles based on a list of player usernames.
|
|
34
|
+
- `games`: Retrieves players' games for specified players.
|
|
35
|
+
- `archives`: Retrieves the URLs to game archives for specified players.
|
|
36
36
|
|
|
37
37
|
Use these as `--source-table` parameter in the `ingestr ingest` command.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# CSV
|
|
2
2
|
ingestr supports CSV files as source and destination. This allows copying data from any database into a local CSV file, as well as uploading data from the local CSV files into database tables.
|
|
3
3
|
|
|
4
|
-
## URI
|
|
4
|
+
## URI format
|
|
5
5
|
The URI format for CSV files is as follows:
|
|
6
6
|
|
|
7
7
|
```plaintext
|
|
@@ -4,7 +4,7 @@ Facebook Ads is the advertising platform that helps users to create targeted ads
|
|
|
4
4
|
|
|
5
5
|
ingestr supports Facebook Ads as a source.
|
|
6
6
|
|
|
7
|
-
## URI
|
|
7
|
+
## URI format
|
|
8
8
|
|
|
9
9
|
The URI format for Facebook Ads is as follows:
|
|
10
10
|
|
|
@@ -25,7 +25,7 @@ The URI is used to connect to Facebook Ads API for extracting data.
|
|
|
25
25
|
|
|
26
26
|
Facebook Ads requires a few steps to set up an integration, please follow the guide dltHub [has built here](https://dlthub.com/docs/dlt-ecosystem/verified-sources/facebook_ads#setup-guide).
|
|
27
27
|
|
|
28
|
-
Once you complete the guide, you should have an
|
|
28
|
+
Once you complete the guide, you should have an access token and an Account ID. Let's say your `access_token` is `abcdef` and `account_id` is `1234`, here's a sample command that will copy the data from Facebook Ads into a DuckDB database:
|
|
29
29
|
|
|
30
30
|
```sh
|
|
31
31
|
ingestr ingest \
|
|
@@ -37,7 +37,7 @@ ingestr ingest \
|
|
|
37
37
|
|
|
38
38
|
The result of this command will be a table in the `facebook.duckdb` database.
|
|
39
39
|
|
|
40
|
-
##
|
|
40
|
+
## Tables
|
|
41
41
|
|
|
42
42
|
Facebook Ads source allows ingesting the following sources into separate tables:
|
|
43
43
|
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
|
|
4
4
|
ingestr supports Gorgias as a source.
|
|
5
5
|
|
|
6
|
-
## URI
|
|
6
|
+
## URI format
|
|
7
7
|
The URI format for Gorgias is as follows:
|
|
8
8
|
|
|
9
9
|
```plaintext
|
|
@@ -26,7 +26,7 @@ ingestr ingest --source-table 'tickets' --source-uri $GORGIAS_URI --dest-uri $BI
|
|
|
26
26
|
ingestr ingest --source-table 'customers' --source-uri $GORGIAS_URI --dest-uri duckdb:///gorgias.duckdb --interval-start 2024-01-01 --dest-table 'gorgias.customers'
|
|
27
27
|
```
|
|
28
28
|
|
|
29
|
-
## Supported
|
|
29
|
+
## Supported entities
|
|
30
30
|
The Gorgias source supports a growing list of entities, feel free to create an issue if you need more entities to be supported.
|
|
31
31
|
|
|
32
32
|
### Customers
|
|
@@ -39,12 +39,12 @@ Tickets are the main entity in Gorgias, representing customer inquiries. Each ti
|
|
|
39
39
|
|
|
40
40
|
You can retrieve tickets by using `tickets` as the source table.
|
|
41
41
|
|
|
42
|
-
### Ticket
|
|
42
|
+
### Ticket messages
|
|
43
43
|
Ticket messages are the messages exchanged between the customer and the support agent in a ticket. Each message has a unique ID and contains information such as the sender, content, and timestamp.
|
|
44
44
|
|
|
45
45
|
You can retrieve ticket messages by using `ticket_messages` as the source table.
|
|
46
46
|
|
|
47
|
-
### Satisfaction
|
|
47
|
+
### Satisfaction surveys
|
|
48
48
|
Satisfaction surveys are sent to customers after a ticket is resolved to gather feedback on their experience. Each survey has a unique ID and contains information such as the rating and comments.
|
|
49
49
|
|
|
50
50
|
You can retrieve satisfaction surveys by using `satisfaction_surveys` as the source table.
|