Search code examples
pythonpython-3.xapache-superset

Apache Superset not loading table records/columns


I am trying to add a table in Superset. The other tables get added properly, meaning the columns are fetched properly by Superset. But for my table booking_xml, it does not load any columns.

The description of table isDescription of booking_xml table

After adding this table, when I click on the table name to explore it, it gives the following error

Empty query?
Traceback (most recent call last):
  File "/home/superset/superset_venv/lib/python3.8/site-packages/superset/viz.py", line 473, in get_df_payload
    df = self.get_df(query_obj)
  File "/home/superset/superset_venv/lib/python3.8/site-packages/superset/viz.py", line 251, in get_df
    self.results = self.datasource.query(query_obj)
  File "/home/superset/superset_venv/lib/python3.8/site-packages/superset/connectors/sqla/models.py", line 1139, in query
    query_str_ext = self.get_query_str_extended(query_obj)
  File "/home/superset/superset_venv/lib/python3.8/site-packages/superset/connectors/sqla/models.py", line 656, in get_query_str_extended
    sqlaq = self.get_sqla_query(**query_obj)
  File "/home/superset/superset_venv/lib/python3.8/site-packages/superset/connectors/sqla/models.py", line 801, in get_sqla_query
    raise Exception(_("Empty query?"))
Exception: Empty query?
ERROR:superset.viz:Empty query?

However, when I try to explore it using the SQL editor, it loads up properly. I have found the difference in the form_data parameter in the URL when loading from tables page and from SQL editor.

URL from SQL Lab view:

form_data={"queryFields":{"groupby":"groupby","metrics":"metrics"},"datasource":"192__table","viz_type":"table","url_params":{},"time_range_endpoints":["inclusive","exclusive"],"granularity_sqla":"created_on","time_grain_sqla":"P1D","time_range":"Last+week","groupby":[],"metrics":["count"],"all_columns":[],"percent_metrics":[],"order_by_cols":[],"row_limit":10000,"order_desc":true,"adhoc_filters":[],"table_timestamp_format":"smart_date","color_pn":true,"show_cell_bars":true}

URL from datasets list:

form_data={"queryFields":{"groupby":"groupby","metrics":"metrics"},"datasource":"191__table","viz_type":"table","url_params":{},"time_range_endpoints":["inclusive","exclusive"],"time_grain_sqla":"P1D","time_range":"Last+week","groupby":[],"all_columns":[],"percent_metrics":[],"order_by_cols":[],"row_limit":10000,"order_desc":true,"adhoc_filters":[],"table_timestamp_format":"smart_date","color_pn":true,"show_cell_bars":true}

When loading from datasets list, /explore_json/ gives 400 Bad Request. Superset version == 0.37.1, Python version == 3.8


Solution

  • Superset saves the details/metadata of the table that has to be connected. So, in that my table had a very long datatype as you can see in the image in question. Superset saves that as a varchar of length 32. So, the database was not allowing to enter this value into the database. Which was causing the error. Due to that no records were being fetched even after adding the table in the datasources.

    What I did was to increase the length of the column datatype.

    ALTER TABLE table_columns MODIFY type varchar(200)