Skip to main content

API for accessing the generalized CloudCatalog (cloudcatalog) specification for sharing data in and across clouds

Project description

CloudCatalog (cloudcatalog) API

CloudCatalog is a generalized indexing specification for large cloud datasets. The push to open science means many more published datasets, and finding and accessing is important to solve. CloudCatalog is an indexing method for sharing big datasets in cloud systems. It is scientist-friendly and it is easy to generate a set of indices. It uses static index files in time-ordered CSV format that are easy to fetch, easy to access via an API, and very low cost in both money and bandwidth needed to support. Metadata is kept in a simple JSON schema. We also provide a Python client toolset for scientists to access datasets that use CloudCatalog.

The CloudCatalog specification and tools are open source, created by the HelioCloud project, and already used for 2 Petabytes of publicly available NASA and scientist-contributed data. We hope the community continues to adopt this CloudCatalog standard (in github, linked off heliocloud.org).

  • For sharing datasets across cloud frameworks
  • Decentralized: data owners control their own data and access
  • RESTful & serverless (indices are flat files alongside their datasets)
  • Removes need for doing slow/expensive disk ‘ls’ on large holdings
  • Global registry JSON points to owner-controlled ‘buckets’
  • Uses minimal JSON to list metadata, CSV files for indices
  • Searchable
  • Public specification here on GitHub.

The Specification enables anyone to index a public dataset such that other users can find it and retrieve file listings in a cost-effective serverless fashion.

The API is designed for retrieving file catalog (index) files from a specific ID entry in a catalog within a bucket. It also includes search functionality for searching through all data index catalogs found in the bucket list.

Use Case

Suppose there is a mission on S3 that follows the HelioCloud 'CloudCatalog' specification, and you want to obtain specific files from this mission.

Initial Setup and Global Catalog

First, install the tool if it has not been already installed. Then, import the tool into a script or shell. You will likely want to search the global catalog to find the specific bucket/catalog containing the data catalog files. You first create a CatalogRegistry object to pull from the default global catalog. This lists buckets not datasets; each bucket owner retains direct ownership over which of their datasets they wish to expose to the public.

import cloudcatalog

cr = cloudcatalog.CatalogRegistry()
print(cr.get_catalog())

print(cr.get_entries())

Finding and Requesting the File Catalog

At this point, you should have found the bucket containing the data of interest. Next, you will want to search the bucket-specific catalog (data catalog) for the ID representing the mission you want to obtain data for.

bucket_name = cr.get_endpoint('e.g. Bucket Mnemonic') # or hard-code, e.g. 's3://mybucket'
# If not a public bucket, pass access_key or boto S3 client params to access it
fr = cloudcatalog.CloudCatalog(bucket_name)  

# Print out the entire local catalog (datasets)
print(fr.get_catalog())

# To find the specific ID we can also get the ID + Title by
print(fr.get_entries_id_title())

# Now with the ID we can request the catalog index files as a Pandas dataframe
fr_id = 'a_dataset_id_from_the_catalog'
start_date = '2007-02-01T00:00:00Z'  # A ISO 8601 standard time
stop_date = None  # A ISO 8601 standard time or None for everything after start_date
myfiles = fr.request_cloud_catalog(fr_id, start_date=start_date, end_date=end_date, overwrite=False)

Searching the Entire Catalog

You can use the EntireCatalogSearch class to find a catalog entry:

search = cloudcatalog.EntireCatalogSearch()
top_search_result = search.search_by_keywords(['vector', 'mission', 'useful'])[0]
print(top_search_result)

Specific example for an SDO fetch of the filelist for all the 94A EUV images (1,624,900 files)

import cloudcatalog
fr = cloudcatalog.CloudCatalog("s3://gov-nasa-hdrl-data1/")
dataid = "aia_0094"
start, stop = fr.get_entry(dataid)['start'], fr.get_entry(dataid)['stop']
mySDOlist = fr.request_cloud_catalog(dataid, start, stop)

Add-on example for an MMS fetch of the filelist for all of a specific MMS item (64,383 files)

dataid = "MMS1_FEEPS_BRST_L2_ELECTRON"
start, stop = fr.get_entry(dataid)['start'], fr.get_entry(dataid)['stop']
myMMSlist = fr.request_cloud_catalog(dataid, start, stop)

Streaming Data from the File Catalog

You now have a pandas DataFrame with startdate, stopdate, key, and filesize for all the files of the mission within your specified start and end dates. From here, you can use the key to stream some of the data through EC2, a Lambda, or other processing methods.

This tool also offers a simple function for streaming the data once the file catalog is obtained:

cloudcatalog.CloudCatalog.stream(cloud_catalog, lambda bfile, startdate, stopdate, filesize: print(len(bo.read()), filesize))

Full Notebook Tutorial

For an in-depth walkthrough using the CloudCatalog on NASA datasets, see CloudCatalog-Demo.ipynb

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cloudcatalog-1.1.0.tar.gz (177.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

cloudcatalog-1.1.0-py3-none-any.whl (18.3 kB view details)

Uploaded Python 3

File details

Details for the file cloudcatalog-1.1.0.tar.gz.

File metadata

  • Download URL: cloudcatalog-1.1.0.tar.gz
  • Upload date:
  • Size: 177.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.10

File hashes

Hashes for cloudcatalog-1.1.0.tar.gz
Algorithm Hash digest
SHA256 4d16cd20c37e0eb5e285344053bf738e3005ebcbd918252400cd2051206a1b1b
MD5 330dcc0d3ec9e7949dd68cbfafeb3aa3
BLAKE2b-256 b968d130263b34a304457695d6629064c20c8d629d76af9be1dfa953386d810c

See more details on using hashes here.

File details

Details for the file cloudcatalog-1.1.0-py3-none-any.whl.

File metadata

  • Download URL: cloudcatalog-1.1.0-py3-none-any.whl
  • Upload date:
  • Size: 18.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.10

File hashes

Hashes for cloudcatalog-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 6b7cd947e7130e7291875ba7155d1278692482010ecd7cb6d4df7ed790f2b24a
MD5 bdecb27c783cb0d17547e3298b5fff8f
BLAKE2b-256 2ac6f206908d0d99ea2cd5fbf4f65d7c94f30c1aa422e1d0bce0061ad3455790

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page