Skip to main content
Solved

RDM Extended Reader row filter syntax


may_kwok
Star Blazer L3
Forum|alt.badge.img+4

We are on RDM v14.5.1, on PaaS, so underlying db is postgres.

I need to query a table using the RDM Extended Reader step with a filter. The volume of this table will grow, so I much prefer to filter at the reader step, rather than bring the whole table into the plan and then filter, to manage performance.

I have a column, from_date, that is datetime type. I have from_date in my data flow, and I want to query RDM for a day prior.

Expecting that this is an SQL where clause, I tried to put in syntax compatible with Postgres

 

So I created a column called “row_filter”, with type string.

 

  1. Using postgres to_timestamp function
day_prior:=dateAdd(from_date,-1,'DAY');
day_prior_string:=tostring(day_prior,'yyyy-MM-dd HH:mm:ss');

"from_date=to_timestamp('"+day_prior+"','YYYY-MM-DD HH:MI:SS')"

 

This one gave an error of:

13.05.2024 13:10:00 [INFO]     Ataccama DQC engine initialized.
13.05.2024 13:10:00 [INFO]     Creating runtime...
13.05.2024 13:10:00 [INFO]     Starting runtime...
13.05.2024 13:10:00 [INFO]     Running runtime...
13.05.2024 13:10:01 [FATAL]    **** missing message: rdm.sql.parse.error ****[STEP exchange_rate[Rdm Synchronize]]
13.05.2024 13:10:01 [INFO]     Stopping runtime...
13.05.2024 13:10:02 [INFO]     Finished!
0,1:Unknown function: 'to_timestamp'

 

  1. So I thought, I’ll just pass in the string and see what happens:

     

    day_prior:=dateAdd(from_date,-1,'DAY');
    day_prior_string:=tostring(day_prior,'yyyy-MM-dd HH:mm:ss');
    
    "from_date='"+day_prior+"'"

    This one gave an error of:

    9,1:Incompatible types.

     

  2. So definitely doesn’t like in plain string. Does it want DQC syntax?

     

    day_prior:=dateAdd(from_date,-1,'DAY');
    day_prior_string:=tostring(day_prior,'yyyy-MM-dd HH:mm:ss');
    
    "from_date=(toDateTime'"+day_prior+"','yyyy-MM-dd HH:mm:ss')"

    This one gave an error of:

    21,30:Syntax error

     

  3.  What about the postgres :: operator?
    day_prior:=dateAdd(from_date,-1,'DAY');
    day_prior_string:=tostring(day_prior,'yyyy-MM-dd HH:mm:ss');
    
    "from_date='"+day_prior+"'::timestamp"

    This one gave an error of:

    0,0:Syntax error
    0,0:Syntax error
    42,9:Syntax error

     

  4. How about the postgres CAST() function?  
    day_prior:=dateAdd(from_date,-1,'DAY');
    day_prior_string:=tostring(day_prior,'yyyy-MM-dd HH:mm:ss');
    
    "from_date=CAST('"+day_prior+"' as timestamp)"

    This one gave an error of:

    14,1:Syntax error
    10,4:Column 'CAST' does not exist.

     

What is the syntax supposed to be? I feel like I’m just not using the right language…

Attached an example plan I’m trying to run.

 

Best answer by AKislyakov

Hi @maykwok_hamilton,

RDM SQL parser has a notable limitation around support of date conversion functions. The only viable options are either to create a database function yesterday() and utilize it, or to fetch the entire table and filter it using a plan.

View original
Did this topic help you find an answer to your question?

Forum|alt.badge.img+2

Hi @maykwok_hamilton,

RDM SQL parser has a notable limitation around support of date conversion functions. The only viable options are either to create a database function yesterday() and utilize it, or to fetch the entire table and filter it using a plan.


Forum|alt.badge.img+2

Alternatively, you could upgrade to v15, where this limitation is eased.


may_kwok
Star Blazer L3
Forum|alt.badge.img+4
  • Star Blazer L3
  • May 14, 2024

Thanks @AKislyakov . I think I will live with it in the plan and then refactor when we go to v15. Thank you for your help!


Reply


Cookie policy

We use cookies to enhance and personalize your experience. If you accept you agree to our full cookie policy. Learn more about our cookies.

 
Cookie settings