在bigquery cli中运行参数化查询时如何使用TIMESTAMP和DATETIME函数?

时间:2019-04-08 07:20:40

标签: sql google-bigquery

我使用JNI specification作为参考,我想到了以下脚本:

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.*;'

但这给我一个错误

  

-参数='昨天:TIMESTAMP:TIMESTAMP_SUB(TIMESTAMP(DATE_SUB(CURRENT_DATE(),间隔1天)),间隔5小时)'\       您在BigQuery CLI中遇到错误。请在我们的公共问题跟踪器中提交错误报告:       this       请简要说明导致此问题的步骤,以及可以通过以下信息公开的任何行:

     

========================================       ==平台==         CPython:2.7.13:Linux-4.14.94 + -x86_64-with-debian-9.8       == bq版本==         2.0.43       ==命令行== ['/ google / google-cloud-sdk / platform / bq / bq.py','--use_gce_service_account','--project = bykea-145712','--location = US', 'query','--use_legacy_sql = False','--parameter','=','ts_value:TIMESTAMP:TIMESTAMP_SUB(TIMESTAMP(DATE_SUB(CURRENT_DATE(),INTERVAL 1 DAY)),间隔5小时)',' ']       == UTC时间戳==         2019-04-08 07:02:36       ==错误跟踪==       追溯(最近一次通话):         在RunSafely中,将文件“ /google/google-cloud-sdk/platform/bq/bq.py”第1073行           return_value = self.RunWithArgs(* args,** kwds)         在RunWithArgs中的文件“ /google/google-cloud-sdk/platform/bq/bq.py”,行1905         kwds ['query_parameters'] = _ParseParameters(self.parameter)         _ParseParameters中的文件“ /google/google-cloud-sdk/platform/bq/bq.py”,行5165           results.append(_ParseParameter(param_string))         _ParseParameter中的文件“ /google/google-cloud-sdk/platform/bq/bq.py”,行5170           名称,param_string = param_string.split(':',1)       ValueError:需要多个值才能解压       ======================================

     

查询操作中的意外异常:您在BigQuery CLI中遇到了一个错误。请在我们的公共问题跟踪器中提交错误报告:       https://issuetracker.google.com/issues/new?component=187149&template=0       请简要说明导致此问题的步骤,以及可以通过以下信息公开的任何行:       -bash:--parameter:找不到命令

我在做什么错?在参数中传递函数的正确方法是什么,我也想知道在大查询云外壳中编写查询的正确方法是什么?当我使用参考中给出的示例时,它工作正常,但是当我更改参数并查询它时,开始出现此错误

1 个答案:

答案 0 :(得分: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