airbytehq / PyAirbyte

PyAirbyte brings the power of Airbyte to every Python developer.
https://docs.airbyte.com/pyairbyte
Other
176 stars 20 forks source link

Feat: Adds interop with Arrow library using new method `Dataset.to_arrow()` #281

Open avirajsingh7 opened 6 days ago

avirajsingh7 commented 6 days ago

Resolves #204

As discuss in issue added a supoort pyarrow dataset instead of pyarrow table to handle a large datasets.

Supporting docs: pyarrow dataset pyarrow.Table.from_pandas

Still need input on optimal chunksize...

Summary by CodeRabbit

coderabbitai[bot] commented 6 days ago

Walkthrough

Recent changes introduce Arrow Dataset support to the Airbyte codebase. This involves adding methods to convert datasets into Arrow format in multiple classes, including BaseCache and SQLDataset, which allow chunk-based processing for efficient data handling. These additions enhance functionality and align with the feature request to natively support Apache Arrow, reducing dependency on Pandas conversions.

Changes

File Change Summary
airbyte/caches/base.py Introduced get_arrow_dataset method in BaseCache class to return Arrow Datasets by converting Pandas chunks to Arrow Tables.
airbyte/datasets/_base.py Added to_arrow method in the base class to be implemented by subclasses for Arrow Dataset representation, raising NotImplementedError by default.
airbyte/datasets/_sql.py Added to_arrow method in SQLDataset class to return an Arrow Dataset using specified chunk size, enhancing data processing capabilities with pyarrow.
pyproject.toml Added pyarrow dependency with version ^16.1.0 to support new Arrow Dataset functionalities.
tests/integration_tests/test_all_cache_types.py Updated test_faker_read() function to include tests for to_arrow method, performing row count and batch iteration checks on the Arrow dataset.

Sequence Diagram(s)

sequenceDiagram
    participant User
    participant BaseCache
    participant SQLDataset
    participant ArrowDataset

    User->>BaseCache: get_arrow_dataset(stream_name, chunksize)
    BaseCache->>SQLDataset: to_arrow(chunksize)
    SQLDataset->>ArrowDataset: create from chunks
    ArrowDataset-->>User: return Arrow Dataset

Assessment against linked issues

