ingestr 0.13.88__tar.gz → 0.13.89__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.13.88 → ingestr-0.13.89}/PKG-INFO +2 -2
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/supported-sources/adjust.md +10 -8
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/supported-sources/applovin.md +6 -6
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/supported-sources/applovin_max.md +5 -1
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/supported-sources/appsflyer.md +7 -3
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/supported-sources/asana.md +11 -10
- ingestr-0.13.89/docs/supported-sources/attio.md +47 -0
- ingestr-0.13.89/docs/supported-sources/fluxx.md +119 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/supported-sources/salesforce.md +21 -19
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/supported-sources/stripe.md +40 -39
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/applovin/__init__.py +1 -1
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/asana_source/__init__.py +1 -1
- ingestr-0.13.89/ingestr/src/buildinfo.py +1 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/destinations.py +37 -2
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/filesystem/__init__.py +8 -3
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/salesforce/__init__.py +9 -8
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/sources.py +1 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/requirements.in +2 -2
- {ingestr-0.13.88 → ingestr-0.13.89}/requirements.txt +5 -11
- {ingestr-0.13.88 → ingestr-0.13.89}/requirements_arm64.txt +5 -11
- ingestr-0.13.88/docs/supported-sources/attio.md +0 -45
- ingestr-0.13.88/docs/supported-sources/fluxx.md +0 -116
- ingestr-0.13.88/ingestr/src/buildinfo.py +0 -1
- {ingestr-0.13.88 → ingestr-0.13.89}/.dlt/config.toml +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/.dockerignore +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/.githooks/pre-commit-hook.sh +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/.github/workflows/deploy-docs.yml +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/.github/workflows/release.yml +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/.github/workflows/secrets-scan.yml +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/.github/workflows/tests.yml +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/.gitignore +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/.gitleaksignore +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/.python-version +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/.vale.ini +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/Dockerfile +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/LICENSE.md +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/Makefile +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/README.md +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/.vitepress/config.mjs +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/.vitepress/theme/custom.css +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/.vitepress/theme/index.js +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/commands/example-uris.md +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/commands/ingest.md +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/getting-started/core-concepts.md +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/getting-started/data-masking.md +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/getting-started/incremental-loading.md +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/getting-started/quickstart.md +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/getting-started/telemetry.md +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/index.md +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/media/applovin_max.png +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/media/athena.png +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/media/clickhouse_img.png +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/media/clickup_ingestion.png +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/media/cratedb-destination.png +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/media/cratedb-source.png +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/media/freshdesk_ingestion.png +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/media/gcp_spanner_ingestion.png +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/media/github.png +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/media/google_analytics_realtime_report.png +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/media/googleanalytics.png +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/media/ingestion_elasticsearch_img.png +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/media/kinesis.bigquery.png +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/media/linear.png +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/media/linkedin_ads.png +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/media/mixpanel_ingestion.png +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/media/personio.png +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/media/personio_duckdb.png +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/media/phantombuster.png +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/media/pipedrive.png +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/media/quickbook_ingestion.png +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/media/sftp.png +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/media/stripe_postgres.png +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/media/tiktok.png +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/media/wise_ingestion.png +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/media/zoom_ingestion.png +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/supported-sources/airtable.md +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/supported-sources/appstore.md +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/supported-sources/athena.md +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/supported-sources/bigquery.md +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/supported-sources/chess.md +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/supported-sources/clickhouse.md +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/supported-sources/clickup.md +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/supported-sources/cratedb.md +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/supported-sources/csv.md +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/supported-sources/custom_queries.md +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/supported-sources/databricks.md +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/supported-sources/db2.md +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/supported-sources/duckdb.md +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/supported-sources/dynamodb.md +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/supported-sources/elasticsearch.md +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/supported-sources/facebook-ads.md +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/supported-sources/frankfurter.md +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/supported-sources/freshdesk.md +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/supported-sources/gcs.md +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/supported-sources/github.md +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/supported-sources/google-ads.md +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/supported-sources/google_analytics.md +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/supported-sources/gorgias.md +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/supported-sources/gsheets.md +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/supported-sources/hubspot.md +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/supported-sources/influxdb.md +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/supported-sources/isoc-pulse.md +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/supported-sources/kafka.md +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/supported-sources/kinesis.md +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/supported-sources/klaviyo.md +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/supported-sources/linear.md +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/supported-sources/linkedin_ads.md +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/supported-sources/mixpanel.md +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/supported-sources/mongodb.md +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/supported-sources/motherduck.md +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/supported-sources/mssql.md +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/supported-sources/mysql.md +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/supported-sources/notion.md +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/supported-sources/oracle.md +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/supported-sources/personio.md +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/supported-sources/phantombuster.md +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/supported-sources/pinterest.md +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/supported-sources/pipedrive.md +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/supported-sources/postgres.md +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/supported-sources/quickbooks.md +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/supported-sources/redshift.md +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/supported-sources/revenuecat.md +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/supported-sources/s3.md +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/supported-sources/sap-hana.md +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/supported-sources/sftp.md +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/supported-sources/shopify.md +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/supported-sources/slack.md +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/supported-sources/smartsheets.md +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/supported-sources/snowflake.md +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/supported-sources/solidgate.md +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/supported-sources/spanner.md +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/supported-sources/sqlite.md +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/supported-sources/tiktok-ads.md +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/supported-sources/trustpilot.md +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/supported-sources/wise.md +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/supported-sources/zendesk.md +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/supported-sources/zoom.md +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/tutorials/load-kinesis-bigquery.md +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/tutorials/load-personio-duckdb.md +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/docs/tutorials/load-stripe-postgres.md +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/conftest.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/main.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/.gitignore +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/adjust/__init__.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/adjust/adjust_helpers.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/airtable/__init__.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/applovin_max/__init__.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/appsflyer/__init__.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/appsflyer/client.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/appstore/__init__.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/appstore/client.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/appstore/errors.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/appstore/models.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/appstore/resources.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/arrow/__init__.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/asana_source/helpers.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/asana_source/settings.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/attio/__init__.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/attio/helpers.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/blob.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/chess/__init__.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/chess/helpers.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/chess/settings.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/clickup/__init__.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/clickup/helpers.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/collector/spinner.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/dynamodb/__init__.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/elasticsearch/__init__.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/errors.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/facebook_ads/__init__.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/facebook_ads/exceptions.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/facebook_ads/helpers.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/facebook_ads/settings.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/facebook_ads/utils.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/factory.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/filesystem/helpers.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/filesystem/readers.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/filters.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/fluxx/__init__.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/fluxx/helpers.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/frankfurter/__init__.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/frankfurter/helpers.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/freshdesk/__init__.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/freshdesk/freshdesk_client.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/freshdesk/settings.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/github/__init__.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/github/helpers.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/github/queries.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/github/settings.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/google_ads/__init__.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/google_ads/field.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/google_ads/metrics.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/google_ads/predicates.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/google_ads/reports.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/google_analytics/__init__.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/google_analytics/helpers.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/google_sheets/README.md +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/google_sheets/__init__.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/google_sheets/helpers/__init__.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/google_sheets/helpers/api_calls.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/google_sheets/helpers/data_processing.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/gorgias/__init__.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/gorgias/helpers.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/http_client.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/hubspot/__init__.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/hubspot/helpers.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/hubspot/settings.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/influxdb/__init__.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/influxdb/client.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/isoc_pulse/__init__.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/kafka/__init__.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/kafka/helpers.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/kinesis/__init__.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/kinesis/helpers.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/klaviyo/__init__.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/klaviyo/client.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/klaviyo/helpers.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/linear/__init__.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/linear/helpers.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/linkedin_ads/__init__.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/linkedin_ads/dimension_time_enum.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/linkedin_ads/helpers.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/loader.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/masking.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/mixpanel/__init__.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/mixpanel/client.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/mongodb/__init__.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/mongodb/helpers.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/notion/__init__.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/notion/helpers/__init__.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/notion/helpers/client.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/notion/helpers/database.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/notion/settings.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/partition.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/personio/__init__.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/personio/helpers.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/phantombuster/__init__.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/phantombuster/client.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/pinterest/__init__.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/pipedrive/__init__.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/pipedrive/helpers/__init__.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/pipedrive/helpers/custom_fields_munger.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/pipedrive/helpers/pages.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/pipedrive/settings.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/pipedrive/typing.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/quickbooks/__init__.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/resource.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/revenuecat/__init__.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/revenuecat/helpers.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/salesforce/helpers.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/shopify/__init__.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/shopify/exceptions.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/shopify/helpers.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/shopify/settings.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/slack/__init__.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/slack/helpers.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/slack/settings.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/smartsheets/__init__.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/solidgate/__init__.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/solidgate/helpers.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/sql_database/__init__.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/sql_database/callbacks.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/stripe_analytics/__init__.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/stripe_analytics/helpers.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/stripe_analytics/settings.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/table_definition.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/telemetry/event.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/testdata/fakebqcredentials.json +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/tiktok_ads/__init__.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/tiktok_ads/tiktok_helpers.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/time.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/trustpilot/__init__.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/trustpilot/client.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/version.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/wise/__init__.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/wise/client.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/zendesk/__init__.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/zendesk/helpers/__init__.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/zendesk/helpers/api_helpers.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/zendesk/helpers/credentials.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/zendesk/helpers/talk_api.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/zendesk/settings.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/zoom/__init__.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/src/zoom/helpers.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/testdata/.gitignore +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/testdata/create_replace.csv +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/testdata/delete_insert_expected.csv +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/testdata/delete_insert_part1.csv +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/testdata/delete_insert_part2.csv +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/testdata/merge_expected.csv +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/testdata/merge_part1.csv +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/testdata/merge_part2.csv +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/ingestr/tests/unit/test_smartsheets.py +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/package-lock.json +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/package.json +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/pyproject.toml +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/requirements-dev.txt +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/resources/demo.gif +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/resources/demo.tape +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/resources/ingestr.svg +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/styles/Google/AMPM.yml +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/styles/Google/Acronyms.yml +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/styles/Google/Colons.yml +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/styles/Google/Contractions.yml +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/styles/Google/DateFormat.yml +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/styles/Google/Ellipses.yml +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/styles/Google/EmDash.yml +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/styles/Google/Exclamation.yml +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/styles/Google/FirstPerson.yml +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/styles/Google/Gender.yml +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/styles/Google/GenderBias.yml +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/styles/Google/HeadingPunctuation.yml +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/styles/Google/Headings.yml +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/styles/Google/Latin.yml +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/styles/Google/LyHyphens.yml +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/styles/Google/OptionalPlurals.yml +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/styles/Google/Ordinal.yml +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/styles/Google/OxfordComma.yml +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/styles/Google/Parens.yml +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/styles/Google/Passive.yml +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/styles/Google/Periods.yml +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/styles/Google/Quotes.yml +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/styles/Google/Ranges.yml +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/styles/Google/Semicolons.yml +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/styles/Google/Slang.yml +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/styles/Google/Spacing.yml +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/styles/Google/Spelling.yml +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/styles/Google/Units.yml +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/styles/Google/We.yml +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/styles/Google/Will.yml +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/styles/Google/WordList.yml +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/styles/Google/meta.json +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/styles/Google/vocab.txt +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/styles/bruin/Ingestr.yml +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/styles/config/vocabularies/bruin/accept.txt +0 -0
- {ingestr-0.13.88 → ingestr-0.13.89}/test.env.template +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ingestr
|
|
3
|
-
Version: 0.13.
|
|
3
|
+
Version: 0.13.89
|
|
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
|
|
@@ -42,7 +42,7 @@ Requires-Dist: confluent-kafka==2.8.0
|
|
|
42
42
|
Requires-Dist: crate==2.0.0
|
|
43
43
|
Requires-Dist: cryptography==44.0.2
|
|
44
44
|
Requires-Dist: curlify==2.2.1
|
|
45
|
-
Requires-Dist: databricks-sql-connector==
|
|
45
|
+
Requires-Dist: databricks-sql-connector==4.0.5
|
|
46
46
|
Requires-Dist: databricks-sqlalchemy==1.0.2
|
|
47
47
|
Requires-Dist: dataclasses-json==0.6.7
|
|
48
48
|
Requires-Dist: decorator==5.2.1
|
|
@@ -32,12 +32,7 @@ Adjust data may change going back, which means you'll need to change your start
|
|
|
32
32
|
## Tables
|
|
33
33
|
Adjust source allows ingesting data from various sources:
|
|
34
34
|
|
|
35
|
-
|
|
36
|
-
- `creatives`: Retrieves data for a creative assets, detailing the app's revenue and network costs across multiple days.
|
|
37
|
-
- `events`: Retrieves data for [events](https://dev.adjust.com/en/api/rs-api/events/) and event slugs.
|
|
38
|
-
- `custom`: Retrieves custom data based on the dimensions and metrics specified.
|
|
39
|
-
|
|
40
|
-
### Custom reports: `custom:<dimensions>:<metrics>[:<filters>]`
|
|
35
|
+
#### Custom reports: `custom:<dimensions>:<metrics>[:<filters>]`
|
|
41
36
|
|
|
42
37
|
The custom table allows you to retrieve data based on specific dimensions and metrics, and apply filters to the data.
|
|
43
38
|
|
|
@@ -55,7 +50,14 @@ Parameters:
|
|
|
55
50
|
> [!WARNING]
|
|
56
51
|
> Custom tables require a time-based dimension for efficient operation, such as `hour`, `day`, `week`, `month`, or `year`.
|
|
57
52
|
|
|
58
|
-
|
|
53
|
+
| Table | PK/Merge Key | Inc Key | Inc Strategy | Details |
|
|
54
|
+
| --------------- | ----------- | --------------- | ------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
55
|
+
| [Events](https://dev.adjust.com/en/api/rs-api/events) | id | – | replace | Retrieves data for [events](https://dev.adjust.com/en/api/rs-api/events/) and event slugs. | |
|
|
56
|
+
| [campaigns](https://dev.adjust.com/en/api/rs-api/reports) | day | – | merge | Retrieves data for a campaign, showing the app's revenue and network costs over multiple days. `Columns:` campaign, day, app, store_type, channel, country, network_cost, all_revenue_total_d0, ad_revenue_total_d0, revenue_total_d0, all_revenue_total_d1, ad_revenue_total_d1, revenue_total_d1, all_revenue_total_d3, ad_revenue_total_d3, revenue_total_d3, all_revenue_total_d7, ad_revenue_total_d7, revenue_total_d7, all_revenue_total_d14, ad_revenue_total_d14, revenue_total_d14, all_revenue_total_d21 |
|
|
57
|
+
| [creatives](https://dev.adjust.com/en/api/rs-api/reports) | day | - | merge | Retrieves data for a creative assets, detailing the app's revenue and network costs across multiple days. `Columns:` campaign, day, app, store_type, channel, country, adgroup, creative, network_cost, all_revenue_total_d0, ad_revenue_total_d0, revenue_total_d0, all_revenue_total_d1, ad_revenue_total_d1, revenue_total_d1, all_revenue_total_d3, ad_revenue_total_d3, revenue_total_d3, all_revenue_total_d7, ad_revenue_total_d7, revenue_total_d7, all_revenue_total_d14, ad_revenue_total_d14, revenue_total_d14, all_revenue_total_d21 |
|
|
58
|
+
| `custom` | `configurable` | - | merge | Retrieves custom data based on the dimensions and metrics specified.
|
|
59
|
+
|
|
60
|
+
## Examples
|
|
59
61
|
|
|
60
62
|
Copy campaigns data from Adjust into a DuckDB database:
|
|
61
63
|
```sh
|
|
@@ -82,4 +84,4 @@ ingestr ingest \
|
|
|
82
84
|
--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" \
|
|
83
85
|
--dest-uri duckdb:///adjust.db \
|
|
84
86
|
--dest-table "mat.example"
|
|
85
|
-
```
|
|
87
|
+
```
|
|
@@ -101,12 +101,12 @@ $ duckdb report.db 'select day from public.publisher_report group by 1'
|
|
|
101
101
|
|
|
102
102
|
## Tables
|
|
103
103
|
|
|
104
|
-
| Name |
|
|
105
|
-
|
|
|
106
|
-
| `publisher-report` | Provides daily metrics from the `report` end point using the report_type `publisher` |
|
|
107
|
-
| `advertiser-report` | Provides daily metrics from the `report` end point using the report_type `advertiser`|
|
|
108
|
-
| `advertiser-probabilistic-report` | Provides daily metrics from the `probabilisticReport` end point using the report_type `advertiser` |
|
|
109
|
-
| `advertiser-ska-report` | Provides daily metrics from the `skaReport` end point using the report_type `advertiser` |
|
|
104
|
+
| Name | Merge Key | Inc Key | Inc Strategy | Details |
|
|
105
|
+
| --------------- | ----------- | --------------- | ------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
106
|
+
| `publisher-report` | day | day | merge| Provides daily metrics from the `report` end point using the report_type `publisher` |
|
|
107
|
+
| `advertiser-report` | day | day | merge| Provides daily metrics from the `report` end point using the report_type `advertiser`|
|
|
108
|
+
| `advertiser-probabilistic-report` | day | day | merge| Provides daily metrics from the `probabilisticReport` end point using the report_type `advertiser` |
|
|
109
|
+
| `advertiser-ska-report` | day | day | merge| Provides daily metrics from the `skaReport` end point using the report_type `advertiser` |
|
|
110
110
|
|
|
111
111
|
## Custom Reports
|
|
112
112
|
|
|
@@ -45,4 +45,8 @@ By default, `ingestr` retrieves data for the last 30 days. For a custom date ran
|
|
|
45
45
|
<img alt="applovin_max_img" src="../media/applovin_max.png"/>
|
|
46
46
|
|
|
47
47
|
## Table
|
|
48
|
-
|
|
48
|
+
|
|
49
|
+
Applovin Max source allows ingesting the following sources into separate tables:
|
|
50
|
+
| Table | PK | Inc Key | Inc Strategy | Details |
|
|
51
|
+
| --------------- | ----------- | --------------- | ------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
52
|
+
| [user_ad_revenue](https://developers.applovin.com/en/max/reporting-apis/user-level-ad-revenue-api/) | `partition_date` (extracts date-only portion from the timestamp-based date column) | partition_date | merge | Provides daily metrics from the user level ad revenue API. User-level revenue data is available eight hours after UTC day end. So, for example, data for UTC 2025-01-01 is available on UTC 2025-01-02 after 08:00.
|
|
@@ -34,9 +34,13 @@ The result of this command will be a table in the `appsflyer.duckdb` database.
|
|
|
34
34
|
|
|
35
35
|
ingestr integrates with the [Master Report API](https://dev.appsflyer.com/hc/reference/master_api_get) of AppsFlyer, which allows you to retrieve data for the following tables:
|
|
36
36
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
37
|
+
## Tables
|
|
38
|
+
|
|
39
|
+
| Name | PK/Merge Key | Inc Key | Inc Strategy | Details |
|
|
40
|
+
| --------------- | ----------- | --------------- | ------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
41
|
+
| [campaigns](https://dev.appsflyer.com/hc/reference/master_api_get) | install_time | install_time | merge| Retrieves data for campaigns, detailing the app's costs, loyal users, total installs, and revenue over multiple days.`columns:` app_id, campaign, geo, install_time, average_ecpi, clicks, cohort_day_1_revenue_per_user, cohort_day_1_total_revenue_per_user, cohort_day_14_revenue_per_user, cohort_day_14_total_revenue_per_user, cohort_day_21_revenue_per_user, cohort_day_21_total_revenue_per_user, cohort_day_3_revenue_per_user, cohort_day_3_total_revenue_per_user, cohort_day_7_revenue_per_user, cohort_day_7_total_revenue_per_user, cost, impressions, installs, loyal_users, retention_day_7, revenue, roi, uninstalls |
|
|
42
|
+
| [creatives](https://dev.appsflyer.com/hc/reference/master_api_get) | install_time | install_time | merge| Retrieves data for a creative asset, including revenue and cost. `columns:` geo, app_id, install_time, campaign, adset_id, adset, ad_id, impressions, clicks, installs, cost, revenue, average_ecpi, loyal_users, uninstalls, roi |
|
|
43
|
+
| `custom:<dimensions>:<metrics>` | Dynamic (dimensions + install_time) | install_time | merge| Retrieves data for custom tables, which can be specified by the user.|
|
|
40
44
|
|
|
41
45
|
Use these as `--source-table` parameter in the `ingestr ingest` command.
|
|
42
46
|
|
|
@@ -41,16 +41,17 @@ ingestr ingest \
|
|
|
41
41
|
|
|
42
42
|
Asana source allows ingesting the following sources into separate tables:
|
|
43
43
|
|
|
44
|
-
|
|
|
45
|
-
|
|
46
|
-
| `workspaces`
|
|
47
|
-
| `projects`
|
|
48
|
-
| `
|
|
49
|
-
| `
|
|
50
|
-
| `
|
|
51
|
-
| `stories`
|
|
52
|
-
| `teams`
|
|
53
|
-
| `users`
|
|
44
|
+
| Table | Primary/Merge Key | Inc Key | Inc Strategy | Details |
|
|
45
|
+
|-------|----|----------|--------------|---------|
|
|
46
|
+
| `workspaces` | - | - | replace | Information about people, materials, or assets required to complete a task or project successfully. Full reload on each run. |
|
|
47
|
+
| `projects` | - | - | replace | Collections of tasks and related information. Full reload on each run. |
|
|
48
|
+
| `sections` | - | - | replace | Project sections and organization. Full reload on each run. |
|
|
49
|
+
| `tags` | - | - | replace | Labels that can be attached to tasks, projects, or conversations. Full reload on each run. |
|
|
50
|
+
| `tasks` | gid | modified_at | merge | Tasks within a project. Only tasks that belong to a project can be ingested. Uses modified_since API parameter for incremental loading. |
|
|
51
|
+
| `stories` | - | - | replace | Updates or comments that team members can add to a task or project. |
|
|
52
|
+
| `teams` | - | - | replace | Groups of individuals who work together to complete projects and tasks. Full reload on each run. |
|
|
53
|
+
| `users` | - | - | replace | Individuals who have access to the Asana platform. Full reload on each run. |
|
|
54
|
+
|
|
54
55
|
|
|
55
56
|
Use these as `--source-table` parameter in the `ingestr ingest` command.
|
|
56
57
|
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# Attio
|
|
2
|
+
[Attio](https://attio.com/) is an AI-native CRM platform that helps companies build, scale, and grow their business.
|
|
3
|
+
|
|
4
|
+
ingestr supports Attio as a source.
|
|
5
|
+
|
|
6
|
+
## URI format
|
|
7
|
+
|
|
8
|
+
The URI format for Attio is as follows:
|
|
9
|
+
|
|
10
|
+
```plaintext
|
|
11
|
+
attio://?api_key=<api_key>
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
URI parameters:
|
|
15
|
+
- `api_key`: the API key used for authentication with the Attio API
|
|
16
|
+
|
|
17
|
+
## Setting up a Attio Integration
|
|
18
|
+
|
|
19
|
+
You can find your Attio API key by following the guide [here](https://attio.com/help/apps/other-apps/generating-an-api-key).
|
|
20
|
+
|
|
21
|
+
Let's say your `api_key` is key_123, here's a sample command that will copy the data from Attio into a DuckDB database:
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
ingestr ingest \
|
|
26
|
+
--source-uri 'Attio://?api_key=key_123' \
|
|
27
|
+
--source-table 'objects' \
|
|
28
|
+
--dest-uri duckdb:///attio.duckdb \
|
|
29
|
+
--dest-table 'dest.objects'
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Tables
|
|
33
|
+
|
|
34
|
+
Attio source supports ingesting the following sources into separate tables:
|
|
35
|
+
|
|
36
|
+
| Table | PK | Inc Key | Inc Strategy | Details |
|
|
37
|
+
|-------|----|----------|--------------|---------|
|
|
38
|
+
| [objects](https://docs.attio.com/rest-api/endpoint-reference/objects/list-objects) | - | - | replace | Objects are the data types used to store facts about your customers. Fetches all objects. Full reload on each run. |
|
|
39
|
+
| [records:{object_api_slug}](https://docs.attio.com/rest-api/endpoint-reference/records/list-records) | - | - | replace | Fetches all records of an object. For example: `records:companies`. Full reload on each run. |
|
|
40
|
+
| [lists](https://docs.attio.com/rest-api/endpoint-reference/lists/list-all-lists) | - | - | replace | Fetches all lists. Full reload on each run. |
|
|
41
|
+
| [list_entries:{list_id}](https://docs.attio.com/rest-api/endpoint-reference/entries/list-entries) | - | - | replace | Lists all items in a specific list. For example: `list_entries:8abc-123-456-789d-123`. Full reload on each run. |
|
|
42
|
+
| [all_list_entries:{object_api_slug}](https://docs.attio.com/rest-api/endpoint-reference/entries/list-entries) | - | - | replace | Fetches all the lists for an object, and then fetches all the entries from that list. For example: `all_list_entries:companies`. Full reload on each run. |
|
|
43
|
+
|
|
44
|
+
Use this as `--source-table` parameter in the `ingestr ingest` command.
|
|
45
|
+
|
|
46
|
+
> [!WARNING]
|
|
47
|
+
> Attio does not support incremental loading, which means ingestr will do a full-refresh.
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
# Fluxx
|
|
2
|
+
|
|
3
|
+
[Fluxx](https://www.fluxx.io/) is a cloud-based grants management platform designed to streamline and automate the entire grantmaking process for foundations, corporations, governments, and other funding organizations.
|
|
4
|
+
|
|
5
|
+
ingestr supports Fluxx as a source.
|
|
6
|
+
|
|
7
|
+
## URI format
|
|
8
|
+
|
|
9
|
+
The URI format for Fluxx is:
|
|
10
|
+
|
|
11
|
+
```plaintext
|
|
12
|
+
fluxx://<instance>?client_id=<client_id>&client_secret=<client_secret>
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
URI parameters:
|
|
16
|
+
|
|
17
|
+
- `instance`: Your Fluxx instance subdomain (e.g., `mycompany.preprod` for `https://mycompany.preprod.fluxxlabs.com`)
|
|
18
|
+
- `client_id`: OAuth 2.0 client ID for authentication
|
|
19
|
+
- `client_secret`: OAuth 2.0 client secret for authentication
|
|
20
|
+
|
|
21
|
+
## Example usage
|
|
22
|
+
|
|
23
|
+
### Basic usage - all fields
|
|
24
|
+
|
|
25
|
+
Assuming your instance is `myorg.preprod`, you can ingest grant requests into DuckDB using:
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
ingestr ingest \
|
|
29
|
+
--source-uri 'fluxx://myorg.preprod?client_id=your_client_id&client_secret=your_client_secret' \
|
|
30
|
+
--source-table 'grant_request' \
|
|
31
|
+
--dest-uri duckdb:///fluxx.duckdb \
|
|
32
|
+
--dest-table 'raw.grant_request'
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
### Custom field selection
|
|
36
|
+
|
|
37
|
+
You can select specific fields to ingest using the colon syntax:
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
ingestr ingest \
|
|
41
|
+
--source-uri 'fluxx://myorg.preprod?client_id=your_client_id&client_secret=your_client_secret' \
|
|
42
|
+
--source-table 'grant_request:id,amount_requested,amount_recommended,granted' \
|
|
43
|
+
--dest-uri duckdb:///fluxx.duckdb \
|
|
44
|
+
--dest-table 'raw.grant_request'
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## Tables
|
|
48
|
+
|
|
49
|
+
Fluxx source allows ingesting the following sources into separate tables:
|
|
50
|
+
|
|
51
|
+
| Table | PK | Inc Key | Inc Strategy | Details |
|
|
52
|
+
| ----- | -- | ------- | ------------ | ------- |
|
|
53
|
+
| `claim` | id | updated_at | merge | Grant claims and payment requests with approval status, amounts, and dates |
|
|
54
|
+
| `claim_expense` | id | updated_at | merge | Claim expense forms and templates for financial tracking |
|
|
55
|
+
| `claim_expense_datum` | id | updated_at | merge | Individual data entries within claim expense forms with budget category details |
|
|
56
|
+
| `claim_expense_row` | id | updated_at | merge | Specific line items or rows within claim expense forms |
|
|
57
|
+
| `concept_initiative` | id | updated_at | merge | Concept initiatives linking programs, initiatives, and sub-programs/sub-initiatives |
|
|
58
|
+
| `dashboard_theme` | id | updated_at | merge | Dashboard theme configurations for UI customization |
|
|
59
|
+
| `etl_claim_expense_datum` | id | updated_at | merge | ETL data for claim expense items with comprehensive budget tracking details |
|
|
60
|
+
| `etl_grantee_budget_tracker_actual` | id | updated_at | merge | ETL data for actual grantee budget tracker amounts and expenses |
|
|
61
|
+
| `etl_grantee_budget_tracker_period_datum` | id | updated_at | merge | ETL data for grantee budget tracker period information with detailed financial tracking |
|
|
62
|
+
| `etl_relationship` | id | updated_at | merge | ETL data for entity relationships tracking connections between users, organizations, requests, and other entities |
|
|
63
|
+
| `etl_request_budget` | id | updated_at | merge | ETL budget data for request funding sources with comprehensive financial details |
|
|
64
|
+
| `etl_request_transaction_budget` | id | updated_at | merge | ETL budget data for request transaction funding sources including payment tracking |
|
|
65
|
+
| `exempt_organization` | id | updated_at | merge | Tax-exempt organization data including EIN, classification, and financial information |
|
|
66
|
+
| `geo_city` | id | updated_at | merge | City geographic data with coordinates and postal codes |
|
|
67
|
+
| `geo_county` | id | updated_at | merge | County geographic data with FIPS codes |
|
|
68
|
+
| `geo_place` | id | updated_at | merge | Geographic places with ancestry and location data |
|
|
69
|
+
| `geo_region` | id | updated_at | merge | Geographic regions |
|
|
70
|
+
| `geo_state` | id | updated_at | merge | State geographic data with abbreviations and FIPS codes |
|
|
71
|
+
| `grant_request` | id | updated_at | merge | Grant applications and requests with comprehensive details (300+ fields) |
|
|
72
|
+
| `grantee_budget_category` | id | updated_at | merge | Budget category definitions used by grantees for expense tracking |
|
|
73
|
+
| `grantee_budget_tracker` | id | updated_at | merge | Budget tracking documents for grantee financial management |
|
|
74
|
+
| `grantee_budget_tracker_period` | id | updated_at | merge | Time periods for budget tracking with start and end dates |
|
|
75
|
+
| `grantee_budget_tracker_period_datum` | id | updated_at | merge | Budget data entries for specific tracking periods |
|
|
76
|
+
| `grantee_budget_tracker_period_datum_actual` | id | updated_at | merge | Actual expenses and amounts recorded for budget tracking periods |
|
|
77
|
+
| `grantee_budget_tracker_row` | id | updated_at | merge | Individual budget line items and categories within budget trackers |
|
|
78
|
+
| `integration_log` | id | updated_at | merge | Integration and system logs for tracking data processing and errors |
|
|
79
|
+
| `mac_model_type_dyn_financial_audit` | id | updated_at | merge | Dynamic financial audit models with audit tracking, compliance status, and financial variance analysis |
|
|
80
|
+
| `mac_model_type_dyn_mel` | id | updated_at | merge | Dynamic Monitoring, Evaluation & Learning (MEL) models with performance indicators, baseline tracking, and evaluation metrics |
|
|
81
|
+
| `mac_model_type_dyn_tool` | id | updated_at | merge | Dynamic tool management models for tracking deployment status, usage metrics, and tool effectiveness |
|
|
82
|
+
| `machine_category` | id | updated_at | merge | Machine category definitions for workflow state management |
|
|
83
|
+
| `model_attribute_value` | id | updated_at | merge | Model attribute values with hierarchical data and dependencies |
|
|
84
|
+
| `model_document` | id | updated_at | merge | Document metadata including file information, storage details, and document relationships |
|
|
85
|
+
| `model_document_sub_type` | id | updated_at | merge | Document sub-type definitions and categories |
|
|
86
|
+
| `model_document_type` | id | updated_at | merge | Document type configurations including DocuSign integration and permissions |
|
|
87
|
+
| `model_theme` | id | updated_at | merge | Model themes for categorization and program hierarchy organization |
|
|
88
|
+
| `organization` | id | updated_at | merge | Organizations (grantees, fiscal sponsors, etc.) with contact information and tax details |
|
|
89
|
+
| `population_estimate` | id | updated_at | merge | Population estimates by geographic area with demographic data |
|
|
90
|
+
| `population_estimate_year` | id | updated_at | merge | Yearly population estimates with income and demographic breakdowns |
|
|
91
|
+
| `program` | id | updated_at | merge | Funding programs and initiatives |
|
|
92
|
+
| `request_report` | id | updated_at | merge | Reports submitted for grants |
|
|
93
|
+
| `request_transaction` | id | updated_at | merge | Financial transactions and payments |
|
|
94
|
+
| `request_transaction_funding_source` | id | updated_at | merge | Funding source details for specific request transactions |
|
|
95
|
+
| `request_user` | id | updated_at | merge | Relationships between requests and users with roles and descriptions |
|
|
96
|
+
| `salesforce_authentication` | id | updated_at | merge | Salesforce authentication configurations with OAuth tokens, connection management, and API usage tracking |
|
|
97
|
+
| `sub_initiative` | id | updated_at | merge | Sub-initiatives for detailed planning |
|
|
98
|
+
| `sub_program` | id | updated_at | merge | Sub-programs under main programs |
|
|
99
|
+
| `ui_version` | id | updated_at | merge | User interface version information and system configuration |
|
|
100
|
+
| `user` | id | updated_at | merge | User accounts and profiles |
|
|
101
|
+
| `user_organization` | id | updated_at | merge | Relationships between users and organizations with roles, departments, and contact details |
|
|
102
|
+
|
|
103
|
+
Use these as `--source-table` parameter in the `ingestr ingest` command.
|
|
104
|
+
|
|
105
|
+
### Field Selection
|
|
106
|
+
|
|
107
|
+
Each resource contains numerous fields. You can:
|
|
108
|
+
1. **Ingest all fields**: Use the resource name directly (e.g., `grant_request`)
|
|
109
|
+
2. **Select specific fields**: Use colon syntax (e.g., `grant_request:id,name,amount_requested`)
|
|
110
|
+
|
|
111
|
+
The field selection feature is particularly useful for large resources like `grant_request` which has over 300 fields.
|
|
112
|
+
|
|
113
|
+
## Authentication
|
|
114
|
+
|
|
115
|
+
Fluxx uses OAuth 2.0 with client credentials flow. To obtain credentials:
|
|
116
|
+
|
|
117
|
+
1. Contact your Fluxx administrator to create an API client
|
|
118
|
+
2. You'll receive a `client_id` and `client_secret`
|
|
119
|
+
3. Note your Fluxx instance subdomain (the part before `.fluxxlabs.com`)
|
|
@@ -7,13 +7,14 @@ Ingestr supports Salesforce as a source.
|
|
|
7
7
|
|
|
8
8
|
The URI format for Salesforce is as follows:
|
|
9
9
|
```
|
|
10
|
-
salesforce://?username=<username>&password=<password>&token=<token>
|
|
10
|
+
salesforce://?username=<username>&password=<password>&token=<token>&domain=<domain>
|
|
11
11
|
```
|
|
12
12
|
|
|
13
13
|
URI parameters:
|
|
14
14
|
- `username` is your Salesforce account username.
|
|
15
15
|
- `password` is your Salesforce account password.
|
|
16
16
|
- `token` is your Salesforce security token.
|
|
17
|
+
- `domain` is your Salesforce instance domain.
|
|
17
18
|
|
|
18
19
|
You can obtain your security token by logging into your Salesforce account and navigating to the user settings under "Reset My Security Token."
|
|
19
20
|
|
|
@@ -27,13 +28,14 @@ Let's say:
|
|
|
27
28
|
* Your Salesforce username is `user`.
|
|
28
29
|
* Your password is `password123`.
|
|
29
30
|
* Your security token is `fake_token`.
|
|
31
|
+
* Your domain is `test.salesforce.com`.
|
|
30
32
|
* You want to ingest `account` data from your salesforce account
|
|
31
33
|
* You want to save this data in a duckdb database `sf.db` under the table `public.account`
|
|
32
34
|
|
|
33
35
|
You can run the following command to achieve this:
|
|
34
36
|
```sh
|
|
35
37
|
ingestr ingest \
|
|
36
|
-
--source-uri "salesforce://?username=user&password=password123&token=fake_token" \
|
|
38
|
+
--source-uri "salesforce://?username=user&password=password123&token=fake_token&domain=test.salesforce.com" \
|
|
37
39
|
--source-table "account" \
|
|
38
40
|
--dest-uri "duckdb:///sf.db" \
|
|
39
41
|
--dest-table "public.account"
|
|
@@ -43,23 +45,23 @@ ingestr ingest \
|
|
|
43
45
|
|
|
44
46
|
Salesforce source allows ingesting the following objects into separate tables:
|
|
45
47
|
|
|
46
|
-
|
|
|
47
|
-
|
|
48
|
-
| `user`
|
|
49
|
-
| `user_role`
|
|
50
|
-
| `opportunity`
|
|
51
|
-
| `opportunity_line_item` | merge
|
|
52
|
-
| `opportunity_contact_role` | merge
|
|
53
|
-
| `account`
|
|
54
|
-
| `contact`
|
|
55
|
-
| `lead`
|
|
56
|
-
| `campaign`
|
|
57
|
-
| `campaign_member`
|
|
58
|
-
|
|
|
59
|
-
|
|
|
60
|
-
|
|
|
61
|
-
|
|
|
62
|
-
|
|
|
48
|
+
| Table | PK | Inc Key | Inc Strategy | Details |
|
|
49
|
+
|-------|----|---------|--------------|---------|
|
|
50
|
+
| `user` | - | - | replace | Refers to an individual who has access to a Salesforce org or instance. |
|
|
51
|
+
| `user_role` | - | - | replace | A standard object that represents a role within the organization's hierarchy.|
|
|
52
|
+
| `opportunity` | id | last_timestamp | merge | Represents a sales opportunity for a specific account or contact. |
|
|
53
|
+
| `opportunity_line_item` | id | last_timestamp | merge | Represents individual line items or products associated with an Opportunity. |
|
|
54
|
+
| `opportunity_contact_role` | id | last_timestamp | merge | Represents the association between an Opportunity and a Contact. |
|
|
55
|
+
| `account` | id | last_timestamp | merge | Individual or organization that interacts with your business. |
|
|
56
|
+
| `contact` | id | - | replace | An individual person associated with an account or organization. |
|
|
57
|
+
| `lead` | id | - | replace | Prospective customer/individual/org. that has shown interest in a company's products/services. |
|
|
58
|
+
| `campaign` | id | - | replace | Marketing initiative or project designed to achieve specific goals, such as generating leads. |
|
|
59
|
+
| `campaign_member` | id | last_timestamp | merge | Association between a Contact or Lead and a Campaign. |
|
|
60
|
+
| `product` | id | - | replace | For managing and organizing your product-related data within the Salesforce ecosystem. |
|
|
61
|
+
| `pricebook` | id | - | replace | Used to manage product pricing and create price books. |
|
|
62
|
+
| `pricebook_entry` | id | - | replace | Represents a specific price for a product in a price book. |
|
|
63
|
+
| `task` | id | last_timestamp | merge | Used to track and manage various activities and tasks within the Salesforce platform. |
|
|
64
|
+
| `event` | id | last_timestamp | merge | Used to track and manage calendar-based events, such as meetings, appointments, or calls. |
|
|
63
65
|
|
|
64
66
|
Use these as `--source-table` parameters in the `ingestr ingest` command.
|
|
65
67
|
|
|
@@ -93,45 +93,46 @@ Stripe source allows ingesting the following sources into separate tables:
|
|
|
93
93
|
|
|
94
94
|
All endpoints support the standard async loading mode. The following endpoints are available:
|
|
95
95
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
96
|
+
| Table | PK | Inc Key | Inc Strategy | Details |
|
|
97
|
+
| ----- | -- | ------- | ------------ | ------- |
|
|
98
|
+
| `account` | id | created | merge | Contains information about a Stripe account, including balances, payouts, and account settings. |
|
|
99
|
+
| `apple_pay_domain` | id | created | merge | Represents Apple Pay domains registered with Stripe for processing Apple Pay payments. |
|
|
100
|
+
| `application_fee` | id | created | merge | Records fees collected by platforms on payments processed through connected accounts. |
|
|
101
|
+
| `balance_transaction` | id | created | merge | Records transactions that affect the Stripe account balance, such as charges, refunds, and payouts. |
|
|
102
|
+
| `charge` | id | created | merge | Returns a list of charges. |
|
|
103
|
+
| `checkout_session` | id | created | merge | Contains data about Checkout sessions created for payment processing workflows. |
|
|
104
|
+
| `coupon` | id | created | merge | Stores data about discount codes or coupons that can be applied to invoices, subscriptions, or other charges. |
|
|
105
|
+
| `credit_note` | id | created | merge | Contains credit note information for refunds and adjustments. |
|
|
106
|
+
| `customer` | id | created | merge | Holds information about customers, such as billing details, payment methods, and associated transactions. |
|
|
107
|
+
| `dispute` | id | created | merge | Records payment disputes and chargebacks filed by customers or banks. |
|
|
108
|
+
| `event` | id | created | merge | Logs all events in the Stripe account, including customer actions, account updates, and system-generated events. |
|
|
109
|
+
| `invoice` | id | created | merge | Represents invoices sent to customers, detailing line items, amounts, and payment status. |
|
|
110
|
+
| `invoice_item` | id | created | merge | Contains individual line items that can be added to invoices. |
|
|
111
|
+
| `invoice_line_item` | id | created | merge | Represents line items within invoices. |
|
|
112
|
+
| `payment_intent` | id | created | merge | Represents payment intents tracking the lifecycle of payments from creation to completion. |
|
|
113
|
+
| `payment_link` | id | created | merge | Contains information about payment links created for collecting payments. |
|
|
114
|
+
| `payment_method` | id | created | merge | Stores payment method information such as cards, bank accounts, and other payment instruments. |
|
|
115
|
+
| `payment_method_domain` | id | created | merge | Represents domains verified for payment method collection. |
|
|
116
|
+
| `payout` | id | created | merge | Records payouts made from Stripe accounts to bank accounts or debit cards. |
|
|
117
|
+
| `plan` | id | created | merge | Contains subscription plan information including pricing and billing intervals. |
|
|
118
|
+
| `price` | id | created | merge | Contains pricing information for products, including currency, amount, and billing intervals. |
|
|
119
|
+
| `product` | id | created | merge | Represents products that can be sold or subscribed to, including metadata and pricing information. |
|
|
120
|
+
| `promotion_code` | id | created | merge | Stores data about promotion codes that customers can use to apply coupons. |
|
|
121
|
+
| `quote` | id | created | merge | Contains quote information for customers, including line items and pricing. |
|
|
122
|
+
| `refund` | id | created | merge | Records refunds issued for charges, including partial and full refunds. |
|
|
123
|
+
| `review` | id | created | merge | Contains payment review information for payments flagged by Stripe Radar. |
|
|
124
|
+
| `setup_attempt` | id | created | merge | Records attempts to set up payment methods for future payments. |
|
|
125
|
+
| `setup_intent` | id | created | merge | Represents setup intents for collecting payment method information. |
|
|
126
|
+
| `shipping_rate` | id | created | merge | Contains shipping rate information for orders and invoices. |
|
|
127
|
+
| `subscription` | id | created | merge | Represents a customer's subscription to a recurring service, detailing billing cycles, plans, and status. |
|
|
128
|
+
| `subscription_item` | id | created | merge | Contains individual items within a subscription, including quantities and pricing. |
|
|
129
|
+
| `subscription_schedule` | id | created | merge | Represents scheduled changes to subscriptions over time. |
|
|
130
|
+
| `tax_code` | id | created | merge | Contains tax code information for products and services. |
|
|
131
|
+
| `tax_id` | id | created | merge | Stores tax ID information for customers and accounts. |
|
|
132
|
+
| `tax_rate` | id | created | merge | Contains tax rate information applied to invoices and subscriptions. |
|
|
133
|
+
| `top_up` | id | created | merge | Records top-ups made to Stripe accounts. |
|
|
134
|
+
| `transfer` | id | created | merge | Records transfers between Stripe accounts. |
|
|
135
|
+
| `webhook_endpoint` | id | created | merge | Contains webhook endpoint configurations for receiving event notifications. |
|
|
135
136
|
|
|
136
137
|
Use these as `--source-table` parameter in the `ingestr ingest` command.
|
|
137
138
|
|
|
@@ -224,7 +224,7 @@ def resource(
|
|
|
224
224
|
def custom_report_from_spec(spec: str) -> EndpointResource:
|
|
225
225
|
parts = spec.split(":")
|
|
226
226
|
if len(parts) != 4:
|
|
227
|
-
raise InvalidCustomReportError()
|
|
227
|
+
raise InvalidCustomReportError()
|
|
228
228
|
|
|
229
229
|
_, endpoint, report, dims = parts
|
|
230
230
|
report_type = ReportType(report.strip())
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
version = "v0.13.89"
|
|
@@ -25,7 +25,20 @@ from ingestr.src.loader import load_dlt_file
|
|
|
25
25
|
|
|
26
26
|
class GenericSqlDestination:
|
|
27
27
|
def dlt_run_params(self, uri: str, table: str, **kwargs) -> dict:
|
|
28
|
-
|
|
28
|
+
|
|
29
|
+
if uri.startswith("databricks://"):
|
|
30
|
+
p = urlparse(uri)
|
|
31
|
+
q = parse_qs(p.query)
|
|
32
|
+
schema = q.get("schema", [None])[0]
|
|
33
|
+
if not schema:
|
|
34
|
+
raise ValueError("Databricks requires schema in the URI.")
|
|
35
|
+
res = {
|
|
36
|
+
"dataset_name": schema,
|
|
37
|
+
"table_name": table,
|
|
38
|
+
}
|
|
39
|
+
return res
|
|
40
|
+
|
|
41
|
+
table_fields = table.split(".")
|
|
29
42
|
if len(table_fields) != 2:
|
|
30
43
|
raise ValueError("Table name must be in the format <schema>.<table>")
|
|
31
44
|
|
|
@@ -270,8 +283,30 @@ class MsSQLDestination(GenericSqlDestination):
|
|
|
270
283
|
|
|
271
284
|
class DatabricksDestination(GenericSqlDestination):
|
|
272
285
|
def dlt_dest(self, uri: str, **kwargs):
|
|
273
|
-
|
|
286
|
+
p = urlparse(uri)
|
|
287
|
+
q = parse_qs(p.query)
|
|
288
|
+
access_token = p.password
|
|
289
|
+
server_hostname = p.hostname
|
|
290
|
+
http_path = q.get("http_path", [None])[0]
|
|
291
|
+
catalog = q.get("catalog", [None])[0]
|
|
292
|
+
schema = q.get("schema", [None])[0]
|
|
293
|
+
|
|
294
|
+
|
|
295
|
+
creds = {
|
|
296
|
+
"access_token": access_token,
|
|
297
|
+
"server_hostname": server_hostname,
|
|
298
|
+
"http_path": http_path,
|
|
299
|
+
"catalog": catalog,
|
|
300
|
+
"schema": schema,
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
return dlt.destinations.databricks(
|
|
304
|
+
credentials=creds,
|
|
305
|
+
**kwargs,
|
|
306
|
+
)
|
|
307
|
+
|
|
274
308
|
|
|
309
|
+
|
|
275
310
|
|
|
276
311
|
class SynapseDestination(GenericSqlDestination):
|
|
277
312
|
def dlt_dest(self, uri: str, **kwargs):
|
|
@@ -37,9 +37,14 @@ def readers(
|
|
|
37
37
|
file_glob (str, optional): The filter to apply to the files in glob format. by default lists all files in bucket_url non-recursively
|
|
38
38
|
"""
|
|
39
39
|
filesystem_resource = filesystem(bucket_url, credentials, file_glob=file_glob)
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
40
|
+
|
|
41
|
+
# NOTE: incremental support is disabled until we can figure out
|
|
42
|
+
# how to support incremental loads per matching file, rather
|
|
43
|
+
# than a blanket threshold.
|
|
44
|
+
#
|
|
45
|
+
# filesystem_resource.apply_hints(
|
|
46
|
+
# incremental=dlt.sources.incremental("modification_date"),
|
|
47
|
+
# )
|
|
43
48
|
return (
|
|
44
49
|
filesystem_resource | dlt.transformer(name="read_csv")(_read_csv),
|
|
45
50
|
filesystem_resource | dlt.transformer(name="read_jsonl")(_read_jsonl),
|