【问题标题】:Creating a View with Variables in Snowflake在 Snowflake 中创建带有变量的视图
【发布时间】:2021-06-02 08:03:10
【问题描述】:

我有以下看法:

create or replace view my_database_name.my_schema_name.d_dates as (

  /*
      Declare variables
  */
    set (start_date) = ('2017-07-01');
    set (end_date) = ('2022-06-30');

  /*
  */
  with part_1 as (

    select top 20000
        -1 + row_number() over(order by 0) as i_value
        , start_date + i_value as generated_date 
    from 
        (
            select 
                cast($start_date as date) as start_date
               ,cast($end_date as date) as end_date
        )
    inner join table
        (generator(rowcount => 100000 )) x
    /*
      Qualify filters the results of window functions
    */
    qualify 
        i_value < 1 + end_date - start_date

  )

  select
      (a.i_value + 1) as "date_id"
      ,a.generated_date as "date"
  from
      part_1 as a
  order by
      "date";
    

)

我收到以下错误消息:

SQL compilation error: syntax error line 6 at position 4 unexpected 'set'. syntax error line 6 at position 21 unexpected '='.

关于如何解决此问题的任何建议?

【问题讨论】:

    标签: sql view snowflake-cloud-data-platform


    【解决方案1】:

    您可以使用表函数 (UDTF) 实现您在问题中描述的内容 开始和结束日期将是函数的参数。

    CREATE OR REPLACE FUNCTION my_database_name.my_schema_name.d_dates (start_date date, end_date date)
    RETURNS TABLE (date_id number, generated_date date)
    LANGUAGE SQL
    AS
    '
    with part_1 as (
    
        select top 20000
            -1 + row_number() over(order by 0) as i_value
            , start_date + i_value as generated_date 
        from 
            (
                select 
                    cast(start_date as date) as start_date
                   ,cast(end_date as date) as end_date
            )
        inner join table
            (generator(rowcount => 100000 )) x
        /*
          Qualify filters the results of window functions
        */
        qualify 
            i_value < 1 + end_date - start_date
    
      )
    
      select
          (a.i_value + 1) as date_id
          ,a.generated_date as generated_date
      from
          part_1 as a
      order by
          2;
    '
    ;
    
    Your SQL needs more tweaking I think like not using date as a column name but this should work
    

    【讨论】:

      【解决方案2】:

      Snowflake 中的视图不能承载变量设置或参数化。 但是,您可以通过使用 SQL 或 Javascript 的用户定义表函数来实现您的目标:

      https://docs.snowflake.com/en/sql-reference/udf-table-functions.html https://docs.snowflake.com/en/sql-reference/udf-js-table-functions.html

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-01-15
        • 2018-11-10
        • 1970-01-01
        • 2023-02-21
        • 1970-01-01
        • 2020-07-17
        • 1970-01-01
        相关资源
        最近更新 更多