使用什么语法将 {{ from_dttm }} 和 {{ to_dttm }} Jinja 变量解析为自定义 SQL 查询中的日期时间对象?

What syntax to use for parsing {{ from_dttm }} and {{ to_dttm }} Jinja variables as datetime objects in Custom SQL queries?

问题:如何正确格式化{{ from_dttm }}{{ to_dttm }}default Jinja variables,使它们在datetime中被解析为对象Apache Superset 自定义 SQL 指标?


MWE: 假设我想显示我在仪表板中使用的数据所涵盖的时间范围是什么——时间范围过滤器会影响什么。 为了示例,我使用 public.birth_names 演示数据集。

所以我创建了一个 BigNumber 图表,具有以下自定义指标:

age(
  {% if from_dttm is not none %}
     '{{ from_dttm }}'
  {% else %}
    min(ds)
  {% endif %}
,
  {% if to_dttm is not none %}
    '{{ to_dttm }}'
  {% else %}
    max(ds)
  {% endif %}
)

但是,如果我将 Jinja 变量格式化为:

Error: syntax error at or near "{" 
LINE 1: SELECT age({{ from_dttm }} , '{{ to_dttm }}') AS "age(
Error: invalid input syntax for type timestamp with time zone: "{{ from_dttm }}" 
LINE 1: SELECT age('{{ from_dttm }}'
Error: column "{{ from_dttm }}" does not exist
LINE 1: SELECT age("{{ from_dttm }}" ,

我在 5ae7e5499 使用 Superset(2022 年 3 月 25 日最新提交),使用 PostgreSQL 作为后端数据库引擎。

@villebro线下讨论后得出:

  • '{{ from_dttm }}' 是有效的语法——可以尝试一个更简单的例子:MIN('{{ from_dttm }}'):这个有效,而其他两种语法都会产生错误。
  • 然而,当前(版本 1.4.*)版本中仍然存在错误,其中 {{ from_dttm }} 未呈现(导致 AGE() 在上面的特定示例中产生错误的原因).此问题已在 #19564, and a fix submitted in #19565.
  • 中提出