Could absinthe infer a graphql schema from a json?

Hi !

Here’s the use case of something I can’t get up and running :

I need to store a physical object’s attributes in a PostgreSQL database, served by an Absinthe GraphQL API, but I want to store this data inside a single column named “attributes” instead of creating a table for this single purpose.
Why ? Because of the nature of these objects, their attributes can vary greatly, and thus I’d need to create a whole table with completely different columns each time I want to register a new object.

By storing everything in a single “attributes” column, I cannot type any of its fields, and need to use a generic json type.
But you know, I’m somewhat demanding and still want to benefit from the advantages of GraphQL, which is by definition strongly typed.

What I’d really want is to have a selection of specific graphql subfields of “attributes”, but considering the fact that it’s only json, graphql doesn’t know how to interpret it, and will certainly not generate a magical underlying schema attached to this json, I guess.

Writing down every possible attribute for each object as an absinthe schema is something doable, but I’d prefer not to handle this inside the database by creating a lot of tables.
So, a union type was my first thought, but as said above, it seems that absinthe doesn’t know how to parse this cryptic json.

Consider the following schema :

@desc "A schema"
  object :schema do
    field(:id, :id)
    field(:attributes, :attributes)
  end

And the following union type :

object :possible_attributes do
    field :key_one, :string
    field :key_two, :string
  end

  object :also_possible_attributes do
    field :key_three, :boolean
    field :key_four, :integer
  end

  union :attributes do
    types([:possible_attributes, :also_possible_attributes])
    resolve_type fn
      %{key_one: _}, _ -> :possible_attributes
      _, _ ->  :also_possible_attributes
    end
  end

Now, in my GraphQL query, I’d like to do the following :

        attributes {
          ... on PossibleAttributes {
            keyOne
            keyTwo
          }
          ... on AlsoPossibleAttributes {
            keyThree
            keyFour
          }
        }

I tried to use a custom json scalar type, so that the server returns a parsed json, but of course I can’t have a selection of subfields, which was something to expect. It only allows me to query the entire “attributes” field at once.

But after days of research on the elixir forum and other misty parts of the web, I have to admit that I’m quite stuck, and start to think that this is maybe not possible at all ?