How / Where to store data?

Where can I / how should I store arbitrary data? Seems simple enough but I’m having trouble finding anything online.
Examples of things I would want to store are a 2d array for a grid map’s contents, various attributes etc that could be easily called anywhere, like during level creation to place appropriate actors as necessary based on said stored data.

Game Instance - it persists even if you change levels and is a framework class, accessible globally. Alternatively, you can use a Save Game Object and load / save data to it. Consider looking into structs for extra flexibility / automation.

I have been reading up on game instance-class but I can’t figure out how to store anything more complicated than a single string, value or a boolean. I came across Data Tables but according to what I can find on google, those are not meant to be edited outside the editor nor are even properly supported with blueprints. Is there a proper way to store a table of data or do I have to botch it together by holding all of the data in a string that contains some character or
to read specific parts during runtime?

Create arrays, look into structs - they’re collections of variables. You can nest struct arrays inside other arrays to store any amount of variables. Look into save games objects. You will need to save your game eventually, structs are pretty much a must here as well - that’s unless you want to use external plugins.

Data Tables are read-only.

Is there a proper way to store a table
of data or do I have to botch it
together by holding all of the data in
a string that contains some character
or to read specific parts during
runtime?

Again - structs.

As an example:

A struct holding 30 or so other variables, last one is another struct that holds just material information of this object.

Data Tables also use them, so you can load a struct from a DT - a template data for an object, construct the object based on the pulled data, modify the data and then save it using the very same struct. Not back into a Data Table, though - save in the game instance if it’s temporary / transitional data to be stored during a session, or save into a save game object if it needs to truly persist - be loaded next time the game is launched.