Credentials are the same question in all three: on your own machine you use the
cloudhumans-export profile, and on AWS compute you use the role that compute already runs as, with no profile on the host.
Download with the AWS CLI
A quick inventory of what exists and how much space it takes:The examples below partition by
snapshot_date=. Tables delivered as a daily delta partition by etl_date= instead, and each table’s page in the table catalog states which one it uses. Everything else about the commands is the same.sync compares size and modification date, so running it again only pulls what changed:
sync skips with a warning before exiting with code 2. See storage classes.
A date range, without downloading the entire history:
_SUCCESS markers: they stay in STANDARD even in the oldest partition — storage classes explains why.
Download with boto3
For use in an orchestrator (Airflow, Dagster, Prefect). Downloads a partition only after confirming the_SUCCESS marker, and handles the errors that actually happen instead of swallowing everything in a single except Exception.
Before you process a day, read that snapshot date’s manifest to confirm the delivery is complete, as described in bucket layout.
If the orchestrator runs on AWS compute, set PROFILE = None: the SDK then uses the role that compute already runs as, and no profile needs to exist on the host. See local profile.
download_partition.py
InvalidObjectState gets its own exception because it’s the only failure in this list that is not a configuration problem — the data is there and intact, it only needs restoring first. See storage classes for how.
Query in place instead of downloading
The files are Parquet in Hive-style partitions, so a query engine can read them where they are. This is the shortest path for analysis and for anything you run once: no copy to keep in sync, and the engine reads only the partitions yourWHERE clause touches.
Run the engine in the bucket’s region, us-east-1. Reading across regions is slower and the volumes here are large enough for it to show.
Spark infers the partition columns from the folder names, so pointing it at the table root is enough. Needs the hadoop-aws connector:
- The markers do not get in the way.
_SUCCESS,_STATEand the manifests start with an underscore, which is exactly the convention Hive, Spark, Athena and Presto use for files to skip. They are not read as data. - Declare the partition column of a daily delta table as a string. Those tables partition by
etl_date=, and one of the values is the literal__initial__, so a date type fails on it. That also rules out Athena partition projection over a date range for those two tables. - Archived files are not readable in place. Beyond 180 days the objects move to S3 Glacier Flexible Retrieval, and an engine reading them fails the same way a download does. Restore first, as described in storage classes.