Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(python): add capability to read unity catalog (uc://) uris #3113

Open
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

omkar-foss
Copy link
Contributor

Description

This adds capability to read directly from uc:// uris using the local catalog-unity crate. This also exposes the UC temporary credentials in storage_options of the DeltaTable instance so polars or similar readers can use it.

Related Issue(s)

Documentation

N/A

@github-actions github-actions bot added binding/python Issues for the Python package binding/rust Issues for the Rust crate labels Jan 10, 2025
Copy link

ACTION NEEDED

delta-rs follows the Conventional Commits specification for release automation.

The PR title and description are used as the merge commit message. Please update your PR title and description to match the specification.

@omkar-foss omkar-foss force-pushed the feat-uc-python branch 2 times, most recently from 8fcd7f4 to 0824abe Compare January 10, 2025 07:03
@omkar-foss omkar-foss changed the title feat(python): Add capability to read Unity Catalog (uc://) uris feat(python): add capability to read unity catalog (uc://) uris Jan 10, 2025
python/src/lib.rs Outdated Show resolved Hide resolved
/// Allow http url (e.g. http://localhost:8080/api/2.1/...)
/// Supported keys:
/// - `unity_allow_http_url`
AllowHttpUrl,
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This allows users to work with a local (non-https) Unity Catalog REST API with delta-rs.

python/src/lib.rs Outdated Show resolved Hide resolved
@omkar-foss
Copy link
Contributor Author

@ion-elgreco I've updated this PR to include the temp credentials functionality from PR #3078. Cheers.

@omkar-foss omkar-foss marked this pull request as ready for review February 3, 2025 14:30
Copy link

codecov bot commented Feb 3, 2025

Codecov Report

Attention: Patch coverage is 17.39130% with 76 lines in your changes missing coverage. Please review.

Project coverage is 72.08%. Comparing base (cf5f38a) to head (2fdb6e2).

Files with missing lines Patch % Lines
crates/catalog-unity/src/lib.rs 14.77% 74 Missing and 1 partial ⚠️
python/src/lib.rs 0.00% 1 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main    #3113      +/-   ##
==========================================
- Coverage   72.18%   72.08%   -0.10%     
==========================================
  Files         138      138              
  Lines       45292    45380      +88     
  Branches    45292    45380      +88     
==========================================
+ Hits        32694    32714      +20     
- Misses      10535    10600      +65     
- Partials     2063     2066       +3     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

python/src/lib.rs Outdated Show resolved Hide resolved
This adds capability to read directly from uc:// uris using the
local catalog-unity crate. This also exposes the UC temporary
credentials in storage_options of the `DeltaTable` instance so
polars or similar readers can use it.

Signed-off-by: Omkar P <[email protected]>
@ion-elgreco
Copy link
Collaborator

ion-elgreco commented Feb 11, 2025

@omkar-foss looks good from my side!

@hntd187 can you please also take a look. Specifically on whether the credentials need to be refreshed as part of the objectstore? Does UC also support writing temp credentials?

@omkar-foss
Copy link
Contributor Author

omkar-foss commented Feb 11, 2025

I'll need to add a few python tests for this flow, will add tomorrow and then if all good, I suppose we can merge it.

Also please note, the current UC REST integration that we have is more fine-tuned for Databricks Unity Catalog. The Unity Catalog OSS has slightly different response payloads for some APIs. e.g. Generate Temp Credentials API returns r2_temp_credentials and url in the JSON response for Databricks UC but not for OSS UC. So this causes json decoding errors if you try out the current UC client implementation with an OSS UC instance.

I can look into supporting OSS UC smoothly in a separate PR after this one. Cheers.

@omkar-foss omkar-foss closed this Feb 11, 2025
@omkar-foss omkar-foss reopened this Feb 11, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
binding/python Issues for the Python package binding/rust Issues for the Rust crate
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Add Python-side support for Unity Catalog
3 participants