Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fatal error while saving query as dataset with Doris and {{ from_dttm }} & {{ to_dttm }} #28600

Open
3 tasks done
bionexit opened this issue May 20, 2024 · 2 comments
Open
3 tasks done
Labels
data:connect:doris sqllab Namespace | Anything related to the SQL Lab

Comments

@bionexit
Copy link

bionexit commented May 20, 2024

Bug description

Deploy superset with docker compose, and successfully connected Doris.
But When I save the query as dataset. An Fatal error showed as failed.

The following query could be run smoothly.

SELECT asset_id,asset_code,asset_type_name,created_date
FROM doris_asset
WHERE 1=1 
  {% if filter_values('asset_type_name')|length %}
    AND asset_type_name IN {{ filter_values('asset_type_name')|where_in}}
  {% endif %}
  
  {% if from_dttm is not none %}
     AND created_date > '{{ from_dttm }}' 
  {% endif %}
  
  {% if to_dttm is not none %}
     AND created_date < '{{ to_dttm }}' 
  {% endif %}

also i fill the Template parameters as following

{
  "from_dttm": "2020-01-01",
  "to_dttm": "2099-01-01"
}

image

How to reproduce the bug

  1. Run pip install pydoris inside the superset_app
  2. Connect a Doris FE.
  3. Go to Sql lab.
  4. create a query with {{ from_dttm }}or {{ to_dttm }}
  5. click save -> save dataset
  6. error occurred.

Screenshots/recordings

Error log in sudo docker logs -f --tail=300 superset_app

2024-05-20 19:57:03,982:DEBUG:superset.sql_parse:Parsing with sqlparse statement: SELECT asset_id,asset_code,asset_type_name,created_date
FROM doris_asset
WHERE 1=1



     AND created_date > '{{ from_dttm }}'



     AND created_date < '{{ to_dttm }}'
2024-05-20 19:57:03,989:DEBUG:superset.stats_logger:[stats_logger] (incr) DatasetRestApi.post.warning
2024-05-20 19:57:03,989:ERROR:flask_appbuilder.api:(1105, "errCode = 2, detailMessage = Incorrect datetime value: CAST('{{ from_dttm }}' AS DATETIMEV2(0)) in expression: (`created_date` > CAST('{{ from_dttm }}' AS DATETIMEV2(0)))")
Traceback (most recent call last):
  File "/app/superset/connectors/sqla/utils.py", line 147, in get_columns_description
    cursor.execute(query)
  File "/usr/local/lib/python3.10/site-packages/MySQLdb/cursors.py", line 206, in execute
    res = self._query(query)
  File "/usr/local/lib/python3.10/site-packages/MySQLdb/cursors.py", line 319, in _query
    db.query(q)
  File "/usr/local/lib/python3.10/site-packages/MySQLdb/connections.py", line 254, in query
    _mysql.connection.query(self, query)
MySQLdb._exceptions.OperationalError: (1105, "errCode = 2, detailMessage = Incorrect datetime value: CAST('{{ from_dttm }}' AS DATETIMEV2(0)) in expression: (`created_date` > CAST('{{ from_dttm }}' AS DATETIMEV2(0)))")

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/usr/local/lib/python3.10/site-packages/flask_appbuilder/api/__init__.py", line 110, in wraps
    return f(self, *args, **kwargs)
  File "/app/superset/views/base_api.py", line 127, in wraps
    raise ex
  File "/app/superset/views/base_api.py", line 121, in wraps
    duration, response = time_function(f, self, *args, **kwargs)
  File "/app/superset/utils/core.py", line 1463, in time_function
    response = func(*args, **kwargs)
  File "/app/superset/utils/log.py", line 255, in wrapper
    value = f(*args, **kwargs)
  File "/app/superset/views/base_api.py", line 93, in wraps
    return f(self, *args, **kwargs)
  File "/app/superset/datasets/api.py", line 329, in post
    new_model = CreateDatasetCommand(item).run()
  File "/app/superset/commands/dataset/create.py", line 52, in run
    dataset.fetch_metadata(commit=False)
  File "/app/superset/connectors/sqla/models.py", line 1830, in fetch_metadata
    new_columns = self.external_metadata()
  File "/app/superset/connectors/sqla/models.py", line 1322, in external_metadata
    return get_virtual_table_metadata(dataset=self)
  File "/app/superset/connectors/sqla/utils.py", line 132, in get_virtual_table_metadata
    return get_columns_description(dataset.database, dataset.schema, statements[0])
  File "/app/superset/connectors/sqla/utils.py", line 153, in get_columns_description
    raise SupersetGenericDBErrorException(message=str(ex)) from ex
superset.exceptions.SupersetGenericDBErrorException: (1105, "errCode = 2, detailMessage = Incorrect datetime value: CAST('{{ from_dttm }}' AS DATETIMEV2(0)) in expression: (`created_date` > CAST('{{ from_dttm }}' AS DATETIMEV2(0)))")
2024-05-20 19:57:03,991:INFO:sqlalchemy.engine.Engine:ROLLBACK
2024-05-20 19:57:03,991 INFO sqlalchemy.engine.Engine ROLLBACK

Superset version

3.1.3

Python version

3.9

Node version

I don't know

Browser

Chrome

Additional context

No response

Checklist

  • I have searched Superset docs and Slack and didn't find a solution to my problem.
  • I have searched the GitHub issue tracker and didn't find a similar bug report.
  • I have checked Superset's logs for errors and if I found a relevant Python stacktrace, I included it here as text in the "additional context" section.
Copy link

dosubot bot commented May 20, 2024

The error you're encountering suggests that the template variables {{ from_dttm }} and {{ to_dttm }} are not being correctly replaced with their intended datetime values in your SQL query. This issue could stem from a few different areas:

  1. Template Rendering: Ensure that the datetime format for from_dttm and to_dttm is correctly recognized and that these variables are properly defined in the template's context. If the variables are missing or incorrectly formatted, they won't be replaced in the query.

  2. Jinja Syntax: Verify the Jinja syntax in your SQL query. Incorrect syntax could prevent the template from rendering correctly, leaving the variables unreplaced.

  3. Superset Configuration: Check if ENABLE_TEMPLATE_PROCESSING is enabled in your Superset configuration, as disabling this feature could affect template rendering.

  4. Query Logic: To handle cases where from_dttm and to_dttm might not be defined (e.g., if the time range filter is cleared), consider adding conditional logic in your Jinja template to include these conditions only when the variables are not None.

For more detailed troubleshooting, consider enabling more verbose logging in Superset to capture detailed error messages or stack traces. This can provide further insights into the root cause of the issue, whether it's related to the query, template rendering, or database interaction.

If after these checks the issue remains unresolved, it might be beneficial to review the Superset documentation on SQL templating and the configuration of Jinja context variables for additional guidance.

Details

Sources


About Dosu
This response is meant to be useful and save you time. It is not meant to be a precise solution, but rather a starting point for your own research.

Help me be more useful! Please leave a 👍 if this is helpful and 👎 if it is irrelevant.

To continue the conversation, mention @dosu.

@dosubot dosubot bot added the sqllab Namespace | Anything related to the SQL Lab label May 20, 2024
@rusackas
Copy link
Member

FYI @liujiwen-up, in case you know anything about this :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
data:connect:doris sqllab Namespace | Anything related to the SQL Lab
Projects
None yet
Development

No branches or pull requests

2 participants