как использовать функции TIMESTAMP и DATETIME при выполнении параметризованных запросов в bigquery cli?

#sql #google-bigquery

#sql #google-bigquery

Вопрос:

Я использую [это] [1] в качестве ссылки, и я придумал этот скрипт:

 bq --location=US query --use_legacy_sql=False 
--parameter = 'ts_value:TIMESTAMP:TIMESTAMP_SUB(TIMESTAMP(DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY)),interval 5 hour)'  
--parameter = 'ts_value2:TIMESTAMP:TIMESTAMP_SUB(TIMESTAMP(DATE_SUB(CURRENT_DATE(), INTERVAL 2 DAY)),interval 5 hour)' 
'with base_query as (
    select * from table1 t1
    inner join table2 t2
    on 
    t1._id = t2.table1_id
    where mydate >= @ts_value2 and mydate <@ts_value
),
another_query as (
    select * from table3
    where this_Date = @ts_value
)

select bq.*,aq.*;'
  

но это выдает мне ошибку

Ответ №1:

Что я делаю не так?

Вы пытаетесь добавить логику функции SQL в свои параметры, которые должны содержать буквальное значение.

Я бы изменил это:

 --parameter = 'ts_value:TIMESTAMP:TIMESTAMP_SUB(TIMESTAMP(DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY)),interval 5 hour)'  
  

К этому:

 --parameter = 'ts_value:INT64:5'  
  

И ваш запрос, для @ts_value , к этому:

 with base_query as (
    select * from table1 t1
    inner join table2 t2
    on 
    t1._id = t2.table1_id
    where mydate >= @ts_value2 and mydate < TIMESTAMP_SUB(TIMESTAMP(DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY)),interval @ts_value hour)
),
another_query as (
    select * from table3
    where this_Date = @ts_value
)

select bq.*,aq.*;
  

Примечание: Вам также необходимо добавить другую переменную, чтобы получить полностью рабочий SQL

Комментарии:

1. @Abdullah, надеюсь, мой ответ помог вам в SO — вы можете отметить принятый ответ, используя галочку слева от опубликованного ответа, под голосованием. Смотрите meta.stackexchange.com/questions/5234 /… почему это важно!