I usually build some sort of data lake using S3, Glue and Athena. for that I:
• Put a Lambda Stream on the desired DDB table. That Lambda will parse the data to Parquet and store it on an S3 bucket;
• Build a crawler with a consistent schema for the S3 data on Glue;
• Generate a table for the Glue schema;
• Go into Athena and query the Glue table;
Don't know if it's the best way, but it's the way I know