Objective Addressed Explanation
Add to_arrow() on Dataset class (#204)

[!TIP]

Early access features - OpenAI `gpt-4o` model for reviews and chat. Note: - You can disable early access features from the CodeRabbit UI or by setting `early_access: false` in the CodeRabbit configuration file. - Please join our [Discord Community](https://discord.com/invite/GsXnASn26c) to provide feedback and report issues. - OSS projects are always opted into early access features.

Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

Share - [X](https://twitter.com/intent/tweet?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A&url=https%3A//coderabbit.ai) - [Mastodon](https://mastodon.social/share?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A%20https%3A%2F%2Fcoderabbit.ai) - [Reddit](https://www.reddit.com/submit?title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&text=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code.%20Check%20it%20out%3A%20https%3A//coderabbit.ai) - [LinkedIn](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fcoderabbit.ai&mini=true&title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&summary=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code)
Tips ### Chat There are 3 ways to chat with [CodeRabbit](https://coderabbit.ai): - Review comments: Directly reply to a review comment made by CodeRabbit. Example: - `I pushed a fix in commit .` - `Generate unit testing code for this file.` - `Open a follow-up GitHub issue for this discussion.` - Files and specific lines of code (under the "Files changed" tab): Tag `@coderabbitai` in a new review comment at the desired location with your query. Examples: - `@coderabbitai generate unit testing code for this file.` - `@coderabbitai modularize this function.` - PR comments: Tag `@coderabbitai` in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples: - `@coderabbitai generate interesting stats about this repository and render them as a table.` - `@coderabbitai show all the console.log statements in this repository.` - `@coderabbitai read src/utils.ts and generate unit testing code.` - `@coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.` - `@coderabbitai help me debug CodeRabbit configuration file.` Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. ### CodeRabbit Commands (invoked as PR comments) - `@coderabbitai pause` to pause the reviews on a PR. - `@coderabbitai resume` to resume the paused reviews. - `@coderabbitai review` to trigger an incremental review. This is useful when automatic reviews are disabled for the repository. - `@coderabbitai full review` to do a full review from scratch and review all the files again. - `@coderabbitai summary` to regenerate the summary of the PR. - `@coderabbitai resolve` resolve all the CodeRabbit review comments. - `@coderabbitai configuration` to show the current CodeRabbit configuration for the repository. - `@coderabbitai help` to get help. Additionally, you can add `@coderabbitai ignore` anywhere in the PR description to prevent this PR from being reviewed. ### CodeRabbit Configration File (`.coderabbit.yaml`) - You can programmatically configure CodeRabbit by adding a `.coderabbit.yaml` file to the root of your repository. - Please see the [configuration documentation](https://docs.coderabbit.ai/guides/configure-coderabbit) for more information. - If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: `# yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json` ### Documentation and Community - Visit our [Documentation](https://coderabbit.ai/docs) for detailed information on how to use CodeRabbit. - Join our [Discord Community](https://discord.com/invite/GsXnASn26c) to get help, request features, and share feedback. - Follow us on [X/Twitter](https://twitter.com/coderabbitai) for updates and announcements.
aaronsteers commented 4 days ago

@coderabbitai review

coderabbitai[bot] commented 4 days ago
Actions performed Review triggered. > Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.
aaronsteers commented 4 days ago

/fix-pr

PR auto-fix job started... Check job output.

✅ Changes applied successfully.

aaronsteers commented 4 days ago

@avirajsingh7 - Auto-fix applied some lint fixing. And the other fixes you applied looked great. Lmk if this is ready for final review or if you are still applying additional changes.

avirajsingh7 commented 4 days ago

@aaronsteers it is ready for review

aaronsteers commented 4 days ago

/test-pr

PR test job started... Check job output.

❌ Tests failed.

aaronsteers commented 3 days ago

/poetry-lock

poetry lock job started... Check job output.

poetry lock applied successfully.

aaronsteers commented 3 days ago

/test-pr

❌ Tests failed.

aaronsteers commented 3 days ago

/test-pr

PR test job started... Check job output.

❌ Tests failed.

aaronsteers commented 3 days ago

@avirajsingh7 - Looks like we have a warning here regarding numpy implementation:

Details

https://github.com/airbytehq/PyAirbyte/actions/runs/9726180729/job/26844327030?pr=281 image

PyAirbyte treats warnings as fatal in our test suite, so we'd need to resolve the condition creating this warning or else add it to the list of ignored warnings in pyproject.toml.

I noticed that NumPy 2.0 just came out and re-locking dependencies (or adding PyArrow) has bumped us to 2.0 version in poetry.lock. We could try adding a numpy constraint "<=2.0" if that is the source of the issue - but ignoring can also be fine. This SO Answer seems to suggest the issue is fairly innocuous - while also giving some tips that might help resolve.

avirajsingh7 commented 1 day ago

@avirajsingh7 - Looks like we have a warning here regarding numpy implementation:

Details https://github.com/airbytehq/PyAirbyte/actions/runs/9726180729/job/26844327030?pr=281

image

PyAirbyte treats warnings as fatal in our test suite, so we'd need to resolve the condition creating this warning or else add it to the list of ignored warnings in pyproject.toml.

I noticed that NumPy 2.0 just came out and re-locking dependencies (or adding PyArrow) has bumped us to 2.0 version in poetry.lock. We could try adding a numpy constraint "<=2.0" if that is the source of the issue - but ignoring can also be fine. This SO Answer seems to suggest the issue is fairly innocuous - while also giving some tips that might help resolve.

@aaronsteers Whatever you recommend, I can go with that, we can try adding constraint, if adding constraint solve this well and good, Else it is innocuous we can also ignore this (Gpt Response)